bridge: add notification over netlink when STP changes state
authorstephen hemminger <shemminger@vyatta.com>
Fri, 22 Jul 2011 07:47:09 +0000 (07:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 Jul 2011 00:01:12 +0000 (17:01 -0700)
When STP changes state of interface need to send a new link
message to reflect that change.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_netlink.c
net/bridge/br_stp.c
net/bridge/br_stp_if.c
net/bridge/br_stp_timer.c

index 6814083a92f4c4d97c803355d0eb685b10356652..5b1ed1ba9aa7bd52a811eb3dbc2ca76d2a2050ac 100644 (file)
@@ -188,6 +188,8 @@ static int br_rtm_setlink(struct sk_buff *skb,  struct nlmsghdr *nlh, void *arg)
 
        p->state = new_state;
        br_log_state(p);
+       br_ifinfo_notify(RTM_NEWLINK, p);
+
        return 0;
 }
 
index fcff62251547c476659399999d584b4bb31cf380..4d651af57a9096ae451fe6c14ec4b9987573ac79 100644 (file)
@@ -363,6 +363,8 @@ static void br_make_blocking(struct net_bridge_port *p)
 
                p->state = BR_STATE_BLOCKING;
                br_log_state(p);
+               br_ifinfo_notify(RTM_NEWLINK, p);
+
                del_timer(&p->forward_delay_timer);
        }
 }
@@ -386,8 +388,8 @@ static void br_make_forwarding(struct net_bridge_port *p)
                p->state = BR_STATE_LEARNING;
 
        br_multicast_enable_port(p);
-
        br_log_state(p);
+       br_ifinfo_notify(RTM_NEWLINK, p);
 
        if (br->forward_delay != 0)
                mod_timer(&p->forward_delay_timer, jiffies + br->forward_delay);
index 6f615b8192f45b3138e4dca6cf849a94398eede3..10eda3cd1d7112759d46d245386c260ca265ca11 100644 (file)
@@ -88,6 +88,7 @@ void br_stp_enable_port(struct net_bridge_port *p)
        br_init_port(p);
        br_port_state_selection(p->br);
        br_log_state(p);
+       br_ifinfo_notify(RTM_NEWLINK, p);
 }
 
 /* called under bridge lock */
@@ -104,6 +105,8 @@ void br_stp_disable_port(struct net_bridge_port *p)
        p->topology_change_ack = 0;
        p->config_pending = 0;
 
+       br_ifinfo_notify(RTM_NEWLINK, p);
+
        del_timer(&p->message_age_timer);
        del_timer(&p->forward_delay_timer);
        del_timer(&p->hold_timer);
index 3e965140051e79ad146cc41bd0da78f93d26d476..58de2a0f99751d50137cfe5455c3acbc8387a744 100644 (file)
@@ -97,6 +97,7 @@ static void br_forward_delay_timer_expired(unsigned long arg)
                netif_carrier_on(br->dev);
        }
        br_log_state(p);
+       br_ifinfo_notify(RTM_NEWLINK, p);
        spin_unlock(&br->lock);
 }