+ } else if (iface->filter_class && otype == DHCPV6_OPT_USER_CLASS) {
+ uint8_t *c = odata, *cend = &odata[olen];
+ for (; &c[2] <= cend && &c[2 + (c[0] << 8) + c[1]] <= cend; c = &c[2 + (c[0] << 8) + c[1]]) {
+ size_t elen = strlen(iface->filter_class);
+ if (((((size_t)c[0]) << 8) | c[1]) == elen && !memcmp(&c[2], iface->filter_class, elen))
+ return; // Ignore from homenet
+ }
+ } else if (otype == DHCPV6_OPT_IA_PD) {
+#ifdef EXT_CER_ID
+ iov[IOV_CERID].iov_len = sizeof(cerid);
+
+ if (IN6_IS_ADDR_UNSPECIFIED(&cerid.addr)) {
+ struct odhcpd_ipaddr addrs[32];
+ ssize_t len = odhcpd_get_interface_addresses(0, addrs,
+ sizeof(addrs) / sizeof(*addrs));
+
+ for (ssize_t i = 0; i < len; ++i)
+ if (IN6_IS_ADDR_UNSPECIFIED(&cerid.addr)
+ || memcmp(&addrs[i].addr, &cerid.addr, sizeof(cerid.addr)) < 0)
+ cerid.addr = addrs[i].addr;
+ }
+#endif