Pretty sure this is a botched firmware upgrade for your modem. rfc 6842 has this: If the 'client identifier' option is present in a message received from a client, the server MUST return the 'client identifier' option, unaltered, in its response message.
But android and iphone do not care, so we can't care either. Please try this diff --git engine.c engine.c index a2a5fdc859e..95121340c6c 100644 --- engine.c +++ engine.c @@ -1100,19 +1100,19 @@ parse_dhcp(struct dhcpleased_iface *iface, struct imsg_dhcp *dhcp) rem -= dho_len; break; case DHO_DHCP_CLIENT_IDENTIFIER: - /* the server is supposed to echo this back to us */ + /* + * The server is supposed to echo this back to us + * (RFC6841), but of course they don't. + */ #ifndef SMALL if (iface_conf != NULL && iface_conf->c_id_len > 0) { if (dho_len != iface_conf->c_id[1]) { log_warnx("wrong " "DHO_DHCP_CLIENT_IDENTIFIER"); - return; - } - if (memcmp(p, &iface_conf->c_id[2], dho_len) != - 0) { + } else if (memcmp(p, &iface_conf->c_id[2], + dho_len) != 0) { log_warnx("wrong " "DHO_DHCP_CLIENT_IDENTIFIER"); - return; } } else #endif /* SMALL */ @@ -1122,13 +1122,11 @@ parse_dhcp(struct dhcpleased_iface *iface, struct imsg_dhcp *dhcp) if (*p != HTYPE_ETHER) { log_warnx("DHO_DHCP_CLIENT_IDENTIFIER: " "wrong type"); - return; } if (memcmp(p + 1, &iface->hw_address, sizeof(iface->hw_address)) != 0) { log_warnx("wrong " "DHO_DHCP_CLIENT_IDENTIFIER"); - return; } } p += dho_len; -- In my defence, I have been left unsupervised.