net: bridge: add a br_set_state helper function
authorFlorian Fainelli <f.fainelli@gmail.com>
Tue, 30 Sep 2014 23:13:19 +0000 (16:13 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Oct 2014 02:03:50 +0000 (22:03 -0400)
In preparation for being able to propagate port states to e.g: notifiers
or other kernel parts, do not manipulate the port state directly, but
instead use a helper function which will allow us to do a bit more than
just setting the state.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_if.c
net/bridge/br_netlink.c
net/bridge/br_private.h
net/bridge/br_stp.c
net/bridge/br_stp_if.c
net/bridge/br_stp_timer.c

index a9f54a9b6690b181090fd15be8bf8e78c241fac4..7b7289ca299214702bc9018a83eb1799f515f830 100644 (file)
@@ -332,7 +332,7 @@ static struct net_bridge_port *new_nbp(struct net_bridge *br,
        p->port_no = index;
        p->flags = BR_LEARNING | BR_FLOOD;
        br_init_port(p);
-       p->state = BR_STATE_DISABLED;
+       br_set_state(p, BR_STATE_DISABLED);
        br_stp_port_timer_init(p);
        br_multicast_add_port(p);
 
index 0fa66b83685f44b824ec726c2cfae7aca4d11475..2ff9706647f2cb9f7930d22d0a3092fb3fe0d225 100644 (file)
@@ -301,7 +301,7 @@ static int br_set_port_state(struct net_bridge_port *p, u8 state)
            (!netif_oper_up(p->dev) && state != BR_STATE_DISABLED))
                return -ENETDOWN;
 
-       p->state = state;
+       br_set_state(p, state);
        br_log_state(p);
        br_port_state_selection(p->br);
        return 0;
index f53592fc3ef97048ae6e2da35bd03e7091070d6a..fe7463c2af9a32bd65d12278bd3be16961828f5e 100644 (file)
@@ -766,6 +766,7 @@ static inline void br_nf_core_fini(void) {}
 
 /* br_stp.c */
 void br_log_state(const struct net_bridge_port *p);
+void br_set_state(struct net_bridge_port *p, unsigned int state);
 struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
 void br_init_port(struct net_bridge_port *p);
 void br_become_designated_port(struct net_bridge_port *p);
index 3c86f0538cbb4a056bc274c971e254cb3d8da0f8..2b047bcf42a4eb1c450c0283af9bea2676052836 100644 (file)
@@ -36,6 +36,11 @@ void br_log_state(const struct net_bridge_port *p)
                br_port_state_names[p->state]);
 }
 
+void br_set_state(struct net_bridge_port *p, unsigned int state)
+{
+       p->state = state;
+}
+
 /* called under bridge lock */
 struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no)
 {
@@ -107,7 +112,7 @@ static void br_root_port_block(const struct net_bridge *br,
        br_notice(br, "port %u(%s) tried to become root port (blocked)",
                  (unsigned int) p->port_no, p->dev->name);
 
-       p->state = BR_STATE_LISTENING;
+       br_set_state(p, BR_STATE_LISTENING);
        br_log_state(p);
        br_ifinfo_notify(RTM_NEWLINK, p);
 
@@ -387,7 +392,7 @@ static void br_make_blocking(struct net_bridge_port *p)
                    p->state == BR_STATE_LEARNING)
                        br_topology_change_detection(p->br);
 
-               p->state = BR_STATE_BLOCKING;
+               br_set_state(p, BR_STATE_BLOCKING);
                br_log_state(p);
                br_ifinfo_notify(RTM_NEWLINK, p);
 
@@ -404,13 +409,13 @@ static void br_make_forwarding(struct net_bridge_port *p)
                return;
 
        if (br->stp_enabled == BR_NO_STP || br->forward_delay == 0) {
-               p->state = BR_STATE_FORWARDING;
+               br_set_state(p, BR_STATE_FORWARDING);
                br_topology_change_detection(br);
                del_timer(&p->forward_delay_timer);
        } else if (br->stp_enabled == BR_KERNEL_STP)
-               p->state = BR_STATE_LISTENING;
+               br_set_state(p, BR_STATE_LISTENING);
        else
-               p->state = BR_STATE_LEARNING;
+               br_set_state(p, BR_STATE_LEARNING);
 
        br_multicast_enable_port(p);
        br_log_state(p);
index 189ba1e7d8515945db5593c053b7751d36a02d3b..41146872c1b47ca6ee3ac48c14e672a9743273d4 100644 (file)
@@ -37,7 +37,7 @@ void br_init_port(struct net_bridge_port *p)
 {
        p->port_id = br_make_port_id(p->priority, p->port_no);
        br_become_designated_port(p);
-       p->state = BR_STATE_BLOCKING;
+       br_set_state(p, BR_STATE_BLOCKING);
        p->topology_change_ack = 0;
        p->config_pending = 0;
 }
@@ -100,7 +100,7 @@ void br_stp_disable_port(struct net_bridge_port *p)
 
        wasroot = br_is_root_bridge(br);
        br_become_designated_port(p);
-       p->state = BR_STATE_DISABLED;
+       br_set_state(p, BR_STATE_DISABLED);
        p->topology_change_ack = 0;
        p->config_pending = 0;
 
index 558c46d19e0559c6c4f015e49d6b3e77d2205f87..4fcaa67750fda845ad0a180332c4cd96a9524086 100644 (file)
@@ -87,11 +87,11 @@ static void br_forward_delay_timer_expired(unsigned long arg)
                 (unsigned int) p->port_no, p->dev->name);
        spin_lock(&br->lock);
        if (p->state == BR_STATE_LISTENING) {
-               p->state = BR_STATE_LEARNING;
+               br_set_state(p, BR_STATE_LEARNING);
                mod_timer(&p->forward_delay_timer,
                          jiffies + br->forward_delay);
        } else if (p->state == BR_STATE_LEARNING) {
-               p->state = BR_STATE_FORWARDING;
+               br_set_state(p, BR_STATE_FORWARDING);
                if (br_is_designated_for_some_port(br))
                        br_topology_change_detection(br);
                netif_carrier_on(br->dev);