[][MAC80211][ovs][Add ovs flowblock support]

[Description]
Add ovs flowblock support

[Release-log]
N/A

Change-Id: I3dece90da74bae49dd998f5572d02355c66a369b
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6254374
diff --git a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin
index c0185c8..6bb033c 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin
+++ b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin
Binary files differ
diff --git a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wa.bin b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wa.bin
index f7914a9..79ec406 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wa.bin
+++ b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wa.bin
Binary files differ
diff --git a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wm.bin b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wm.bin
index 11f363f..002bece 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wm.bin
+++ b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wm.bin
Binary files differ
diff --git a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_0.bin b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_0.bin
index dcdca1d..19d607c 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_0.bin
+++ b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_0.bin
Binary files differ
diff --git a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_1.bin b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_1.bin
index 3c2a458..ec3b182 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_1.bin
+++ b/autobuild_mac80211_release/package/kernel/mt76/src/firmware/mt7986_wo_1.bin
Binary files differ
diff --git a/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/8010-ovs-support-flow-offload.patch b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/8010-ovs-support-flow-offload.patch
new file mode 100755
index 0000000..04e22a4
--- /dev/null
+++ b/autobuild_mac80211_release/target/linux/mediatek/patches-5.4/8010-ovs-support-flow-offload.patch
@@ -0,0 +1,63 @@
+Index: net/openvswitch/vport-internal_dev.c
+===================================================================
+--- a/net/openvswitch/vport-internal_dev.c
++++ b/net/openvswitch/vport-internal_dev.c
+@@ -113,12 +113,58 @@ internal_get_stats(struct net_device *de
+ 	}
+ }
+
++static int internal_dev_fill_forward_path(struct net_device_path_ctx *ctx, struct net_device_path *path)
++{
++	struct vport *vport;
++	int i;
++	struct table_instance *ti;
++	struct datapath *dp;
++	struct sw_flow_key *key;
++	struct sw_flow_actions *sf_acts;
++	struct nlattr *a;
++	int rem;
++
++	vport = ovs_internal_dev_get_vport(ctx->dev);
++	dp = vport->dp;
++	ti = rcu_dereference_ovsl(dp->table.ti);
++
++	for (i = 0; i < ti->n_buckets; i++) {
++		struct sw_flow *flow;
++		struct hlist_head *head = &ti->buckets[i];
++		struct hlist_node *n;
++
++		hlist_for_each_entry_safe(flow, n, head, flow_table.node[ti->node_ver]) {
++			key = &flow->key;
++
++			if((!memcmp(ctx->dev->dev_addr, key->eth.dst, ETH_ALEN)) && (!memcmp(ctx->daddr, key->eth.src, ETH_ALEN))){
++				sf_acts = rcu_dereference_ovsl(flow->sf_acts);
++				for (a = sf_acts->actions, rem = sf_acts->actions_len; rem > 0;
++			     	 a = nla_next(a, &rem)) {
++				 	if(nla_type(a) == OVS_ACTION_ATTR_OUTPUT){
++						vport = ovs_vport_rcu(dp, key->phy.in_port);
++						goto out;
++			 		}
++		     	}
++			}
++		}
++	}
++
++out:
++
++	path->type = DEV_PATH_BRIDGE;
++	path->dev = ctx->dev;
++	ctx->dev = vport->dev;
++
++	return 0;
++}
++
+ static const struct net_device_ops internal_dev_netdev_ops = {
+ 	.ndo_open = internal_dev_open,
+ 	.ndo_stop = internal_dev_stop,
+ 	.ndo_start_xmit = internal_dev_xmit,
+ 	.ndo_set_mac_address = eth_mac_addr,
+ 	.ndo_get_stats64 = internal_get_stats,
++	.ndo_fill_forward_path	 = internal_dev_fill_forward_path,
+ };
+
+ static struct rtnl_link_ops internal_dev_link_ops __read_mostly = {