About ndo_flow_offload_check for kernel 5.15?

Hello,

I am trying to compile a self-made kernel module package, and found out that I need access into ndo_flow_offload_check struct and after managed to enable and compiling kernel with CONFIG_NF_FLOW_TABLE=y by using make kernel_menuconfig, I have found out that "net/netfilter/nf_flow_table.h" is not included a long with other kernel_headers files in the staging_dir.

Been spending some hours trying to tackle this, but hitting a dead end as google result also quite empty regarding ndo_flow_offload_check on 5.15

The question are :

  1. How to include automatically other extra kernel modules on toolchain kernel_headers package for being use for kernel module compilation?
  2. What is the current alternative or replacement for ndo_flow_offload_check struct in 5.15?

The errors :

make[3]: Entering directory '/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.15.79'
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat.o
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.o
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'foe_clear_all_bind_entries':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:194:29: error: 'const struct net_device_ops' has no member named 'ndo_flow_offload_check'
  194 |             !dev->netdev_ops->ndo_flow_offload_check)
      |                             ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'hnat_set_iif':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:579:42: error: 'const struct net_device_ops' has no member named 'ndo_flow_offload_check'
  579 |                 if (state->in->netdev_ops->ndo_flow_offload_check) {
      |                                          ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'hnat_ipv6_get_nexthop':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:988:20: error: invalid use of undefined type 'struct flow_offload_hw_path'
  988 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:988:30: error: 'FLOW_OFFLOAD_PATH_PPPOE' undeclared (first use in this function)
  988 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                              ^~~~~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:988:30: note: each undeclared identifier is reported only once for each function it appears in
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:989:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
  989 |                 memcpy(eth_hdr(skb)->h_source, hw_path->eth_src, ETH_ALEN);
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:990:53: error: invalid use of undefined type 'struct flow_offload_hw_path'
  990 |                 memcpy(eth_hdr(skb)->h_dest, hw_path->eth_dest, ETH_ALEN);
      |                                                     ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'hnat_ipv4_get_nexthop':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1037:20: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1037 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1037:30: error: 'FLOW_OFFLOAD_PATH_PPPOE' undeclared (first use in this function)
 1037 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                              ^~~~~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1038:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1038 |                 memcpy(eth_hdr(skb)->h_source, hw_path->eth_src, ETH_ALEN);
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1039:53: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1039 |                 memcpy(eth_hdr(skb)->h_dest, hw_path->eth_dest, ETH_ALEN);
      |                                                     ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'ppe_fill_L2_info':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1097:52: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1097 |                 entry.ipv4_hnapt.pppoe_id = hw_path->pppoe_sid;
      |                                                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1109:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1109 |                 entry.ipv6_5t_route.pppoe_id = hw_path->pppoe_sid;
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'ppe_fill_info_blk':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1118:35: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1118 |         entry.bfib1.psn = (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) ? 1 : 0;
      |                                   ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1118:45: error: 'FLOW_OFFLOAD_PATH_PPPOE' undeclared (first use in this function)
 1118 |         entry.bfib1.psn = (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) ? 1 : 0;
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1119:43: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1119 |         entry.bfib1.vlan_layer += (hw_path->flags & FLOW_OFFLOAD_PATH_VLAN) ? 1 : 0;
      |                                           ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1119:53: error: 'FLOW_OFFLOAD_PATH_VLAN' undeclared (first use in this function); did you mean 'FLOW_OFFLOAD_DIR_MAX'?
 1119 |         entry.bfib1.vlan_layer += (hw_path->flags & FLOW_OFFLOAD_PATH_VLAN) ? 1 : 0;
      |                                                     ^~~~~~~~~~~~~~~~~~~~~~
      |                                                     FLOW_OFFLOAD_DIR_MAX
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'skb_to_hnat_info':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1261:66: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1261 |                                 entry.ipv4_dslite.vlan1 = hw_path->vlan_id;
      |                                                                  ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1270:65: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1270 |                                 entry.ipv4_hnapt.vlan1 = hw_path->vlan_id;
      |                                                                 ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1322:60: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1322 |                         entry.ipv6_5t_route.vlan1 = hw_path->vlan_id;
      |                                                            ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1418:66: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1418 |                                 entry.ipv4_dslite.vlan1 = hw_path->vlan_id;
      |                                                                  ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1443:73: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1443 |                                         entry.ipv4_hnapt.vlan1 = hw_path->vlan_id;
      |                                                                         ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1507:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1507 |                         entry.ipv6_6rd.vlan1 = hw_path->vlan_id;
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'mtk_hnat_nf_post_routing':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:16: error: variable 'hw_path' has initializer but incomplete type
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                ^~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:50: error: 'struct flow_offload_hw_path' has no member named 'dev'
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                                                  ^~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2006:50: error: 'struct flow_offload_hw_path' has no member named 'virt_dev'
 2006 |                                                 .virt_dev = (struct net_device*)out,
      |                                                  ^~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2007:50: error: 'struct flow_offload_hw_path' has no member named 'flags'
 2007 |                                                 .flags = FLOW_OFFLOAD_PATH_ETHERNET };
      |                                                  ^~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2007:58: error: 'FLOW_OFFLOAD_PATH_ETHERNET' undeclared (first use in this function)
 2007 |                                                 .flags = FLOW_OFFLOAD_PATH_ETHERNET };
      |                                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:37: error: storage size of 'hw_path' isn't known
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                                     ^~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2017:28: error: 'const struct net_device_ops' has no member named 'ndo_flow_offload_check'
 2017 |         if (out->netdev_ops->ndo_flow_offload_check) {
      |                            ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2018:32: error: 'const struct net_device_ops' has no member named 'ndo_flow_offload_check'
 2018 |                 out->netdev_ops->ndo_flow_offload_check(&hw_path);
      |                                ^~
make[5]: *** [scripts/Makefile.build:289: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.o] Error 1
make[4]: *** [scripts/Makefile.build:552: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat] Error 2
make[3]: *** [Makefile:1901: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk] Error 2
make[3]: Leaving directory '/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.15.79'
make[2]: *** [Makefile:71: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/.built] Error 2
make[2]: Leaving directory '/home/username/works/AX6S/package/kernel/mtk-hnat'
time: package/kernel/mtk-hnat/compile#2.14#0.78#2.89
    ERROR: package/kernel/mtk-hnat failed to build.
make[1]: *** [package/Makefile:116: package/kernel/mtk-hnat/compile] Error 1
make[1]: Leaving directory '/home/username/works/AX6S'
make: *** [/home/username/works/AX6S/include/toplevel.mk:231: package/mtk-hnat/compile] Error 2

Found out about this patch from x-wrt, perhaps useful for ndo_flow_offload_check struct, still testing it.

Still confuse regarding first question :
I have now the following modification being done for kernel-headers package :

define Host/Configure/flowOffload
	mkdir -p $(BUILD_DIR_TOOLCHAIN)/linux-dev/include/net
	$(CP) \
		$(HOST_BUILD_DIR)/include/net/flow_offload.h \
		$(HOST_BUILD_DIR)/include/net/flow_dissector.h \
		$(BUILD_DIR_TOOLCHAIN)/linux-dev/include/net
	$(CP) -rf \
		$(HOST_BUILD_DIR)/include/net/netfilter/nf_tables_offload.h \
		$(HOST_BUILD_DIR)/include/net/netfilter/nf_conntrack_helper.h \
		$(HOST_BUILD_DIR)/include/net/netfilter/nf_conntrack_expect.h \
		$(HOST_BUILD_DIR)/include/net/netfilter/nf_conntrack_extend.h \
		$(HOST_BUILD_DIR)/include/net/netfilter/nf_conntrack_zones.h \
		$(BUILD_DIR_TOOLCHAIN)/linux-dev/include/linux/netfilter
endef

Does above is right for the following kernel module package ? :

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/kernel-defaults.mk

PKG_NAME:=mtk-hnat
PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0

include $(INCLUDE_DIR)/package.mk

define KernelPackage/mtk-hnat
  SUBMENU:=Network Devices
  TITLE:=MediaTek MT762x HW NAT driver
  DEPENDS:=@(TARGET_mediatek_mt7622||TARGET_mediatek_mt7623) +kmod-nf-flow
  KCONFIG:= \
	CONFIG_BRIDGE_NETFILTER=y \
	CONFIG_NET_MEDIATEK_HNAT \
	CONFIG_NETFILTER_FAMILY_BRIDGE=y \
	CONFIG_NET_MEDIATEK_SOC=y \
	CONFIG_NF_CONNTRACK=y \
	CONFIG_NF_CONNTRACK_IPV4=y
	CONFIG_IP_NF_NAT=y \
	CONFIG_IP_NF_TARGET_MASQUERADE=y
  FILES:= \
	$(PKG_BUILD_DIR)/mtkhnat.ko
  AUTOLOAD:=$(call AutoLoad,55,mtkhnat)
endef

define KernelPackage/gpio-button-hotplug/description
MediaTek MT762x HW NAT driver
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

MAKE_OPTS:= \
	$(KERNEL_MAKE_FLAGS) \
	M="$(PKG_BUILD_DIR)/mtk"

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
		$(MAKE_OPTS) \
		modules
endef

define KernelPackage/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/mtkhnat.ko $(1)/lib/modules/$(LINUX_VERSION)
endef

$(eval $(call KernelPackage,mtk-hnat))

Because currently the kmod package is not being able to find net/netfilter/nf_flow_table.h in the build process, which kernel headers include dir does KernelPackage is being picked up or used from?

Because of tiredness I've mixed up between toolchain gcc include folder and kernel include folder, managed to kernel include folder with the following (incase it's useful to someone in the future) :

HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)
NOSTDINC_FLAGS := \
	$(KERNEL_NOSTDINC_FLAGS) \
	-I$(PKG_BUILD_DIR) \
	-I$(HOST_BUILD_DIR)/include

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
		$(MAKE_OPTS) \
		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
		modules
endef

are this on dsa or swconfig?
and is this fw4 right?

Haven't touch configuration enough yet to use dsa or swconfig, but currently to convert or fix @hck 's AX6S/MT7622 proprietary wifi driver works into kernel 5.15,

Current error :

  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat.o
  CC [M]  /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.o
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'hnat_ipv6_get_nexthop':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:988:20: error: invalid use of undefined type 'struct flow_offload_hw_path'
  988 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:989:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
  989 |                 memcpy(eth_hdr(skb)->h_source, hw_path->eth_src, ETH_ALEN);
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:990:53: error: invalid use of undefined type 'struct flow_offload_hw_path'
  990 |                 memcpy(eth_hdr(skb)->h_dest, hw_path->eth_dest, ETH_ALEN);
      |                                                     ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'hnat_ipv4_get_nexthop':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1037:20: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1037 |         if (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) {
      |                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1038:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1038 |                 memcpy(eth_hdr(skb)->h_source, hw_path->eth_src, ETH_ALEN);
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1039:53: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1039 |                 memcpy(eth_hdr(skb)->h_dest, hw_path->eth_dest, ETH_ALEN);
      |                                                     ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'ppe_fill_L2_info':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1097:52: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1097 |                 entry.ipv4_hnapt.pppoe_id = hw_path->pppoe_sid;
      |                                                    ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1109:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1109 |                 entry.ipv6_5t_route.pppoe_id = hw_path->pppoe_sid;
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'ppe_fill_info_blk':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1118:35: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1118 |         entry.bfib1.psn = (hw_path->flags & FLOW_OFFLOAD_PATH_PPPOE) ? 1 : 0;
      |                                   ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1119:43: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1119 |         entry.bfib1.vlan_layer += (hw_path->flags & FLOW_OFFLOAD_PATH_VLAN) ? 1 : 0;
      |                                           ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'skb_to_hnat_info':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1261:66: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1261 |                                 entry.ipv4_dslite.vlan1 = hw_path->vlan_id;
      |                                                                  ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1270:65: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1270 |                                 entry.ipv4_hnapt.vlan1 = hw_path->vlan_id;
      |                                                                 ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1322:60: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1322 |                         entry.ipv6_5t_route.vlan1 = hw_path->vlan_id;
      |                                                            ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1418:66: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1418 |                                 entry.ipv4_dslite.vlan1 = hw_path->vlan_id;
      |                                                                  ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1443:73: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1443 |                                         entry.ipv4_hnapt.vlan1 = hw_path->vlan_id;
      |                                                                         ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:1507:55: error: invalid use of undefined type 'struct flow_offload_hw_path'
 1507 |                         entry.ipv6_6rd.vlan1 = hw_path->vlan_id;
      |                                                       ^~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c: In function 'mtk_hnat_nf_post_routing':
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:16: error: variable 'hw_path' has initializer but incomplete type
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                ^~~~~~~~~~~~~~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:50: error: 'struct flow_offload_hw_path' has no member named 'dev'
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                                                  ^~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2006:50: error: 'struct flow_offload_hw_path' has no member named 'virt_dev'
 2006 |                                                 .virt_dev = (struct net_device*)out,
      |                                                  ^~~~~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2007:50: error: 'struct flow_offload_hw_path' has no member named 'flags'
 2007 |                                                 .flags = FLOW_OFFLOAD_PATH_ETHERNET };
      |                                                  ^~~~~
/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.c:2005:37: error: storage size of 'hw_path' isn't known
 2005 |         struct flow_offload_hw_path hw_path = { .dev = (struct net_device*)out,
      |                                     ^~~~~~~
make[5]: *** [scripts/Makefile.build:289: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat/hnat_nf_hook.o] Error 1
make[4]: *** [scripts/Makefile.build:552: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk/mtk_hnat] Error 2
make[3]: *** [Makefile:1901: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/mtk] Error 2
make[3]: Leaving directory '/home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/linux-5.15.79'
make[2]: *** [Makefile:71: /home/username/works/AX6S/build_dir/target-aarch64_cortex-a53_musl/linux-mediatek_mt7622/mtk-hnat/.built] Error 2
make[2]: Leaving directory '/home/username/works/AX6S/package/kernel/mtk-hnat'
time: package/kernel/mtk-hnat/compile#1.80#0.99#2.77
    ERROR: package/kernel/mtk-hnat failed to build.
make[1]: *** [package/Makefile:116: package/kernel/mtk-hnat/compile] Error 1
make[1]: Leaving directory '/home/username/works/AX6S'
make: *** [/home/username/works/AX6S/include/toplevel.mk:231: package/mtk-hnat/compile] Error 2

mtk-hnat is needed by mt_wifi & mt7622 kernel module.

updated mtk-hnat Makefile :

include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/kernel.mk
include $(INCLUDE_DIR)/kernel-defaults.mk

PKG_NAME:=mtk-hnat
PKG_RELEASE:=3
PKG_LICENSE:=GPL-2.0

include $(INCLUDE_DIR)/package.mk

HOST_BUILD_DIR:=$(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)

define KernelPackage/mtk-hnat
  SUBMENU:=Network Devices
  TITLE:=MediaTek MT762x HW NAT driver
  DEPENDS:=@(TARGET_mediatek_mt7622||TARGET_mediatek_mt7623) +kmod-nf-flow
  KCONFIG:= \
	CONFIG_BRIDGE_NETFILTER=y \
	CONFIG_NET_MEDIATEK_HNAT \
	CONFIG_NETFILTER_FAMILY_BRIDGE=y \
	CONFIG_NET_MEDIATEK_SOC=y \
	CONFIG_NF_CONNTRACK=y \
	CONFIG_NF_CONNTRACK_IPV4=y
	CONFIG_IP_NF_NAT=y \
	CONFIG_IP_NF_TARGET_MASQUERADE=y \
	CONFIG_NETFILTER_INGRESS=y \
	CONFIG_NF_FLOW_TABLE \
	CONFIG_NF_FLOW_TABLE_HW
  FILES:= \
	$(PKG_BUILD_DIR)/mtkhnat.ko
  AUTOLOAD:=$(call AutoLoad,55,mtkhnat)
endef

define KernelPackage/mtk-hnat/description
MediaTek MT762x HW NAT driver
endef

define Build/Prepare
	mkdir -p $(PKG_BUILD_DIR)
	$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

NOSTDINC_FLAGS := \
	$(KERNEL_NOSTDINC_FLAGS) \
	-I$(PKG_BUILD_DIR) \
	-I$(HOST_BUILD_DIR)/include

MAKE_OPTS:= \
	$(KERNEL_MAKE_FLAGS) \
	M="$(PKG_BUILD_DIR)/mtk"

define Build/Compile
	$(MAKE) -C "$(LINUX_DIR)" \
		$(MAKE_OPTS) \
		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
		modules
endef

define KernelPackage/$(PKG_NAME)/install
        $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/mtkhnat.ko $(1)/lib/modules/$(LINUX_VERSION)
endef

$(eval $(call KernelPackage,mtk-hnat))

but it should work out of box, i ll try this weekend.

Regarding this which are shared by @hck, the proprietary 7622 mediatek modules are Kernel 5.4 centric.

I am also need to if clauses multiple of codes regarding KERNEL_DS :

#ifdef set_fs
	orig_fs = get_fs();
	set_fs(KERNEL_DS);
#endif

Really interested if we can bring proprietary mediatek modules into 5.15

[EDIT]
I mixed with based the guide on that post, OpenWrt Vanilla snapshot with feed drivers from here.