Add support for Linksys EA6350 v3

Thanks, greatly appreciated.

Many readers here are not experts. Many blindly follow instructions, especially when it promises "more for free" to them, resulting in bricked devices or loss of unrecoverable data (such at ART and other cal data).

The subtle difference between raw NAND, UBI device, and file system volume is one that most would miss, especially if used in a different context. (Happens all the time, "But why doesn't it boot? I saw someone with a Model X do it, so I followed what they said for a Model Y.")

NAND is particularly sensitive as its metadata is exposed through its interface. In contrast, a hard drive or "real" SSD hides it all in the controller (both media-coding level and ECC on top of that), behind the SATA, USB, ... interface that the OS generally sees.


Haha the UBI can refer to UBI layer, UBI volume and UBIFS, which is quite confusing. I'm also quite grateful for your pointing out. I'll pay more attention and add warning and reference in my future post.:yum:
Talking with you also makes me have a more thorough understanding towards UBI and NAND :laughing:

1 Like

Oh I forgot to explain why we can use the bootargs to pass partition info. I've updated the explaination above :sweat_smile:

Hi everyone! Average home OpenWRT user here, minimum knowledge of Linux and networking without any previous experience in programming or with serial connection.
Back in March I decided to sold the existing 2 routers in the house (RT-AC68U, DIR-880L) then replace them with OpenWRT-enabled router to extend the WiFi coverage. The house has 3 floors, ~100 m^2 each.
My use case is fairly simple, setup PPPoE on the main router with DHCPv6, then set the remaining routers as dummy access points, following the official guide on OpenWRT wiki. Then set the SSID and encryption as the same among these routers, and check the 802.11r option.
For this purpose, I bought 4 EA6350v3s and 2 RT-AC58Us, plus a Newifi D2 as spare (costing ~USD240 together). All flashed the latest (back in March) snapshot with LuCI, built at .
So far everything works pretty well, the main EA6350v3 router has been up for 82d 17h for now. Only upgrading firmware might be a headache, I suppose.
A massive thanks to all the developers!

I've encountered a weird problem... When I'm defining VLANs I'm loosing WAN - in swconfig I can see WAN port is connected, but logread and ifconfig shows no sign of link up. VLAN's are working only when first VLAN is untagged on CPU. When I tag CPU on VLAN1 I'm losing access to router.

Any hints how to resolve/debug? This is on latest snapshot build using online systembuilder.

The ipq40xx platform presently has “challenges” with VLAN support due to how its hardware and drivers work. Right now, there don’t seem to be robust approaches. The upstream qca8k / DSA driver offers some hope for the future, but last I checked, it crashed with VLANs and didn't support multiple Ethernet MACs.

Having (hopefully) wrapped up the work I was doing on a different platform, I'm planning on looking into this again. I lost serial input on my ipq40xx, but parts should be coming Friday.


@chunkeey has pushed ipqess and "ipq40xx-ized" qca8k driver to his staging tree
Have you also tested that?

Doing the EA8300 development in March/April 2019, yes. Through no fault of Chunkeey at all, the upstream Linux behavior, was, at that time, not robust enough for me to use. There were some significant changes in Linux 5.x that made backporting the entire driver and DSA framework back to 4.19 infeasible.

Admittedly, I haven't checked on it in the last couple of months. It will be something I reexamine again. in the section "Bridge VLAN filtering" indicates that there are several port_vlan_* functions required for VLAN functionality. From dsa.h on Linux master

         * VLAN support
        int     (*port_vlan_filtering)(struct dsa_switch *ds, int port,
                                       bool vlan_filtering);
        int (*port_vlan_prepare)(struct dsa_switch *ds, int port,
                                 const struct switchdev_obj_port_vlan *vlan);
        void (*port_vlan_add)(struct dsa_switch *ds, int port,
                              const struct switchdev_obj_port_vlan *vlan);
        int     (*port_vlan_del)(struct dsa_switch *ds, int port,
                                 const struct switchdev_obj_port_vlan *vlan);

I don't see those in the qca8k driver, at least at this time, again on Linux master

Hi, thanks for the reports on VLAN functionality not working 100% on this device. I just purchased a Linksys EA6350v3 router to replace an older OpenWrt device but need tagged and untagged VLANs. I'll follow this thread for updates.

If you don't need all ports, you can just omit WAN port. You can use full VLAN functionality on LAN switch. You can even map one of the LAN ports to WAN network. Dirty workaround, but it's working fine :wink:

Is the USB port working?
I want to connect my iPhone for tethering.

Follow the steps written here:
Only it stops here:

[ 909.354536] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 1040.371633] ipheth 1-1:4.2: Apple iPhone USB Ethernet device attached

So no new USB interface, do I need any other drivers?

On the IPQ4019, there are typically two active Ethernet MACs. The way the driver works, one is "hard bound" to the "Internet" port (the label, not necessarily how you use it) and the other is hard bound to the "LAN" ports. This is done with VLAN 1 and VLAN 2. Using those two VLANs for anything but untagged on those ports is likely to be a problem. Configuration using LuCI is likely to be "challenging", at best. Editing the config files is my preference.

VLAN trunking on the Internet interface works quite well (for VLAN IDs other than 1 and 2), tagged on both the CPU port and the Internet port of the switch. I have not tried on the LAN ports, but I would expect that it works there as well. (I use the Internet port for my VLAN trunk.)

If you want to bridge between the Internet and LAN ports, then you need to configure it in three places:

  • Set up the VLAN on the switch for the Internet port (tagged, for example) and the CPU (tagged)
  • Set up the VLAN on the switch for the LAN ports (untagged, for example) and the CPU (tagged)
  • Bridge eth0.NNNN and eth1.NNNN

Not exactly. There is no need to bridge. eth0.1 doesn't work. Bridging lan port to wan works this way:

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0'
	option proto 'static'
	option ipaddr ''
	option netmask ''
	option ip6assign '64'

config interface 'wan'
	option ifname 'eth1'
	option proto 'dhcp'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option vid '1'
	option ports '0 2 3 4'

config switch_vlan
	option device 'switch0'
	option vlan '2'
	option vid '2'
	option ports '0t 1 5'

That may work for those specific VLANs and tagging, but a different configuration approach is needed to provide, for example

  • VLAN 100 on Internet tagged
  • VLAN 100 on LAN 1-4 untagged

Edit: Checking to see if the EA6350v3 is a single- or dual-MAC device

The shared changes to the IPQ4019 DTS related to the current switch/VLAN topics are from

  • 702-dts-ipq4019-add-PHY-switch-nodes.patch
  • 711-dts-ipq4019-add-ethernet-essedma-node.patch
1 Like

That's true. But if you simply need to bridge a lan port to wan, it is the way to do it.

You can't use vlan 1 or 2 as e.g. eth0.1 and eth0.2 for the reason you mentioned.

Regarding Luci. The 02_network script doesn't have wan mentioned. That's why we don't have wan in Luci. I think we need to fix it, because if a user saves any configuration in Luci, port 5 will be excluded. That is an obvious bug.

1 Like

Thanks everyone for the great work here. I successfully installed the latest Snapshot and Luci on my EA6350. I needed to return to stock but discovered I have flashed both partitions. I can't seem to get any 100 TTL pings at boot or to get the u-boot tftp client method to initiate. Did I screw up u-boot or the possibility to recover with tftp? Or is there an easier way to revert to stock with SSH or through the GUI Luci? Will I need to invest in a USB serial cable at this point?

I've read through the extensive documentation here and it begins to read like a soap opera. Does anyone have access to the "ReturnToStock" script without all the drama? or has any advice on how to return to stock. Thank you.

Is there support for software offloading :question: I am getting poor performance with SQM, and when I enabled software offloading I am getting the same speeds. My 300 Down /12 Up line with SQM enable (cake and piece of cake) get 180 Down /8 Up.

I suspect you’ve got config problems if you’re seeing those rates. Why don’t you open a new thread about your issue.

1 Like

Be aware that SQM and flow-offloading are mutually exclusive from a functional point of view.

Flow-offloading works by the kernel learning about existing connections, and taking care of subsequent packets of these established connections before hitting- and passing through all of the netfilter stack.

The way SQM works is by keeping track of every single packet and sending it exactly at the time necessary to provide optimal bufferbloat results, to shape the connection parameters.

This means that all traffic being shaped does need to pass through the (full-) netfilter stack, not allowing any shortcuts (such as flow-offloading).

While you can enable SQM in combination with software flow-offloading, it loses its effect (almost) completely; you cannot combine it with hardware flow-offloading (currently only available on mt7621).

1 Like

Thank you for the explanation. I am guessing that the processor in the EA6350v3 might be too slow for my connection with SQM. I ran htop and one of my cores hit 100% when running a speed test with SQM on.