Re: [PATCH net-next v3 05/11] bridge: mrp: Add MRP interface.

From: Nikolay Aleksandrov
Date: Fri Apr 24 2020 - 09:13:29 EST


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>