]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/ip/ipconfig/ipconfig.h
555073c1439142db2b8746595ba6a48426443716
[plan9front.git] / sys / src / cmd / ip / ipconfig / ipconfig.h
1 typedef struct Conf Conf;
2 typedef struct Ctl Ctl;
3
4 struct Conf
5 {
6         /* locally generated */
7         char    *type;
8         char    *dev;
9         char    mpoint[32];
10         int     cfd;                    /* ifc control channel */
11         int     dfd;                    /* ifc data channel (for ppp) */
12         char    *cputype;
13         uchar   hwa[32];                /* hardware address */
14         int     hwatype;
15         int     hwalen;
16         uchar   cid[32];
17         int     cidlen;
18         char    *baud;
19
20         /* learned info */
21         uchar   gaddr[IPaddrlen];
22         uchar   laddr[IPaddrlen];
23         uchar   mask[IPaddrlen];
24         uchar   raddr[IPaddrlen];
25         uchar   dns[2*IPaddrlen];
26         uchar   fs[2*IPaddrlen];
27         uchar   auth[2*IPaddrlen];
28         uchar   ntp[IPaddrlen];
29         int     mtu;
30
31         /* dhcp specific */
32         int     state;
33         int     fd;
34         ulong   xid;
35         ulong   starttime;
36         char    sname[64];
37         char    hostname[32];
38         char    domainname[64];
39         uchar   server[IPaddrlen];      /* server IP address */
40         ulong   offered;                /* offered lease time */
41         ulong   lease;                  /* lease time */
42         ulong   resend;                 /* # of resends for current state */
43         ulong   timeout;                /* time to timeout - seconds */
44
45         /*
46          * IPv6
47          */
48
49         /* solicitation specific - XXX add support for IPv6 leases */
50 //      ulong   solicit_retries;
51
52         /* router-advertisement related */
53         uchar   sendra;
54         uchar   recvra;
55         uchar   mflag;
56         uchar   oflag;
57         int     maxraint; /* rfc2461, p.39: 4sec ≤ maxraint ≤ 1800sec, def 600 */
58         int     minraint;       /* 3sec ≤ minraint ≤ 0.75*maxraint */
59         int     linkmtu;
60         int     reachtime;      /* 3,600,000 msec, default 0 */
61         int     rxmitra;        /* default 0 */
62         int     ttl;            /* default 0 (unspecified) */
63         /* default gateway params */
64         uchar   v6gaddr[IPaddrlen];
65         int     routerlt;       /* router life time */
66
67         /* prefix related */
68         uchar   v6pref[IPaddrlen];
69         int     prefixlen;
70         uchar   onlink;         /* flag: address is `on-link' */
71         uchar   autoflag;       /* flag: autonomous */
72         ulong   validlt;        /* valid lifetime (seconds) */
73         ulong   preflt;         /* preferred lifetime (seconds) */
74 };
75
76 struct Ctl
77 {
78         Ctl     *next;
79         char    *ctl;
80 };
81
82 extern Ctl *firstctl, **ctll;
83
84 extern Conf conf;
85
86 extern int      noconfig;
87 extern int      ipv6auto;
88 extern int      debug;
89 extern int      dodhcp;
90 extern int      dolog;
91 extern int      nip;
92 extern int      plan9;
93 extern int      dupl_disc;
94
95 extern Conf     conf;
96 extern int      myifc;
97 extern char     *vs;
98
99 void    adddefroute(char*, uchar*);
100 void    binddevice(void);
101 void    bootprequest(void);
102 void    controldevice(void);
103 void    dhcpquery(int, int);
104 void    dhcprecv(void);
105 void    dhcpsend(int);
106 int     dhcptimer(void);
107 void    dhcpwatch(int);
108 void    doadd(int);
109 void    doremove(void);
110 void    dounbind(void);
111 int     getndb(void);
112 int     ipconfig4(void);
113 int     ipconfig6(int);
114 long    jitter(void);
115 void    lookforip(char*);
116 void    mkclientid(void);
117 int     nipifcs(char*);
118 int     openlisten(void);
119 uchar   *optaddaddr(uchar*, int, uchar*);
120 uchar   *optaddbyte(uchar*, int, int);
121 uchar   *optaddstr(uchar*, int, char*);
122 uchar   *optadd(uchar*, int, void*, int);
123 uchar   *optaddulong(uchar*, int, ulong);
124 uchar   *optaddvec(uchar*, int, uchar*, int);
125 int     optgetaddrs(uchar*, int, uchar*, int);
126 int     optgetaddr(uchar*, int, uchar*);
127 int     optgetbyte(uchar*, int);
128 int     optgetstr(uchar*, int, char*, int);
129 uchar   *optget(uchar*, int, int*);
130 ulong   optgetulong(uchar*, int);
131 int     optgetvec(uchar*, int, uchar*, int);
132 int     parseoptions(uchar *p, int n);
133 int     parseverb(char*);
134 void    procsetname(char *fmt, ...);
135 void    putndb(void);
136 ulong   randint(ulong low, ulong hi);
137 void    tweakservers(void);
138 void    usage(void);
139 int     validip(uchar*);
140 void    warning(char *fmt, ...);
141 void    writendb(char*, int, int);
142
143 /*
144  * IPv6
145  */
146
147 void    doipv6(int);
148 int     ipconfig6(int);
149 void    recvra6(void);
150 void    sendra6(void);
151 void    v6paraminit(Conf *);
152
153 typedef struct Headers Headers;
154 typedef struct Ip4hdr  Ip4hdr;
155 typedef struct Lladdropt Lladdropt;
156 typedef struct Mtuopt Mtuopt;
157 typedef struct Prefixopt Prefixopt;
158 typedef struct Routeradv Routeradv;
159 typedef struct Routersol Routersol;
160
161 enum {
162         IsRouter        = 1,
163         IsHostRecv      = 2,
164         IsHostNoRecv    = 3,
165
166         MAClen          = 6,
167
168         IPv4            = 4,
169         IPv6            = 6,
170         Defmtu          = 1400,
171
172         IP_HOPBYHOP     = 0,
173         ICMPv4          = 1,
174         IP_IGMPPROTO    = 2,
175         IP_TCPPROTO     = 6,
176         IP_UDPPROTO     = 17,
177         IP_ILPROTO      = 40,
178         IP_v6ROUTE      = 43,
179         IP_v6FRAG       = 44,
180         IP_IPsecESP     = 50,
181         IP_IPsecAH      = 51,
182         IP_v6NOMORE     = 59,
183         ICMP6_RS        = 133,
184         ICMP6_RA        = 134,
185
186         IP_IN_IP        = 41,
187 };
188
189 enum {
190         MFMASK = 1 << 7,
191         OCMASK = 1 << 6,
192         OLMASK = 1 << 7,
193         AFMASK = 1 << 6,
194 };
195
196 enum {
197         MAXTTL          = 255,
198         D64HLEN         = IPV6HDR_LEN - IPV4HDR_LEN,
199         IP_MAX          = 32*1024,
200 };
201
202 struct Headers {
203         uchar   dst[IPaddrlen];
204         uchar   src[IPaddrlen];
205 };
206
207 struct Routersol {
208         uchar   vcf[4];         /* version:4, traffic class:8, flow label:20 */
209         uchar   ploadlen[2];    /* payload length: packet length - 40 */
210         uchar   proto;          /* next header  type */
211         uchar   ttl;            /* hop limit */
212         uchar   src[IPaddrlen];
213         uchar   dst[IPaddrlen];
214         uchar   type;
215         uchar   code;
216         uchar   cksum[2];
217         uchar   res[4];
218 };
219
220 struct Routeradv {
221         uchar   vcf[4];         /* version:4, traffic class:8, flow label:20 */
222         uchar   ploadlen[2];    /* payload length: packet length - 40 */
223         uchar   proto;          /* next header  type */
224         uchar   ttl;            /* hop limit */
225         uchar   src[IPaddrlen];
226         uchar   dst[IPaddrlen];
227         uchar   type;
228         uchar   code;
229         uchar   cksum[2];
230         uchar   cttl;
231         uchar   mor;
232         uchar   routerlt[2];
233         uchar   rchbltime[4];
234         uchar   rxmtimer[4];
235 };
236
237 struct Lladdropt {
238         uchar   type;
239         uchar   len;
240         uchar   lladdr[MAClen];
241 };
242
243 struct Prefixopt {
244         uchar   type;
245         uchar   len;
246         uchar   plen;
247         uchar   lar;
248         uchar   validlt[4];
249         uchar   preflt[4];
250         uchar   reserv[4];
251         uchar   pref[IPaddrlen];
252 };
253
254 struct Mtuopt {
255         uchar   type;
256         uchar   len;
257         uchar   reserv[2];
258         uchar   mtu[4];
259 };
260
261 void    ea2lla(uchar *lla, uchar *ea);
262 void    ipv62smcast(uchar *smcast, uchar *a);