Linksys WRT3200ACM variable speed on different connections

Hi all!

Recently I bring up the Linksys as main router for FTTH (symetrical 600Mbps), running on 21.02.7 (the newer 23.05 bring me some issues with USB)

The problem im facing with speed can be observed on below screen capture

  • The first test is done in a wired PC (1Gbps link, port lan4). The speed average is 600.2/623.0 Mbps, clearly symetrical.
  • The second test is done in another wired PC (1Gpbs, port lan3). Its clearly a drop in the download speed, getting as average 156.9/534.8 Mbps. This computer is close to the first (no wire lenght impact)
  • The thierd test is done trought Wifi 5Ghz, channel 36, close to the router (signal -52/-53 dbm, only one device connected). The same behaviour than previous is observed, the download speed is less than the half than the upload speed (avg 139.3/619.5Mbps).

Obviusly, all the tests has been done with unloaded devices, with no significant charge on wan transfers.

I cannot find any reason for that... probably becasue my lack of knowledge :slight_smile:

Any help will be highly appreciated.

Thanks in avance.
Kind regards.

wifi 5ghz has no channel 10.

Please connect to your OpenWrt device using ssh and copy the output of the following commands and post it here using the "Preformatted text </> " button:
grafik
Remember to redact passwords, MAC addresses and any public IP addresses you may have:

ubus call system board
cat /etc/config/network
cat /etc/config/wireless
cat /etc/config/dhcp
cat /etc/config/firewall

Whatever issues with USB, no changes will ever be made in OpenWRT 21.

Hi brada4. Thanks for reply. Sorry, channel is 36 (10 is used for 2.4Ghz range)

Regarding the USB, I have found similar behaviour on other member (OpenWrt 23.05.5 - Service Release - #154 by potros)

Here we go with the configs:

root@LEDE:~# ubus call system board
{
        "kernel": "5.4.238",
        "hostname": "LEDE",
        "system": "ARMv7 Processor rev 1 (v7l)",
        "model": "Linksys WRT3200ACM",
        "board_name": "linksys,wrt3200acm",
        "release": {
                "distribution": "OpenWrt",
                "version": "21.02.7",
                "revision": "r16847-f8282da11e",
                "target": "mvebu/cortexa9",
                "description": "OpenWrt 21.02.7 r16847-f8282da11e"
        }
}

root@LEDE:~# cat /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd0a:8df1:9bf2::/48'

config device
        option name 'br-lan'
        option type 'bridge'
        list ports 'lan1'
        list ports 'lan2'
        list ports 'lan3'
        list ports 'lan4'

config interface 'lan'
        option device 'br-lan'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '172.16.1.1'
        list dns '1.1.1.1'
        list dns '1.0.0.1'

config device
        option name 'wan'
        option macaddr 'xx:xx:xx:xx:xx:xx'
        option ipv6 '0'

config interface 'wan'
        option proto 'dhcp'
        option device 'wan.20'
        option peerdns '0'
        list dns '1.1.1.1'

config interface 'wan6'
        option proto 'dhcpv6'
        option device 'wan.20'
        option reqaddress 'try'
        option reqprefix 'auto'

config device
        option type '8021q'
        option ifname 'wan'
        option vid '20'
        option name 'wan.20'

config interface 'wwan'
        option proto 'dhcp'


root@LEDE:~# cat /etc/config/wireless

config wifi-device 'radio0'
        option type 'mac80211'
        option path 'soc/soc:pcie/pci0000:00/0000:00:01.0/0000:01:00.0'
        option channel '36'
        option band '5g'
        option cell_density '0'
        option country 'XX'
        option htmode 'VHT80'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option macaddr 'xx:xx:xx:xx:xx:xx'
        option encryption 'psk2'
        option skip_inactivity_poll '1'
        option disassoc_low_ack '0'
        option ssid 'ssid'
        option key 'pwd'

config wifi-device 'radio1'
        option type 'mac80211'
        option path 'soc/soc:pcie/pci0000:00/0000:00:02.0/0000:02:00.0'
        option band '2g'
        option htmode 'HT20'
        option cell_density '0'
        option country 'XX'
        option channel 'auto'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option macaddr 'xx:xx:xx:xx:xx:xx'
        option skip_inactivity_poll '1'
        option disassoc_low_ack '0'
        option encryption 'psk2'
        option ieee80211r '1'
        option ft_over_ds '0'
        option ft_psk_generate_local '1'
        option ssid 'ssid'
        option key 'pwd'

root@LEDE:~# cat /etc/config/dhcp

config dnsmasq
        option domainneeded '1'
        option localise_queries '1'
        option rebind_protection '0'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
        option localservice '0'
        option ednspacket_max '1232'
        list server '1.1.1.1'
        list server '1.0.0.1'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option leasetime '12h'
        option dhcpv4 'server'
        option limit '50'
        list ra_flags 'none'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'
        list ra_flags 'none'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'
        option loglevel '4'

config host
        option name 'x'
        option ip '172.16.1.99'
        option mac 'xx:xx:xx:xx:xx:xx'

config host
        option name 'xx'
        option mac 'xx:xx:xx:xx:xx:xx'
        option ip '172.16.1.80'

...
Several host static leases
...


root@LEDE:~# cat /etc/config/firewall

config defaults
        option syn_flood '1'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'REJECT'

config zone
        option name 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'
        list network 'lan'

config zone
        option name 'wan'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'
        list network 'wan'
        list network 'wan6'
        list network 'wwan'

config forwarding
        option src 'lan'
        option dest 'wan'

config rule
        option name 'Allow-DHCP-Renew'
        option src 'wan'
        option proto 'udp'
        option dest_port '68'
        option target 'ACCEPT'
        option family 'ipv4'

config rule
        option name 'Allow-Ping'
        option src 'wan'
        option proto 'icmp'
        option icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-IGMP'
        option src 'wan'
        option proto 'igmp'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-DHCPv6'
        option src 'wan'
        option proto 'udp'
        option dest_port '546'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-MLD'
        option src 'wan'
        option proto 'icmp'
        option src_ip 'fe80::/10'
        list icmp_type '130/0'
        list icmp_type '131/0'
        list icmp_type '132/0'
        list icmp_type '143/0'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Input'
        option src 'wan'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        list icmp_type 'router-solicitation'
        list icmp_type 'neighbour-solicitation'
        list icmp_type 'router-advertisement'
        list icmp_type 'neighbour-advertisement'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-IPSec-ESP'
        option src 'wan'
        option dest 'lan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option name 'Allow-ISAKMP'
        option src 'wan'
        option dest 'lan'
        option dest_port '500'
        option proto 'udp'
        option target 'ACCEPT'

config rule
        option name 'Support-UDP-Traceroute'
        option src 'wan'
        option dest_port '33434:33689'
        option proto 'udp'
        option family 'ipv4'
        option target 'REJECT'
        option enabled 'false'

config include
        option path '/etc/firewall.user'

config redirect
        option dest 'lan'
        option target 'DNAT'
        option name 'WebServer'
        option src 'wan'
        option src_dport 'xxxx'
        option dest_ip '172.16.1.xx'
        option dest_port 'xx'

config redirect
        option dest 'lan'
        option target 'DNAT'
        option name 'otherService'
        option src 'wan'
        option src_dport 'xxxxx'
        option dest_ip '172.16.1.xx'
        option dest_port 'xxxx'


Backup config and try to repeat regression on 23.05.5 ?
firewall offload may help to reach ceiling.

  • 21.x on device is borked, switch issue DNU
  • 23.x DNU software offload which is borked on device
  • what is the USB issue w 23.x

Broken soft offload can be worked around

With horrible results.

1 Like

It does not decap/encap vlans anymore, otherwise no change.

IDNT that less works equates to the loss of throughput that I witnessed.

How it compares to no-offload? (you can drop numbers in fw4 git)

I will install the 23.05.05 in the second firmware partition, and share results.

But it will be end of week.

Thanks for your help!

Hi there

Here we come with the results on 23.05.05, just created with imagebuilder and same network, wireless and firewall config files

Results on wired devices:

  • The best is the first device, reaching aprox 600/600Mbps in both directions.
  • The second shows the worst result (most unbalanced), average 180/600Mbps.
  • The thierd, better equilibrium, lower speed (maybe long cable/low quality)

Now with wireless devices. All of them very close to the router (<1.5m), with good signal, channel 36.

  • First is a modern laptop with very unbalanced speeds.
  • Second graph is older laptop, still in 5Ghz, and displaced like 1.5m from the router. The speed is more balanced, and lower in both directions.
  • Third graph correspond to a Samsung S23, very close to the router, which shows the most unbalanced speeds.

The Wifi spectrum is not saturated (I would say)... check this scan:

I understand the wireless could be more complicated scenario, so what suprise me the most, is the wired case where more than half of the speed is lost.

Any idea/test you can suggest me?

Thanks once more.

For wired, can you describe methodology, point of query is if this is Up/Down simultaneously, indicating single CPU port restriction. I also wonder if there is not some more to be gained with getting the correct architecture for device:

vfpv3.patch
diff --git a/target/linux/mvebu/cortexa9/target.mk b/target/linux/mvebu/cortexa9/target.mk
index 02697fa62d..dd70acf1aa 100644
--- a/target/linux/mvebu/cortexa9/target.mk
+++ b/target/linux/mvebu/cortexa9/target.mk
@@ -7,5 +7,5 @@ include $(TOPDIR)/rules.mk
 ARCH:=arm
 BOARDNAME:=Marvell Armada 37x/38x/XP
 CPU_TYPE:=cortex-a9
-CPU_SUBTYPE:=vfpv3-d16
+CPU_SUBTYPE:=vfpv3
 KERNELNAME:=zImage dtbs

this would require you to build rather than using the IB.

But those numbers seem very low.

1 Like