IFB missing on OEM OpenWrt 21.02 (kernel 5.4.238) - options? D-Link DWR-2000M

I’m running an OEM/custom OpenWrt 21.02.7 firmware on an LTE/5G router.
Kernel details:

  • OpenWrt 21.02.7 (vendor build)

  • Kernel: 5.4.238

  • Arch: aarch64_cortex-a55

  • Toolchain: GCC 9.3.0 (OpenWrt)

Kernel config shows:

CONFIG_NET_INGRESS=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_ACT_MIRRED=y
# CONFIG_IFB is not set

So ingress and mirred are built in, but IFB is missing (ifb.ko not present).
There is no /lib/modules/*/build directory and no kmod-ifb package available via opkg.

I can SSH into the device but cannot upgrade or flash a different firmware because I don’t want to risk bricking the device.

From what I understand:

  • I cannot install a generic kmod-ifb because the kernel is vendor-patched (5.4.238).

  • The only way to get IFB would be to build ifb.ko against the exact kernel/toolchain used by the vendor.

  • Otherwise, I’m limited to egress-only shaping (fq_codel) with bad results.

Before I give up on ingress shaping, I’d like to confirm:

  1. Is there any safe way to add IFB easily without building it?

  2. Has anyone successfully built only ifb.ko for a similar OEM OpenWrt kernel?

  3. What others have with a 5G CPE Router in my situation.

Thanks in advance.

no.

replaced it with a supported 5G CPE.

You are supposed to be a bit more specific than that... What do you see in ubus call system board ? I.e whether device can be made to work with normal OpenWrt.

model is in the topic, but I know you want the rest too :wink:

Does not help more than finding 5 storefronts

I tried using ifb from here (ChatGpt Advice sorry i’m no expert),

I get this root@MobileRouter:/tmp# insmod /tmp/ifb.ko
failed to insert /tmp/ifb.ko

So I think my only option is building the module with the exact format,

other infos about the device if they help…

BusyBox v1.33.2 (2025-07-10 07:15:39 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 21.02.7, 1.07ME/TT
 -----------------------------------------------------
root@MobileRouter:~# ls
root@MobileRouter:~# uname -a
Linux MobileRouter 5.4.238 #0 SMP Thu Jul 10 07:15:39 2025 aarch64 GNU/Linux
root@MobileRouter:~# uname -r
5.4.238
root@MobileRouter:~# cat /proc/version
Linux version 5.4.238 (feserver@d2fc993e2eb3) (gcc version 9.3.0 (OpenWrt GCC 9.3.0 r16847-f8282da11e)) #0 SMP Thu Jul 10 07:15:39 2025
root@MobileRouter:~# opkg print-architecture
arch all 1
arch noarch 1
arch aarch64_cortex-a55_neon-vfpv4 10
root@MobileRouter:~# cat /etc/openwrt_release 2>/dev/null || cat /etc/os-release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='21.02.7'
DISTRIB_REVISION='r16847-f8282da11e'
DISTRIB_TARGET='gem6xxx/evb6890v1_600lxx_cpe_emmc'
DISTRIB_ARCH='aarch64_cortex-a55_neon-vfpv4'
DISTRIB_DESCRIPTION='OpenWrt 21.02.7 1.07ME/TT'
DISTRIB_TAINTS='no-all busybox'
root@MobileRouter:~# ls /lib/modules/$(uname -r)/ | grep ifb
root@MobileRouter:~# tc qdisc add dev lo ingress
root@MobileRouter:~# tc filter add dev lo parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
Cannot find device "ifb0"
bad action parsing
parse_action: bad value (5:mirred)!
Illegal "action"
root@MobileRouter:~# zcat /proc/config.gz > kernel.config
root@MobileRouter:~# strings /lib/modules/$(uname -r)/modules.dep | grep CONFIG_
strings: /lib/modules/5.4.238/modules.dep: No such file or directory
root@MobileRouter:~# dd if=/dev/mtdX | strings | grep CONFIG_
dd: can't open '/dev/mtdX': No such file or directory
root@MobileRouter:/tmp# ubus call system board
{
	"kernel": "5.4.238",
	"hostname": "MobileRouter",
	"system": "ARMv8 Processor rev 0",
	"model": "evb6890v1_64_cpe",
	"board_name": "evb6890v1_64_cpe",
	"release": {
		"distribution": "OpenWrt",
		"version": "21.02.7",
		"revision": "r16847-f8282da11e",
		"target": "gem6xxx/evb6890v1_600lxx_cpe_emmc",
		"description": "OpenWrt 21.02.7 1.07ME/TT"
	}
}

No mainline support...

You can still try qos on the (artificial) bridge which has 2 egress tails naturally.
No firewall support there and you likely need some seriousprogramming too

Let's say I don't need a firewall because the traffic from the ISP is already passing through one (I can't port forward, for example).

Will this artificial bridge improve my bufferbloat?

What I’m already trying now is connecting another router with OpenWrt: LAN of the 5G router → WAN of the OpenWrt router, and running SQM there (no clients connected on the 5G router). Even this way, bufferbloat is still strong.

Several theads mention this board name, none of them seem to bring you closer to Openwrt support.

Not sure this target's even available in Linux.

Can't the CPE be bridged?

it cannot be bridged from the web ui

You have to have a very profound understanding how sqm works as you are trying to get it to work with 5y old software