tunnels: advertise link netns via netlink
Implement rtnl_link_ops->get_link_net() callback so that IFLA_LINK_NETNSID is added to rtnetlink messages. Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d37512a277
commit
1728d4fabd
|
@ -2923,6 +2923,13 @@ nla_put_failure:
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct net *vxlan_get_link_net(const struct net_device *dev)
|
||||||
|
{
|
||||||
|
struct vxlan_dev *vxlan = netdev_priv(dev);
|
||||||
|
|
||||||
|
return vxlan->net;
|
||||||
|
}
|
||||||
|
|
||||||
static struct rtnl_link_ops vxlan_link_ops __read_mostly = {
|
static struct rtnl_link_ops vxlan_link_ops __read_mostly = {
|
||||||
.kind = "vxlan",
|
.kind = "vxlan",
|
||||||
.maxtype = IFLA_VXLAN_MAX,
|
.maxtype = IFLA_VXLAN_MAX,
|
||||||
|
@ -2934,6 +2941,7 @@ static struct rtnl_link_ops vxlan_link_ops __read_mostly = {
|
||||||
.dellink = vxlan_dellink,
|
.dellink = vxlan_dellink,
|
||||||
.get_size = vxlan_get_size,
|
.get_size = vxlan_get_size,
|
||||||
.fill_info = vxlan_fill_info,
|
.fill_info = vxlan_fill_info,
|
||||||
|
.get_link_net = vxlan_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vxlan_handle_lowerdev_unregister(struct vxlan_net *vn,
|
static void vxlan_handle_lowerdev_unregister(struct vxlan_net *vn,
|
||||||
|
|
|
@ -70,6 +70,7 @@ int ip6_tnl_xmit_ctl(struct ip6_tnl *t, const struct in6_addr *laddr,
|
||||||
__u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw);
|
__u16 ip6_tnl_parse_tlv_enc_lim(struct sk_buff *skb, __u8 *raw);
|
||||||
__u32 ip6_tnl_get_cap(struct ip6_tnl *t, const struct in6_addr *laddr,
|
__u32 ip6_tnl_get_cap(struct ip6_tnl *t, const struct in6_addr *laddr,
|
||||||
const struct in6_addr *raddr);
|
const struct in6_addr *raddr);
|
||||||
|
struct net *ip6_tnl_get_link_net(const struct net_device *dev);
|
||||||
|
|
||||||
static inline void ip6tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
static inline void ip6tunnel_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -141,6 +141,7 @@ int ip_tunnel_encap_del_ops(const struct ip_tunnel_encap_ops *op,
|
||||||
int ip_tunnel_init(struct net_device *dev);
|
int ip_tunnel_init(struct net_device *dev);
|
||||||
void ip_tunnel_uninit(struct net_device *dev);
|
void ip_tunnel_uninit(struct net_device *dev);
|
||||||
void ip_tunnel_dellink(struct net_device *dev, struct list_head *head);
|
void ip_tunnel_dellink(struct net_device *dev, struct list_head *head);
|
||||||
|
struct net *ip_tunnel_get_link_net(const struct net_device *dev);
|
||||||
int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
|
int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
|
||||||
struct rtnl_link_ops *ops, char *devname);
|
struct rtnl_link_ops *ops, char *devname);
|
||||||
|
|
||||||
|
|
|
@ -829,6 +829,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
|
||||||
.dellink = ip_tunnel_dellink,
|
.dellink = ip_tunnel_dellink,
|
||||||
.get_size = ipgre_get_size,
|
.get_size = ipgre_get_size,
|
||||||
.fill_info = ipgre_fill_info,
|
.fill_info = ipgre_fill_info,
|
||||||
|
.get_link_net = ip_tunnel_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
|
static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
|
||||||
|
@ -843,6 +844,7 @@ static struct rtnl_link_ops ipgre_tap_ops __read_mostly = {
|
||||||
.dellink = ip_tunnel_dellink,
|
.dellink = ip_tunnel_dellink,
|
||||||
.get_size = ipgre_get_size,
|
.get_size = ipgre_get_size,
|
||||||
.fill_info = ipgre_fill_info,
|
.fill_info = ipgre_fill_info,
|
||||||
|
.get_link_net = ip_tunnel_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __net_init ipgre_tap_init_net(struct net *net)
|
static int __net_init ipgre_tap_init_net(struct net *net)
|
||||||
|
|
|
@ -972,6 +972,14 @@ void ip_tunnel_dellink(struct net_device *dev, struct list_head *head)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(ip_tunnel_dellink);
|
EXPORT_SYMBOL_GPL(ip_tunnel_dellink);
|
||||||
|
|
||||||
|
struct net *ip_tunnel_get_link_net(const struct net_device *dev)
|
||||||
|
{
|
||||||
|
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||||
|
|
||||||
|
return tunnel->net;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ip_tunnel_get_link_net);
|
||||||
|
|
||||||
int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
|
int ip_tunnel_init_net(struct net *net, int ip_tnl_net_id,
|
||||||
struct rtnl_link_ops *ops, char *devname)
|
struct rtnl_link_ops *ops, char *devname)
|
||||||
{
|
{
|
||||||
|
|
|
@ -531,6 +531,7 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
|
||||||
.dellink = ip_tunnel_dellink,
|
.dellink = ip_tunnel_dellink,
|
||||||
.get_size = vti_get_size,
|
.get_size = vti_get_size,
|
||||||
.fill_info = vti_fill_info,
|
.fill_info = vti_fill_info,
|
||||||
|
.get_link_net = ip_tunnel_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init vti_init(void)
|
static int __init vti_init(void)
|
||||||
|
|
|
@ -498,6 +498,7 @@ static struct rtnl_link_ops ipip_link_ops __read_mostly = {
|
||||||
.dellink = ip_tunnel_dellink,
|
.dellink = ip_tunnel_dellink,
|
||||||
.get_size = ipip_get_size,
|
.get_size = ipip_get_size,
|
||||||
.fill_info = ipip_fill_info,
|
.fill_info = ipip_fill_info,
|
||||||
|
.get_link_net = ip_tunnel_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct xfrm_tunnel ipip_handler __read_mostly = {
|
static struct xfrm_tunnel ipip_handler __read_mostly = {
|
||||||
|
|
|
@ -1662,6 +1662,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
|
||||||
.dellink = ip6gre_dellink,
|
.dellink = ip6gre_dellink,
|
||||||
.get_size = ip6gre_get_size,
|
.get_size = ip6gre_get_size,
|
||||||
.fill_info = ip6gre_fill_info,
|
.fill_info = ip6gre_fill_info,
|
||||||
|
.get_link_net = ip6_tnl_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rtnl_link_ops ip6gre_tap_ops __read_mostly = {
|
static struct rtnl_link_ops ip6gre_tap_ops __read_mostly = {
|
||||||
|
|
|
@ -1760,6 +1760,14 @@ nla_put_failure:
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct net *ip6_tnl_get_link_net(const struct net_device *dev)
|
||||||
|
{
|
||||||
|
struct ip6_tnl *tunnel = netdev_priv(dev);
|
||||||
|
|
||||||
|
return tunnel->net;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ip6_tnl_get_link_net);
|
||||||
|
|
||||||
static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
|
static const struct nla_policy ip6_tnl_policy[IFLA_IPTUN_MAX + 1] = {
|
||||||
[IFLA_IPTUN_LINK] = { .type = NLA_U32 },
|
[IFLA_IPTUN_LINK] = { .type = NLA_U32 },
|
||||||
[IFLA_IPTUN_LOCAL] = { .len = sizeof(struct in6_addr) },
|
[IFLA_IPTUN_LOCAL] = { .len = sizeof(struct in6_addr) },
|
||||||
|
@ -1783,6 +1791,7 @@ static struct rtnl_link_ops ip6_link_ops __read_mostly = {
|
||||||
.dellink = ip6_tnl_dellink,
|
.dellink = ip6_tnl_dellink,
|
||||||
.get_size = ip6_tnl_get_size,
|
.get_size = ip6_tnl_get_size,
|
||||||
.fill_info = ip6_tnl_fill_info,
|
.fill_info = ip6_tnl_fill_info,
|
||||||
|
.get_link_net = ip6_tnl_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct xfrm6_tunnel ip4ip6_handler __read_mostly = {
|
static struct xfrm6_tunnel ip4ip6_handler __read_mostly = {
|
||||||
|
|
|
@ -1016,6 +1016,7 @@ static struct rtnl_link_ops vti6_link_ops __read_mostly = {
|
||||||
.changelink = vti6_changelink,
|
.changelink = vti6_changelink,
|
||||||
.get_size = vti6_get_size,
|
.get_size = vti6_get_size,
|
||||||
.fill_info = vti6_fill_info,
|
.fill_info = vti6_fill_info,
|
||||||
|
.get_link_net = ip6_tnl_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __net_exit vti6_destroy_tunnels(struct vti6_net *ip6n)
|
static void __net_exit vti6_destroy_tunnels(struct vti6_net *ip6n)
|
||||||
|
|
|
@ -1763,6 +1763,7 @@ static struct rtnl_link_ops sit_link_ops __read_mostly = {
|
||||||
.get_size = ipip6_get_size,
|
.get_size = ipip6_get_size,
|
||||||
.fill_info = ipip6_fill_info,
|
.fill_info = ipip6_fill_info,
|
||||||
.dellink = ipip6_dellink,
|
.dellink = ipip6_dellink,
|
||||||
|
.get_link_net = ip_tunnel_get_link_net,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct xfrm_tunnel sit_handler __read_mostly = {
|
static struct xfrm_tunnel sit_handler __read_mostly = {
|
||||||
|
|
Loading…
Reference in New Issue