diff -u dhcpcd-2.0.5/src/arp.c dhcpcd-2.0.6/src/arp.c --- dhcpcd-2.0.5/src/arp.c 2006-04-27 22:18:29.000000000 +0100 +++ dhcpcd-2.0.6/src/arp.c 2006-06-05 11:47:11.000000000 +0100 @@ -59,7 +59,6 @@ const int inaddr_broadcast = INADDR_BROADCAST; /*****************************************************************************/ -#ifdef ARPCHECK int arpCheck() { arpMessage ArpMsgSend,ArpMsgRecv; @@ -159,7 +158,6 @@ while ( 1 ); return 0; } -#endif /*****************************************************************************/ int arpRelease() /* sends UNARP message, cf. RFC1868 */ { diff -u dhcpcd-2.0.5/src/buildmsg.c dhcpcd-2.0.6/src/buildmsg.c --- dhcpcd-2.0.5/src/buildmsg.c 2006-04-27 22:18:29.000000000 +0100 +++ dhcpcd-2.0.6/src/buildmsg.c 2006-06-05 11:47:11.000000000 +0100 @@ -576,7 +576,6 @@ sizeof(dhcpMessage)); } /*****************************************************************************/ -#ifdef ARPCHECK void buildDhcpDecline(xid) unsigned xid; { @@ -620,7 +619,6 @@ DhcpIface.siaddr,htons(DHCP_CLIENT_PORT),htons(DHCP_SERVER_PORT), sizeof(dhcpMessage)); } -#endif /*****************************************************************************/ void buildDhcpInform(xid) unsigned xid; diff -u dhcpcd-2.0.5/src/client.c dhcpcd-2.0.6/src/client.c --- dhcpcd-2.0.5/src/client.c 2006-04-27 22:18:29.000000000 +0100 +++ dhcpcd-2.0.6/src/client.c 2006-06-05 11:47:11.000000000 +0100 @@ -75,6 +75,7 @@ extern int InitialHostName_len,InitialDomainName_len; extern char *InitialHostName,*InitialDomainName; extern int DownIfaceOnStop; +extern int DoARP; extern char resolv_file[128]; extern char resolv_file_sv[128]; @@ -90,9 +91,7 @@ extern int SetFQDNHostName; -#ifdef ARPCHECK -int arpCheck(); -#endif +int arpCheck(); int arpRelease(); int dhcpConfig(); int readDhcpCache(); @@ -1088,27 +1085,28 @@ ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[1], ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[2], ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[3]); -#ifdef ARPCHECK /* check if the offered IP address already in use */ - if ( arpCheck() ) + if ( DoARP ) { - logger(LOG_ERR, - "requested %u.%u.%u.%u address is in use", - ((unsigned char *)&DhcpIface.ciaddr)[0], - ((unsigned char *)&DhcpIface.ciaddr)[1], - ((unsigned char *)&DhcpIface.ciaddr)[2], - ((unsigned char *)&DhcpIface.ciaddr)[3]); - dhcpDecline(); - DhcpIface.ciaddr = 0; - return &dhcpInit; + if ( arpCheck() ) + { + logger(LOG_ERR, + "requested %u.%u.%u.%u address is in use", + ((unsigned char *)&DhcpIface.ciaddr)[0], + ((unsigned char *)&DhcpIface.ciaddr)[1], + ((unsigned char *)&DhcpIface.ciaddr)[2], + ((unsigned char *)&DhcpIface.ciaddr)[3]); + dhcpDecline(); + DhcpIface.ciaddr = 0; + return &dhcpInit; + } + logger(LOG_INFO, + "verified %u.%u.%u.%u address is not in use", + ((unsigned char *)&DhcpIface.ciaddr)[0], + ((unsigned char *)&DhcpIface.ciaddr)[1], + ((unsigned char *)&DhcpIface.ciaddr)[2], + ((unsigned char *)&DhcpIface.ciaddr)[3]); } - logger(LOG_INFO, - "verified %u.%u.%u.%u address is not in use", - ((unsigned char *)&DhcpIface.ciaddr)[0], - ((unsigned char *)&DhcpIface.ciaddr)[1], - ((unsigned char *)&DhcpIface.ciaddr)[2], - ((unsigned char *)&DhcpIface.ciaddr)[3]); -#endif if ( dhcpConfig() ) { dhcpStop(); @@ -1169,6 +1167,9 @@ if (FD_ISSET(dhcpSocket, &rset)) while (recvfrom(dhcpSocket,(void *)foobuf,sizeof(foobuf),0,NULL,NULL) != -1 ); } + + /* Sleep for 2 seconds so we don't gobble CPU time */ + sleep(2); } } /*****************************************************************************/ @@ -1333,7 +1332,6 @@ return &dhcpStart; } /*****************************************************************************/ -#ifdef ARPCHECK void *dhcpDecline() { struct sockaddr addr; @@ -1353,7 +1351,6 @@ logger(LOG_ERR,"dhcpDecline: sendto: %s",strerror(errno)); return &dhcpInit; } -#endif /*****************************************************************************/ void *dhcpInform() { @@ -1422,26 +1419,27 @@ ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[1], ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[2], ((unsigned char *)DhcpOptions.val[dhcpServerIdentifier])[3]); -#ifdef ARPCHECK /* check if the offered IP address already in use */ - if ( arpCheck() ) + if ( DoARP ) { - logger(LOG_ERR, - "requested %u.%u.%u.%u address is in use", - ((unsigned char *)&DhcpIface.ciaddr)[0], - ((unsigned char *)&DhcpIface.ciaddr)[1], - ((unsigned char *)&DhcpIface.ciaddr)[2], - ((unsigned char *)&DhcpIface.ciaddr)[3]); - dhcpDecline(); - return 0; + if ( arpCheck() ) + { + logger(LOG_ERR, + "requested %u.%u.%u.%u address is in use", + ((unsigned char *)&DhcpIface.ciaddr)[0], + ((unsigned char *)&DhcpIface.ciaddr)[1], + ((unsigned char *)&DhcpIface.ciaddr)[2], + ((unsigned char *)&DhcpIface.ciaddr)[3]); + dhcpDecline(); + return 0; + } + logger(LOG_INFO, + "verified %u.%u.%u.%u address is not in use", + ((unsigned char *)&DhcpIface.ciaddr)[0], + ((unsigned char *)&DhcpIface.ciaddr)[1], + ((unsigned char *)&DhcpIface.ciaddr)[2], + ((unsigned char *)&DhcpIface.ciaddr)[3]); } - logger(LOG_INFO, - "verified %u.%u.%u.%u address is not in use", - ((unsigned char *)&DhcpIface.ciaddr)[0], - ((unsigned char *)&DhcpIface.ciaddr)[1], - ((unsigned char *)&DhcpIface.ciaddr)[2], - ((unsigned char *)&DhcpIface.ciaddr)[3]); -#endif if ( dhcpConfig() ) return 0; exit(0); } diff -u dhcpcd-2.0.5/src/client.h dhcpcd-2.0.6/src/client.h --- dhcpcd-2.0.5/src/client.h 2006-04-27 22:18:29.000000000 +0100 +++ dhcpcd-2.0.6/src/client.h 2006-06-05 11:47:11.000000000 +0100 @@ -217,8 +217,6 @@ void *dhcpRelease(); void *dhcpStop(); void *dhcpInform(); -#ifdef ARPCHECK void *dhcpDecline(); -#endif #endif diff -u dhcpcd-2.0.5/src/dhcpcd.c dhcpcd-2.0.6/src/dhcpcd.c --- dhcpcd-2.0.5/src/dhcpcd.c 2006-04-27 22:18:29.000000000 +0100 +++ dhcpcd-2.0.6/src/dhcpcd.c 2006-06-05 11:47:11.000000000 +0100 @@ -77,6 +77,7 @@ int SetDHCPDefaultRoutes= 1; int Persistent = 0; int DownIfaceOnStop = 1; +int DoARP = 1; #if 0 unsigned char ClientMACaddr[ETH_ALEN]; @@ -158,6 +159,10 @@ i++; s=1; break; + case 'a': + s++; + DoARP = 0; + goto prgs; case 'p': s++; Persistent = 1;