]> Pileus Git - ~andy/linux/blobdiff - net/bridge/br_stp.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[~andy/linux] / net / bridge / br_stp.c
index 7370d14f634d71427d993dae89cd017067e8fcd1..bb4383e84de91ed78e98f1a777410011a7772003 100644 (file)
@@ -484,3 +484,51 @@ void br_received_tcn_bpdu(struct net_bridge_port *p)
                br_topology_change_acknowledge(p);
        }
 }
+
+/* Change bridge STP parameter */
+int br_set_hello_time(struct net_bridge *br, unsigned long val)
+{
+       unsigned long t = clock_t_to_jiffies(val);
+
+       if (t < BR_MIN_HELLO_TIME || t > BR_MAX_HELLO_TIME)
+               return -ERANGE;
+
+       spin_lock_bh(&br->lock);
+       br->bridge_hello_time = t;
+       if (br_is_root_bridge(br))
+               br->hello_time = br->bridge_hello_time;
+       spin_unlock_bh(&br->lock);
+       return 0;
+}
+
+int br_set_max_age(struct net_bridge *br, unsigned long val)
+{
+       unsigned long t = clock_t_to_jiffies(val);
+
+       if (t < BR_MIN_MAX_AGE || t > BR_MAX_MAX_AGE)
+               return -ERANGE;
+
+       spin_lock_bh(&br->lock);
+       br->bridge_max_age = t;
+       if (br_is_root_bridge(br))
+               br->max_age = br->bridge_max_age;
+       spin_unlock_bh(&br->lock);
+       return 0;
+
+}
+
+int br_set_forward_delay(struct net_bridge *br, unsigned long val)
+{
+       unsigned long t = clock_t_to_jiffies(val);
+
+       if (br->stp_enabled != BR_NO_STP &&
+           (t < BR_MIN_FORWARD_DELAY || t > BR_MAX_FORWARD_DELAY))
+               return -ERANGE;
+
+       spin_lock_bh(&br->lock);
+       br->bridge_forward_delay = t;
+       if (br_is_root_bridge(br))
+               br->forward_delay = br->bridge_forward_delay;
+       spin_unlock_bh(&br->lock);
+       return 0;
+}