]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/dhcpv6.c
Add initial support for CER-ID
[odhcp6c.git] / src / dhcpv6.c
index bf62b29767233e4dd77b828fa345c26796085b74..afea77f2034950567c100cd95b3e977a91e10e46 100644 (file)
@@ -175,6 +175,9 @@ int init_dhcpv6(const char *ifname, unsigned int options, int sol_timeout)
                        htons(DHCPV6_OPT_INF_MAX_RT),
 #ifdef EXT_PREFIX_CLASS
                        htons(DHCPV6_OPT_PREFIX_CLASS),
+#endif
+#ifdef EXT_CER_ID
+                       htons(DHCPV6_OPT_CER_ID),
 #endif
                };
                odhcp6c_add_state(STATE_ORO, oro, sizeof(oro));
@@ -248,7 +251,7 @@ static void dhcpv6_send(enum dhcpv6_msg type, uint8_t trid[3], uint32_t ecs)
        void *srv_id = odhcp6c_get_state(STATE_SERVER_ID, &srv_id_len);
 
        // Build IA_PDs
-       size_t ia_pd_entries, ia_pd_len = 0;
+       size_t ia_pd_entries = 0, ia_pd_len = 0;
        uint8_t *ia_pd;
 
        if (type == DHCPV6_MSG_SOLICIT) {
@@ -1010,7 +1013,15 @@ static int dhcpv6_handle_reply(enum dhcpv6_msg orig, _unused const int rc,
                        if (inf_max_rt >= DHCPV6_INF_MAX_RT_MIN &&
                                        inf_max_rt <= DHCPV6_INF_MAX_RT_MAX)
                                dhcpv6_retx[DHCPV6_MSG_INFO_REQ].max_timeo = inf_max_rt;
-               }else if (otype != DHCPV6_OPT_CLIENTID &&
+#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));
+#endif
+               } else if (otype != DHCPV6_OPT_CLIENTID &&
                                otype != DHCPV6_OPT_SERVERID) {
                        odhcp6c_add_state(STATE_CUSTOM_OPTS,
                                        &odata[-4], olen + 4);