123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- //============================================================================
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //
- // File: Mgm.h
- //
- // History:
- // V Raman June-25-1997 Created.
- //
- // Data structures and entry points into MGM.
- //============================================================================
- #ifndef _MGM_H_
- #define _MGM_H_
- #if _MSC_VER > 1000
- #pragma once
- #endif
- //----------------------------------------------------------------------------
- //
- // typedefs for callback interface
- //
- //----------------------------------------------------------------------------
- //
- // MGM_IF_ENTRY
- //
- // structure used in MGM_CREATION_ALERT_CALLBACK. In the process of
- // creating an MFE the routing protocol needs to enable/disable
- // multicast forwarding on each interface
- //
- typedef struct _MGM_IF_ENTRY {
- DWORD dwIfIndex;
- DWORD dwIfNextHopAddr;
- BOOL bIGMP;
- BOOL bIsEnabled;
-
- } MGM_IF_ENTRY, *PMGM_IF_ENTRY;
- //----------------------------------------------------------------------------
- //
- // Callbacks into routing protocols
- //
- //----------------------------------------------------------------------------
- //
- // call into a routing protocol to perform RPF check.
- //
- // Invoked in the context of MgmNewPacketReceived into protocol component
- // owning the incoming interface.
- //
- typedef DWORD
- (*PMGM_RPF_CALLBACK)(
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN OUT PDWORD pdwInIfIndex,
- IN OUT PDWORD pdwInIfNextHopAddr,
- IN OUT PDWORD pdwUpStreamNbr,
- IN DWORD dwHdrSize,
- IN PBYTE pbPacketHdr,
- IN OUT PBYTE pbRoute
- );
- //
- // call into a routing protocol to determine the subset of interfaces
- // (owned by the routing protocol) on which a multicast packet from a
- // "new" source should be forwarded.
- //
- // Invoked in the context of MgmNewPacketReceived into all
- // routing protocols that have outgoing interfaces for this source.
- //
- typedef
- DWORD (*PMGM_CREATION_ALERT_CALLBACK)(
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwInIfIndex,
- IN DWORD dwInIfNextHopAddr,
- IN DWORD dwIfCount,
- IN OUT PMGM_IF_ENTRY pmieOutIfList
- );
- //
- // call into routing protocol to notify protocol that an interface has
- // been deleted from the outgoing interface list of a group entry / MFE
- //
- // invoked in the context of MgmDeleteMembershipEntry()
- //
- typedef
- DWORD (*PMGM_PRUNE_ALERT_CALLBACK)(
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr,
- IN BOOL bMemberDelete,
- IN OUT PDWORD pdwTimeout
- );
- //
- // call into routing protocol to notify protocol that an interface has
- // been added to the outgoing interface list of a group entry / MFE
- //
- // invoked in the context of MgmAddMembershipEntry()
- //
- typedef
- DWORD (*PMGM_JOIN_ALERT_CALLBACK)(
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN BOOL bMemberUpdate
- );
- //
- // call into routing protocol to notify protocol that a packet
- // has been received from a (source, group) on a wrong interface
- //
- typedef
- DWORD (*PMGM_WRONG_IF_CALLBACK)(
- IN DWORD dwSourceAddr,
- IN DWORD dwGroupAddr,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr,
- IN DWORD dwHdrSize,
- IN PBYTE pbPacketHdr
- );
- //
- // call into routing protocol to notify protocol that IGMP needs to add
- // an interface to the outgoing interface list of a group entry / MFE
- //
- // invoked in the context of MgmLocalGroupJoin()
- //
- typedef DWORD
- (*PMGM_LOCAL_JOIN_CALLBACK) (
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- //
- // call into routing protocol to notify protocol that IGMP needs to
- // delete an interface to the outgoing interface list of a group
- // entry / MFE
- //
- // invoked in the context of MgmLocalGroupJoin()
- //
- typedef DWORD
- (*PMGM_LOCAL_LEAVE_CALLBACK) (
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- //
- // call into IGMP to notify it that a protocol is taking or
- // releasing ownership of an interface that has IGMP enabled on it.
- //
- // When this callback is invoked IGMP should stop adding/deleting
- // group memberships on the specified interface.
- //
- typedef DWORD
- (*PMGM_DISABLE_IGMP_CALLBACK) (
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- //
- // call into IGMP to notify it that a protocol has finished taking
- // or releasing ownership of an interface.
- //
- // When this callback is invoked IGMP should add all its group memberships
- // on the interface.
- //
- typedef DWORD
- (*PMGM_ENABLE_IGMP_CALLBACK) (
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- //----------------------------------------------------------------------------
- //
- // typedefs for MGM API interface
- //
- //----------------------------------------------------------------------------
- //
- // ROUTING_PROTOCOL_CONFIG
- //
- // routing protocol configuration that is passed to MGM at registration.
- //
- //
- // Callbacks into routing protocols
- //
- 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;
- //
- // callbacks into Routing protocols
- //
- PMGM_LOCAL_JOIN_CALLBACK pfnLocalJoinCallback;
- PMGM_LOCAL_LEAVE_CALLBACK pfnLocalLeaveCallback;
- //
- // callbacks into IGMP
- //
- PMGM_DISABLE_IGMP_CALLBACK pfnDisableIgmpCallback;
- PMGM_ENABLE_IGMP_CALLBACK pfnEnableIgmpCallback;
- } ROUTING_PROTOCOL_CONFIG, *PROUTING_PROTOCOL_CONFIG;
- //
- // MGM_ENUM_TYPES
- //
- // Enumeration types to be specified when the
- //
- typedef enum _MGM_ENUM_TYPES
- {
- ANY_SOURCE = 0, // enumerate group entries with
- // atleast one source
- ALL_SOURCES // enumerate all source entries
- // for a group entry
- } MGM_ENUM_TYPES;
- //
- // SOURCE_GROUP_ENTRY
- //
- // (S, G) entry that is returned by the group entry enumeration API.
- //
- typedef struct _SOURCE_GROUP_ENTRY {
- DWORD dwSourceAddr;
- DWORD dwSourceMask;
- DWORD dwGroupAddr;
- DWORD dwGroupMask;
- } SOURCE_GROUP_ENTRY, *PSOURCE_GROUP_ENTRY;
- //----------------------------------------------------------------------------
- //
- // Entry points into MGM.
- //
- //----------------------------------------------------------------------------
- //============================================================================
- // Routing protocol registration / de-registration API
- //============================================================================
- DWORD
- MgmRegisterMProtocol(
- IN PROUTING_PROTOCOL_CONFIG prpiInfo,
- IN DWORD dwProtocolId,
- IN DWORD dwComponentId,
- OUT HANDLE * phProtocol
- );
- DWORD
- MgmDeRegisterMProtocol(
- IN HANDLE hProtocol
- );
- //============================================================================
- // Interface ownership API
- //============================================================================
- DWORD
- MgmTakeInterfaceOwnership(
- IN HANDLE hProtocol,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- DWORD
- MgmReleaseInterfaceOwnership(
- IN HANDLE hProtocol,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr
- );
- DWORD
- MgmGetProtocolOnInterface(
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopAddr,
- IN OUT PDWORD pdwIfProtocolId,
- IN OUT PDWORD pdwIfComponentId
- );
- //============================================================================
- // Group membership manipulation API. (addition / deletion )
- //============================================================================
- #define MGM_JOIN_STATE_FLAG 0x00000001
- #define MGM_FORWARD_STATE_FLAG 0x00000002
- DWORD
- MgmAddGroupMembershipEntry(
- IN HANDLE hProtocol,
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopIPAddr,
- IN DWORD dwFlags
- );
- DWORD
- MgmDeleteGroupMembershipEntry(
- IN HANDLE hProtocol,
- IN DWORD dwSourceAddr,
- IN DWORD dwSourceMask,
- IN DWORD dwGroupAddr,
- IN DWORD dwGroupMask,
- IN DWORD dwIfIndex,
- IN DWORD dwIfNextHopIPAddr,
- IN DWORD dwFlags
- );
- //============================================================================
- //
- // Enumeration API
- //
- //============================================================================
- //----------------------------------------------------------------------------
- // MFE enumeration API
- //----------------------------------------------------------------------------
- DWORD
- MgmGetMfe(
- IN PMIB_IPMCAST_MFE pimm,
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer
- );
- DWORD
- MgmGetFirstMfe(
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN OUT PDWORD pdwNumEntries
- );
- DWORD
- MgmGetNextMfe(
- IN PMIB_IPMCAST_MFE pimmStart,
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN OUT PDWORD pdwNumEntries
- );
- //
- // Include statistics corresponding to MIB_IPMCAST_MFE_STATS
- //
- #define MGM_MFE_STATS_0 0x00000001
- //
- // Include statistics corresponding to MIB_IPMCAST_MFE_STATS_EX
- //
- #define MGM_MFE_STATS_1 0x00000002
- DWORD
- MgmGetMfeStats(
- IN PMIB_IPMCAST_MFE pimm,
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN DWORD dwFlags
- );
- DWORD
- MgmGetFirstMfeStats(
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN OUT PDWORD pdwNumEntries,
- IN DWORD dwFlags
- );
- DWORD
- MgmGetNextMfeStats(
- IN PMIB_IPMCAST_MFE pimmStart,
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN OUT PDWORD pdwNumEntries,
- IN DWORD dwFlags
- );
- //----------------------------------------------------------------------------
- // Group menbership entry enumeration API
- //----------------------------------------------------------------------------
- DWORD
- MgmGroupEnumerationStart(
- IN HANDLE hProtocol,
- IN MGM_ENUM_TYPES metEnumType,
- OUT HANDLE * phEnumHandle
- );
- DWORD
- MgmGroupEnumerationGetNext(
- IN HANDLE hEnum,
- IN OUT PDWORD pdwBufferSize,
- IN OUT PBYTE pbBuffer,
- IN OUT PDWORD pdwNumEntries
- );
- DWORD
- MgmGroupEnumerationEnd(
- IN HANDLE hEnum
- );
- //-----------------------------------------------------------------
- // Mgm MFE Update API.
- //
- //-----------------------------------------------------------------
- DWORD
- MgmSetMfe(
- IN HANDLE hProtocol,
- IN PMIB_IPMCAST_MFE pmimm
- );
- #endif //_MGM_H_
|