mt7622: fix pppoe hw flow offload

This commit is contained in:
lean 2022-04-12 12:59:02 +08:00
parent a1f0402204
commit d39dbc33c3
2 changed files with 15 additions and 16 deletions

View File

@ -98,7 +98,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
--- /dev/null --- /dev/null
+++ b/net/netfilter/xt_FLOWOFFLOAD.c +++ b/net/netfilter/xt_FLOWOFFLOAD.c
@@ -0,0 +1,658 @@ @@ -0,0 +1,657 @@
+/* +/*
+ * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name> + * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
+ * + *
@ -278,8 +278,6 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ hook->used = true; + hook->used = true;
+ } + }
+ spin_unlock_bh(&hooks_lock); + spin_unlock_bh(&hooks_lock);
+
+ cond_resched();
+} +}
+ +
+static void +static void
@ -359,7 +357,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ if ((dev->flags & IFF_LOOPBACK) || + if ((dev->flags & IFF_LOOPBACK) ||
+ dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN || + dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN ||
+ !is_valid_ether_addr(dev->dev_addr)) + !is_valid_ether_addr(dev->dev_addr))
+ return; + {printk("test %d",dev->type); return;}
+ +
+ n = dst_neigh_lookup(dst, daddr); + n = dst_neigh_lookup(dst, daddr);
+ if (!n) + if (!n)
@ -577,16 +575,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ } + }
+ +
+ table = &flowtable[!!(info->flags & XT_FLOWOFFLOAD_HW)]; + table = &flowtable[!!(info->flags & XT_FLOWOFFLOAD_HW)];
+
+ net = read_pnet(&table->ft.net);
+ if (!net)
+ write_pnet(&table->ft.net, xt_net(par));
+
+ if (flow_offload_add(&table->ft, flow) < 0) + if (flow_offload_add(&table->ft, flow) < 0)
+ goto err_flow_add; + goto err_flow_add;
+ +
+ xt_flowoffload_check_device(table, devs[0]); + xt_flowoffload_check_device(table, devs[0]);
+ xt_flowoffload_check_device(table, devs[1]); + xt_flowoffload_check_device(table, devs[1]);
+ +
+ net = read_pnet(&table->ft.net);
+ if (!net)
+ write_pnet(&table->ft.net, xt_net(par));
+
+ dst_release(route.tuple[dir].dst); + dst_release(route.tuple[dir].dst);
+ dst_release(route.tuple[!dir].dst); + dst_release(route.tuple[!dir].dst);
+ +
@ -817,4 +816,4 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ +
void nf_flow_snat_port(const struct flow_offload *flow, void nf_flow_snat_port(const struct flow_offload *flow,
struct sk_buff *skb, unsigned int thoff, struct sk_buff *skb, unsigned int thoff,
u8 protocol, enum flow_offload_tuple_dir dir); u8 protocol, enum flow_offload_tuple_dir dir);

View File

@ -327,7 +327,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+{ +{
+ if (!dev || (dev->flags & IFF_LOOPBACK) || dev->type != ARPHRD_ETHER || + if (!dev || (dev->flags & IFF_LOOPBACK) || dev->type != ARPHRD_ETHER ||
+ dev->addr_len != ETH_ALEN || !is_valid_ether_addr(dev->dev_addr)) + dev->addr_len != ETH_ALEN || !is_valid_ether_addr(dev->dev_addr))
+ return false; + return true;
+ +
+ return true; + return true;
+} +}
@ -354,10 +354,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ if (route->tuple[dir].xmit_type == FLOW_OFFLOAD_XMIT_XFRM) + if (route->tuple[dir].xmit_type == FLOW_OFFLOAD_XMIT_XFRM)
+ return; + return;
+ +
+ if ((dev->flags & IFF_LOOPBACK) || +
+ dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN || +
+ !is_valid_ether_addr(dev->dev_addr)) +
+ return; +
+ +
+ n = dst_neigh_lookup(dst, daddr); + n = dst_neigh_lookup(dst, daddr);
+ if (!n) + if (!n)
@ -806,7 +806,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+#endif /* _XT_FLOWOFFLOAD_H */ +#endif /* _XT_FLOWOFFLOAD_H */
--- a/include/net/netfilter/nf_flow_table.h --- a/include/net/netfilter/nf_flow_table.h
+++ b/include/net/netfilter/nf_flow_table.h +++ b/include/net/netfilter/nf_flow_table.h
@@ -275,6 +275,10 @@ void nf_flow_table_free(struct nf_flowta @@ -273,6 +273,10 @@ void nf_flow_table_free(struct nf_flowta
void flow_offload_teardown(struct flow_offload *flow); void flow_offload_teardown(struct flow_offload *flow);
@ -816,4 +816,4 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ +
void nf_flow_snat_port(const struct flow_offload *flow, void nf_flow_snat_port(const struct flow_offload *flow,
struct sk_buff *skb, unsigned int thoff, struct sk_buff *skb, unsigned int thoff,
u8 protocol, enum flow_offload_tuple_dir dir); u8 protocol, enum flow_offload_tuple_dir dir);