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