+++ /dev/null
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS TCP/IP protocol driver
- * FILE: include/neighbor.h
- * PURPOSE: Neighbor definitions
- */
-
-#pragma once
-
-#define NB_HASHMASK 0xF /* Hash mask for neighbor cache */
-
-typedef VOID (*PNEIGHBOR_PACKET_COMPLETE)
- ( PVOID Context, PNDIS_PACKET Packet, NDIS_STATUS Status );
-
-typedef struct _NEIGHBOR_PACKET {
- LIST_ENTRY Next;
- PNDIS_PACKET Packet;
- PNEIGHBOR_PACKET_COMPLETE Complete;
- PVOID Context;
-} NEIGHBOR_PACKET, *PNEIGHBOR_PACKET;
-
-typedef struct NEIGHBOR_CACHE_TABLE {
- struct NEIGHBOR_CACHE_ENTRY *Cache; /* Pointer to cache */
- KSPIN_LOCK Lock; /* Protecting lock */
-} NEIGHBOR_CACHE_TABLE, *PNEIGHBOR_CACHE_TABLE;
-
-/* Information about a neighbor */
-typedef struct NEIGHBOR_CACHE_ENTRY {
- struct NEIGHBOR_CACHE_ENTRY *Next; /* Pointer to next entry */
- UCHAR State; /* State of NCE */
- UINT EventTimer; /* Ticks since last event */
- UINT EventCount; /* Number of events */
- PIP_INTERFACE Interface; /* Pointer to interface */
- UINT LinkAddressLength; /* Length of link address */
- PVOID LinkAddress; /* Pointer to link address */
- IP_ADDRESS Address; /* IP address of neighbor */
- LIST_ENTRY PacketQueue; /* Packet queue */
-} NEIGHBOR_CACHE_ENTRY, *PNEIGHBOR_CACHE_ENTRY;
-
-/* NCE states */
-#define NUD_INCOMPLETE 0x01
-#define NUD_PERMANENT 0x02
-#define NUD_STALE 0x04
-
-/* Timeout for incomplete NCE ARP requests */
-#define ARP_INCOMPLETE_TIMEOUT 3
-
-/* Number of seconds between ARP transmissions */
-#define ARP_RATE 900
-
-/* Number of seconds before the NCE times out */
-#define ARP_COMPLETE_TIMEOUT (ARP_RATE + 9)
-
-/* Number of seconds before retransmission */
-#define ARP_TIMEOUT_RETRANSMISSION 3
-
-extern NEIGHBOR_CACHE_TABLE NeighborCache[NB_HASHMASK + 1];
-
-
-VOID NBTimeout(
- VOID);
-
-VOID NBStartup(
- VOID);
-
-VOID NBShutdown(
- VOID);
-
-VOID NBSendSolicit(
- PNEIGHBOR_CACHE_ENTRY NCE);
-
-PNEIGHBOR_CACHE_ENTRY NBAddNeighbor(
- PIP_INTERFACE Interface,
- PIP_ADDRESS Address,
- PVOID LinkAddress,
- UINT LinkAddressLength,
- UCHAR Type,
- UINT EventTimer);
-
-VOID NBUpdateNeighbor(
- PNEIGHBOR_CACHE_ENTRY NCE,
- PVOID LinkAddress,
- UCHAR State);
-
-PNEIGHBOR_CACHE_ENTRY NBLocateNeighbor(
- PIP_ADDRESS Address,
- PIP_INTERFACE Interface);
-
-PNEIGHBOR_CACHE_ENTRY NBFindOrCreateNeighbor(
- PIP_INTERFACE Interface,
- PIP_ADDRESS Address,
- BOOLEAN NoTimeout);
-
-BOOLEAN NBQueuePacket(
- PNEIGHBOR_CACHE_ENTRY NCE,
- PNDIS_PACKET NdisPacket,
- PNEIGHBOR_PACKET_COMPLETE PacketComplete,
- PVOID PacketContext);
-
-VOID NBRemoveNeighbor(
- PNEIGHBOR_CACHE_ENTRY NCE);
-
-ULONG NBCopyNeighbors(
- PIP_INTERFACE Interface,
- PIPARP_ENTRY ArpTable);
-
-VOID NBResetNeighborTimeout(
- PIP_ADDRESS Address);
-
-VOID NBDestroyNeighborsForInterface(PIP_INTERFACE Interface);
-
-/* EOF */