Blob


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