|
|
@@ -139,6 +139,7 @@ static inline size_t br_port_info_size(void)
|
|
|
+ nla_total_size(1) /* IFLA_BRPORT_PROXYARP_WIFI */
|
|
|
+ nla_total_size(1) /* IFLA_BRPORT_VLAN_TUNNEL */
|
|
|
+ nla_total_size(1) /* IFLA_BRPORT_NEIGH_SUPPRESS */
|
|
|
+ + nla_total_size(1) /* IFLA_BRPORT_ISOLATED */
|
|
|
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */
|
|
|
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_BRIDGE_ID */
|
|
|
+ nla_total_size(sizeof(u16)) /* IFLA_BRPORT_DESIGNATED_PORT */
|
|
|
@@ -213,7 +214,8 @@ static int br_port_fill_attrs(struct sk_buff *skb,
|
|
|
BR_VLAN_TUNNEL)) ||
|
|
|
nla_put_u16(skb, IFLA_BRPORT_GROUP_FWD_MASK, p->group_fwd_mask) ||
|
|
|
nla_put_u8(skb, IFLA_BRPORT_NEIGH_SUPPRESS,
|
|
|
- !!(p->flags & BR_NEIGH_SUPPRESS)))
|
|
|
+ !!(p->flags & BR_NEIGH_SUPPRESS)) ||
|
|
|
+ nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)))
|
|
|
return -EMSGSIZE;
|
|
|
|
|
|
timerval = br_timer_value(&p->message_age_timer);
|
|
|
@@ -660,6 +662,7 @@ static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
|
|
|
[IFLA_BRPORT_VLAN_TUNNEL] = { .type = NLA_U8 },
|
|
|
[IFLA_BRPORT_GROUP_FWD_MASK] = { .type = NLA_U16 },
|
|
|
[IFLA_BRPORT_NEIGH_SUPPRESS] = { .type = NLA_U8 },
|
|
|
+ [IFLA_BRPORT_ISOLATED] = { .type = NLA_U8 },
|
|
|
};
|
|
|
|
|
|
/* Change the state of the port and notify spanning tree */
|
|
|
@@ -810,6 +813,10 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[])
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
+ err = br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED);
|
|
|
+ if (err)
|
|
|
+ return err;
|
|
|
+
|
|
|
br_port_flags_change(p, old_flags ^ p->flags);
|
|
|
return 0;
|
|
|
}
|