#ifndef _MGM_H #define _MGM_H #if __GNUC__ >= 3 #pragma GCC system_header #endif #ifdef __cplusplus extern "C" { #endif #if (_WIN32_WINNT >= 0x0500) #define MGM_JOIN_STATE_FLAG 0x00000001 #define MGM_FORWARD_STATE_FLAG 0x00000002 #define MGM_MFE_STATS_0 0x00000001 #define MGM_MFE_STATS_1 0x00000002 typedef enum _MGM_ENUM_TYPES { ANY_SOURCE=0, ALL_SOURCES } MGM_ENUM_TYPES; typedef struct _MGM_IF_ENTRY { DWORD dwIfIndex; DWORD dwIfNextHopAddr; BOOL bIGMP; BOOL bIsEnabled; } MGM_IF_ENTRY,*PMGM_IF_ENTRY; typedef DWORD(CALLBACK *PMGM_RPF_CALLBACK)(DWORD,DWORD,DWORD,DWORD,PDWORD,PDWORD,PDWORD,DWORD,PBYTE,PBYTE); typedef DWORD(CALLBACK *PMGM_CREATION_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,PMGM_IF_ENTRY); typedef DWORD(CALLBACK *PMGM_PRUNE_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,BOOL,PDWORD); typedef DWORD(CALLBACK *PMGM_JOIN_ALERT_CALLBACK)(DWORD,DWORD,DWORD,DWORD,BOOL); typedef DWORD(CALLBACK *PMGM_WRONG_IF_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,PBYTE); typedef DWORD(CALLBACK *PMGM_LOCAL_JOIN_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD); typedef DWORD(CALLBACK *PMGM_LOCAL_LEAVE_CALLBACK)(DWORD,DWORD,DWORD,DWORD,DWORD,DWORD); typedef DWORD(CALLBACK *PMGM_DISABLE_IGMP_CALLBACK)(DWORD,DWORD); typedef DWORD(CALLBACK *PMGM_ENABLE_IGMP_CALLBACK)(DWORD,DWORD); typedef struct _ROUTING_PROTOCOL_CONFIG { DWORD dwCallbackFlags; PMGM_RPF_CALLBACK pfnRpfCallback; PMGM_CREATION_ALERT_CALLBACK pfnCreationAlertCallback; PMGM_PRUNE_ALERT_CALLBACK pfnPruneAlertCallback; PMGM_JOIN_ALERT_CALLBACK pfnJoinAlertCallback; PMGM_WRONG_IF_CALLBACK pfnWrongIfCallback; PMGM_LOCAL_JOIN_CALLBACK pfnLocalJoinCallback; PMGM_LOCAL_LEAVE_CALLBACK pfnLocalLeaveCallback; PMGM_DISABLE_IGMP_CALLBACK pfnDisableIgmpCallback; PMGM_ENABLE_IGMP_CALLBACK pfnEnableIgmpCallback; } ROUTING_PROTOCOL_CONFIG,*PROUTING_PROTOCOL_CONFIG; typedef struct _SOURCE_GROUP_ENTRY { DWORD dwSourceAddr; DWORD dwSourceMask; DWORD dwGroupAddr; DWORD dwGroupMask; } SOURCE_GROUP_ENTRY,*PSOURCE_GROUP_ENTRY; DWORD WINAPI MgmAddGroupMembershipEntry(HANDLE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD); DWORD WINAPI MgmDeleteGroupMembershipEntry(HANDLE,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,DWORD); DWORD WINAPI MgmDeRegisterMProtocol(HANDLE); DWORD WINAPI MgmGetFirstMfe(PDWORD,PBYTE,PDWORD); DWORD WINAPI MgmGetFirstMfeStats(PDWORD,PBYTE,PDWORD,DWORD); DWORD WINAPI MgmGetMfe(PMIB_IPMCAST_MFE,PDWORD,PBYTE); DWORD WINAPI MgmGetMfeStats(PMIB_IPMCAST_MFE,PDWORD,PBYTE,DWORD); DWORD WINAPI MgmGetNextMfe(PMIB_IPMCAST_MFE,PDWORD,PBYTE,PDWORD); DWORD WINAPI MgmGetNextMfeStats(PMIB_IPMCAST_MFE,PDWORD,PBYTE,PDWORD,DWORD); DWORD WINAPI MgmGetProtocolOnInterface(DWORD,DWORD,PDWORD,PDWORD); DWORD WINAPI MgmGroupEnumerationEnd(HANDLE); DWORD WINAPI MgmGroupEnumerationGetNext(HANDLE,PDWORD,PBYTE,PDWORD); DWORD WINAPI MgmGroupEnumerationStart(HANDLE,MGM_ENUM_TYPES,HANDLE*); DWORD WINAPI MgmRegisterMProtocol(PROUTING_PROTOCOL_CONFIG,DWORD,DWORD,HANDLE*); DWORD WINAPI MgmReleaseInterfaceOwnership(HANDLE,DWORD,DWORD); DWORD WINAPI MgmSetMfe(HANDLE,PMIB_IPMCAST_MFE); DWORD WINAPI MgmTakeInterfaceOwnership(HANDLE,DWORD,DWORD); #endif #ifdef __cplusplus } #endif #endif