blob: 6fbf3946df1ff54d45111da512463064c3e33c43 [file] [log] [blame]
rscf7012582003-11-25 01:40:27 +00001#ifndef _IP_H_
2#define _IP_H_ 1
3#if defined(__cplusplus)
4extern "C" {
5#endif
rsc97a5e5f2003-11-23 18:25:35 +00006/*
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*/
14enum
15{
16 IPaddrlen= 16,
17 IPv4addrlen= 4,
18 IPv4off= 12,
19 IPllen= 4,
20};
21
22/*
23 * for reading /net/ipifc
24 */
25typedef struct Ipifc Ipifc;
26typedef struct Iplifc Iplifc;
27typedef struct Ipv6rp Ipv6rp;
28
29/* local address */
30struct Iplifc
31{
32 Iplifc *next;
33
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};
41
42/* default values, one per stack */
43struct 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};
55
56/* actual interface */
57struct Ipifc
58{
59 Ipifc *next;
60 Iplifc *lifc;
61
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};
74
75/*
76 * user level udp headers
77 */
78enum
79{
80 Udphdrsize= 36, /* size of a Udphdr */
81};
82
83typedef struct Udphdr Udphdr;
84struct 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};
91
92uchar* defmask(uchar*);
93void maskip(uchar*, uchar*, uchar*);
94int eipfmt(Fmt*);
95int isv4(uchar*);
96ulong parseip(uchar*, char*);
97ulong parseipmask(uchar*, char*);
98char* v4parseip(uchar*, char*);
99char* v4parsecidr(uchar*, uchar*, char*);
100int parseether(uchar*, char*);
101int myipaddr(uchar*, char*);
102int myetheraddr(uchar*, char*);
103int equivip(uchar*, uchar*);
104
105Ipifc* readipifc(char*, Ipifc*, int);
106
107void hnputl(void*, uint);
108void hnputs(void*, ushort);
109uint nhgetl(void*);
110ushort nhgets(void*);
111ushort ptclbsum(uchar*, int);
112
113int v6tov4(uchar*, uchar*);
114void v4tov6(uchar*, uchar*);
115
116#define ipcmp(x, y) memcmp(x, y, IPaddrlen)
117#define ipmove(x, y) memmove(x, y, IPaddrlen)
118
119extern uchar IPv4bcast[IPaddrlen];
120extern uchar IPv4bcastobs[IPaddrlen];
121extern uchar IPv4allsys[IPaddrlen];
122extern uchar IPv4allrouter[IPaddrlen];
123extern uchar IPnoaddr[IPaddrlen];
124extern uchar v4prefix[IPaddrlen];
125extern uchar IPallbits[IPaddrlen];
126
127#define CLASS(p) ((*(uchar*)(p))>>6)
128
rscf7012582003-11-25 01:40:27 +0000129#if defined(__cplusplus)
130}
131#endif
132#endif