> 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; >
Thanks a lot, this seems to do the trick. I've reverted from static configuration to DHCP. I'll confirm in a few days if that holds. but I've just ran dhcpleased in the foreground for a fair few times now without issues. Best, Thomas