+ passthru = false;
+#ifdef EXT_CER_ID
+ } else if (otype == DHCPV6_OPT_CER_ID && olen == -4 +
+ sizeof(struct dhcpv6_cer_id)) {
+ struct dhcpv6_cer_id *cer_id = (void*)&odata[-4];
+ struct in6_addr any = IN6ADDR_ANY_INIT;
+ if (memcmp(&cer_id->addr, &any, sizeof(any)))
+ odhcp6c_add_state(STATE_CER, &cer_id->addr, sizeof(any));
+ passthru = false;
+#endif
+#ifdef EXT_S46
+ } else if (otype == DHCPV6_OPT_S46_CONT_MAPT) {
+ odhcp6c_add_state(STATE_S46_MAPT, odata, olen);
+ passthru = false;
+ } else if (otype == DHCPV6_OPT_S46_CONT_MAPE) {
+ size_t mape_len;
+ odhcp6c_get_state(STATE_S46_MAPE, &mape_len);
+ if (mape_len == 0)
+ odhcp6c_add_state(STATE_S46_MAPE, odata, olen);
+ passthru = false;
+ } else if (otype == DHCPV6_OPT_S46_CONT_LW) {
+ odhcp6c_add_state(STATE_S46_LW, odata, olen);
+ passthru = false;
+#endif
+ } else if (otype == DHCPV6_OPT_CLIENTID ||
+ otype == DHCPV6_OPT_SERVERID ||
+ otype == DHCPV6_OPT_IA_TA ||
+ otype == DHCPV6_OPT_PREF ||
+ otype == DHCPV6_OPT_UNICAST ||
+ otype == DHCPV6_OPT_FQDN) {
+ passthru = false;
+ } else {
+ odhcp6c_add_state(STATE_CUSTOM_OPTS, &odata[-4], olen + 4);