Hi David, > From: David Ahern <dsahern@xxxxxxxxx> > Sent: Wednesday, November 25, 2020 11:04 AM > > On 11/18/20 10:57 PM, Saeed Mahameed wrote: > > > > We are not slicing up any queues, from our HW and FW perspective SF == > > VF literally, a full blown HW slice (Function), with isolated control > > and data plane of its own, this is very different from VMDq and more > > generic and secure. an SF device is exactly like a VF, doesn't steal > > or share any HW resources or control/data path with others. SF is > > basically SRIOV done right. > > What does that mean with respect to mac filtering and ntuple rules? > > Also, Tx is fairly easy to imagine, but how does hardware know how to direct > packets for the Rx path? As an example, consider 2 VMs or containers with the > same destination ip both using subfunction devices. Since both VM/containers are having same IP, it is better to place them in different L2 domains via vlan, vxlan etc. > How does the nic know how to direct the ingress flows to the right queues for > the subfunction? > Rx steering occurs through tc filters via representor netdev of SF. Exactly same way as VF representor netdev operation. When devlink eswitch port is created as shown in example in cover letter, and also in patch-12, it creates the representor netdevice. Below is the snippet of it. Add a devlink port of subfunction flavour: $ devlink port add pci/0000:06:00.0 flavour pcisf pfnum 0 sfnum 88 Configure mac address of the port function: $ devlink port function set ens2f0npf0sf88 hw_addr 00:00:00:00:88:88 ^^^^^^^^^^^^^^ This is the representor netdevice. It is created by port add command. This name is setup by systemd/udev v245 and higher by utilizing the existing phys_port_name infrastructure already exists for PF and VF representors. Now user can add unicast rx tc rule for example, $ tc filter add dev ens2f0np0 parent ffff: prio 1 flower dst_mac 00:00:00:00:88:88 action mirred egress redirect dev ens2f0npf0sf88 I didn't cover this tc example in cover letter, to keep it short. But I had a one line description as below in the 'detail' section of cover-letter. Hope it helps. - A SF supports eswitch representation and tc offload support similar to existing PF and VF representors. Now above portion answers, how to forward the packet to subfunction. But how to forward to the right rx queue out of multiple rxqueues? This is done by the rss configuration done by the user, number of channels from ethtool. Just like VF and PF. The driver defaults are similar to VF, which user can change via ethtool.