On 22/04/2020 19:18, Horatiu Vultur wrote: > Define the MRP interface. > This interface is used by the netlink to update the MRP instances and by the MRP > to make the calls to switchdev to offload it to HW. > > It defines an MRP instance 'struct br_mrp' which is a list of MRP instances. > Which will be part of the 'struct net_bridge'. Each instance has 2 ring ports, > a bridge and an ID. > > In case the HW can't generate MRP Test frames then the SW will generate those. > > br_mrp_add - adds a new MRP instance. > > br_mrp_del - deletes an existing MRP instance. Each instance has an ID(ring_id). > > br_mrp_set_port_state - changes the port state. The port can be in forwarding > state, which means that the frames can pass through or in blocked state which > means that the frames can't pass through except MRP frames. This will > eventually call the switchdev API to notify the HW. This information is used > also by the SW bridge to know how to forward frames in case the HW doesn't > have this capability. > > br_mrp_set_port_role - a port role can be primary or secondary. This > information is required to be pushed to HW in case the HW can generate > MRP_Test frames. Because the MRP_Test frames contains a file with this > information. Otherwise the HW will not be able to generate the frames > correctly. > > br_mrp_set_ring_state - a ring can be in state open or closed. State open means > that the mrp port stopped receiving MRP_Test frames, while closed means that > the mrp port received MRP_Test frames. Similar with br_mrp_port_role, this > information is pushed in HW because the MRP_Test frames contain this > information. > > br_mrp_set_ring_role - a ring can have the following roles MRM or MRC. For the > role MRM it is expected that the HW can terminate the MRP frames, notify the > SW that it stopped receiving MRP_Test frames and trapp all the other MRP > frames. While for MRC mode it is expected that the HW can forward the MRP > frames only between the MRP ports and copy MRP_Topology frames to CPU. In > case the HW doesn't support a role it needs to return an error code different > than -EOPNOTSUPP. > > br_mrp_start_test - this starts/stops the generation of MRP_Test frames. To stop > the generation of frames the interval needs to have a value of 0. In this case > the userspace needs to know if the HW supports this or not. Not to have > duplicate frames(generated by HW and SW). Because if the HW supports this then > the SW will not generate anymore frames and will expect that the HW will > notify when it stopped receiving MRP frames using the function > br_mrp_port_open. > > br_mrp_port_open - this function is used by drivers to notify the userspace via > a netlink callback that one of the ports stopped receiving MRP_Test frames. > This function is called only when the node has the role MRM. It is not > supposed to be called from userspace. > > br_mrp_port_switchdev_add - this corresponds to the function br_mrp_add, > and will notify the HW that a MRP instance is added. The function gets > as parameter the MRP instance. > > br_mrp_port_switchdev_del - this corresponds to the function br_mrp_del, > and will notify the HW that a MRP instance is removed. The function > gets as parameter the ID of the MRP instance that is removed. > > br_mrp_port_switchdev_set_state - this corresponds to the function > br_mrp_set_port_state. It would notify the HW if it should block or not > non-MRP frames. > > br_mrp_port_switchdev_set_port - this corresponds to the function > br_mrp_set_port_role. It would set the port role, primary or secondary. > > br_mrp_switchdev_set_role - this corresponds to the function > br_mrp_set_ring_role and would set one of the role MRM or MRC. > > br_mrp_switchdev_set_ring_state - this corresponds to the function > br_mrp_set_ring_state and would set the ring to be open or closed. > > br_mrp_switchdev_send_ring_test - this corresponds to the function > br_mrp_start_test. This will notify the HW to start or stop generating > MRP_Test frames. Value 0 for the interval parameter means to stop generating > the frames. > > br_mrp_port_open - this function is used to notify the userspace that the port > lost the continuity of MRP Test frames. > > Signed-off-by: Horatiu Vultur <horatiu.vultur@xxxxxxxxxxxxx> > --- > net/bridge/br_private_mrp.h | 63 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 63 insertions(+) > create mode 100644 net/bridge/br_private_mrp.h > Reviewed-by: Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx>