summaryrefslogtreecommitdiffstats
path: root/package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch')
-rw-r--r--package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch143
1 files changed, 0 insertions, 143 deletions
diff --git a/package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch b/package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch
deleted file mode 100644
index 2f0eadb160..0000000000
--- a/package/utils/busybox/patches/244-udhcpc_add_6rd_option.patch
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/networking/udhcp/common.c
-+++ b/networking/udhcp/common.c
-@@ -60,6 +60,8 @@ const struct dhcp_optflag dhcp_optflags[
- { OPTION_U8 , 0x85 }, /* DHCP_VLAN_PRIORITY */
- #endif
- { OPTION_STATIC_ROUTES , 0xf9 }, /* DHCP_MS_STATIC_ROUTES */
-+ { OPTION_6RD , 0xd4 }, /* DHCP_6RD (RFC) */
-+ { OPTION_6RD , 0x96 }, /* DHCP_6RD (Comcast) */
- { OPTION_STRING , 0xfc }, /* DHCP_WPAD */
-
- /* Options below have no match in dhcp_option_strings[],
-@@ -127,6 +129,8 @@ const char dhcp_option_strings[] ALIGN1
- "vlanpriority" "\0"/* DHCP_VLAN_PRIORITY */
- #endif
- "msstaticroutes""\0"/* DHCP_MS_STATIC_ROUTES */
-+ "ip6rd" "\0" /* DHCP_6RD (RFC) */
-+ "ip6rd" "\0" /* DHCP_6RD (Comcast) */
- "wpad" "\0" /* DHCP_WPAD */
- ;
-
-@@ -155,6 +159,7 @@ const uint8_t dhcp_option_lengths[] ALIG
- [OPTION_S32] = 4,
- /* Just like OPTION_STRING, we use minimum length here */
- [OPTION_STATIC_ROUTES] = 5,
-+ [OPTION_6RD] = 22,
- };
-
-
---- a/networking/udhcp/common.h
-+++ b/networking/udhcp/common.h
-@@ -91,6 +91,7 @@ enum {
- OPTION_S32,
- OPTION_BIN,
- OPTION_STATIC_ROUTES,
-+ OPTION_6RD,
- #if ENABLE_FEATURE_UDHCP_RFC3397
- OPTION_DNS_STRING, /* RFC1035 compressed domain name list */
- OPTION_SIP_SERVERS,
---- a/networking/udhcp/dhcpc.c
-+++ b/networking/udhcp/dhcpc.c
-@@ -100,6 +100,7 @@ static const uint8_t len_of_option_as_st
- [OPTION_IP ] = sizeof("255.255.255.255 "),
- [OPTION_IP_PAIR ] = sizeof("255.255.255.255 ") * 2,
- [OPTION_STATIC_ROUTES ] = sizeof("255.255.255.255/32 255.255.255.255 "),
-+ [OPTION_6RD ] = sizeof("32 128 FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 255.255.255.255 "),
- [OPTION_STRING ] = 1,
- [OPTION_STRING_HOST ] = 1,
- #if ENABLE_FEATURE_UDHCP_RFC3397
-@@ -124,6 +125,23 @@ static int sprint_nip(char *dest, const
- return sprintf(dest, "%s%u.%u.%u.%u", pre, ip[0], ip[1], ip[2], ip[3]);
- }
-
-+static int sprint_nip6(char *dest, const char *pre, const uint8_t *ip)
-+{
-+ int len = 0;
-+ int off;
-+ uint16_t word;
-+
-+ len += sprintf(dest, "%s", pre);
-+
-+ for (off = 0; off < 16; off += 2)
-+ {
-+ move_from_unaligned16(word, &ip[off]);
-+ len += sprintf(dest+len, "%s%04X", off ? ":" : "", htons(word));
-+ }
-+
-+ return len;
-+}
-+
- /* really simple implementation, just count the bits */
- static int mton(uint32_t mask)
- {
-@@ -292,6 +310,70 @@ static NOINLINE char *xmalloc_optname_op
- }
-
- return ret;
-+ }
-+ case OPTION_6RD: {
-+ /* Option binary format:
-+ * 0 1 2 3
-+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+ * | OPTION_6RD | option-length | IPv4MaskLen | 6rdPrefixLen |
-+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+ * | |
-+ * | 6rdPrefix |
-+ * | (16 octets) |
-+ * | |
-+ * | |
-+ * | |
-+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+ * | 6rdBRIPv4Address(es) |
-+ * . .
-+ * . .
-+ * . .
-+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-+ *
-+ * We convert it to a string "IPv4MaskLen 6rdPrefixLen 6rdPrefix 6rdBRIPv4Address"
-+ */
-+
-+ /* Sanity check: ensure that our length is at least 22 bytes, that
-+ * IPv4MaskLen is <= 32, 6rdPrefixLen <= 128 and that the sum of
-+ * (32 - IPv4MaskLen) + 6rdPrefixLen is less than or equal to 128.
-+ * If any of these requirements is not fulfilled, return with empty
-+ * value.
-+ */
-+ if ((len >= 22) && (*option <= 32) && (*(option+1) <= 128) &&
-+ (((32 - *option) + *(option+1)) <= 128))
-+ {
-+ /* IPv4MaskLen */
-+ dest += sprintf(dest, "%u ", *option++);
-+ len--;
-+
-+ /* 6rdPrefixLen */
-+ dest += sprintf(dest, "%u ", *option++);
-+ len--;
-+
-+ /* 6rdPrefix */
-+ dest += sprint_nip6(dest, "", option);
-+ option += 16;
-+ len -= 16;
-+
-+ /* 6rdBRIPv4Addresses */
-+ while (len >= 4)
-+ {
-+ dest += sprint_nip(dest, " ", option);
-+ option += 4;
-+ len -= 4;
-+
-+ /* the code to determine the option size fails to work with
-+ * lengths that are not a multiple of the minimum length,
-+ * adding all advertised 6rdBRIPv4Addresses here would
-+ * overflow the destination buffer, therefore skip the rest
-+ * for now
-+ */
-+ break;
-+ }
-+ }
-+
-+ return ret;
- }
- #if ENABLE_FEATURE_UDHCP_RFC3397
- case OPTION_DNS_STRING: