[RFC PATCH v2 0/1] Introduce UCI support for configuring DSA VLAN filter rules
Perry
isprotejesvalkata at gmail.com
Tue Jul 28 12:02:35 EDT 2020
Hi all,
A couple things which I think seem to still be missing are:
port mirroring (src port, dst port)
flow control (enable/disable)
stp (type, enable/disable)
igmp snooping
And some other features, which as far as I can tell should be possible
with DSA:
LAG
LLDP
Jumbo Frames
Greets,
P
On 7/14/20 5:34 PM, Josh Bendavid wrote:
> Hi,
> I have a somewhat radical comment on this.
>
> As far as I understand, the vlan filtering support in the linux bridge
> subsystem is not specific to dsa, but can equally be configured for a
> pure software bridge. The fact that the switch supports dsa/switchdev
> then simply allows this to be transparently handled in hardware, just
> like the simple bridging of the switch port interfaces.
>
> Isn't it conceptually more correct in this case for the vlan filtering
> to be configured as part of the "interface" in uci?
> Ie I configure an interface of type "bridge" which bridges the switch
> ports, then the vlan filtering is a configuration property of this
> interface (just like enabling igmp_snooping on a bridge interface)
>
> Thanks,
> Josh
>
> On Tue, 7 Jul 2020 at 22:13, Jo-Philipp Wich <jo at mein.io> wrote:
>>
>> This patch series introduces a new package "dsaconfig" which provides the
>> necessary logic to allow configuration of bridge vlan filter rules for
>> DSA switches.
>>
>> While well supported DSA switches can be programmed by solely bridging
>> per-port netdevices together, explicit bridge VLAN filter rules are needed
>> for more complex scenarios or for DSA switches that do not support a
>> tagging protocol.
>>
>> The UCI configuration interpreted by the dsaconfig package closely follows
>> the structure and semantics of the legacy swconfig architecture, honouring
>> "dsa", "dsa_vlan" and "dsa_port" sections within the
>> /etc/config/network file. The only difference compared to swconfig is
>> that "dsa" sections are optional and that the syntax of ports within
>> the "dsa_vlan" section differs, instead of <portnumber><tag>?, e.g.
>> "0t", "1u" or "2", it is now <portname>(.<tag>)?, e.g. "wan.u", "lan1.t"
>> or "lan2".
>>
>> The dsaconfig package will spawn a bridge device named "switchN" for each
>> DSA switch, where N denotes the number of the switch. In contrast to
>> swconfig, interfaces do not use the CPU port to target VLAN port groups on
>> the switch but reference a VLAN on top of the switch, e.g.
>> "option ifname switch0.1" to use the VLAN 1 port group on the first DSA
>> switch.
>>
>> A complete configuration example for a simple LAN/WAN setup might look
>> like below. Note that this configuration should be equivalent to just
>> bridging lan1..lan4 without any VLAN filter rules.
>>
>> -- 8< --
>> config dsa_vlan
>> option vlan 1
>> option ports 'lan1 lan2 lan3 lan4'
>>
>> config dsa_vlan
>> option vlan 2
>> option ports 'wan'
>>
>> config interface lan
>> option ifname switch0.1
>> option proto static
>> option ipaddr 192.168.1.1/24
>>
>> config interface wan
>> option ifname switch0.2
>> option proto dhcp
>> -- >8 --
>>
>> A slightly more complex example that uses multiple tagged VLANs on different
>> ports would look like this:
>>
>> -- 8< --
>> config dsa switch0
>> ## Override CPU port. Normally it is auto-discovered.
>> #option cpu_port eth0
>>
>> config dsa_vlan
>> ## Specify the switch this vlan belongs to.
>> ## If there is only one switch on the system, it may be omitted.
>> #option device switch0
>> option vlan 1
>> option ports 'lan1 lan2.t'
>>
>> config dsa_vlan
>> #option device switch0
>> option vlan 2
>> option ports 'wan'
>>
>> config dsa_vlan
>> #option device switch0
>> option vlan 5
>> option ports 'lan2.t lan3'
>>
>> config dsa_vlan
>> #option device switch0
>> option vlan 8
>> option ports 'lan2.t lan4'
>>
>> config dsa_vlan
>> #option device switch0
>> option vlan 11
>> option ports 'lan2.t lan4.t'
>>
>> config dsa_port
>> #option device switch0
>> option port lan2
>> ## By default, the port PVID is set to the ID of the first
>> ## untagged VLAN the port is member of. It can be overriden here.
>> option pvid 5
>>
>> config interface lan
>> option type bridge
>> option ifname 'switch0.1 wlan0'
>> option proto static
>> option ipaddr 192.168.1.1/24
>>
>> config interface wan
>> option ifname switch0.2
>> option proto dhcp
>>
>> config interface vlan5
>> option ifname switch0.5
>> option proto static
>> option ipaddr 10.255.5.1/24
>>
>> config interface vlan8
>> option ifname switch0.8
>> option proto static
>> option ipaddr 10.255.8.1/24
>>
>> config interface vlan11
>> option ifname switch0.11
>> option proto static
>> option ipaddr 10.255.11.1/24
>> -- >8 --
>>
>> Additionally, the "dsaconfig" executable provided by this package implements
>> a "show" option to display the current switch port states and their VLAN
>> memberships in a compact manner. For the latter configuration example above,
>> the utility would produce an output similar to the following:
>>
>> -- 8< --
>> root at OpenWrt:~# dsaconfig show
>> Switch: switch0
>> VLAN/ | lan1 | lan2 | lan3 | lan4 | wan |
>> Link: | down | 1000F | down | 1000F | down |
>> 1 | u* | t | | | |
>> 2 | | | | | u* |
>> 5 | | t* | u* | | |
>> 8 | t | t | | u* | |
>> 11 | | t | | t | |
>>
>> -- >8 --
>>
>> This code has been tested on a WRT3200ACM and a Mir3G but is supposed to
>> work with any DSA switch. It requires wider testing before it is suitable
>> for inclusion.
>>
>> Once the configuration format is and rule logic is finalized, the shell
>> script code provided by this package should be implemented directly in
>> netifd C code to reduce the amount of required external dependencies and
>> to allow for improved performance when processing large configurations.
>>
>> Open questions/topics:
>>
>> - Ensure that the chosen configuration approach actually works with
>> DSA_TAG_PROTO_NONE switches
>>
>> - Investigate potential MTU issues regarding the CPU port
>>
>> Changes since v1:
>>
>> - Rename switch, switch_vlan and switch_port sections to dsa, dsa_vlan
>> and dsa_port respectively
>>
>> - Forcibly move DSA ports to the switch bridge if they're part of another
>> bridge yet
>>
>> - Disallow VLAN ID 0
>>
>> - Properly display unassigned ports as empty in "dsaconfig show"
>>
>> - Handle implicit switch0 in "dsaconfig show"
>>
>> Jo-Philipp Wich (1):
>> dsaconfig: introduce package for UCI configuration of VLAN filter
>> rules
>>
>> package/network/config/dsaconfig/Makefile | 40 +++
>> .../config/dsaconfig/files/dsaconfig.hotplug | 7 +
>> .../config/dsaconfig/files/dsaconfig.include | 11 +
>> .../config/dsaconfig/files/dsaconfig.sh | 306 ++++++++++++++++++
>> 4 files changed, 364 insertions(+)
>> create mode 100644 package/network/config/dsaconfig/Makefile
>> create mode 100644 package/network/config/dsaconfig/files/dsaconfig.hotplug
>> create mode 100755 package/network/config/dsaconfig/files/dsaconfig.include
>> create mode 100755 package/network/config/dsaconfig/files/dsaconfig.sh
>>
>> --
>> 2.27.0
>>
>>
>> _______________________________________________
>> openwrt-devel mailing list
>> openwrt-devel at lists.openwrt.org
>> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
> .
>
More information about the openwrt-devel
mailing list