summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSteven Barth <steven@midlink.org>2013-10-17 15:38:24 +0200
committerSteven Barth <steven@midlink.org>2013-10-17 15:38:24 +0200
commiteb7edc757c4bf258794c8ec7c721c2007c47877e (patch)
treee027a564211b2d9e9fd182248574e1fc12368f99
parent0bce3a7e90ddfde046792248684b298530224dcd (diff)
ignore hnet internal routers
Signed-off-by: Markus Stenberg <markus.stenberg@iki.fi>
-rw-r--r--src/dhcpv4.c6
-rw-r--r--src/dhcpv4.h1
2 files changed, 7 insertions, 0 deletions
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,
};