diff options
Diffstat (limited to 'drivers/net/wireguard/device.c')
-rw-r--r-- | drivers/net/wireguard/device.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c index de8a4fad4d3f..1155783a8f10 100644 --- a/drivers/net/wireguard/device.c +++ b/drivers/net/wireguard/device.c @@ -29,7 +29,9 @@ static LIST_HEAD(device_list); static int wg_open(struct net_device *dev) { struct in_device *dev_v4 = __in_dev_get_rtnl(dev); +#ifndef COMPAT_CANNOT_USE_IN6_DEV_GET struct inet6_dev *dev_v6 = __in6_dev_get(dev); +#endif struct wg_device *wg = netdev_priv(dev); struct wg_peer *peer; int ret; @@ -42,8 +44,14 @@ static int wg_open(struct net_device *dev) IN_DEV_CONF_SET(dev_v4, SEND_REDIRECTS, false); IPV4_DEVCONF_ALL(dev_net(dev), SEND_REDIRECTS) = false; } +#ifndef COMPAT_CANNOT_USE_IN6_DEV_GET if (dev_v6) +#ifndef COMPAT_CANNOT_USE_DEV_CNF dev_v6->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_NONE; +#else + dev_v6->addr_gen_mode = IN6_ADDR_GEN_MODE_NONE; +#endif +#endif mutex_lock(&wg->device_update_lock); ret = wg_socket_init(wg, wg->incoming_port); @@ -262,19 +270,26 @@ static void wg_setup(struct net_device *dev) max(sizeof(struct ipv6hdr), sizeof(struct iphdr)); dev->netdev_ops = &netdev_ops; + dev->header_ops = &ip_tunnel_header_ops; dev->hard_header_len = 0; dev->addr_len = 0; dev->needed_headroom = DATA_PACKET_HEAD_ROOM; dev->needed_tailroom = noise_encrypted_len(MESSAGE_PADDING_MULTIPLE); dev->type = ARPHRD_NONE; dev->flags = IFF_POINTOPOINT | IFF_NOARP; +#ifndef COMPAT_CANNOT_USE_IFF_NO_QUEUE dev->priv_flags |= IFF_NO_QUEUE; +#else + dev->tx_queue_len = 0; +#endif dev->features |= NETIF_F_LLTX; dev->features |= WG_NETDEV_FEATURES; dev->hw_features |= WG_NETDEV_FEATURES; dev->hw_enc_features |= WG_NETDEV_FEATURES; dev->mtu = ETH_DATA_LEN - overhead; +#ifndef COMPAT_CANNOT_USE_MAX_MTU dev->max_mtu = round_down(INT_MAX, MESSAGE_PADDING_MULTIPLE) - overhead; +#endif SET_NETDEV_DEVTYPE(dev, &device_type); @@ -393,7 +408,7 @@ static struct rtnl_link_ops link_ops __read_mostly = { .newlink = wg_newlink, }; -static void wg_netns_exit(struct net *net) +static void wg_netns_pre_exit(struct net *net) { struct wg_device *wg; @@ -412,7 +427,7 @@ static void wg_netns_exit(struct net *net) } static struct pernet_operations pernet_ops = { - .exit = wg_netns_exit + .pre_exit = wg_netns_pre_exit }; int __init wg_device_init(void) |