mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
mt7622: fix pppoe hw flow offload
This commit is contained in:
parent
a1f0402204
commit
d39dbc33c3
@ -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);
|
@ -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);
|
Loading…
Reference in New Issue
Block a user