+++ /dev/null
---- pump-0.8.11/pump.c.nobootp Thu Mar 1 02:15:22 2001
-+++ pump-0.8.11/pump.c Thu Jul 19 18:29:55 2001
-@@ -758,7 +758,7 @@
- int killDaemon = 0;
- int winId = 0;
- int release = 0, renew = 0, status = 0, lookupHostname = 0, nodns = 0;
-- int nogateway = 0;
-+ int nogateway = 0, nobootp = 0;
- struct command cmd, response;
- char * configFile = "/etc/pump.conf";
- struct pumpOverrideInfo * overrides;
-@@ -788,6 +788,8 @@
- N_("Don't update resolv.conf"), NULL },
- { "no-gateway", '\0', POPT_ARG_NONE, &nogateway, 0,
- N_("Don't set a gateway for this interface"), NULL },
-+ { "no-bootp", '\0', POPT_ARG_NONE, &nobootp, 0,
-+ N_("Ignore non-DHCP BOOTP responses"), NULL },
- { "win-client-ident", '\0', POPT_ARG_NONE, &winId, 0,
- N_("Set the client identifier to match Window's") },
- /*{ "test", 't', POPT_ARG_NONE, &test, 0,
-@@ -831,6 +833,8 @@
- flags |= PUMP_FLAG_FORCEHNLOOKUP;
- if (nodns)
- overrides->flags |= OVERRIDE_FLAG_NODNS;
-+ if (nobootp)
-+ overrides->flags |= OVERRIDE_FLAG_NOBOOTP;
- if (nogateway)
- overrides->flags |= OVERRIDE_FLAG_NOGATEWAY;
-
---- pump-0.8.11/dhcp.c.nobootp Tue Feb 27 12:03:02 2001
-+++ pump-0.8.11/dhcp.c Thu Jul 19 18:29:55 2001
-@@ -1321,8 +1321,11 @@
-
- syslog (LOG_DEBUG, "PUMP: sending discover\n");
-
-+ if (override && (override->flags & OVERRIDE_FLAG_NOBOOTP))
-+ syslog (LOG_DEBUG, "PUMP: Ignoring non-DHCP BOOTP responses\n");
-+
- if ((chptr = handleTransaction(s, override, &breq, &bresp, &broadcastAddr,
-- NULL, 1, startTime, DHCP_TYPE_OFFER))) {
-+ NULL, (override && (override->flags & OVERRIDE_FLAG_NOBOOTP))?0:1, startTime, DHCP_TYPE_OFFER))) {
- close(s);
- pumpDisableInterface(intf->device);
- return chptr;
---- pump-0.8.11/pump.h.nobootp Thu Feb 1 17:58:16 2001
-+++ pump-0.8.11/pump.h Thu Jul 19 18:29:55 2001
-@@ -74,6 +74,7 @@
- #define OVERRIDE_FLAG_NODNS (1 << 0)
- #define OVERRIDE_FLAG_NONISDOMAIN (1 << 1)
- #define OVERRIDE_FLAG_NOGATEWAY (1 << 2)
-+#define OVERRIDE_FLAG_NOBOOTP (1 << 3)
-
- struct pumpOverrideInfo {
- struct pumpNetIntf intf;
---- pump-0.8.11/config.c.nobootp Thu Jul 19 18:30:02 2001
-+++ pump-0.8.11/config.c Thu Jul 19 18:30:20 2001
-@@ -182,6 +182,12 @@
- return 1;
- }
- override->flags |= OVERRIDE_FLAG_NODNS;
-+ } else if (!strcmp(start, "nobootp")) {
-+ if (*rest) {
-+ parseError(*lineNum, "unexpected argument to nobootp directive");
-+ return 1;
-+ }
-+ override->flags |= OVERRIDE_FLAG_NOBOOTP;
- } else if (!strcmp(start, "nogateway")) {
- if (*rest) {
- parseError(*lineNum, "unexpected argument to nogateway directive");
+++ /dev/null
---- pump-0.8.11/pump.c.retryforever Fri Jul 20 10:42:10 2001
-+++ pump-0.8.11/pump.c Fri Jul 20 11:03:01 2001
-@@ -386,7 +386,36 @@
- closest = -1;
- if (numInterfaces) {
- for (i = 0; i < numInterfaces; i++)
-- if ((intf[i].set & PUMP_INTFINFO_HAS_LEASE) &&
-+ /* if this interface has an expired lease due to
-+ * renewal failures and it's time to try again to
-+ * get a new lease, then try again
-+ *
-+ * note: this trys every 30 secs FOREVER; this may
-+ * or may not be desirable. could also have a back-off
-+ * hueristic that increases the retry delay after each
-+ * failed attempt and a maximum number of tries or
-+ * maximum period of time to try for.
-+ */
-+ if ((intf[i].set & PUMP_INTFINFO_NEEDS_NEWLEASE) &&
-+ (intf[i].renewAt < pumpUptime())) {
-+ if (pumpDhcpRun(intf[i].device, 0,
-+ intf[i].reqLease,
-+ intf[i].set & PUMP_NETINFO_HAS_HOSTNAME
-+ ? intf[i].hostname : NULL,
-+ intf + i, overrides)) {
-+
-+ /* failed to get a new lease, so try
-+ * again in 30 seconds
-+ */
-+ intf[i].renewAt = pumpUptime() + 30;
-+
-+ } else {
-+ intf[i].set &= ~PUMP_INTFINFO_NEEDS_NEWLEASE;
-+ callScript(overrides->script, PUMP_SCRIPT_NEWLEASE,
-+ &intf[i]);
-+ }
-+ }
-+ else if ((intf[i].set & PUMP_INTFINFO_HAS_LEASE) &&
- (closest == -1 ||
- (intf[closest].renewAt > intf[i].renewAt)))
- closest = i;
-@@ -398,7 +427,12 @@
- "failed to renew lease for device %s",
- intf[closest].device);
-
-- if ((intf[closest].renewAt += pumpUptime() + 30) >
-+ /* if the renewal failed, then set renewAt to
-+ * try again in 30 seconds AND then if renewAt's
-+ * value is after the lease expiration then
-+ * try to get a fresh lease for the interface
-+ */
-+ if ((intf[closest].renewAt = pumpUptime() + 30) >
- intf[closest].leaseExpiration) {
- o = overrides;
- while (*o->intf.device &&
-@@ -408,6 +442,8 @@
- if (!*o->intf.device) o = overrides;
-
- intf[closest].set &= ~PUMP_INTFINFO_HAS_LEASE;
-+ intf[closest].set |= PUMP_INTFINFO_NEEDS_NEWLEASE;
-+
-
- if (pumpDhcpRun(intf[closest].device,
- intf[closest].flags,
-@@ -415,6 +451,16 @@
- intf[closest].set & PUMP_NETINFO_HAS_HOSTNAME
- ? intf[closest].hostname : NULL,
- intf + closest, o)) {
-+
-+ /* failed to get a new lease, so try
-+ * again in 30 seconds
-+ */
-+ intf[closest].renewAt = pumpUptime() + 30;
-+#if 0
-+ /* ifdef this out since we now try more than once to get
-+ * a new lease and don't, therefore, want to remove the interface
-+ */
-+
- if (numInterfaces == 1) {
- callScript(o->script, PUMP_SCRIPT_DOWN,
- &intf[closest]);
-@@ -426,7 +472,10 @@
-
- intf[i] = intf[numInterfaces - 1];
- numInterfaces--;
-+#endif
- } else {
-+ intf[closest].set &=
-+ ~PUMP_INTFINFO_NEEDS_NEWLEASE;
- callScript(o->script, PUMP_SCRIPT_NEWLEASE,
- &intf[closest]);
- }
---- pump-0.8.11/pump.h.retryforever Fri Jul 20 10:42:10 2001
-+++ pump-0.8.11/pump.h Fri Jul 20 10:42:10 2001
-@@ -23,6 +23,7 @@
- #define PUMP_INTFINFO_HAS_LEASE (1 << 7)
- #define PUMP_INTFINFO_HAS_REQLEASE (1 << 8)
- #define PUMP_INTFINFO_HAS_NEXTSERVER (1 << 9)
-+#define PUMP_INTFINFO_NEEDS_NEWLEASE (1 << 10)
-
- #define PUMP_NETINFO_HAS_LOGSRVS (1 << 15)
- #define PUMP_NETINFO_HAS_LPRSRVS (1 << 16)
---- pump-0.8.11/dhcp.c.sopwith Mon Jul 23 19:18:29 2001
-+++ pump-0.8.11/dhcp.c Mon Jul 23 19:18:49 2001
-@@ -47,6 +47,7 @@
- #include <sys/wait.h>
- #include <syslog.h>
- #include <unistd.h>
-+#include <time.h>
-
- #include "pump.h"
-
+++ /dev/null
---- pump-0.8.11/pump.c.sopwith Sun Aug 26 18:19:18 2001
-+++ pump-0.8.11/pump.c Sun Aug 26 18:21:42 2001
-@@ -67,7 +67,7 @@
- struct {
- char device[20];
- int flags;
-- int reqLease; /* in hours */
-+ int reqLease; /* in seconds */
- char reqHostname[200];
- } start;
- int result; /* 0 for success */
-@@ -803,7 +803,8 @@
- int rc;
- int test = 0;
- int flags = 0;
-- int lease = 12;
-+ int lease_hrs = 0;
-+ int lease = 12*3600;
- int killDaemon = 0;
- int winId = 0;
- int release = 0, renew = 0, status = 0, lookupHostname = 0, nodns = 0;
-@@ -823,8 +824,10 @@
- N_("iface") },
- { "kill", 'k', POPT_ARG_NONE, &killDaemon, 0,
- N_("Kill daemon (and disable all interfaces)"), NULL },
-- { "lease", 'l', POPT_ARG_INT, &lease, 0,
-+ { "lease", 'l', POPT_ARG_INT, &lease_hrs, 0,
- N_("Lease time to request (in hours)"), N_("hours") },
-+ { "leasesecs", 'L', POPT_ARG_INT, &lease, 0,
-+ N_("Lease time to request (in seconds)"), N_("seconds") },
- { "lookup-hostname", '\0', POPT_ARG_NONE, &lookupHostname, 0,
- N_("Force lookup of hostname") },
- { "release", 'r', POPT_ARG_NONE, &release, 0,
-@@ -906,7 +909,10 @@
- cmd.type = CMD_STARTIFACE;
- strcpy(cmd.u.start.device, device);
- cmd.u.start.flags = flags;
-- cmd.u.start.reqLease = lease * 60 * 60;
-+ if(lease_hrs)
-+ cmd.u.start.reqLease = lease_hrs * 60 * 60;
-+ else
-+ cmd.u.start.reqLease = lease;
- strcpy(cmd.u.start.reqHostname, hostname);
- }
-
+++ /dev/null
---- pump-0.8.11/net.c.21088 Fri Jul 20 12:26:57 2001
-+++ pump-0.8.11/net.c Fri Jul 20 12:29:59 2001
-@@ -738,6 +738,7 @@
- int main(int argc, const char **argv) {
- int netSet, rc;
- int x;
-+ int noDns = 0;
- char * bootProto = NULL;
- char * device = NULL;
- char * hostname = NULL;
-@@ -768,6 +769,9 @@
- },
- { "device", 'd', POPT_ARG_STRING, &device, 0,
- _("Network device"), NULL
-+ },
-+ { "nodns", '\0', POPT_ARG_NONE, &noDns, 0,
-+ _("No DNS lookups"), NULL
- },
- { 0, 0, 0, 0, 0 }
- };