xref: /plan9/sys/include/ip.h (revision 850dd0ca1bdf035e1410f3ad77ab360045f4571d)
1 #pragma	src	"/sys/src/libip"
2 #pragma	lib	"libip.a"
3 
4 enum
5 {
6 	IPaddrlen=	16,
7 	IPv4addrlen=	4,
8 	IPv4off=	12,
9 	IPllen=		4,
10 };
11 
12 /*
13  *  for reading /net/ipifc
14  */
15 typedef struct Ipifc Ipifc;
16 typedef struct Iplifc Iplifc;
17 typedef struct Ipv6rp Ipv6rp;
18 
19 /* local address */
20 struct Iplifc
21 {
22 	Iplifc	*next;
23 
24 	/* per address on the ip interface */
25 	uchar	ip[IPaddrlen];
26 	uchar	mask[IPaddrlen];
27 	uchar	net[IPaddrlen];		/* ip & mask */
28 	ulong	preflt;			/* preferred lifetime */
29 	ulong	validlt;		/* valid lifetime */
30 };
31 
32 /* default values, one per stack */
33 struct Ipv6rp
34 {
35 	int	mflag;
36 	int	oflag;
37 	int 	maxraint;
38 	int	minraint;
39 	int	linkmtu;
40 	int	reachtime;
41 	int	rxmitra;
42 	int	ttl;
43 	int	routerlt;
44 };
45 
46 /* actual interface */
47 struct Ipifc
48 {
49 	Ipifc	*next;
50 	Iplifc	*lifc;
51 
52 	/* per ip interface */
53 	int	index;			/* number of interface in ipifc dir */
54 	char	dev[64];
55 	uchar	sendra6;		/* on == send router adv */
56 	uchar	recvra6;		/* on == rcv router adv */
57 	int	mtu;
58 	ulong	pktin;
59 	ulong	pktout;
60 	ulong	errin;
61 	ulong	errout;
62 	Ipv6rp	rp;
63 };
64 
65 /*
66  *  user level udp headers with control message "headers"
67  */
68 enum
69 {
70 	Udphdrsize=	52,	/* size of a Udphdr */
71 };
72 
73 typedef struct Udphdr Udphdr;
74 struct Udphdr
75 {
76 	uchar	raddr[IPaddrlen];	/* V6 remote address */
77 	uchar	laddr[IPaddrlen];	/* V6 local address */
78 	uchar	ifcaddr[IPaddrlen];	/* V6 ifc addr msg was received on */
79 	uchar	rport[2];		/* remote port */
80 	uchar	lport[2];		/* local port */
81 };
82 
83 uchar*	defmask(uchar*);
84 void	maskip(uchar*, uchar*, uchar*);
85 int	eipfmt(Fmt*);
86 int	isv4(uchar*);
87 ulong	parseip(uchar*, char*);
88 ulong	parseipmask(uchar*, char*);
89 char*	v4parseip(uchar*, char*);
90 char*	v4parsecidr(uchar*, uchar*, char*);
91 int	parseether(uchar*, char*);
92 int	myipaddr(uchar*, char*);
93 int	myetheraddr(uchar*, char*);
94 int	equivip4(uchar*, uchar*);
95 int	equivip6(uchar*, uchar*);
96 
97 Ipifc*	readipifc(char*, Ipifc*, int);
98 
99 void	hnputv(void*, uvlong);
100 void	hnputl(void*, uint);
101 void	hnputs(void*, ushort);
102 uvlong	nhgetv(void*);
103 uint	nhgetl(void*);
104 ushort	nhgets(void*);
105 ushort	ptclbsum(uchar*, int);
106 
107 int	v6tov4(uchar*, uchar*);
108 void	v4tov6(uchar*, uchar*);
109 
110 #define	ipcmp(x, y) memcmp(x, y, IPaddrlen)
111 #define	ipmove(x, y) memmove(x, y, IPaddrlen)
112 
113 extern uchar IPv4bcast[IPaddrlen];
114 extern uchar IPv4bcastobs[IPaddrlen];
115 extern uchar IPv4allsys[IPaddrlen];
116 extern uchar IPv4allrouter[IPaddrlen];
117 extern uchar IPnoaddr[IPaddrlen];
118 extern uchar v4prefix[IPaddrlen];
119 extern uchar IPallbits[IPaddrlen];
120 
121 #define CLASS(p) ((*(uchar*)(p))>>6)
122 
123 #pragma	varargck	type	"I"	uchar*
124 #pragma	varargck	type	"V"	uchar*
125 #pragma	varargck	type	"E"	uchar*
126 #pragma	varargck	type	"M"	uchar*
127