1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
/* possible verbs */
enum
{
/* commands */
Vadd,
Vremove,
Vunbind,
Vaddpref6,
Vra6,
/* media */
Vether,
Vgbe,
Vppp,
Vloopback,
Vtorus,
Vtree,
Vpkt,
};
typedef struct Conf Conf;
typedef struct Ctl Ctl;
struct Conf
{
/* locally generated */
char *type;
char *dev;
char mpoint[32];
int cfd; /* ifc control channel */
int rfd; /* iproute control channel */
char *cputype;
uchar hwa[32]; /* hardware address */
int hwatype;
int hwalen;
uchar cid[32];
int cidlen;
char *baud;
/* learned info */
uchar gaddr[IPaddrlen];
uchar laddr[IPaddrlen];
uchar mask[IPaddrlen];
uchar raddr[IPaddrlen];
uchar dns[8*IPaddrlen];
uchar fs[2*IPaddrlen];
uchar auth[2*IPaddrlen];
uchar ntp[2*IPaddrlen];
int mtu;
/* dhcp specific */
int state;
int fd;
ulong xid;
ulong starttime;
char sname[64];
char hostname[256];
char domainname[256];
char dnsdomain[256];
uchar server[IPaddrlen]; /* server IP address */
ulong offered; /* offered lease time */
ulong lease; /* lease time */
ulong resend; /* # of resends for current state */
ulong timeout; /* time to timeout - seconds */
/*
* IPv6
*/
/* router-advertisement related */
uchar sendra;
uchar recvra;
uchar mflag;
uchar oflag;
int maxraint; /* rfc2461, p.39: 4sec ≤ maxraint ≤ 1800sec, def 600 */
int minraint; /* 3sec ≤ minraint ≤ 0.75*maxraint */
int linkmtu;
int routerlt; /* router life time */
int reachtime; /* 3,600,000 msec, default 0 */
int rxmitra; /* default 0 */
int ttl; /* default 0 (unspecified) */
/* prefix related */
uchar lladdr[IPaddrlen];
uchar v6pref[IPaddrlen];
int prefixlen;
uchar onlink; /* flag: address is `on-link' */
uchar autoflag; /* flag: autonomous */
ulong validlt; /* valid lifetime (seconds) */
ulong preflt; /* preferred lifetime (seconds) */
};
struct Ctl
{
Ctl *next;
char *ctl;
};
extern Conf conf;
extern int myifc;
extern int noconfig;
extern int debug;
extern int dolog;
extern int plan9;
extern int Oflag;
extern int dupl_disc;
extern int nodhcpwatch;
extern int sendhostname;
extern char *ndboptions;
void usage(void);
int ip4cfg(void);
void ipunconfig(void);
void adddefroute(uchar*, uchar*, uchar*, uchar*);
void removedefroute(uchar*, uchar*, uchar*, uchar*);
int isether(void);
long jitter(void);
void catch(void*, char*);
int countaddrs(uchar *a, int len);
void addaddrs(uchar *to, int nto, uchar *from, int nfrom);
void addnames(char *d, char *s, int len);
int pnames(uchar*, int, char*);
int gnames(char*, int, uchar*, int);
Ndb* opendatabase(void);
void ndb2conf(Ndb *db, uchar *ip);
void putndb(void);
void refresh(void);
ulong randint(ulong low, ulong hi);
int validip(uchar*);
void warning(char *fmt, ...);
#define DEBUG if(debug)warning
#pragma varargck argpos warning 1
/*
* DHCP
*/
void dhcpinit(void);
void dhcpquery(int, int);
void dhcpwatch(int);
int addoption(char*);
/*
* IPv6
*/
void v6paraminit(Conf*);
void parse6pref(int argc, char **argv);
void parse6ra(int argc, char **argv);
void doipv6(int);
void ea2lla(uchar *lla, uchar *ea);
int findllip(uchar *ip, Ipifc *ifc);
int ip6cfg(void);
|