> Let me see if I get your point. > The D is optional, and the S is optional. So what's left? :) A collection of interfaces. switchdev and by extension DSA is all about using hardware as an accelerator. Linux can do switching in software. It can do routing in software, it can do bonding in software, etc. switchdev gives you an API to offload this to hardware. And if the hardware or the driver does not support it, linux will just keep on doing it in software. Once you get the idea it is just an accelerator, the rest falls into place. Why there are no new configuration tools, why we expect network daemons to just work, why users don't need to learn anything new. It is all just linux networking as normal. > Also, there's a big difference between "the hardware can't do it" and > "the driver doesn't implement it". If I follow your argument, would > you write a DSA driver for a device that doesn't do L2 switching? Sure i would. Such a device is a port multiplexor. The user sees the user ports as linux interfaces. They can use those interfaces just like any other linux interfaces. Configure them using iproute2, add them to bridges, run bonding, etc. All just linux as normal. > Along that same line, what benefit does the DSA model bring to a > switch that can't do cascading, compared to switchdev? I'm asking this > as a user, not as a developer. DSA builds on top of switchdev. switchdev gives you an API to offload things which are happening in software to the hardware. It is the glue which allows you to configure the accelerator. There is also a common pattern for some switches. They connect a switch port MAC to a host port MAC, so that frames can be passed from the CPU to the switch. This pattern is common enough that infrastructure has been put in place to support this model. That infrastructure is DSA. But that is mostly about details for the driver writer. From the users perspective, you have a bunch of interfaces which you just use as normal, and some stuff can get accelerated by the hardware. We don't want the user to have to known about, or do anything, with the host port or the switch port it is connected to. DSA very nearly takes care of everything to do with those two. The only thing you need to do is configure the master interface up. Then things just work as a bunch of Linux interfaces. Now think about a pure switchdev switch, with a port connected to the host. The model breaks down. How do you use that link to the switch? It is just a plane link. You would not have tagging in operation. So you cannot send frames out specific ports. In order to do that, you need to add vlans, and configure the switch to map vlans to ports, etc. You also then have two linux interfaces representing one port. The pure switchdev interface, and the VLAN interface. That is going to confuse the user. You SNMP agent is not just going to work. You get the statistics from the pure switchdev interface, but the IP configuration from the vlan interface? How do you bridge two ports together? You need to put the same VLAN on two interfaces. Where as the DSA model you just use linux as normal and create a bridge, add the two interfaces, and then the stack transparently offloads it to the accelerator. How does STP work? Using DSA without using the D means switch ports just work as linux interfaces. > > > > So my conclusion is that DSA for Felix/Ocelot doesn't make a lot of > > > sense if the whole purpose is to hide the CPU-facing netdev. > > > > You actually convinced me the exact opposite. You described the > > headers which are needed to implement DSA. The switch sounds like it > > can do what DSA requires. So DSA is the correct model. > > > > Andrew > > Somebody actually asked, with the intention of building a board, if > it's possible to cascade the LS1028A embedded switch (Felix) with > discrete SJA1105 devices - Felix being at the top of the switch tree. Florian has done something very similar. He used a Broadcom SoC with an in built SF2 switch, and an external B53 roboswitch connected to one of the SF2 ports. But in that setup, the master interface for the b53 is a slave port of the SF2. Configure everything in device tree, bring up the SoC master interface, then the SF2 port acting as a master interface for the B53, and everything just worked. You have a bunch of Linux interfaces you can just use as normal. This is not using D in DSA. It is two instances of DSA. But because the model is that you get normal linux interfaces, it just works. I don't see why you cannot do the same with a LS1028A and a SJA1105. Andrew