windows-nt/Source/XPSP1/NT/net/rras/mgm/if.h
2020-09-26 16:20:57 +08:00

203 lines
5.1 KiB
C

//============================================================================
// Copyright (c) 1995, Microsoft Corporation
//
// File: if.h
//
// History:
// V Raman July-11-1997 Created.
//
// Declarations for routines that manipulate interface entries
//============================================================================
#ifndef _IF_H_
#define _IF_H_
#include <mgm.h>
//----------------------------------------------------------------------------
// IF_ENTRY
//
// For each interface owned by a routing protocol an interface entry
// is created in the interface table.
//
// dwIfIndex - Interface index
//
// dwNextHopAddr - Next hop IP address, used to distinguish
// dial-in interfaces that are all connected
// on the same RAS Server Interface.
//
// dwOwningProtocol - Protocol id of routing protocol that
// owns this interface.
//
// dwOwningComponent - Component of protocol.
//
// wAddedByFlag - Flag indicating if the interface entry was
// added by the routing protocol / IGMP / both.
//
// leOutIfList - list of (source, group) entries that reference
// this interface in their outgoing interface list
//
// leInIfList - list of (source, group) entries that reference
// this interface as their incoming interface
//----------------------------------------------------------------------------
typedef struct _IF_ENTRY
{
LIST_ENTRY leIfHashList;
DWORD dwIfIndex;
DWORD dwIfNextHopAddr;
DWORD dwOwningProtocol;
DWORD dwOwningComponent;
WORD wAddedByFlag;
LIST_ENTRY leOutIfList;
LIST_ENTRY leInIfList;
} IF_ENTRY, *PIF_ENTRY;
//----------------------------------------------------------------------------
// IF_REFERENCE_ENTRY
//
// Each interface maintains a list of (source, group) entries that refer
// to this interface. Each entry in this reference list stores the
// source, group info and a flag to determine what protocol caused this
// reference. Protocol could be IGMP/some routing protocol or both.
//
// Fields descriptions are left as an exercise to the reader.
//
//----------------------------------------------------------------------------
typedef struct _IF_REFERENCE_ENTRY
{
LIST_ENTRY leRefList;
DWORD dwGroupAddr;
DWORD dwGroupMask;
DWORD dwSourceAddr;
DWORD dwSourceMask;
WORD wAddedByFlag;
} IF_REFERENCE_ENTRY, *PIF_REFERENCE_ENTRY;
DWORD
CreateIfEntry(
PLIST_ENTRY pleIfList,
DWORD dwIfIndex,
DWORD dwIfNextHopAddr,
DWORD dwProtocolId,
DWORD dwComponentId
);
VOID
DeleteIfEntry(
PIF_ENTRY pieEntry
);
PIF_ENTRY
GetIfEntry(
PLIST_ENTRY pleIfList,
DWORD dwIfIndex,
DWORD dwIfNextHopAddr
);
BOOL
FindIfEntry(
PLIST_ENTRY pleIfList,
DWORD dwIfIndex,
DWORD dwIfNextHopAddr,
PIF_ENTRY * ppie
);
DWORD
AddSourceToOutList(
PLIST_ENTRY pleIfList,
DWORD dwSourceAddr,
DWORD dwSourceMask,
DWORD dwGroupAddr,
DWORD dwGroupMask,
BOOL bIGMP
);
VOID
AddSourceToRefList(
PLIST_ENTRY pleRefList,
DWORD dwSourceAddr,
DWORD dwSourceMask,
DWORD dwGroupAddr,
DWORD dwGroupMask,
BOOL bIGMP
);
VOID
DeleteSourceFromRefList(
PLIST_ENTRY pleIfRefList,
DWORD dwSourceAddr,
DWORD dwSourceMask,
DWORD dwGroupAddr,
DWORD dwGroupMask,
BOOL bIGMP
);
BOOL
FindRefEntry(
PLIST_ENTRY pleRefList,
DWORD dwSourceAddr,
DWORD dwSourceMask,
DWORD dwGroupAddr,
DWORD dwGroupMask,
PIF_REFERENCE_ENTRY * ppire
);
VOID
DeleteOutInterfaceRefs(
PPROTOCOL_ENTRY ppe,
PIF_ENTRY pie,
BOOL bIGMP
);
VOID
DeleteInInterfaceRefs(
PLIST_ENTRY pleRefList
);
DWORD
TransferInterfaceOwnershipToIGMP(
PPROTOCOL_ENTRY ppe,
PIF_ENTRY pie
);
DWORD
TransferInterfaceOwnershipToProtocol(
PPROTOCOL_ENTRY ppe,
PIF_ENTRY pie
);
#endif // _IF_H_