Blob


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