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)
int setup_dhcpv4_interface(struct interface *iface, bool enable)
{
if (iface->dhcpv4_event.uloop.fd > 0) {
+ uloop_fd_delete(&iface->dhcpv4_event.uloop);
close(iface->dhcpv4_event.uloop.fd);
iface->dhcpv4_event.uloop.fd = -1;
}
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &val, sizeof(val));
setsockopt(sock, IPPROTO_IP, IP_PKTINFO, &val, sizeof(val));
- val = IPTOS_CLASS_CS6;
+ val = IPTOS_PREC_INTERNETCONTROL;
setsockopt(sock, IPPROTO_IP, IP_TOS, &val, sizeof(val));
val = IP_PMTUDISC_DONT;
} 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
}
}