]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/script.c
softwire: fix DMR parsing
[odhcp6c.git] / src / script.c
index 5ddd6c50295c41461739f3c15ce8733e2d6285ad..9325085c362c3c34a3c03e5b9ababbe866e2220d 100644 (file)
@@ -229,8 +229,6 @@ static void s46_to_env(enum odhcp6c_state state, const uint8_t *data, size_t len
 {
        const char *name = (state == STATE_S46_MAPE) ? "MAPE" :
                        (state == STATE_S46_MAPT) ? "MAPT" : "LW4O6";
-       const char *type = (state == STATE_S46_MAPE) ? "map-e" :
-                       (state == STATE_S46_MAPT) ? "map-t" : "lw4o6";
 
        char *str;
        size_t strsize;
@@ -240,6 +238,9 @@ static void s46_to_env(enum odhcp6c_state state, const uint8_t *data, size_t len
        fputc('=', fp);
 
 #ifdef EXT_S46
+       const char *type = (state == STATE_S46_MAPE) ? "map-e" :
+                       (state == STATE_S46_MAPT) ? "map-t" : "lw4o6";
+
        uint8_t *odata;
        uint16_t otype, olen;
        dhcpv6_for_each_option(data, &data[len], otype, olen, odata) {
@@ -280,6 +281,7 @@ static void s46_to_env(enum odhcp6c_state state, const uint8_t *data, size_t len
                                        fprintf(fp, "br=%s,", buf6);
                                } else if (state == STATE_S46_MAPT && otype == DHCPV6_OPT_S46_DMR &&
                                                olen >= sizeof(struct dhcpv6_s46_dmr)) {
+                                       dmr = (struct dhcpv6_s46_dmr*)odata;
                                        memset(&in6, 0, sizeof(in6));
                                        size_t prefix6len = dmr->dmr_prefix6_len;
                                        prefix6len = (prefix6len % 8 == 0) ? prefix6len / 8 : prefix6len / 8 + 1;