From eb7edc757c4bf258794c8ec7c721c2007c47877e Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 17 Oct 2013 15:38:24 +0200 Subject: [PATCH] ignore hnet internal routers Signed-off-by: Markus Stenberg --- src/dhcpv4.c | 6 ++++++ src/dhcpv4.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/dhcpv4.c b/src/dhcpv4.c index 6f15a0a..79fabe2 100644 --- a/src/dhcpv4.c +++ b/src/dhcpv4.c @@ -38,6 +38,8 @@ static struct dhcpv4_assignment* dhcpv4_lease(struct interface *iface, enum dhcpv4_msg msg, const uint8_t *mac, struct in_addr reqaddr, const char *hostname); +// Magic option for hnet internal (4B enterprise ID, 1B data-len, 1B subopt-code, 1B subopt-len) +static uint8_t hnet_internal_data[7] = {0x00, 0x00, 0x76, 0xfe, 2, 1, 0}; // Create socket and register events int init_dhcpv4(void) @@ -285,6 +287,10 @@ static void handle_dhcpv4(void *addr, void *data, size_t len, } else if (opt->type == DHCPV4_OPT_SERVERID && opt->len == 4) { if (memcmp(opt->data, &ifaddr.sin_addr, 4)) return; + } else if (opt->type == DHCPV4_OPT_VENDOR_SPECIFIC_INFORMATION && + opt->len == sizeof(hnet_internal_data)) { + if (!memcmp(opt->data, hnet_internal_data, sizeof(hnet_internal_data))) + return; // Ignoring hnet internal routers } } diff --git a/src/dhcpv4.h b/src/dhcpv4.h index 308cc53..7ee9fa9 100644 --- a/src/dhcpv4.h +++ b/src/dhcpv4.h @@ -50,6 +50,7 @@ enum dhcpv4_opt { DHCPV4_OPT_IPADDRESS = 50, DHCPV4_OPT_HOSTNAME = 10, DHCPV4_OPT_REQUEST = 17, + DHCPV4_OPT_VENDOR_SPECIFIC_INFORMATION = 125, DHCPV4_OPT_END = 255, }; -- 2.25.1