]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/dhcpv6.c
dhcpv6: remove dead code
[odhcp6c.git] / src / dhcpv6.c
index bc403b9faaae6c65015182ee1b482c7047ff99b3..cc286271519942bac3595d1edb11adf3cc27f02c 100644 (file)
@@ -216,10 +216,19 @@ enum {
        IOV_TOTAL
 };
 
-void dhcpv6_set_ia_mode(enum odhcp6c_ia_mode na, enum odhcp6c_ia_mode pd)
+int dhcpv6_set_ia_mode(enum odhcp6c_ia_mode na, enum odhcp6c_ia_mode pd)
 {
+       int mode = DHCPV6_UNKNOWN;
+
        na_mode = na;
        pd_mode = pd;
+
+       if (na_mode == IA_MODE_NONE && pd_mode == IA_MODE_NONE)
+               mode = DHCPV6_STATELESS;
+       else if (na_mode == IA_MODE_FORCE || pd_mode == IA_MODE_FORCE)
+               mode = DHCPV6_STATEFUL;
+
+       return mode;
 }
 
 static void dhcpv6_send(enum dhcpv6_msg type, uint8_t trid[3], uint32_t ecs)
@@ -547,10 +556,15 @@ int dhcpv6_request(enum dhcpv6_msg type)
                        round_end = timeout * 1000 + start;
 
                // Built and send package
-               if (type != DHCPV6_MSG_UNKNOWN) {
-                       if (type != DHCPV6_MSG_SOLICIT)
-                               syslog(LOG_NOTICE, "Send %s message (elapsed %llums, rc %d)",
-                                               retx->name, (unsigned long long)elapsed, rc);
+               switch (type) {
+               case DHCPV6_MSG_UNKNOWN:
+                       break;
+               default:
+                       syslog(LOG_NOTICE, "Send %s message (elapsed %llums, rc %d)",
+                                       retx->name, (unsigned long long)elapsed, rc);
+                       // Fall through
+               case DHCPV6_MSG_SOLICIT:
+               case DHCPV6_MSG_INFO_REQ:
                        dhcpv6_send(type, trid, elapsed / 10);
                        rc++;
                }
@@ -779,18 +793,6 @@ static int dhcpv6_handle_advert(enum dhcpv6_msg orig, const int rc,
                if (otype == DHCPV6_OPT_SERVERID && olen <= 130) {
                        memcpy(cand.duid, odata, olen);
                        cand.duid_len = olen;
-               } else if (otype == DHCPV6_OPT_STATUS && olen >= 2) {
-                       int error = ((int)odata[0] << 8 | (int)odata[1]);
-
-                       switch (error) {
-                       case DHCPV6_NoPrefixAvail:
-                               // Status code on global level
-                               cand.preference -= 2000;
-                               break;
-
-                       default :
-                               break;
-                       }
                } else if (otype == DHCPV6_OPT_PREF && olen >= 1 &&
                                cand.preference >= 0) {
                        cand.preference = pref = odata[0];
@@ -934,6 +936,7 @@ static int dhcpv6_handle_reply(enum dhcpv6_msg orig, _unused const int rc,
                odhcp6c_clear_state(STATE_S46_MAPE);
                odhcp6c_clear_state(STATE_S46_LW);
                odhcp6c_clear_state(STATE_PASSTHRU);
+               odhcp6c_clear_state(STATE_CUSTOM_OPTS);
 
                // Parse and find all matching IAs
                dhcpv6_for_each_option(opt, end, otype, olen, odata) {