forked from Minki/linux
bridge: netlink: add support for netfilter tables config
Add support to allow getting/setting netfilter tables settings. Currently these are IFLA_BR_NF_CALL_IPTABLES, IFLA_BR_NF_CALL_IP6TABLES and IFLA_BR_NF_CALL_ARPTABLES. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7e4df51eb3
commit
93870cc02a
@ -259,6 +259,9 @@ enum {
|
||||
IFLA_BR_MCAST_QUERY_INTVL,
|
||||
IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
|
||||
IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
|
||||
IFLA_BR_NF_CALL_IPTABLES,
|
||||
IFLA_BR_NF_CALL_IP6TABLES,
|
||||
IFLA_BR_NF_CALL_ARPTABLES,
|
||||
__IFLA_BR_MAX,
|
||||
};
|
||||
|
||||
|
@ -781,6 +781,9 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
|
||||
[IFLA_BR_MCAST_QUERY_INTVL] = { .type = NLA_U64 },
|
||||
[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = { .type = NLA_U64 },
|
||||
[IFLA_BR_MCAST_STARTUP_QUERY_INTVL] = { .type = NLA_U64 },
|
||||
[IFLA_BR_NF_CALL_IPTABLES] = { .type = NLA_U8 },
|
||||
[IFLA_BR_NF_CALL_IP6TABLES] = { .type = NLA_U8 },
|
||||
[IFLA_BR_NF_CALL_ARPTABLES] = { .type = NLA_U8 },
|
||||
};
|
||||
|
||||
static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
|
||||
@ -970,6 +973,25 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
|
||||
br->multicast_startup_query_interval = clock_t_to_jiffies(val);
|
||||
}
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
if (data[IFLA_BR_NF_CALL_IPTABLES]) {
|
||||
u8 val = nla_get_u8(data[IFLA_BR_NF_CALL_IPTABLES]);
|
||||
|
||||
br->nf_call_iptables = val ? true : false;
|
||||
}
|
||||
|
||||
if (data[IFLA_BR_NF_CALL_IP6TABLES]) {
|
||||
u8 val = nla_get_u8(data[IFLA_BR_NF_CALL_IP6TABLES]);
|
||||
|
||||
br->nf_call_ip6tables = val ? true : false;
|
||||
}
|
||||
|
||||
if (data[IFLA_BR_NF_CALL_ARPTABLES]) {
|
||||
u8 val = nla_get_u8(data[IFLA_BR_NF_CALL_ARPTABLES]);
|
||||
|
||||
br->nf_call_arptables = val ? true : false;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1013,6 +1035,11 @@ static size_t br_get_size(const struct net_device *brdev)
|
||||
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_QUERY_INTVL */
|
||||
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_QUERY_RESPONSE_INTVL */
|
||||
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_STARTUP_QUERY_INTVL */
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_NF_CALL_IPTABLES */
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_NF_CALL_IP6TABLES */
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_NF_CALL_ARPTABLES */
|
||||
#endif
|
||||
0;
|
||||
}
|
||||
@ -1070,7 +1097,6 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
|
||||
if (nla_put_be16(skb, IFLA_BR_VLAN_PROTOCOL, br->vlan_proto))
|
||||
return -EMSGSIZE;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
|
||||
if (nla_put_u8(skb, IFLA_BR_MCAST_ROUTER, br->multicast_router) ||
|
||||
nla_put_u8(skb, IFLA_BR_MCAST_SNOOPING, !br->multicast_disabled) ||
|
||||
@ -1105,6 +1131,15 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
|
||||
if (nla_put_u64(skb, IFLA_BR_MCAST_STARTUP_QUERY_INTVL, clockval))
|
||||
return -EMSGSIZE;
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
if (nla_put_u8(skb, IFLA_BR_NF_CALL_IPTABLES,
|
||||
br->nf_call_iptables ? 1 : 0) ||
|
||||
nla_put_u8(skb, IFLA_BR_NF_CALL_IP6TABLES,
|
||||
br->nf_call_ip6tables ? 1 : 0) ||
|
||||
nla_put_u8(skb, IFLA_BR_NF_CALL_ARPTABLES,
|
||||
br->nf_call_arptables ? 1 : 0))
|
||||
return -EMSGSIZE;
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user