You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.8 KiB
129 lines
4.8 KiB
diff -urN busybox-dist/networking/udhcp/dumpleases.c busybox/networking/udhcp/dumpleases.c
|
|
--- busybox-dist/networking/udhcp/dumpleases.c 2004-03-15 02:29:00.000000000 -0600
|
|
+++ busybox/networking/udhcp/dumpleases.c 2004-03-16 09:52:32.000000000 -0600
|
|
@@ -42,7 +42,7 @@
|
|
#endif
|
|
{
|
|
FILE *fp;
|
|
- int i, c, mode = REMAINING;
|
|
+ int i, c, mode = ABSOLUTE;
|
|
long expires;
|
|
const char *file = LEASES_FILE;
|
|
struct dhcpOfferedAddr lease;
|
|
@@ -73,7 +73,7 @@
|
|
|
|
fp = xfopen(file, "r");
|
|
|
|
- printf("Mac Address IP-Address Expires %s\n", mode == REMAINING ? "in" : "at");
|
|
+ printf("Mac Address IP-Address Hostname Expires %s\n", mode == REMAINING ? "in" : "at");
|
|
/* "00:00:00:00:00:00 255.255.255.255 Wed Jun 30 21:49:08 1993" */
|
|
while (fread(&lease, sizeof(lease), 1, fp)) {
|
|
|
|
@@ -84,7 +84,8 @@
|
|
addr.s_addr = lease.yiaddr;
|
|
printf(" %-15s", inet_ntoa(addr));
|
|
expires = ntohl(lease.expires);
|
|
- printf(" ");
|
|
+ //expires = lease.expires;
|
|
+ printf(" %-15s ",lease.hostname);
|
|
if (mode == REMAINING) {
|
|
if (!expires) printf("expired\n");
|
|
else {
|
|
diff -urN busybox-dist/networking/udhcp/files.c busybox/networking/udhcp/files.c
|
|
--- busybox-dist/networking/udhcp/files.c 2004-03-15 02:29:00.000000000 -0600
|
|
+++ busybox/networking/udhcp/files.c 2004-03-16 09:50:04.000000000 -0600
|
|
@@ -281,7 +281,7 @@
|
|
if (lease.yiaddr >= server_config.start && lease.yiaddr <= server_config.end) {
|
|
lease.expires = ntohl(lease.expires);
|
|
if (!server_config.remaining) lease.expires -= time(0);
|
|
- if (!(add_lease(lease.chaddr, lease.yiaddr, lease.expires))) {
|
|
+ if (!(add_lease(lease.hostname, lease.chaddr, lease.yiaddr, lease.expires))) {
|
|
LOG(LOG_WARNING, "Too many leases while loading %s\n", file);
|
|
break;
|
|
}
|
|
diff -urN busybox-dist/networking/udhcp/leases.c busybox/networking/udhcp/leases.c
|
|
--- busybox-dist/networking/udhcp/leases.c 2004-03-15 02:29:00.000000000 -0600
|
|
+++ busybox/networking/udhcp/leases.c 2004-03-16 09:50:04.000000000 -0600
|
|
@@ -35,7 +35,7 @@
|
|
|
|
|
|
/* add a lease into the table, clearing out any old ones */
|
|
-struct dhcpOfferedAddr *add_lease(uint8_t *chaddr, uint32_t yiaddr, unsigned long lease)
|
|
+struct dhcpOfferedAddr *add_lease(uint8_t *hostname, uint8_t *chaddr, uint32_t yiaddr, unsigned long lease)
|
|
{
|
|
struct dhcpOfferedAddr *oldest;
|
|
|
|
@@ -45,6 +45,13 @@
|
|
oldest = oldest_expired_lease();
|
|
|
|
if (oldest) {
|
|
+ if (hostname) {
|
|
+ uint8_t length = *(hostname-1);
|
|
+ if (length>15) length=15;
|
|
+ memcpy(oldest->hostname,hostname,length);
|
|
+ oldest->hostname[length]=0;
|
|
+ }
|
|
+
|
|
memcpy(oldest->chaddr, chaddr, 16);
|
|
oldest->yiaddr = yiaddr;
|
|
oldest->expires = time(0) + lease;
|
|
@@ -112,7 +119,7 @@
|
|
temp.s_addr = addr;
|
|
LOG(LOG_INFO, "%s belongs to someone, reserving it for %ld seconds",
|
|
inet_ntoa(temp), server_config.conflict_time);
|
|
- add_lease(blank_chaddr, addr, server_config.conflict_time);
|
|
+ add_lease(blank_chaddr, blank_chaddr, addr, server_config.conflict_time);
|
|
return 1;
|
|
} else return 0;
|
|
}
|
|
diff -urN busybox-dist/networking/udhcp/leases.h busybox/networking/udhcp/leases.h
|
|
--- busybox-dist/networking/udhcp/leases.h 2004-01-30 17:45:12.000000000 -0600
|
|
+++ busybox/networking/udhcp/leases.h 2004-03-16 09:50:04.000000000 -0600
|
|
@@ -4,6 +4,7 @@
|
|
|
|
|
|
struct dhcpOfferedAddr {
|
|
+ uint8_t hostname[16];
|
|
uint8_t chaddr[16];
|
|
uint32_t yiaddr; /* network order */
|
|
uint32_t expires; /* host order */
|
|
@@ -12,7 +13,7 @@
|
|
extern uint8_t blank_chaddr[];
|
|
|
|
void clear_lease(uint8_t *chaddr, uint32_t yiaddr);
|
|
-struct dhcpOfferedAddr *add_lease(uint8_t *chaddr, uint32_t yiaddr, unsigned long lease);
|
|
+struct dhcpOfferedAddr *add_lease(uint8_t *hostname, uint8_t *chaddr, uint32_t yiaddr, unsigned long lease);
|
|
int lease_expired(struct dhcpOfferedAddr *lease);
|
|
struct dhcpOfferedAddr *oldest_expired_lease(void);
|
|
struct dhcpOfferedAddr *find_lease_by_chaddr(uint8_t *chaddr);
|
|
diff -urN busybox-dist/networking/udhcp/serverpacket.c busybox/networking/udhcp/serverpacket.c
|
|
--- busybox-dist/networking/udhcp/serverpacket.c 2004-03-15 02:29:01.000000000 -0600
|
|
+++ busybox/networking/udhcp/serverpacket.c 2004-03-16 09:51:36.000000000 -0600
|
|
@@ -29,6 +29,7 @@
|
|
#include "dhcpd.h"
|
|
#include "options.h"
|
|
#include "common.h"
|
|
+#include "files.h"
|
|
|
|
/* send a packet to giaddr using the kernel ip stack */
|
|
static int send_packet_to_relay(struct dhcpMessage *payload)
|
|
@@ -152,7 +153,7 @@
|
|
return -1;
|
|
}
|
|
|
|
- if (!add_lease(packet.chaddr, packet.yiaddr, server_config.offer_time)) {
|
|
+ if (!add_lease(get_option(oldpacket, DHCP_HOST_NAME), packet.chaddr, packet.yiaddr, server_config.offer_time)) {
|
|
LOG(LOG_WARNING, "lease pool is full -- OFFER abandoned");
|
|
return -1;
|
|
}
|
|
@@ -233,7 +234,9 @@
|
|
if (send_packet(&packet, 0) < 0)
|
|
return -1;
|
|
|
|
- add_lease(packet.chaddr, packet.yiaddr, lease_time_align);
|
|
+ add_lease(get_option(oldpacket, DHCP_HOST_NAME), packet.chaddr, packet.yiaddr, lease_time_align);
|
|
+
|
|
+ write_leases();
|
|
|
|
return 0;
|
|
}
|
|
|