Blob


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