| #include "../dhcp.h" |
| |
| enum |
| { |
| Maxstr= 256, |
| }; |
| |
| typedef struct Binding Binding; |
| struct Binding |
| { |
| Binding *next; |
| uchar ip[IPaddrlen]; |
| |
| char *boundto; /* id last bound to */ |
| char *offeredto; /* id we've offered this to */ |
| |
| long lease; /* absolute time at which binding expires */ |
| long expoffer; /* absolute time at which offer times out */ |
| long offer; /* lease offered */ |
| long lasttouched; /* time this entry last assigned/unassigned */ |
| long lastcomplained; /* last time we complained about a used but not leased */ |
| long tried; /* last time we tried this entry */ |
| |
| Qid q; /* qid at the last syncbinding */ |
| }; |
| |
| typedef struct Info Info; |
| struct Info |
| { |
| int indb; /* true if found in database */ |
| char domain[Maxstr]; /* system domain name */ |
| char bootf[Maxstr]; /* boot file */ |
| char bootf2[Maxstr]; /* alternative boot file */ |
| uchar tftp[NDB_IPlen]; /* ip addr of tftp server */ |
| uchar tftp2[NDB_IPlen]; /* ip addr of alternate server */ |
| uchar ipaddr[NDB_IPlen]; /* ip address of system */ |
| uchar ipmask[NDB_IPlen]; /* ip network mask */ |
| uchar ipnet[NDB_IPlen]; /* ip network address (ipaddr & ipmask) */ |
| uchar etheraddr[6]; /* ethernet address */ |
| uchar gwip[NDB_IPlen]; /* gateway ip address */ |
| uchar fsip[NDB_IPlen]; /* file system ip address */ |
| uchar auip[NDB_IPlen]; /* authentication server ip address */ |
| char rootpath[Maxstr]; /* rootfs for diskless nfs clients */ |
| char dhcpgroup[Maxstr]; |
| char vendor[Maxstr]; /* vendor info */ |
| }; |
| |
| |
| /* from dhcp.c */ |
| extern int validip(uchar*); |
| extern void warning(int, char*, ...); |
| extern int minlease; |
| |
| /* from db.c */ |
| extern char* tohex(char*, uchar*, int); |
| extern char* toid(uchar*, int); |
| extern void initbinding(uchar*, int); |
| extern Binding* iptobinding(uchar*, int); |
| extern Binding* idtobinding(char*, Info*, int); |
| extern Binding* idtooffer(char*, Info*); |
| extern int commitbinding(Binding*); |
| extern int releasebinding(Binding*, char*); |
| extern int samenet(uchar *ip, Info *iip); |
| extern void mkoffer(Binding*, char*, long); |
| extern int syncbinding(Binding*, int); |
| |
| /* from ndb.c */ |
| extern int lookup(Bootp*, Info*, Info*); |
| extern int lookupip(uchar*, Info*, int); |
| extern void lookupname(char*, Ndbtuple*); |
| extern Iplifc* findlifc(uchar*); |
| extern int forme(uchar*); |
| extern int lookupserver(char*, uchar**, Ndbtuple *t); |
| extern Ndbtuple* lookupinfo(uchar *ipaddr, char **attr, int n); |
| |
| /* from icmp.c */ |
| extern int icmpecho(uchar*); |
| |
| extern char *binddir; |
| extern int debug; |
| extern char *blog; |
| extern Ipifc *ipifcs; |
| extern long now; |
| extern char *ndbfile; |
| |