Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Minor overlapping changes for both merge conflicts. Resolution work done by Stephen Rothwell was used as a reference. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -370,7 +370,6 @@ static void __gre_xmit(struct sk_buff *skb, struct net_device *dev,
|
||||
tunnel->parms.o_flags, proto, tunnel->parms.o_key,
|
||||
htonl(tunnel->o_seqno));
|
||||
|
||||
skb_set_inner_protocol(skb, proto);
|
||||
ip_tunnel_xmit(skb, dev, tnl_params, tnl_params->protocol);
|
||||
}
|
||||
|
||||
|
@@ -557,6 +557,33 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
|
||||
.get_link_net = ip_tunnel_get_link_net,
|
||||
};
|
||||
|
||||
static bool is_vti_tunnel(const struct net_device *dev)
|
||||
{
|
||||
return dev->netdev_ops == &vti_netdev_ops;
|
||||
}
|
||||
|
||||
static int vti_device_event(struct notifier_block *unused,
|
||||
unsigned long event, void *ptr)
|
||||
{
|
||||
struct net_device *dev = netdev_notifier_info_to_dev(ptr);
|
||||
struct ip_tunnel *tunnel = netdev_priv(dev);
|
||||
|
||||
if (!is_vti_tunnel(dev))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (event) {
|
||||
case NETDEV_DOWN:
|
||||
if (!net_eq(tunnel->net, dev_net(dev)))
|
||||
xfrm_garbage_collect(tunnel->net);
|
||||
break;
|
||||
}
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block vti_notifier_block __read_mostly = {
|
||||
.notifier_call = vti_device_event,
|
||||
};
|
||||
|
||||
static int __init vti_init(void)
|
||||
{
|
||||
const char *msg;
|
||||
@@ -564,6 +591,8 @@ static int __init vti_init(void)
|
||||
|
||||
pr_info("IPv4 over IPsec tunneling driver\n");
|
||||
|
||||
register_netdevice_notifier(&vti_notifier_block);
|
||||
|
||||
msg = "tunnel device";
|
||||
err = register_pernet_device(&vti_net_ops);
|
||||
if (err < 0)
|
||||
@@ -596,6 +625,7 @@ xfrm_proto_ah_failed:
|
||||
xfrm_proto_esp_failed:
|
||||
unregister_pernet_device(&vti_net_ops);
|
||||
pernet_dev_failed:
|
||||
unregister_netdevice_notifier(&vti_notifier_block);
|
||||
pr_err("vti init: failed to register %s\n", msg);
|
||||
return err;
|
||||
}
|
||||
@@ -607,6 +637,7 @@ static void __exit vti_fini(void)
|
||||
xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
|
||||
xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
|
||||
unregister_pernet_device(&vti_net_ops);
|
||||
unregister_netdevice_notifier(&vti_notifier_block);
|
||||
}
|
||||
|
||||
module_init(vti_init);
|
||||
|
Reference in New Issue
Block a user