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
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
|