Skip to content
  • Roopa Prabhu's avatar
    bridge: fix setlink/dellink notifications · 02dba438
    Roopa Prabhu authored
    
    
    problems with bridge getlink/setlink notifications today:
            - bridge setlink generates two notifications to userspace
                    - one from the bridge driver
                    - one from rtnetlink.c (rtnl_bridge_notify)
            - dellink generates one notification from rtnetlink.c. Which
    	means bridge setlink and dellink notifications are not
    	consistent
    
            - Looking at the code it appears,
    	If both BRIDGE_FLAGS_MASTER and BRIDGE_FLAGS_SELF were set,
            the size calculation in rtnl_bridge_notify can be wrong.
            Example: if you set both BRIDGE_FLAGS_MASTER and BRIDGE_FLAGS_SELF
            in a setlink request to rocker dev, rtnl_bridge_notify will
    	allocate skb for one set of bridge attributes, but,
    	both the bridge driver and rocker dev will try to add
    	attributes resulting in twice the number of attributes
    	being added to the skb.  (rocker dev calls ndo_dflt_bridge_getlink)
    
    There are multiple options:
    1) Generate one notification including all attributes from master and self:
       But, I don't think it will work, because both master and self may use
       the same attributes/policy. Cannot pack the same set of attributes in a
       single notification from both master and slave (duplicate attributes).
    
    2) Generate one notification from master and the other notification from
       self (This seems to be ideal):
         For master: the master driver will send notification (bridge in this
    	example)
         For self: the self driver will send notification (rocker in the above
    	example. It can use helpers from rtnetlink.c to do so. Like the
    	ndo_dflt_bridge_getlink api).
    
    This patch implements 2) (leaving the 'rtnl_bridge_notify' around to be used
    with 'self').
    
    v1->v2 :
    	- rtnl_bridge_notify is now called only for self,
    	so, remove 'BRIDGE_FLAGS_SELF' check and cleanup a few things
    	- rtnl_bridge_dellink used to always send a RTM_NEWLINK msg
    	earlier. So, I have changed the notification from br_dellink to
    	go as RTM_NEWLINK
    
    Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    02dba438