Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

109 lines
3.2 KiB

// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// Copyright (c) 1998-2000 Microsoft Corporation
//
// This file is part of the Microsoft Research IPv6 Network Protocol Stack.
// You should have received a copy of the Microsoft End-User License Agreement
// for this software along with this release; see the file "license.txt".
// If not, please see http://www.research.microsoft.com/msripv6/license.htm,
// or write to Microsoft Research, One Microsoft Way, Redmond, WA 98052-6399.
//
// Abstract:
//
// Exported Neighbor Discovery definitions and declarations.
//
#ifndef NEIGHBOR_INCLUDED
#define NEIGHBOR_INCLUDED
extern uint NeighborCacheLimit;
extern uint
CalcReachableTime(uint BaseReachableTime);
extern void
NeighborCacheInit(Interface *IF);
extern void
NeighborCacheDestroy(Interface *IF);
extern void
NeighborCacheTimeout(Interface *IF);
extern void
NeighborCacheFlush(Interface *IF, const IPv6Addr *Addr);
extern NeighborCacheEntry *
FindOrCreateNeighbor(Interface *IF, const IPv6Addr *Addr);
extern void
NeighborCacheCleanup(Interface *IF);
extern void
NeighborCacheCompletePackets(Interface *IF, NDIS_PACKET *PacketList);
extern void
ControlNeighborLoopback(NeighborCacheEntry *NCE, int Loopback);
typedef enum {
NeighborRoundRobin = -1, // Time to round-robin.
NeighborInterfaceDisconnected = 0, // Interface is disconnected -
// definitely not reachable.
NeighborUnreachable = 1, // ND failed - probably not reachable.
NeighborMayBeReachable = 2 // ND succeeded, or has not concluded.
} NeighborReachability;
extern NeighborReachability
GetReachability(NeighborCacheEntry *NCE);
extern void
NeighborCacheReachabilityConfirmation(NeighborCacheEntry *NCE);
extern void
NeighborCacheReachabilityInDoubt(NeighborCacheEntry *NCE);
extern void
NeighborCacheProbeUnreachability(NeighborCacheEntry *NCE);
extern void
DADTimeout(NetTableEntry *NTE);
extern void
RouterSolicitSend(Interface *IF);
extern void
RouterSolicitTimeout(Interface *IF);
extern void
RouterAdvertTimeout(Interface *IF, int Force);
extern void
RouterSolicitReceive(IPv6Packet *Packet, ICMPv6Header UNALIGNED *ICMP);
extern void
RouterAdvertReceive(IPv6Packet *Packet, ICMPv6Header UNALIGNED *ICMP);
extern void
NeighborSolicitReceive(IPv6Packet *Packet, ICMPv6Header UNALIGNED *ICMP);
extern void
NeighborAdvertReceive(IPv6Packet *Packet, ICMPv6Header UNALIGNED *ICMP);
extern void
RedirectReceive(IPv6Packet *Packet, ICMPv6Header UNALIGNED *ICMP);
extern void
RedirectSend(
NeighborCacheEntry *NCE, // Neighbor getting the Redirect.
NeighborCacheEntry *TargetNCE, // Better first-hop to use
const IPv6Addr *Destination, // for this Destination address.
NetTableEntryOrInterface *NTEorIF, // Source of the Redirect.
PNDIS_PACKET FwdPacket, // Packet triggering the redirect.
uint FwdOffset,
uint FwdPayloadLength);
extern void
NeighborSolicitSend(NeighborCacheEntry *NCE, const IPv6Addr *Source);
#endif // NEIGHBOR_INCLUDED