From 03b07d4ebf19c1946e0f458353d021ed43807c69 Mon Sep 17 00:00:00 2001 From: Liangbin Lian Date: Mon, 6 Jan 2025 21:05:03 +0800 Subject: [PATCH] package/iptables: fix bcm fullcone-nat patch fix "network: add brcm fullcone support from ASUS Merlin kernel 4.19" --- .../patches/900-bcm-fullconenat.patch | 89 +++++++++++-------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/package/network/utils/iptables/patches/900-bcm-fullconenat.patch b/package/network/utils/iptables/patches/900-bcm-fullconenat.patch index 2ff8db06a2..8d88bd7892 100644 --- a/package/network/utils/iptables/patches/900-bcm-fullconenat.patch +++ b/package/network/utils/iptables/patches/900-bcm-fullconenat.patch @@ -1,14 +1,25 @@ ---- a/extensions/libipt_MASQUERADE.c -+++ b/extensions/libipt_MASQUERADE.c -@@ -11,6 +11,7 @@ - enum { - O_TO_PORTS = 0, +From b7d96a5103502f8e57f886d42b19d764d9432dbf Mon Sep 17 00:00:00 2001 +From: jjm2473 +Date: Mon, 6 Jan 2025 21:02:39 +0800 +Subject: [PATCH] bcm fullcone nat + +--- + extensions/libxt_NAT.c | 25 ++++++++++++++++++++++++- + 1 file changed, 24 insertions(+), 1 deletion(-) + +diff --git a/extensions/libxt_NAT.c b/extensions/libxt_NAT.c +index 2a63439..6a10388 100644 +--- a/extensions/libxt_NAT.c ++++ b/extensions/libxt_NAT.c +@@ -39,6 +39,7 @@ enum { + O_TO_SRC, + O_TO_PORTS, O_RANDOM, + O_MODE, O_RANDOM_FULLY, + O_PERSISTENT, }; - -@@ -23,13 +24,16 @@ static void MASQUERADE_help(void) +@@ -61,7 +62,9 @@ static void MASQUERADE_help(void) " --random\n" " Randomize source port.\n" " --random-fully\n" @@ -18,7 +29,8 @@ +" NAT mode.\n"); } - static const struct xt_option_entry MASQUERADE_opts[] = { + static void DNAT_help(void) +@@ -104,6 +107,7 @@ static const struct xt_option_entry MASQUERADE_opts[] = { {.name = "to-ports", .id = O_TO_PORTS, .type = XTTYPE_STRING}, {.name = "random", .id = O_RANDOM, .type = XTTYPE_NONE}, {.name = "random-fully", .id = O_RANDOM_FULLY, .type = XTTYPE_NONE}, @@ -26,24 +38,16 @@ XTOPT_TABLEEND, }; -@@ -90,6 +94,8 @@ static void MASQUERADE_parse(struct xt_o - else - portok = 0; - -+ mr->range[0].min_ip = 0; -+ - xtables_option_parse(cb); - switch (cb->entry->id) { - case O_TO_PORTS: -@@ -104,6 +110,15 @@ static void MASQUERADE_parse(struct xt_o +@@ -280,6 +284,16 @@ static void __NAT_parse(struct xt_option_call *cb, __u16 proto, case O_RANDOM_FULLY: - mr->range[0].flags |= NF_NAT_RANGE_PROTO_RANDOM_FULLY; + range->flags |= NF_NAT_RANGE_PROTO_RANDOM_FULLY; break; + case O_MODE: ++ range->min_addr.ip = 0; + if (strcasecmp(cb->arg, "fullcone") == 0) -+ mr->range[0].min_ip = 1; ++ range->min_addr.ip = 1; + else if (strcasecmp(cb->arg, "symmetric") == 0) -+ mr->range[0].min_ip = 0; ++ range->min_addr.ip = 0; + else + xtables_error(PARAMETER_PROBLEM, + "Unknown mode %s", cb->arg); @@ -51,23 +55,36 @@ } } -@@ -126,6 +141,9 @@ MASQUERADE_print(const void *ip, const s - - if (r->flags & NF_NAT_RANGE_PROTO_RANDOM_FULLY) - printf(" random-fully"); -+ -+ if (r->min_ip == 1) -+ printf(" mode: fullcone"); +@@ -306,6 +320,9 @@ static void NAT_parse(struct xt_option_call *cb) + case O_RANDOM_FULLY: + mr->range->flags |= range.flags; + break; ++ case O_MODE: ++ mr->range->min_ip = range.min_addr.ip; ++ break; + } } - static void -@@ -145,6 +163,9 @@ MASQUERADE_save(const void *ip, const st +@@ -400,6 +417,9 @@ static void __NAT_print(const struct nf_nat_range2 *r, int family, + { + char *range_str = sprint_range(r, family); - if (r->flags & NF_NAT_RANGE_PROTO_RANDOM_FULLY) - printf(" --random-fully"); ++ if (r->min_addr.ip == 1) ++ printf(" %smode fullcone", flag_pfx); + -+ if (r->min_ip == 1) -+ printf(" --mode fullcone"); - } + if (strlen(range_str)) { + if (range_str[0] == ':' && skip_colon) + range_str++; +@@ -425,6 +445,9 @@ __NAT_xlate(struct xt_xlate *xl, const struct nf_nat_range2 *r, + return 0; - static int MASQUERADE_xlate(struct xt_xlate *xl, + xt_xlate_add(xl, "%s", tgt); ++ if (strcasecmp(tgt, "masquerade") == 0 && r->min_addr.ip == 1) { ++ xt_xlate_add(xl, " fullcone"); ++ } + if (strlen(range_str)) + xt_xlate_add(xl, " to %s", range_str); + if (r->flags & NF_NAT_RANGE_PROTO_RANDOM) { +-- +2.46.0 +