diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c
index 7d44697..21c1a7b 100644
--- a/networking/udhcp/clientpacket.c
+++ b/networking/udhcp/clientpacket.c
@@ -38,7 +38,7 @@
 
 
 /* Initialize the packet with the proper defaults */
-static void init_packet(struct dhcpMessage *packet, char type)
+static void init_packet(struct dhcp_packet *packet, char type)
 {
 	udhcp_init_header(packet, type);
 	memcpy(packet->chaddr, client_config.client_mac, 6);
@@ -56,7 +56,7 @@
 /* Add a parameter request list for stubborn DHCP servers. Pull the data
  * from the struct in options.c. Don't do bounds checking here because it
  * goes towards the head of the packet. */
-static void add_param_req_option(struct dhcpMessage *packet)
+static void add_param_req_option(struct dhcp_packet *packet)
 {
 	uint8_t c;
 	int end = end_option(packet->options);
@@ -96,7 +96,7 @@
  * client reverts to using the IP broadcast address.
  */
 
-static int raw_bcast_from_client_config_ifindex(struct dhcpMessage *packet)
+static int raw_bcast_from_client_config_ifindex(struct dhcp_packet *packet)
 {
 	return udhcp_send_raw_packet(packet,
 		/*src*/ INADDR_ANY, CLIENT_PORT,
@@ -109,7 +109,7 @@
 /* Broadcast a DHCP decline message */
 int FAST_FUNC send_decline(uint32_t xid, uint32_t server, uint32_t requested)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 
 	init_packet(&packet, DHCPDECLINE);
 	packet.xid = xid;
@@ -126,7 +126,7 @@
 /* Broadcast a DHCP discover packet to the network, with an optionally requested IP */
 int FAST_FUNC send_discover(uint32_t xid, uint32_t requested)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 
 	init_packet(&packet, DHCPDISCOVER);
 	packet.xid = xid;
@@ -150,7 +150,7 @@
  */
 int FAST_FUNC send_select(uint32_t xid, uint32_t server, uint32_t requested)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	struct in_addr addr;
 
 	init_packet(&packet, DHCPREQUEST);
@@ -169,7 +169,7 @@
 /* Unicasts or broadcasts a DHCP renew message */
 int FAST_FUNC send_renew(uint32_t xid, uint32_t server, uint32_t ciaddr)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 
 	init_packet(&packet, DHCPREQUEST);
 	packet.xid = xid;
@@ -189,7 +189,7 @@
 /* Unicasts a DHCP release message */
 int FAST_FUNC send_release(uint32_t server, uint32_t ciaddr)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 
 	init_packet(&packet, DHCPRELEASE);
 	packet.xid = random_xid();
@@ -203,10 +203,10 @@
 
 
 /* Returns -1 on errors that are fatal for the socket, -2 for those that aren't */
-int FAST_FUNC udhcp_recv_raw_packet(struct dhcpMessage *dhcp_pkt, int fd)
+int FAST_FUNC udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd)
 {
 	int bytes;
-	struct udp_dhcp_packet packet;
+	struct ip_udp_dhcp_packet packet;
 	uint16_t check;
 
 	memset(&packet, 0, sizeof(packet));
diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
index 40b8df4..a01597f 100644
--- a/networking/udhcp/common.h
+++ b/networking/udhcp/common.h
@@ -23,8 +23,8 @@
 
 #define DHCP_OPTIONS_BUFSIZE  308
 
-//TODO: rename to dhcp_packet; rename ciaddr/yiaddr/chaddr
-struct dhcpMessage {
+//TODO: rename ciaddr/yiaddr/chaddr
+struct dhcp_packet {
 	uint8_t op;      /* 1 = BOOTREQUEST, 2 = BOOTREPLY */
 	uint8_t htype;   /* hardware address type. 1 = 10mb ethernet */
 	uint8_t hlen;    /* hardware address length */
@@ -45,39 +45,38 @@
 	uint8_t options[DHCP_OPTIONS_BUFSIZE + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS];
 } PACKED;
 
-//TODO: rename to ip_udp_dhcp_packet?
-struct udp_dhcp_packet {
+struct ip_udp_dhcp_packet {
 	struct iphdr ip;
 	struct udphdr udp;
-	struct dhcpMessage data;
+	struct dhcp_packet data;
 } PACKED;
 
 /* Let's see whether compiler understood us right */
-struct BUG_bad_sizeof_struct_udp_dhcp_packet {
-	char BUG_bad_sizeof_struct_udp_dhcp_packet
-		[(sizeof(struct udp_dhcp_packet) != 576 + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS) ? -1 : 1];
+struct BUG_bad_sizeof_struct_ip_udp_dhcp_packet {
+	char BUG_bad_sizeof_struct_ip_udp_dhcp_packet
+		[(sizeof(struct ip_udp_dhcp_packet) != 576 + CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS) ? -1 : 1];
 };
 
 uint16_t udhcp_checksum(void *addr, int count) FAST_FUNC;
 
-void udhcp_init_header(struct dhcpMessage *packet, char type) FAST_FUNC;
+void udhcp_init_header(struct dhcp_packet *packet, char type) FAST_FUNC;
 
-/*int udhcp_recv_raw_packet(struct dhcpMessage *dhcp_pkt, int fd); - in dhcpc.h */
-int udhcp_recv_kernel_packet(struct dhcpMessage *packet, int fd) FAST_FUNC;
+/*int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd); - in dhcpc.h */
+int udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd) FAST_FUNC;
 
-int udhcp_send_raw_packet(struct dhcpMessage *dhcp_pkt,
+int udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
 		uint32_t source_ip, int source_port,
 		uint32_t dest_ip, int dest_port, const uint8_t *dest_arp,
 		int ifindex) FAST_FUNC;
 
-int udhcp_send_kernel_packet(struct dhcpMessage *dhcp_pkt,
+int udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
 		uint32_t source_ip, int source_port,
 		uint32_t dest_ip, int dest_port) FAST_FUNC;
 
 
 /**/
 
-void udhcp_run_script(struct dhcpMessage *packet, const char *name) FAST_FUNC;
+void udhcp_run_script(struct dhcp_packet *packet, const char *name) FAST_FUNC;
 
 // Still need to clean these up...
 
@@ -104,16 +103,22 @@
 extern int dhcp_verbose;
 # define log1(...) do { if (dhcp_verbose >= 1) bb_info_msg(__VA_ARGS__); } while (0)
 # if CONFIG_UDHCP_DEBUG >= 2
-void udhcp_dump_packet(struct dhcpMessage *packet) FAST_FUNC;
+void udhcp_dump_packet(struct dhcp_packet *packet) FAST_FUNC;
 #  define log2(...) do { if (dhcp_verbose >= 2) bb_info_msg(__VA_ARGS__); } while (0)
 # else
 #  define udhcp_dump_packet(...) ((void)0)
 #  define log2(...) ((void)0)
 # endif
+# if CONFIG_UDHCP_DEBUG >= 3
+#  define log3(...) do { if (dhcp_verbose >= 3) bb_info_msg(__VA_ARGS__); } while (0)
+# else
+#  define log3(...) ((void)0)
+# endif
 #else
 # define udhcp_dump_packet(...) ((void)0)
 # define log1(...) ((void)0)
 # define log2(...) ((void)0)
+# define log3(...) ((void)0)
 #endif
 
 POP_SAVED_FUNCTION_VISIBILITY
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index eed9d9a..41bb0b0 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -149,7 +149,7 @@
 	int max_fd;
 	int retval;
 	struct timeval tv;
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	fd_set rfds;
 
 #if ENABLE_GETOPT_LONG
@@ -498,7 +498,9 @@
 			}
 
 			/* Ignore packets that aren't for us */
-			if (memcmp(packet.chaddr, client_config.client_mac, 6)) {
+			if (packet.hlen != 6
+			 || memcmp(packet.chaddr, client_config.client_mac, 6)
+			) {
 //FIXME: need to also check that last 10 bytes are zero
 				log1("chaddr does not match, ignoring packet"); // log2?
 				continue;
diff --git a/networking/udhcp/dhcpc.h b/networking/udhcp/dhcpc.h
index a7ed779..9bb1ac2 100644
--- a/networking/udhcp/dhcpc.h
+++ b/networking/udhcp/dhcpc.h
@@ -43,7 +43,7 @@
 int send_renew(uint32_t xid, uint32_t server, uint32_t ciaddr) FAST_FUNC;
 int send_release(uint32_t server, uint32_t ciaddr) FAST_FUNC;
 
-int udhcp_recv_raw_packet(struct dhcpMessage *dhcp_pkt, int fd) FAST_FUNC;
+int udhcp_recv_raw_packet(struct dhcp_packet *dhcp_pkt, int fd) FAST_FUNC;
 
 POP_SAVED_FUNCTION_VISIBILITY
 
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c
index cbc9684..3482463 100644
--- a/networking/udhcp/dhcpd.c
+++ b/networking/udhcp/dhcpd.c
@@ -18,7 +18,7 @@
 
 
 /* globals */
-struct dhcpOfferedAddr *leases;
+struct dyn_lease *leases;
 /* struct server_config_t server_config is in bb_common_bufsiz1 */
 
 
@@ -27,7 +27,7 @@
 {
 	fd_set rfds;
 	int server_socket = -1, retval, max_sock;
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	uint8_t *state, *server_id, *requested;
 	uint32_t server_id_aligned = server_id_aligned; /* for compiler */
 	uint32_t requested_aligned = requested_aligned;
@@ -36,7 +36,7 @@
 	unsigned num_ips;
 	unsigned opt;
 	struct option_set *option;
-	struct dhcpOfferedAddr *lease, static_lease;
+	struct dyn_lease *lease, static_lease;
 	IF_FEATURE_UDHCP_PORT(char *str_P;)
 
 #if ENABLE_FEATURE_UDHCP_PORT
@@ -170,6 +170,11 @@
 			continue;
 		}
 
+		if (packet.hlen != 6) {
+			bb_error_msg("MAC length != 6, ignoring packet");
+			continue;
+		}
+
 		state = get_option(&packet, DHCP_MESSAGE_TYPE);
 		if (state == NULL) {
 			bb_error_msg("no message type option, ignoring packet");
@@ -181,7 +186,7 @@
 		if (static_lease_ip) {
 			bb_info_msg("Found static lease: %x", static_lease_ip);
 
-			memcpy(&static_lease.lease_mac16, &packet.chaddr, 16);
+			memcpy(&static_lease.lease_mac, &packet.chaddr, 6);
 			static_lease.lease_nip = static_lease_ip;
 			static_lease.expires = 0;
 
@@ -212,7 +217,6 @@
 			if (lease) {
 				if (server_id) {
 					/* SELECTING State */
-					log1("server_id = %08x", ntohl(server_id_aligned));
 					if (server_id_aligned == server_config.server_nip
 					 && requested
 					 && requested_aligned == lease->lease_nip
@@ -242,7 +246,7 @@
 				if (lease) {
 					if (lease_expired(lease)) {
 						/* probably best if we drop this lease */
-						memset(lease->lease_mac16, 0, 16);
+						memset(lease->lease_mac, 0, sizeof(lease->lease_mac));
 					} else {
 						/* make some contention for this address */
 						send_NAK(&packet);
@@ -264,7 +268,7 @@
 		case DHCPDECLINE:
 			log1("Received DECLINE");
 			if (lease) {
-				memset(lease->lease_mac16, 0, 16);
+				memset(lease->lease_mac, 0, sizeof(lease->lease_mac));
 				lease->expires = time(NULL) + server_config.decline_time;
 			}
 			break;
diff --git a/networking/udhcp/dhcpd.h b/networking/udhcp/dhcpd.h
index 53cfad4..7776708 100644
--- a/networking/udhcp/dhcpd.h
+++ b/networking/udhcp/dhcpd.h
@@ -79,30 +79,33 @@
 typedef uint32_t leasetime_t;
 typedef int32_t signed_leasetime_t;
 
-//TODO: (1) rename to dyn_lease (that's what it is. we also have static_lease).
-//(2) lease_mac16 may be shortened to lease_mac[6], since e.g. ARP probing uses
-//only 6 first bytes anyway. We can check received dhcp packets
-//that their "chaddr"s have only 6 first bytes != 0, and complain otherwise.
-struct dhcpOfferedAddr {
-	uint8_t lease_mac16[16];
+struct dyn_lease {
 	/* "nip": IP in network order */
-	uint32_t lease_nip;
 	/* Unix time when lease expires. Kept in memory in host order.
 	 * When written to file, converted to network order
 	 * and adjusted (current time subtracted) */
 	leasetime_t expires;
-	uint8_t hostname[20]; /* (size is a multiply of 4) */
+	uint32_t lease_nip;
+	/* We use lease_mac[6], since e.g. ARP probing uses
+	 * only 6 first bytes anyway. We check received dhcp packets
+	 * that their hlen == 6 and thus chaddr has only 6 significant bytes
+	 * (dhcp packet has chaddr[16])
+	 */
+	uint8_t lease_mac[6];
+	uint8_t hostname[20];
+	uint8_t pad[2];
+	/* total size is a multiply of 4 */
 };
 
-extern struct dhcpOfferedAddr *leases;
+extern struct dyn_lease *leases;
 
-struct dhcpOfferedAddr *add_lease(
+struct dyn_lease *add_lease(
 		const uint8_t *chaddr, uint32_t yiaddr,
 		leasetime_t leasetime, uint8_t *hostname
 		) FAST_FUNC;
-int lease_expired(struct dhcpOfferedAddr *lease) FAST_FUNC;
-struct dhcpOfferedAddr *find_lease_by_chaddr(const uint8_t *chaddr) FAST_FUNC;
-struct dhcpOfferedAddr *find_lease_by_yiaddr(uint32_t yiaddr) FAST_FUNC;
+int lease_expired(struct dyn_lease *lease) FAST_FUNC;
+struct dyn_lease *find_lease_by_chaddr(const uint8_t *chaddr) FAST_FUNC;
+struct dyn_lease *find_lease_by_yiaddr(uint32_t yiaddr) FAST_FUNC;
 uint32_t find_free_or_expired_address(const uint8_t *chaddr) FAST_FUNC;
 
 
@@ -121,10 +124,10 @@
 
 /*** serverpacket.h ***/
 
-int send_offer(struct dhcpMessage *oldpacket) FAST_FUNC;
-int send_NAK(struct dhcpMessage *oldpacket) FAST_FUNC;
-int send_ACK(struct dhcpMessage *oldpacket, uint32_t yiaddr) FAST_FUNC;
-int send_inform(struct dhcpMessage *oldpacket) FAST_FUNC;
+int send_offer(struct dhcp_packet *oldpacket) FAST_FUNC;
+int send_NAK(struct dhcp_packet *oldpacket) FAST_FUNC;
+int send_ACK(struct dhcp_packet *oldpacket, uint32_t yiaddr) FAST_FUNC;
+int send_inform(struct dhcp_packet *oldpacket) FAST_FUNC;
 
 
 /*** files.h ***/
diff --git a/networking/udhcp/dhcprelay.c b/networking/udhcp/dhcprelay.c
index 2fee49a..a7e715f 100644
--- a/networking/udhcp/dhcprelay.c
+++ b/networking/udhcp/dhcprelay.c
@@ -97,7 +97,7 @@
  * p - pointer to the dhcp packet
  * returns the message type on success, -1 otherwise
  */
-static int get_dhcp_packet_type(struct dhcpMessage *p)
+static int get_dhcp_packet_type(struct dhcp_packet *p)
 {
 	uint8_t *op;
 
@@ -175,7 +175,7 @@
  * p - packet to send
  * client - number of the client
  */
-static void pass_to_server(struct dhcpMessage *p, int packet_len, int client, int *fds,
+static void pass_to_server(struct dhcp_packet *p, int packet_len, int client, int *fds,
 			struct sockaddr_in *client_addr, struct sockaddr_in *server_addr)
 {
 	int res, type;
@@ -206,7 +206,7 @@
  * pass_to_client() - forwards dhcp packets from server to client
  * p - packet to send
  */
-static void pass_to_client(struct dhcpMessage *p, int packet_len, int *fds)
+static void pass_to_client(struct dhcp_packet *p, int packet_len, int *fds)
 {
 	int res, type;
 	struct xid_item *item;
@@ -240,7 +240,7 @@
 int dhcprelay_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int dhcprelay_main(int argc, char **argv)
 {
-	struct dhcpMessage dhcp_msg;
+	struct dhcp_packet dhcp_msg;
 	struct sockaddr_in server_addr;
 	struct sockaddr_in client_addr;
 	fd_set rfds;
diff --git a/networking/udhcp/dumpleases.c b/networking/udhcp/dumpleases.c
index 5b98aa5..d6176fb 100644
--- a/networking/udhcp/dumpleases.c
+++ b/networking/udhcp/dumpleases.c
@@ -25,7 +25,7 @@
 	unsigned opt;
 	int64_t written_at, curr, expires_abs;
 	const char *file = LEASES_FILE;
-	struct dhcpOfferedAddr lease;
+	struct dyn_lease lease;
 	struct in_addr addr;
 
 	enum {
@@ -61,7 +61,7 @@
 	while (full_read(fd, &lease, sizeof(lease)) == sizeof(lease)) {
 		const char *fmt = ":%02x" + 1;
 		for (i = 0; i < 6; i++) {
-			printf(fmt, lease.lease_mac16[i]);
+			printf(fmt, lease.lease_mac[i]);
 			fmt = ":%02x";
 		}
 		addr.s_addr = lease.lease_nip;
diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c
index 9d5633b..bddf3e1 100644
--- a/networking/udhcp/files.c
+++ b/networking/udhcp/files.c
@@ -390,7 +390,7 @@
 
 void FAST_FUNC read_leases(const char *file)
 {
-	struct dhcpOfferedAddr lease;
+	struct dyn_lease lease;
 	int64_t written_at, time_passed;
 	int fd;
 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
@@ -420,7 +420,7 @@
 				continue;
 			/* NB: add_lease takes "relative time", IOW,
 			 * lease duration, not lease deadline. */
-			if (!(add_lease(lease.lease_mac16, lease.lease_nip, expires, lease.hostname))) {
+			if (!(add_lease(lease.lease_mac, lease.lease_nip, expires, lease.hostname))) {
 				bb_error_msg("too many leases while loading %s", file);
 				break;
 			}
diff --git a/networking/udhcp/leases.c b/networking/udhcp/leases.c
index 06bc086..4039f4d 100644
--- a/networking/udhcp/leases.c
+++ b/networking/udhcp/leases.c
@@ -11,9 +11,9 @@
 
 
 /* Find the oldest expired lease, NULL if there are no expired leases */
-static struct dhcpOfferedAddr *oldest_expired_lease(void)
+static struct dyn_lease *oldest_expired_lease(void)
 {
-	struct dhcpOfferedAddr *oldest_lease = NULL;
+	struct dyn_lease *oldest_lease = NULL;
 	leasetime_t oldest_time = time(NULL);
 	unsigned i;
 
@@ -38,7 +38,7 @@
 		continue;
 
 	for (i = 0; i < server_config.max_leases; i++) {
-		if ((j != 16 && memcmp(leases[i].lease_mac16, chaddr, 16) == 0)
+		if ((j != 16 && memcmp(leases[i].lease_mac, chaddr, 6) == 0)
 		 || (yiaddr && leases[i].lease_nip == yiaddr)
 		) {
 			memset(&leases[i], 0, sizeof(leases[i]));
@@ -48,11 +48,11 @@
 
 
 /* Add a lease into the table, clearing out any old ones */
-struct dhcpOfferedAddr* FAST_FUNC add_lease(
+struct dyn_lease* FAST_FUNC add_lease(
 		const uint8_t *chaddr, uint32_t yiaddr,
 		leasetime_t leasetime, uint8_t *hostname)
 {
-	struct dhcpOfferedAddr *oldest;
+	struct dyn_lease *oldest;
 	uint8_t hostname_length;
 
 	/* clean out any old ones */
@@ -75,7 +75,7 @@
 				hostname++;
 			}
 		}
-		memcpy(oldest->lease_mac16, chaddr, 16);
+		memcpy(oldest->lease_mac, chaddr, 6);
 		oldest->lease_nip = yiaddr;
 		oldest->expires = time(NULL) + leasetime;
 	}
@@ -85,19 +85,19 @@
 
 
 /* True if a lease has expired */
-int FAST_FUNC lease_expired(struct dhcpOfferedAddr *lease)
+int FAST_FUNC lease_expired(struct dyn_lease *lease)
 {
 	return (lease->expires < (leasetime_t) time(NULL));
 }
 
 
 /* Find the first lease that matches chaddr, NULL if no match */
-struct dhcpOfferedAddr* FAST_FUNC find_lease_by_chaddr(const uint8_t *chaddr)
+struct dyn_lease* FAST_FUNC find_lease_by_chaddr(const uint8_t *chaddr)
 {
 	unsigned i;
 
 	for (i = 0; i < server_config.max_leases; i++)
-		if (!memcmp(leases[i].lease_mac16, chaddr, 16))
+		if (memcmp(leases[i].lease_mac, chaddr, 6) == 0)
 			return &(leases[i]);
 
 	return NULL;
@@ -105,7 +105,7 @@
 
 
 /* Find the first lease that matches yiaddr, NULL is no match */
-struct dhcpOfferedAddr* FAST_FUNC find_lease_by_yiaddr(uint32_t yiaddr)
+struct dyn_lease* FAST_FUNC find_lease_by_yiaddr(uint32_t yiaddr)
 {
 	unsigned i;
 
@@ -146,12 +146,12 @@
 uint32_t FAST_FUNC find_free_or_expired_address(const uint8_t *chaddr)
 {
 	uint32_t addr;
-	struct dhcpOfferedAddr *oldest_lease = NULL;
+	struct dyn_lease *oldest_lease = NULL;
 
 	addr = server_config.start_ip; /* addr is in host order here */
 	for (; addr <= server_config.end_ip; addr++) {
 		uint32_t net_addr;
-		struct dhcpOfferedAddr *lease;
+		struct dyn_lease *lease;
 
 		/* ie, 192.168.55.0 */
 		if ((addr & 0xff) == 0)
diff --git a/networking/udhcp/options.c b/networking/udhcp/options.c
index 7b80e6b..b86b313 100644
--- a/networking/udhcp/options.c
+++ b/networking/udhcp/options.c
@@ -120,7 +120,7 @@
 
 
 /* get an option with bounds checking (warning, result is not aligned). */
-uint8_t* FAST_FUNC get_option(struct dhcpMessage *packet, int code)
+uint8_t* FAST_FUNC get_option(struct dhcp_packet *packet, int code)
 {
 	uint8_t *optionptr;
 	int len;
@@ -159,15 +159,21 @@
 				rem = sizeof(packet->sname);
 				continue;
 			}
-			return NULL;
+			break;
 		}
 		len = 2 + optionptr[OPT_LEN];
 		rem -= len;
 		if (rem < 0)
 			continue; /* complain and return NULL */
 
-		if (optionptr[OPT_CODE] == code)
+		if (optionptr[OPT_CODE] == code) {
+#if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 2
+			char buf[256 * 2 + 2];
+			*bin2hex(buf, (void*) (optionptr + OPT_DATA), optionptr[OPT_LEN]) = '\0';
+			log2("Option 0x%02x found: %s", code, buf);
+#endif
 			return optionptr + OPT_DATA;
+		}
 
 		if (optionptr[OPT_CODE] == DHCP_OPTION_OVERLOAD) {
 			overload |= optionptr[OPT_DATA];
@@ -175,6 +181,9 @@
 		}
 		optionptr += len;
 	}
+
+	/* log3 because udhcpc uses it a lot - very noisy */
+	log3("Option 0x%02x not found", code);
 	return NULL;
 }
 
diff --git a/networking/udhcp/options.h b/networking/udhcp/options.h
index 23370da..8c80485 100644
--- a/networking/udhcp/options.h
+++ b/networking/udhcp/options.h
@@ -100,7 +100,7 @@
 extern const char dhcp_option_strings[];
 extern const uint8_t dhcp_option_lengths[];
 
-uint8_t *get_option(struct dhcpMessage *packet, int code) FAST_FUNC;
+uint8_t *get_option(struct dhcp_packet *packet, int code) FAST_FUNC;
 int end_option(uint8_t *optionptr) FAST_FUNC;
 int add_option_string(uint8_t *optionptr, uint8_t *string) FAST_FUNC;
 int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data) FAST_FUNC;
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 2cd5f61..911bd3b 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -19,9 +19,9 @@
 #include "dhcpd.h"
 #include "options.h"
 
-void FAST_FUNC udhcp_init_header(struct dhcpMessage *packet, char type)
+void FAST_FUNC udhcp_init_header(struct dhcp_packet *packet, char type)
 {
-	memset(packet, 0, sizeof(struct dhcpMessage));
+	memset(packet, 0, sizeof(struct dhcp_packet));
 	packet->op = BOOTREQUEST; /* if client to a server */
 	switch (type) {
 	case DHCPOFFER:
@@ -37,7 +37,7 @@
 }
 
 #if defined CONFIG_UDHCP_DEBUG && CONFIG_UDHCP_DEBUG >= 1
-void FAST_FUNC udhcp_dump_packet(struct dhcpMessage *packet)
+void FAST_FUNC udhcp_dump_packet(struct dhcp_packet *packet)
 {
 	char buf[sizeof(packet->chaddr)*2 + 1];
 
@@ -84,7 +84,7 @@
 #endif
 
 /* Read a packet from socket fd, return -1 on read error, -2 on packet error */
-int FAST_FUNC udhcp_recv_kernel_packet(struct dhcpMessage *packet, int fd)
+int FAST_FUNC udhcp_recv_kernel_packet(struct dhcp_packet *packet, int fd)
 {
 	int bytes;
 	unsigned char *vendor;
@@ -165,20 +165,20 @@
 }
 
 /* Construct a ip/udp header for a packet, send packet */
-int FAST_FUNC udhcp_send_raw_packet(struct dhcpMessage *dhcp_pkt,
+int FAST_FUNC udhcp_send_raw_packet(struct dhcp_packet *dhcp_pkt,
 		uint32_t source_ip, int source_port,
 		uint32_t dest_ip, int dest_port, const uint8_t *dest_arp,
 		int ifindex)
 {
 	struct sockaddr_ll dest;
-	struct udp_dhcp_packet packet;
+	struct ip_udp_dhcp_packet packet;
 	int fd;
 	int result = -1;
 	const char *msg;
 
 	enum {
-		IP_UPD_DHCP_SIZE = sizeof(struct udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
-		UPD_DHCP_SIZE    = IP_UPD_DHCP_SIZE - offsetof(struct udp_dhcp_packet, udp),
+		IP_UPD_DHCP_SIZE = sizeof(struct ip_udp_dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
+		UPD_DHCP_SIZE    = IP_UPD_DHCP_SIZE - offsetof(struct ip_udp_dhcp_packet, udp),
 	};
 
 	fd = socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP));
@@ -236,7 +236,7 @@
 }
 
 /* Let the kernel do all the work for packet generation */
-int FAST_FUNC udhcp_send_kernel_packet(struct dhcpMessage *dhcp_pkt,
+int FAST_FUNC udhcp_send_kernel_packet(struct dhcp_packet *dhcp_pkt,
 		uint32_t source_ip, int source_port,
 		uint32_t dest_ip, int dest_port)
 {
@@ -246,7 +246,7 @@
 	const char *msg;
 
 	enum {
-		DHCP_SIZE = sizeof(struct dhcpMessage) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
+		DHCP_SIZE = sizeof(struct dhcp_packet) - CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS,
 	};
 
 	fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
diff --git a/networking/udhcp/script.c b/networking/udhcp/script.c
index 22780d8..794e3ca 100644
--- a/networking/udhcp/script.c
+++ b/networking/udhcp/script.c
@@ -129,7 +129,7 @@
 
 
 /* put all the parameters into an environment */
-static char **fill_envp(struct dhcpMessage *packet)
+static char **fill_envp(struct dhcp_packet *packet)
 {
 	int num_options = 0;
 	int i;
@@ -210,7 +210,7 @@
 
 
 /* Call a script with a par file and env vars */
-void FAST_FUNC udhcp_run_script(struct dhcpMessage *packet, const char *name)
+void FAST_FUNC udhcp_run_script(struct dhcp_packet *packet, const char *name)
 {
 	char **envp, **curr;
 	char *argv[3];
diff --git a/networking/udhcp/serverpacket.c b/networking/udhcp/serverpacket.c
index 831165d..209d3c8 100644
--- a/networking/udhcp/serverpacket.c
+++ b/networking/udhcp/serverpacket.c
@@ -27,7 +27,7 @@
 
 
 /* send a packet to gateway_nip using the kernel ip stack */
-static int send_packet_to_relay(struct dhcpMessage *dhcp_pkt)
+static int send_packet_to_relay(struct dhcp_packet *dhcp_pkt)
 {
 	log1("Forwarding packet to relay");
 
@@ -38,7 +38,7 @@
 
 
 /* send a packet to a specific mac address and ip address by creating our own ip packet */
-static int send_packet_to_client(struct dhcpMessage *dhcp_pkt, int force_broadcast)
+static int send_packet_to_client(struct dhcp_packet *dhcp_pkt, int force_broadcast)
 {
 	const uint8_t *chaddr;
 	uint32_t ciaddr;
@@ -76,7 +76,7 @@
 
 
 /* send a dhcp packet, if force broadcast is set, the packet will be broadcast to the client */
-static int send_packet(struct dhcpMessage *dhcp_pkt, int force_broadcast)
+static int send_packet(struct dhcp_packet *dhcp_pkt, int force_broadcast)
 {
 	if (dhcp_pkt->gateway_nip)
 		return send_packet_to_relay(dhcp_pkt);
@@ -84,11 +84,11 @@
 }
 
 
-static void init_packet(struct dhcpMessage *packet, struct dhcpMessage *oldpacket, char type)
+static void init_packet(struct dhcp_packet *packet, struct dhcp_packet *oldpacket, char type)
 {
 	udhcp_init_header(packet, type);
 	packet->xid = oldpacket->xid;
-	memcpy(packet->chaddr, oldpacket->chaddr, 16);
+	memcpy(packet->chaddr, oldpacket->chaddr, sizeof(oldpacket->chaddr));
 	packet->flags = oldpacket->flags;
 	packet->gateway_nip = oldpacket->gateway_nip;
 	packet->ciaddr = oldpacket->ciaddr;
@@ -97,7 +97,7 @@
 
 
 /* add in the bootp options */
-static void add_bootp_options(struct dhcpMessage *packet)
+static void add_bootp_options(struct dhcp_packet *packet)
 {
 	packet->siaddr_nip = server_config.siaddr_nip;
 	if (server_config.sname)
@@ -108,9 +108,9 @@
 
 
 /* send a DHCP OFFER to a DHCP DISCOVER */
-int FAST_FUNC send_offer(struct dhcpMessage *oldpacket)
+int FAST_FUNC send_offer(struct dhcp_packet *oldpacket)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	uint32_t req_align;
 	uint32_t lease_time_aligned = server_config.lease;
 	uint32_t static_lease_ip;
@@ -124,7 +124,7 @@
 
 	/* ADDME: if static, short circuit */
 	if (!static_lease_ip) {
-		struct dhcpOfferedAddr *lease;
+		struct dyn_lease *lease;
 
 		lease = find_lease_by_chaddr(oldpacket->chaddr);
 		/* The client is in our lease/offered table */
@@ -195,9 +195,9 @@
 }
 
 
-int FAST_FUNC send_NAK(struct dhcpMessage *oldpacket)
+int FAST_FUNC send_NAK(struct dhcp_packet *oldpacket)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 
 	init_packet(&packet, oldpacket, DHCPNAK);
 
@@ -206,9 +206,9 @@
 }
 
 
-int FAST_FUNC send_ACK(struct dhcpMessage *oldpacket, uint32_t yiaddr)
+int FAST_FUNC send_ACK(struct dhcp_packet *oldpacket, uint32_t yiaddr)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	struct option_set *curr;
 	uint8_t *lease_time;
 	uint32_t lease_time_aligned = server_config.lease;
@@ -256,9 +256,9 @@
 }
 
 
-int FAST_FUNC send_inform(struct dhcpMessage *oldpacket)
+int FAST_FUNC send_inform(struct dhcp_packet *oldpacket)
 {
-	struct dhcpMessage packet;
+	struct dhcp_packet packet;
 	struct option_set *curr;
 
 	init_packet(&packet, oldpacket, DHCPACK);
