/*++ Copyright (c) 1998 Microsoft Corporation Module Name: routing\ip\rtrmgr\mbound.h Abstract: Header file for admin-scoped boundaries Revision History: Dave Thaler 20th Apr 1998 Created --*/ #ifndef __MBOUND_H__ #define __MBOUND_H__ // Definitions for manipulating scope names #ifdef SN_UNICODE # define sn_strlen wcslen # define sn_strcpy wcscpy # define sn_strncpy wcsncpy # define sn_strcmp wcscmp # define sn_strncmp wcsncmp # define sn_sprintf wsprintf # define SN_L L #else # define sn_strlen strlen # define sn_strcpy strcpy # define sn_strncpy strncpy # define sn_strcmp strcmp # define sn_strncmp strncmp # define sn_sprintf sprintf # define SN_L #endif #define SNCHARSIZE sizeof(SN_CHAR) typedef struct _SCOPE_NAME_ENTRY { LIST_ENTRY leNameLink; LANGID idLanguage; SCOPE_NAME snScopeName; // in unicode BOOL bDefault; } SCOPE_NAME_ENTRY, *PSCOPE_NAME_ENTRY; typedef struct _SCOPE_ENTRY { LIST_ENTRY leScopeLink; IPV4_ADDRESS ipGroupAddress; IPV4_ADDRESS ipGroupMask; ULONG ulNumInterfaces; ULONG ulNumNames; LIST_ENTRY leNameList; // fields used by MZAP BOOL bDivisible; IPV4_ADDRESS ipMyZoneID; LIST_ENTRY leZBRList; BYTE bZTL; } SCOPE_ENTRY, *PSCOPE_ENTRY; typedef struct _ZBR_ENTRY { LIST_ENTRY leZBRLink; LIST_ENTRY leTimerLink; IPV4_ADDRESS ipAddress; LARGE_INTEGER liExpiryTime; } ZBR_ENTRY, *PZBR_ENTRY; typedef struct _BOUNDARY_BUCKET { LIST_ENTRY leInterfaceList; } BOUNDARY_BUCKET; typedef struct _BOUNDARY_IF { LIST_ENTRY leBoundaryIfLink; // entry in list per bucket LIST_ENTRY leBoundaryIfMasterLink; // entry in master list DWORD dwIfIndex; LIST_ENTRY leBoundaryList; // fields used by MZAP SOCKET sMzapSocket; IPV4_ADDRESS ipOtherLocalZoneID; } BOUNDARY_IF, *PBOUNDARY_IF; typedef struct _BOUNDARY_ENTRY { LIST_ENTRY leBoundaryLink; PSCOPE_ENTRY pScope; } BOUNDARY_ENTRY, *PBOUNDARY_ENTRY; typedef struct _RANGE_ENTRY { LIST_ENTRY leRangeLink; IPV4_ADDRESS ipFirst; IPV4_ADDRESS ipLast; } RANGE_ENTRY, *PRANGE_ENTRY; // should this be moved into some snmp header file? #define ROWSTATUS_ACTIVE 1 #define ROWSTATUS_NOTINSERVICE 2 #define ROWSTATUS_NOTREADY 3 #define ROWSTATUS_CREATEANDGO 4 #define ROWSTATUS_CREATEANDWAIT 5 #define ROWSTATUS_DESTROY 6 // // Function prototypes // DWORD SetMcastLimitInfo( IN PICB picb, IN PRTR_INFO_BLOCK_HEADER pInfoHdr ); DWORD GetMcastLimitInfo( IN PICB picb, IN OUT PRTR_TOC_ENTRY pToc, IN OUT PDWORD pdwTocIndex, IN OUT PBYTE pBuffer, IN PRTR_INFO_BLOCK_HEADER pInfoHdr, IN OUT PDWORD pdwBufferSize ); void InitializeBoundaryTable(); BOOL RmHasBoundary( IN DWORD dwIfIndex, IN IPV4_ADDRESS ipGroupAddress ); DWORD SetBoundaryInfo( IN PICB picb, IN PRTR_INFO_BLOCK_HEADER pInfoHdr ); DWORD GetBoundaryInfo( IN PICB picb, IN OUT PRTR_TOC_ENTRY pToc, IN OUT PDWORD pdwTocIndex, IN OUT PBYTE pBuffer, IN PRTR_INFO_BLOCK_HEADER pInfoHdr, IN OUT PDWORD pdwBufferSize ); DWORD SetScopeInfo( IN PRTR_INFO_BLOCK_HEADER pInfoHdr ); DWORD GetScopeInfo( IN OUT PRTR_TOC_ENTRY pToc, IN OUT PDWORD pdwTocIndex, IN OUT PBYTE pBuffer, IN PRTR_INFO_BLOCK_HEADER pInfoHdr, IN OUT PDWORD pdwBufferSize ); DWORD SNMPSetScope( IN IPV4_ADDRESS ipGroupAddress, IN IPV4_ADDRESS ipGroupMask, IN SCOPE_NAME snScopeName ); DWORD SNMPAddScope( IN IPV4_ADDRESS ipGroupAddress, IN IPV4_ADDRESS ipGroupMask, IN SCOPE_NAME snScopeName, OUT PSCOPE_ENTRY *ppScope ); DWORD SNMPDeleteScope( IN IPV4_ADDRESS ipGroupAddress, IN IPV4_ADDRESS ipGroupMask ); DWORD SNMPAddBoundaryToInterface( IN DWORD dwIfIndex, IN IPV4_ADDRESS ipGroupAddress, IN IPV4_ADDRESS ipGroupMask ); DWORD SNMPDeleteBoundaryFromInterface( IN DWORD dwIfIndex, IN IPV4_ADDRESS ipGroupAddress, IN IPV4_ADDRESS ipGroupMask ); //---------------------------------------------------------------------------- // BOUNDARY enumeration API //---------------------------------------------------------------------------- DWORD RmGetBoundary( IN PMIB_IPMCAST_BOUNDARY pimm, IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer ); DWORD RmGetFirstBoundary( IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer, IN OUT PDWORD pdwNumEntries ); DWORD RmGetNextBoundary( IN PMIB_IPMCAST_BOUNDARY pimmStart, IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer, IN OUT PDWORD pdwNumEntries ); //---------------------------------------------------------------------------- // SCOPE enumeration API //---------------------------------------------------------------------------- DWORD RmGetScope( IN PMIB_IPMCAST_SCOPE pimm, IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer ); DWORD RmGetFirstScope( IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer, IN OUT PDWORD pdwNumEntries ); DWORD RmGetNextScope( IN PMIB_IPMCAST_SCOPE pimmStart, IN OUT PDWORD pdwBufferSize, IN OUT PBYTE pbBuffer, IN OUT PDWORD pdwNumEntries ); #endif // Constants used by MZAP #define MZAP_VERSION 0 #define MZAP_LOCAL_GROUP ((DWORD)0xFcFFFFeF) // 239.255.255.252 #define MZAP_RELATIVE_GROUP 3 // TOP-3 #define MZAP_PORT 2106 #define MZAP_DEFAULT_ZTL 32 #if 0 // values used for testing #define DEBUG_MZAP #define ZAM_INTERVAL 5 // 5 seconds #define ZAM_HOLDTIME 17 // 17 seconds #define ZAM_DUP_TIME 15 // 15 seconds #define ZAM_STARTUP_DELAY 0 // 0 seconds #define ZCM_INTERVAL 5 // 5 seconds #define ZCM_HOLDTIME 17 // 17 mins #define ZLE_SUPPRESSION_INTERVAL 5 // 5 seconds #define ZLE_MIN_INTERVAL 5 // 5 seconds #else #define ZAM_INTERVAL 600 // 10 mins #define ZAM_HOLDTIME 1860 // 31 mins #define ZAM_DUP_TIME 30 // 30 seconds #define ZAM_STARTUP_DELAY 0 // 0 seconds #define ZCM_INTERVAL 600 // 10 mins #define ZCM_HOLDTIME 1860 // 31 mins #define ZLE_SUPPRESSION_INTERVAL 300 // 5 mins #define ZLE_MIN_INTERVAL 300 // 5 mins #endif #define MZAP_BIG_BIT 0x80 #define ADDRFAMILY_IPV4 1 #define ADDRFAMILY_IPV6 2 #define PTYPE_ZAM 0 #define PTYPE_ZLE 1 #define PTYPE_ZCM 2 #define PTYPE_NIM 3 DWORD StartMZAP(); void StopMZAP(); VOID HandleMZAPMessages(); VOID HandleMzapTimer(); DWORD BindBoundaryInterface( PICB picb );