kernel: bump 4.19 to 4.19.101
[openwrt/staging/rmilecki.git] / target / linux / generic / pending-4.19 / 640-netfilter-nf_flow_table-add-hardware-offload-support.patch
index 2e83ff391f79efd8eacfa6e4978cc70e1df3f7be..f0946e8dd21e3355765e111332530ee20cd66b5f 100644 (file)
@@ -156,7 +156,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o
 --- a/net/netfilter/nf_flow_table_core.c
 +++ b/net/netfilter/nf_flow_table_core.c
-@@ -216,10 +216,16 @@ int flow_offload_add(struct nf_flowtable
+@@ -228,10 +228,16 @@ int flow_offload_add(struct nf_flowtable
  }
  EXPORT_SYMBOL_GPL(flow_offload_add);
  
@@ -173,7 +173,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  
        rhashtable_remove_fast(&flow_table->rhashtable,
                               &flow->tuplehash[FLOW_OFFLOAD_DIR_ORIGINAL].node,
-@@ -234,6 +240,9 @@ static void flow_offload_del(struct nf_f
+@@ -246,6 +252,9 @@ static void flow_offload_del(struct nf_f
        if (!(flow->flags & FLOW_OFFLOAD_TEARDOWN))
                flow_offload_fixup_ct_state(e->ct);
  
@@ -183,7 +183,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
        flow_offload_free(flow);
  }
  
-@@ -347,6 +356,9 @@ static int nf_flow_offload_gc_step(struc
+@@ -359,6 +368,9 @@ static int nf_flow_offload_gc_step(struc
                if (!teardown)
                        nf_ct_offload_timeout(flow);
  
@@ -193,7 +193,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
                if (nf_flow_has_expired(flow) || teardown)
                        flow_offload_del(flow_table, flow);
        }
-@@ -482,10 +494,43 @@ int nf_flow_dnat_port(const struct flow_
+@@ -494,10 +506,43 @@ int nf_flow_dnat_port(const struct flow_
  }
  EXPORT_SYMBOL_GPL(nf_flow_dnat_port);
  
@@ -237,7 +237,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
        INIT_DEFERRABLE_WORK(&flowtable->gc_work, nf_flow_offload_work_gc);
  
        err = rhashtable_init(&flowtable->rhashtable,
-@@ -523,6 +568,8 @@ static void nf_flow_table_iterate_cleanu
+@@ -538,6 +583,8 @@ static void nf_flow_table_iterate_cleanu
  {
        nf_flow_table_iterate(flowtable, nf_flow_table_do_cleanup, dev);
        flush_delayed_work(&flowtable->gc_work);
@@ -246,7 +246,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  }
  
  void nf_flow_table_cleanup(struct net *net, struct net_device *dev)
-@@ -536,6 +583,26 @@ void nf_flow_table_cleanup(struct net *n
+@@ -551,6 +598,26 @@ void nf_flow_table_cleanup(struct net *n
  }
  EXPORT_SYMBOL_GPL(nf_flow_table_cleanup);
  
@@ -273,7 +273,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
  void nf_flow_table_free(struct nf_flowtable *flow_table)
  {
        mutex_lock(&flowtable_lock);
-@@ -545,9 +612,58 @@ void nf_flow_table_free(struct nf_flowta
+@@ -560,9 +627,58 @@ void nf_flow_table_free(struct nf_flowta
        nf_flow_table_iterate(flow_table, nf_flow_table_do_cleanup, NULL);
        WARN_ON(!nf_flow_offload_gc_step(flow_table));
        rhashtable_destroy(&flow_table->rhashtable);
@@ -506,7 +506,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
 +MODULE_ALIAS("nf-flow-table-hw");
 --- a/net/netfilter/nf_tables_api.c
 +++ b/net/netfilter/nf_tables_api.c
-@@ -5399,6 +5399,13 @@ static int nf_tables_flowtable_parse_hoo
+@@ -5503,6 +5503,13 @@ static int nf_tables_flowtable_parse_hoo
        if (err < 0)
                return err;
  
@@ -520,7 +520,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
        ops = kcalloc(n, sizeof(struct nf_hook_ops), GFP_KERNEL);
        if (!ops)
                return -ENOMEM;
-@@ -5530,10 +5537,19 @@ static int nf_tables_newflowtable(struct
+@@ -5634,10 +5641,19 @@ static int nf_tables_newflowtable(struct
        }
  
        flowtable->data.type = type;
@@ -540,7 +540,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
        err = nf_tables_flowtable_parse_hook(&ctx, nla[NFTA_FLOWTABLE_HOOK],
                                             flowtable);
        if (err < 0)
-@@ -5659,7 +5675,8 @@ static int nf_tables_fill_flowtable_info
+@@ -5763,7 +5779,8 @@ static int nf_tables_fill_flowtable_info
            nla_put_string(skb, NFTA_FLOWTABLE_NAME, flowtable->name) ||
            nla_put_be32(skb, NFTA_FLOWTABLE_USE, htonl(flowtable->use)) ||
            nla_put_be64(skb, NFTA_FLOWTABLE_HANDLE, cpu_to_be64(flowtable->handle),
@@ -552,13 +552,13 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
        nest = nla_nest_start(skb, NFTA_FLOWTABLE_HOOK);
 --- a/net/netfilter/nft_flow_offload.c
 +++ b/net/netfilter/nft_flow_offload.c
-@@ -124,6 +124,9 @@ static void nft_flow_offload_eval(const
+@@ -126,6 +126,9 @@ static void nft_flow_offload_eval(const
        if (ret < 0)
                goto err_flow_add;
  
 +      if (flowtable->flags & NF_FLOWTABLE_F_HW)
 +              nf_flow_offload_hw_add(nft_net(pkt), flow, ct);
 +
+       dst_release(route.tuple[!dir].dst);
        return;
  
- err_flow_add: