diff -ru pump-0.8.19/dhcp.c pump-0.8.19-new/dhcp.c --- pump-0.8.19/dhcp.c 2003-08-01 04:27:38.000000000 -0500 +++ pump-0.8.19-new/dhcp.c 2003-10-23 08:54:08.000000000 -0500 @@ -78,6 +78,7 @@ #define DHCP_OPTION_OPTIONREQ 55 #define DHCP_OPTION_MAXSIZE 57 #define DHCP_OPTION_T1 58 +#define DHCP_OPTION_CLASS_IDENTIFIER 60 #define DHCP_OPTION_CLIENT_IDENTIFIER 61 #define BOOTP_CLIENT_PORT 68 @@ -142,7 +143,7 @@ static char * perrorstr(char * msg); static void addClientIdentifier(int flags, struct bootpRequest * req); static void buildRequest(struct bootpRequest * req, int flags, int type, - char * reqHostname, int lease); + char * reqHostname, char * class, int lease); static void updateSecCount(struct bootpRequest * breq, time_t startTime); static const char vendCookie[] = { 99, 130, 83, 99, 255 }; @@ -1178,7 +1179,7 @@ } static void buildRequest(struct bootpRequest * req, int flags, int type, - char * reqHostname, int lease) { + char * reqHostname, char * class, int lease) { unsigned char messageType = type; short aShort; int anInt; @@ -1223,12 +1224,17 @@ strlen(reqHostname) + 1, reqHostname); } + if (class) { + addVendorCode(req, DHCP_OPTION_CLASS_IDENTIFIER, + strlen(class) + 1, class); + } + anInt = htonl(lease); addVendorCode(req, DHCP_OPTION_LEASE, 4, &anInt); } -char * pumpDhcpRun(char * device, int flags, int reqLease, - char * reqHostname, struct pumpNetIntf * intf, +char * pumpDhcpClassRun(char * device, int flags, int reqLease, + char * reqHostname, char * class, struct pumpNetIntf * intf, struct pumpOverrideInfo * override) { int s; struct sockaddr_in serverAddr; @@ -1292,6 +1298,13 @@ strlen(reqHostname) + 1, reqHostname); } + if (class) { + syslog(LOG_DEBUG, "CLASSID: sending %s\n", class); + addVendorCode(&breq, DHCP_OPTION_CLASS_IDENTIFIER, + strlen(class) + 1, class); + } + + memset(&clientAddr.sin_addr, 0, sizeof(&clientAddr.sin_addr)); clientAddr.sin_family = AF_INET; clientAddr.sin_port = htons(BOOTP_CLIENT_PORT); /* bootp client */ @@ -1345,7 +1358,7 @@ syslog (LOG_DEBUG, "got dhcp offer\n"); initVendorCodes(&breq); - buildRequest(&breq, flags, DHCP_TYPE_DISCOVER, reqHostname, + buildRequest(&breq, flags, DHCP_TYPE_DISCOVER, reqHostname, class, intf->reqLease); syslog (LOG_DEBUG, "PUMP: sending second discover"); @@ -1374,7 +1387,7 @@ } initVendorCodes(&breq); - buildRequest(&breq, flags, DHCP_TYPE_REQUEST, reqHostname, + buildRequest(&breq, flags, DHCP_TYPE_REQUEST, reqHostname, class, intf->reqLease); addVendorCode(&breq, DHCP_OPTION_SERVER, 4, &serverAddr.sin_addr); @@ -1414,6 +1427,13 @@ return NULL; } +char * pumpDhcpRun(char * device, int flags, int reqLease, + char * reqHostname, struct pumpNetIntf * intf, + struct pumpOverrideInfo * override) { + pumpDhcpClassRun(device, flags, reqLease, reqHostname, NULL, intf, + override); +} + void pumpInitOverride(struct pumpOverrideInfo * override) { strcpy(override->intf.device, "MASTER"); override->timeout = DEFAULT_TIMEOUT; diff -ru pump-0.8.19/pump.h pump-0.8.19-new/pump.h --- pump-0.8.19/pump.h 2003-03-11 21:23:20.000000000 -0600 +++ pump-0.8.19-new/pump.h 2003-10-10 11:52:59.000000000 -0500 @@ -94,6 +94,9 @@ }; void pumpInitOverride(struct pumpOverrideInfo * override); +char * pumpDhcpClassRun(char * device, int flags, int lease, + char * reqHostname, char * class, struct pumpNetIntf * intf, + struct pumpOverrideInfo * override); char * pumpDhcpRun(char * device, int flags, int lease, char * reqHostname, struct pumpNetIntf * intf, struct pumpOverrideInfo * override);