Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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 int	myifc;
96
extern char	*vs;
97
 
98
void	adddefroute(char*, uchar*);
99
void	binddevice(void);
100
void	bootprequest(void);
101
void	controldevice(void);
102
void	dhcpquery(int, int);
103
void	dhcprecv(void);
104
void	dhcpsend(int);
105
int	dhcptimer(void);
106
void	dhcpwatch(int);
107
void	doadd(int);
108
void	doremove(void);
109
void	dounbind(void);
110
int	getndb(void);
111
int	ipconfig4(void);
112
int	ipconfig6(int);
113
long	jitter(void);
114
void	lookforip(char*);
115
void	mkclientid(void);
116
int	nipifcs(char*);
117
int	openlisten(void);
118
uchar	*optaddaddr(uchar*, int, uchar*);
119
uchar	*optaddbyte(uchar*, int, int);
120
uchar	*optaddstr(uchar*, int, char*);
121
uchar	*optadd(uchar*, int, void*, int);
122
uchar	*optaddulong(uchar*, int, ulong);
123
uchar	*optaddvec(uchar*, int, uchar*, int);
124
int	optgetaddrs(uchar*, int, uchar*, int);
125
int	optgetaddr(uchar*, int, uchar*);
126
int	optgetbyte(uchar*, int);
127
int	optgetstr(uchar*, int, char*, int);
128
uchar	*optget(uchar*, int, int*);
129
ulong	optgetulong(uchar*, int);
130
int	optgetvec(uchar*, int, uchar*, int);
131
int	parseoptions(uchar *p, int n);
132
int	parseverb(char*);
133
void	procsetname(char *fmt, ...);
134
void	putndb(void);
135
ulong	randint(ulong low, ulong hi);
136
void	tweakservers(void);
137
void	usage(void);
138
int	validip(uchar*);
139
void	warning(char *fmt, ...);
140
void	writendb(char*, int, int);
141
 
142
/*
143
 * IPv6
144
 */
145
 
146
void	doipv6(int);
147
int	ipconfig6(int);
148
void	recvra6(void);
149
void	sendra6(void);
150
void	v6paraminit(Conf *);
151
 
152
typedef struct Headers Headers;
153
typedef struct Ip4hdr  Ip4hdr;
154
typedef struct Lladdropt Lladdropt;
155
typedef struct Mtuopt Mtuopt;
156
typedef struct Prefixopt Prefixopt;
157
typedef struct Routeradv Routeradv;
158
typedef struct Routersol Routersol;
159
 
160
enum {
161
	IsRouter 	= 1,
162
	IsHostRecv	= 2,
163
	IsHostNoRecv	= 3,
164
 
165
	MAClen		= 6,
166
 
167
	IPv4		= 4,
168
	IPv6		= 6,
169
	Defmtu		= 1400,
170
 
171
	IP_HOPBYHOP	= 0,
172
	ICMPv4		= 1,
173
	IP_IGMPPROTO	= 2,
174
	IP_TCPPROTO	= 6,
175
	IP_UDPPROTO	= 17,
176
	IP_ILPROTO	= 40,
177
	IP_v6ROUTE	= 43,
178
	IP_v6FRAG	= 44,
179
	IP_IPsecESP	= 50,
180
	IP_IPsecAH	= 51,
181
	IP_v6NOMORE	= 59,
182
	ICMP6_RS	= 133,
183
	ICMP6_RA	= 134,
184
 
185
	IP_IN_IP	= 41,
186
};
187
 
188
enum {
189
	MFMASK = 1 << 7,
190
	OCMASK = 1 << 6,
191
	OLMASK = 1 << 7,
192
	AFMASK = 1 << 6,
193
};
194
 
195
enum {
196
	MAXTTL		= 255,
197
	D64HLEN		= IPV6HDR_LEN - IPV4HDR_LEN,
198
	IP_MAX		= 32*1024,
199
};
200
 
201
struct Headers {
202
	uchar	dst[IPaddrlen];
203
	uchar	src[IPaddrlen];
204
};
205
 
206
struct Routersol {
207
	uchar	vcf[4];		/* version:4, traffic class:8, flow label:20 */
208
	uchar	ploadlen[2];	/* payload length: packet length - 40 */
209
	uchar	proto;		/* next header	type */
210
	uchar	ttl;		/* hop limit */
211
	uchar	src[IPaddrlen];
212
	uchar	dst[IPaddrlen];
213
	uchar	type;
214
	uchar	code;
215
	uchar	cksum[2];
216
	uchar	res[4];
217
};
218
 
219
struct Routeradv {
220
	uchar	vcf[4];		/* version:4, traffic class:8, flow label:20 */
221
	uchar	ploadlen[2];	/* payload length: packet length - 40 */
222
	uchar	proto;		/* next header	type */
223
	uchar	ttl;		/* hop limit */
224
	uchar	src[IPaddrlen];
225
	uchar	dst[IPaddrlen];
226
	uchar	type;
227
	uchar	code;
228
	uchar	cksum[2];
229
	uchar	cttl;
230
	uchar	mor;
231
	uchar	routerlt[2];
232
	uchar	rchbltime[4];
233
	uchar	rxmtimer[4];
234
};
235
 
236
struct Lladdropt {
237
	uchar	type;
238
	uchar	len;
239
	uchar	lladdr[MAClen];
240
};
241
 
242
struct Prefixopt {
243
	uchar	type;
244
	uchar	len;
245
	uchar	plen;
246
	uchar	lar;
247
	uchar	validlt[4];
248
	uchar	preflt[4];
249
	uchar	reserv[4];
250
	uchar	pref[IPaddrlen];
251
};
252
 
253
struct Mtuopt {
254
	uchar	type;
255
	uchar	len;
256
	uchar	reserv[2];
257
	uchar	mtu[4];
258
};
259
 
260
void	ea2lla(uchar *lla, uchar *ea);
261
void	ipv62smcast(uchar *smcast, uchar *a);