Blob


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