2 |
- |
1 |
#include "../dhcp.h"
|
|
|
2 |
|
|
|
3 |
enum
|
|
|
4 |
{
|
|
|
5 |
Maxstr= 256,
|
|
|
6 |
};
|
|
|
7 |
|
|
|
8 |
typedef struct Binding Binding;
|
|
|
9 |
struct Binding
|
|
|
10 |
{
|
|
|
11 |
Binding *next;
|
|
|
12 |
uchar ip[IPaddrlen];
|
|
|
13 |
|
|
|
14 |
char *boundto; /* id last bound to */
|
|
|
15 |
char *offeredto; /* id we've offered this to */
|
|
|
16 |
|
|
|
17 |
long lease; /* absolute time at which binding expires */
|
|
|
18 |
long expoffer; /* absolute time at which offer times out */
|
|
|
19 |
long offer; /* lease offered */
|
|
|
20 |
long lasttouched; /* time this entry last assigned/unassigned */
|
|
|
21 |
long lastcomplained; /* last time we complained about a used but not leased */
|
|
|
22 |
long tried; /* last time we tried this entry */
|
|
|
23 |
|
|
|
24 |
Qid q; /* qid at the last syncbinding */
|
|
|
25 |
};
|
|
|
26 |
|
|
|
27 |
typedef struct Info Info;
|
|
|
28 |
struct Info
|
|
|
29 |
{
|
|
|
30 |
int indb; /* true if found in database */
|
|
|
31 |
char domain[Maxstr]; /* system domain name */
|
|
|
32 |
char bootf[Maxstr]; /* boot file */
|
|
|
33 |
char bootf2[Maxstr]; /* alternative boot file */
|
|
|
34 |
uchar tftp[NDB_IPlen]; /* ip addr of tftp server */
|
|
|
35 |
uchar tftp2[NDB_IPlen]; /* ip addr of alternate server */
|
|
|
36 |
uchar ipaddr[NDB_IPlen]; /* ip address of system */
|
|
|
37 |
uchar ipmask[NDB_IPlen]; /* ip network mask */
|
|
|
38 |
uchar ipnet[NDB_IPlen]; /* ip network address (ipaddr & ipmask) */
|
|
|
39 |
uchar etheraddr[6]; /* ethernet address */
|
|
|
40 |
uchar gwip[NDB_IPlen]; /* gateway ip address */
|
|
|
41 |
uchar fsip[NDB_IPlen]; /* file system ip address */
|
|
|
42 |
uchar auip[NDB_IPlen]; /* authentication server ip address */
|
|
|
43 |
char rootpath[Maxstr]; /* rootfs for diskless nfs clients */
|
|
|
44 |
char dhcpgroup[Maxstr];
|
|
|
45 |
char vendor[Maxstr]; /* vendor info */
|
|
|
46 |
};
|
|
|
47 |
|
|
|
48 |
|
|
|
49 |
/* from dhcp.c */
|
|
|
50 |
extern int validip(uchar*);
|
|
|
51 |
extern void warning(int, char*, ...);
|
|
|
52 |
extern int minlease;
|
|
|
53 |
|
|
|
54 |
/* from db.c */
|
|
|
55 |
extern char* tohex(char*, uchar*, int);
|
|
|
56 |
extern char* toid(uchar*, int);
|
|
|
57 |
extern void initbinding(uchar*, int);
|
|
|
58 |
extern Binding* iptobinding(uchar*, int);
|
|
|
59 |
extern Binding* idtobinding(char*, Info*, int);
|
|
|
60 |
extern Binding* idtooffer(char*, Info*);
|
|
|
61 |
extern int commitbinding(Binding*);
|
|
|
62 |
extern int releasebinding(Binding*, char*);
|
|
|
63 |
extern int samenet(uchar *ip, Info *iip);
|
|
|
64 |
extern void mkoffer(Binding*, char*, long);
|
|
|
65 |
extern int syncbinding(Binding*, int);
|
|
|
66 |
|
|
|
67 |
/* from ndb.c */
|
|
|
68 |
extern int lookup(Bootp*, Info*, Info*);
|
|
|
69 |
extern int lookupip(uchar*, Info*, int);
|
|
|
70 |
extern void lookupname(char*, Ndbtuple*);
|
|
|
71 |
extern Iplifc* findlifc(uchar*);
|
|
|
72 |
extern int forme(uchar*);
|
|
|
73 |
extern int lookupserver(char*, uchar**, Ndbtuple *t);
|
|
|
74 |
extern Ndbtuple* lookupinfo(uchar *ipaddr, char **attr, int n);
|
|
|
75 |
|
|
|
76 |
/* from icmp.c */
|
|
|
77 |
extern int icmpecho(uchar*);
|
|
|
78 |
|
|
|
79 |
extern char *binddir;
|
|
|
80 |
extern int debug;
|
|
|
81 |
extern char *blog;
|
|
|
82 |
extern Ipifc *ipifcs;
|
|
|
83 |
extern long now;
|
|
|
84 |
extern char *ndbfile;
|
|
|
85 |
|