summaryrefslogtreecommitdiffstats
path: root/private/ntos/tdi/tcpip/ip/iproute.h
blob: e06af71000eb161c8f0feced57005525a002687c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/********************************************************************/
/**                     Microsoft LAN Manager                      **/
/**               Copyright(c) Microsoft Corp., 1990-1992          **/
/********************************************************************/
/* :ts=4 */

//** IPROUTE.H - IP routing definitions.
//
// This file contains all of the definitions for routing code that are
// visible to modules outside iproute.c


extern struct Interface	*LookupNextHop(IPAddr Dest, IPAddr Src,
							IPAddr *FirstHop, uint *MTU);
extern struct Interface	*LookupNextHopWithBuffer(IPAddr Dest, IPAddr Src,
							IPAddr *FirstHop, uint *MTU, uchar Protocol,
							uchar *Buffer, uint Length);

extern void             FlushATCache(IPAddr Address);
extern uchar 			GetAddrType(IPAddr Address);
extern uint 			InvalidSourceAddress(IPAddr Address);
extern uchar			GetLocalNTE(IPAddr Address, NetTableEntry **NTE);
extern uchar			IsBCastOnNTE(IPAddr Address, NetTableEntry *NTE);
extern void				SendFWPacket(PNDIS_PACKET Packet, NDIS_STATUS Status,
							uint DataLength);
extern void				IPForward(NetTableEntry *SrcNTE,
								IPHeader UNALIGNED *Header, uint HeaderLength,
								void *Data, uint BufferLength,
								NDIS_HANDLE LContext1, uint LContext2,
								uchar DestType);

extern uint				AttachRCEToRTE(RouteCacheEntry *RCE, uchar Protocol,
							uchar *Buffer, uint Length);
extern void				Redirect(NetTableEntry *NTE, IPAddr RDSrc,
							IPAddr Target, IPAddr Src, IPAddr FirstHop);
extern IP_STATUS		AddRoute(IPAddr Destination, IPMask Mask,
							IPAddr FirstHop, Interface *OutIF, uint MTU,
							uint Metric, uint Proto, uint AType,
							void *Context);
extern IP_STATUS		DeleteRoute(IPAddr Destination, IPMask Mask,
							IPAddr FirstHop, Interface *OutIF);
extern void				*GetRouteContext(IPAddr Destination, IPAddr Source);

extern NetTableEntry 	*BestNTEForIF(IPAddr Dest, Interface *IF);
extern void				RTWalk(uint (*CallFunc)(struct RouteTableEntry *,
							void *, void *), void *Context, void *Context1);

extern uint				DeleteRTEOnIF(struct RouteTableEntry *RTE,
							void *Context, void *Context1);
extern uint				InvalidateRCEOnIF(struct RouteTableEntry *RTE,
							void *Context, void *Context1);
extern uint				SetMTUOnIF(struct RouteTableEntry *RTE, void *Context,
							void *Context1);
extern uint				SetMTUToAddr(struct RouteTableEntry *RTE, void *Context,
							void *Context1);
extern uint				AddNTERoutes(struct NetTableEntry *NTE);
extern void				IPCheckRoute(IPAddr Dest, IPAddr Src);
extern void				RouteFragNeeded(IPHeader UNALIGNED *IPH, ushort NewMTU);
extern IP_STATUS		IPGetPInfo(IPAddr Dest, IPAddr Src, uint *NewMTU,
							uint *MaxPathSpeed);
extern int				InitRouting(struct IPConfigInfo    *ci);
extern uint				InitNTERouting(NetTableEntry *NTE, uint NumGWs,
							IPAddr *GW);
extern uint				InitGateway(struct IPConfigInfo *ci);
extern IPAddr	 		OpenRCE(IPAddr Address, IPAddr Src, RouteCacheEntry **RCE,
						uchar *Type, ushort *MSS, IPOptInfo *OptInfo);
extern void 			CloseRCE(RouteCacheEntry *RCE);
extern uint             IsRouteICMP(IPAddr Dest, IPMask Mask, IPAddr FirstHop,
                                   Interface *OutIF);

EXTERNAL_LOCK(RouteTableLock)

extern uint				DeadGWDetect;
extern uint				PMTUDiscovery;
extern uchar            ForwardPackets;
extern uchar			RouterConfigured;
// Pointer to callout routine for dial on demand.
extern IPMapRouteToInterfacePtr	DODCallout;

// Pointer to packet filter handler.
extern IPPacketFilterPtr		ForwardFilterPtr;

#define	IPADDR_LOCAL		0xffffffff		// Indicates that IP address is
											// directly connected.

#define	IP_LOCAL_BCST	0xffffffff
#define	IP_ZERO_BCST	0

#define	HOST_MASK			0xffffffff
#define	DEFAULT_MASK		0


#ifdef NT
#define LOOPBACK_MSS    (1500 - sizeof(IPHeader))
#else  // NT
#define LOOPBACK_MSS     256
#endif // NT


#define	LOOPBACK_ADDR	0x0100007f
#define	IP_LOOPBACK(x)	(((x) & CLASSA_MASK) == 0x7f)

#define	ATYPE_PERM		0					// A permanent route.
#define	ATYPE_OVERRIDE	1					// Semi-permanent - can be
											// overriden.
#define	ATYPE_TEMP		2					// A temporary route.