aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@higgsboson.tk>2015-03-18 05:06:58 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-18 23:21:06 -0400
commitaf615762e972be0c66cf1d156ca4fac13b93c0b0 (patch)
treea72f5d123984746e2f2ed2f93b0678b0a576711c /net/bridge
parent99c4a26a159b28fa46a3e746a9b41b297e73d261 (diff)
bridge: add ageing_time, stp_state, priority over netlink
Signed-off-by: Jörg Thalheim <joerg@higgsboson.tk> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge')
-rw-r--r--net/bridge/br_netlink.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
index 8bc6b67457dc..e1115a224a95 100644
--- a/net/bridge/br_netlink.c
+++ b/net/bridge/br_netlink.c
@@ -733,6 +733,9 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
733 [IFLA_BR_FORWARD_DELAY] = { .type = NLA_U32 }, 733 [IFLA_BR_FORWARD_DELAY] = { .type = NLA_U32 },
734 [IFLA_BR_HELLO_TIME] = { .type = NLA_U32 }, 734 [IFLA_BR_HELLO_TIME] = { .type = NLA_U32 },
735 [IFLA_BR_MAX_AGE] = { .type = NLA_U32 }, 735 [IFLA_BR_MAX_AGE] = { .type = NLA_U32 },
736 [IFLA_BR_AGEING_TIME] = { .type = NLA_U32 },
737 [IFLA_BR_STP_STATE] = { .type = NLA_U32 },
738 [IFLA_BR_PRIORITY] = { .type = NLA_U16 },
736}; 739};
737 740
738static int br_changelink(struct net_device *brdev, struct nlattr *tb[], 741static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
@@ -762,6 +765,24 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
762 return err; 765 return err;
763 } 766 }
764 767
768 if (data[IFLA_BR_AGEING_TIME]) {
769 u32 ageing_time = nla_get_u32(data[IFLA_BR_AGEING_TIME]);
770
771 br->ageing_time = clock_t_to_jiffies(ageing_time);
772 }
773
774 if (data[IFLA_BR_STP_STATE]) {
775 u32 stp_enabled = nla_get_u32(data[IFLA_BR_STP_STATE]);
776
777 br_stp_set_enabled(br, stp_enabled);
778 }
779
780 if (data[IFLA_BR_PRIORITY]) {
781 u32 priority = nla_get_u16(data[IFLA_BR_PRIORITY]);
782
783 br_stp_set_bridge_priority(br, priority);
784 }
785
765 return 0; 786 return 0;
766} 787}
767 788
@@ -770,6 +791,9 @@ static size_t br_get_size(const struct net_device *brdev)
770 return nla_total_size(sizeof(u32)) + /* IFLA_BR_FORWARD_DELAY */ 791 return nla_total_size(sizeof(u32)) + /* IFLA_BR_FORWARD_DELAY */
771 nla_total_size(sizeof(u32)) + /* IFLA_BR_HELLO_TIME */ 792 nla_total_size(sizeof(u32)) + /* IFLA_BR_HELLO_TIME */
772 nla_total_size(sizeof(u32)) + /* IFLA_BR_MAX_AGE */ 793 nla_total_size(sizeof(u32)) + /* IFLA_BR_MAX_AGE */
794 nla_total_size(sizeof(u32)) + /* IFLA_BR_AGEING_TIME */
795 nla_total_size(sizeof(u32)) + /* IFLA_BR_STP_STATE */
796 nla_total_size(sizeof(u16)) + /* IFLA_BR_PRIORITY */
773 0; 797 0;
774} 798}
775 799
@@ -779,10 +803,16 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
779 u32 forward_delay = jiffies_to_clock_t(br->forward_delay); 803 u32 forward_delay = jiffies_to_clock_t(br->forward_delay);
780 u32 hello_time = jiffies_to_clock_t(br->hello_time); 804 u32 hello_time = jiffies_to_clock_t(br->hello_time);
781 u32 age_time = jiffies_to_clock_t(br->max_age); 805 u32 age_time = jiffies_to_clock_t(br->max_age);
806 u32 ageing_time = jiffies_to_clock_t(br->ageing_time);
807 u32 stp_enabled = br->stp_enabled;
808 u16 priority = (br->bridge_id.prio[0] << 8) | br->bridge_id.prio[1];
782 809
783 if (nla_put_u32(skb, IFLA_BR_FORWARD_DELAY, forward_delay) || 810 if (nla_put_u32(skb, IFLA_BR_FORWARD_DELAY, forward_delay) ||
784 nla_put_u32(skb, IFLA_BR_HELLO_TIME, hello_time) || 811 nla_put_u32(skb, IFLA_BR_HELLO_TIME, hello_time) ||
785 nla_put_u32(skb, IFLA_BR_MAX_AGE, age_time)) 812 nla_put_u32(skb, IFLA_BR_MAX_AGE, age_time) ||
813 nla_put_u32(skb, IFLA_BR_AGEING_TIME, ageing_time) ||
814 nla_put_u32(skb, IFLA_BR_STP_STATE, stp_enabled) ||
815 nla_put_u16(skb, IFLA_BR_PRIORITY, priority))
786 return -EMSGSIZE; 816 return -EMSGSIZE;
787 817
788 return 0; 818 return 0;