sync with udhcp bug fixes
This commit is contained in:
parent
496411b489
commit
858fad722f
@ -1,4 +1,6 @@
|
|||||||
0.9.9 (pending)
|
0.9.9 (pending)
|
||||||
|
+ Fixed a little endian problem in mton (Bastian Blank <waldi@debian.org>)
|
||||||
|
+ Fixed a arpping alignment problem (Rui He <rhe@3eti.com>)
|
||||||
+ Added sanity check for max_leases (udhcp bug #1285) (me)
|
+ Added sanity check for max_leases (udhcp bug #1285) (me)
|
||||||
+ Finally got rid of the trailing space in enviromental vars (me)
|
+ Finally got rid of the trailing space in enviromental vars (me)
|
||||||
+ added an new enviromental variable: $mask. It contains the number
|
+ added an new enviromental variable: $mask. It contains the number
|
||||||
|
@ -67,9 +67,9 @@ int arpping(u_int32_t yiaddr, u_int32_t ip, unsigned char *mac, char *interface)
|
|||||||
arp.hlen = 6; /* hardware address length */
|
arp.hlen = 6; /* hardware address length */
|
||||||
arp.plen = 4; /* protocol address length */
|
arp.plen = 4; /* protocol address length */
|
||||||
arp.operation = htons(ARPOP_REQUEST); /* ARP op code */
|
arp.operation = htons(ARPOP_REQUEST); /* ARP op code */
|
||||||
*((u_int *) arp.sInaddr) = ip; /* source IP address */
|
memcpy(arp.sInaddr, &ip, sizeof(ip)); /* source IP address */
|
||||||
memcpy(arp.sHaddr, mac, 6); /* source hardware address */
|
memcpy(arp.sHaddr, mac, 6); /* source hardware address */
|
||||||
*((u_int *) arp.tInaddr) = yiaddr; /* target IP address */
|
memcpy(arp.tInaddr, &yiaddr, sizeof(yiaddr)); /* target IP address */
|
||||||
|
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&addr, 0, sizeof(addr));
|
||||||
strcpy(addr.sa_data, interface);
|
strcpy(addr.sa_data, interface);
|
||||||
|
@ -68,10 +68,11 @@ static int sprintip(char *dest, char *pre, unsigned char *ip)
|
|||||||
static int mton(struct in_addr *mask)
|
static int mton(struct in_addr *mask)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
/* note: mask will always be in network byte order, so
|
unsigned long bits = ntohl(mask->s_addr);
|
||||||
* there are no endian issues */
|
/* too bad one can't check the carry bit, etc in c bit
|
||||||
for (i = 31; i >= 0 && !((mask->s_addr >> i) & 1); i--);
|
* shifting */
|
||||||
return i + 1;
|
for (i = 0; i < 32 && !((bits >> i) & 1); i++);
|
||||||
|
return 32 - i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user