1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #ifndef _MGM_H_ 7 #define _MGM_H_ 8 9 typedef struct _MGM_IF_ENTRY { 10 DWORD dwIfIndex; 11 DWORD dwIfNextHopAddr; 12 WINBOOL bIGMP; 13 WINBOOL bIsEnabled; 14 } MGM_IF_ENTRY,*PMGM_IF_ENTRY; 15 16 typedef DWORD (*PMGM_RPF_CALLBACK)(DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,PDWORD pdwInIfIndex,PDWORD pdwInIfNextHopAddr,PDWORD pdwUpStreamNbr,DWORD dwHdrSize,PBYTE pbPacketHdr,PBYTE pbRoute); 17 typedef DWORD (*PMGM_CREATION_ALERT_CALLBACK)(DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwInIfIndex,DWORD dwInIfNextHopAddr,DWORD dwIfCount,PMGM_IF_ENTRY pmieOutIfList); 18 typedef DWORD (*PMGM_PRUNE_ALERT_CALLBACK)(DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwIfIndex,DWORD dwIfNextHopAddr,WINBOOL bMemberDelete,PDWORD pdwTimeout); 19 typedef DWORD (*PMGM_JOIN_ALERT_CALLBACK)(DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,WINBOOL bMemberUpdate); 20 typedef DWORD (*PMGM_WRONG_IF_CALLBACK)(DWORD dwSourceAddr,DWORD dwGroupAddr,DWORD dwIfIndex,DWORD dwIfNextHopAddr,DWORD dwHdrSize,PBYTE pbPacketHdr); 21 typedef DWORD (*PMGM_LOCAL_JOIN_CALLBACK) (DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwIfIndex,DWORD dwIfNextHopAddr); 22 typedef DWORD (*PMGM_LOCAL_LEAVE_CALLBACK) (DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwIfIndex,DWORD dwIfNextHopAddr); 23 typedef DWORD (*PMGM_DISABLE_IGMP_CALLBACK) (DWORD dwIfIndex,DWORD dwIfNextHopAddr); 24 typedef DWORD (*PMGM_ENABLE_IGMP_CALLBACK) (DWORD dwIfIndex,DWORD dwIfNextHopAddr); 25 26 typedef struct _ROUTING_PROTOCOL_CONFIG { 27 DWORD dwCallbackFlags; 28 PMGM_RPF_CALLBACK pfnRpfCallback; 29 PMGM_CREATION_ALERT_CALLBACK pfnCreationAlertCallback; 30 PMGM_PRUNE_ALERT_CALLBACK pfnPruneAlertCallback; 31 PMGM_JOIN_ALERT_CALLBACK pfnJoinAlertCallback; 32 PMGM_WRONG_IF_CALLBACK pfnWrongIfCallback; 33 PMGM_LOCAL_JOIN_CALLBACK pfnLocalJoinCallback; 34 PMGM_LOCAL_LEAVE_CALLBACK pfnLocalLeaveCallback; 35 PMGM_DISABLE_IGMP_CALLBACK pfnDisableIgmpCallback; 36 PMGM_ENABLE_IGMP_CALLBACK pfnEnableIgmpCallback; 37 } ROUTING_PROTOCOL_CONFIG,*PROUTING_PROTOCOL_CONFIG; 38 39 typedef enum _MGM_ENUM_TYPES { 40 ANY_SOURCE = 0,ALL_SOURCES 41 } MGM_ENUM_TYPES; 42 43 typedef struct _SOURCE_GROUP_ENTRY { 44 DWORD dwSourceAddr; 45 DWORD dwSourceMask; 46 DWORD dwGroupAddr; 47 DWORD dwGroupMask; 48 } SOURCE_GROUP_ENTRY,*PSOURCE_GROUP_ENTRY; 49 50 #define MGM_JOIN_STATE_FLAG 0x00000001 51 #define MGM_FORWARD_STATE_FLAG 0x00000002 52 53 #define MGM_MFE_STATS_0 0x00000001 54 #define MGM_MFE_STATS_1 0x00000002 55 56 DWORD MgmRegisterMProtocol(PROUTING_PROTOCOL_CONFIG prpiInfo,DWORD dwProtocolId,DWORD dwComponentId,HANDLE *phProtocol); 57 DWORD MgmDeRegisterMProtocol(HANDLE hProtocol); 58 DWORD MgmTakeInterfaceOwnership(HANDLE hProtocol,DWORD dwIfIndex,DWORD dwIfNextHopAddr); 59 DWORD MgmReleaseInterfaceOwnership(HANDLE hProtocol,DWORD dwIfIndex,DWORD dwIfNextHopAddr); 60 DWORD MgmGetProtocolOnInterface(DWORD dwIfIndex,DWORD dwIfNextHopAddr,PDWORD pdwIfProtocolId,PDWORD pdwIfComponentId); 61 DWORD MgmAddGroupMembershipEntry(HANDLE hProtocol,DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwIfIndex,DWORD dwIfNextHopIPAddr,DWORD dwFlags); 62 DWORD MgmDeleteGroupMembershipEntry(HANDLE hProtocol,DWORD dwSourceAddr,DWORD dwSourceMask,DWORD dwGroupAddr,DWORD dwGroupMask,DWORD dwIfIndex,DWORD dwIfNextHopIPAddr,DWORD dwFlags); 63 DWORD MgmGetMfe(PMIB_IPMCAST_MFE pimm,PDWORD pdwBufferSize,PBYTE pbBuffer); 64 DWORD MgmGetFirstMfe(PDWORD pdwBufferSize,PBYTE pbBuffer,PDWORD pdwNumEntries); 65 DWORD MgmGetNextMfe(PMIB_IPMCAST_MFE pimmStart,PDWORD pdwBufferSize,PBYTE pbBuffer,PDWORD pdwNumEntries); 66 DWORD MgmGetMfeStats(PMIB_IPMCAST_MFE pimm,PDWORD pdwBufferSize,PBYTE pbBuffer,DWORD dwFlags); 67 DWORD MgmGetFirstMfeStats(PDWORD pdwBufferSize,PBYTE pbBuffer,PDWORD pdwNumEntries,DWORD dwFlags); 68 DWORD MgmGetNextMfeStats(PMIB_IPMCAST_MFE pimmStart,PDWORD pdwBufferSize,PBYTE pbBuffer,PDWORD pdwNumEntries,DWORD dwFlags); 69 DWORD MgmGroupEnumerationStart(HANDLE hProtocol,MGM_ENUM_TYPES metEnumType,HANDLE *phEnumHandle); 70 DWORD MgmGroupEnumerationGetNext(HANDLE hEnum,PDWORD pdwBufferSize,PBYTE pbBuffer,PDWORD pdwNumEntries); 71 DWORD MgmGroupEnumerationEnd(HANDLE hEnum); 72 DWORD MgmSetMfe(HANDLE hProtocol,PMIB_IPMCAST_MFE pmimm); 73 74 #endif 75