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

Nikolay Aleksandrov nikolay at cumulusnetworks.com
Fri Apr 24 13:13:19 UTC 2020


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 at microchip.com>
> ---
>  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 at cumulusnetworks.com>




More information about the Bridge mailing list