From patchwork Tue Jan 15 13:42:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1025183 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="m+XSooky"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fBP71m0Rz9sCh for ; Wed, 16 Jan 2019 00:43:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729819AbfAONnF (ORCPT ); Tue, 15 Jan 2019 08:43:05 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:35666 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729245AbfAONnF (ORCPT ); Tue, 15 Jan 2019 08:43:05 -0500 Received: by mail-wr1-f66.google.com with SMTP id 96so3031158wrb.2 for ; Tue, 15 Jan 2019 05:43:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=eOqmwLiAVwqoVJtzCp79k3yO/ia+6S44BCV6c87dbJs=; b=m+XSooky/OQAs0gOMO72iB8g2Ig7tgVg1iAudiTsakAx5wvRVgvmm+L1/mMmFyBLIf rDX7+5OrJRA2CjF9rfGnzaDET+auDdGdRhQpUWUg8YO9g+MvuYQtGw2j5myh/cuD95Y2 abpgFZ2foBhsTsXjXzKFOrLXqvoXg6DpWErq1iq02y8mwzcev3ocRxWAdISmqD+qCsQa jrO/fheIM1XpgbjVEx0nTzcfMmc0FWCO+/+AYD+GKVflpjBjeABiozQ0TI2LaS5CX1Bt 8V6QKXEtfhM3y+PFea/pfR+gWEyZJdi41O71+DOZFL3BNdjpro2fnkgFkQTMUZkAIBDK gvRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=eOqmwLiAVwqoVJtzCp79k3yO/ia+6S44BCV6c87dbJs=; b=Y5gP5CG0KPGz8GGTazV9WivrrIdBN4nblyLoGTLF2+0b0VMS9pUbDN1e4Hj/q/LCRJ Mt0ceDpNpA6XVLpTM5BnSW6N4b66InRjIa286Dc3Yg143dS5w63hZqRzTp9J7bK0GSrf bpZEq6K9kfIN4N6z4MCmWEyLE3ZwkMpo1iYLCeiYaruxrq7lvWqlOB+daJf/mHaQEshB +/FDgiWYwcsNZfbFfWDwlmiOfDy3SKemEv6FW+KGRx+Jx6iNyzSrkvqHPyg9rom2LWOS 2eyNX5LRwy0GYcmiij5J4zDvdQaBiU5sNu+klBhDJvvvv0AuDhWtSrCtH0KV6fDcC7M2 n3zQ== X-Gm-Message-State: AJcUukee3q/Ft7HHxCOZWT5Bxsifr32KOWrNNYvxmBYtZPZfmMjNk6UT O8ssmMPpr3FpMFOmmsA8vHqvkPa5 X-Google-Smtp-Source: ALg8bN6LKDyrr+8sGSwY94cvvI+OpQSTaITnp4Zhzaww+xHUfSdIPaDmLBLPhzxnekuRnx9/g8Zkvw== X-Received: by 2002:adf:b6a1:: with SMTP id j33mr3223863wre.55.1547559781956; Tue, 15 Jan 2019 05:43:01 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id t4sm81085998wrm.6.2019.01.15.05.43.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Jan 2019 05:43:01 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, David Ahern , Roopa Prabhu , David Herrmann , Tom Gundersen Subject: [PATCH v2 1/3] net: introduce SO_BINDTOIFINDEX sockopt Date: Tue, 15 Jan 2019 14:42:14 +0100 Message-Id: <20190115134216.1757-1-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This introduces a new generic SOL_SOCKET-level socket option called SO_BINDTOIFINDEX. It behaves similar to SO_BINDTODEVICE, but takes a network interface index as argument, rather than the network interface name. User-space often refers to network-interfaces via their index, but has to temporarily resolve it to a name for a call into SO_BINDTODEVICE. This might pose problems when the network-device is renamed asynchronously by other parts of the system. When this happens, the SO_BINDTODEVICE might either fail, or worse, it might bind to the wrong device. In most cases user-space only ever operates on devices which they either manage themselves, or otherwise have a guarantee that the device name will not change (e.g., devices that are UP cannot be renamed). However, particularly in libraries this guarantee is non-obvious and it would be nice if that race-condition would simply not exist. It would make it easier for those libraries to operate even in situations where the device-name might change under the hood. A real use-case that we recently hit is trying to start the network stack early in the initrd but make it survive into the real system. Existing distributions rename network-interfaces during the transition from initrd into the real system. This, obviously, cannot affect devices that are up and running (unless you also consider moving them between network-namespaces). However, the network manager now has to make sure its management engine for dormant devices will not run in parallel to these renames. Particularly, when you offload operations like DHCP into separate processes, these might setup their sockets early, and thus have to resolve the device-name possibly running into this race-condition. By avoiding a call to resolve the device-name, we no longer depend on the name and can run network setup of dormant devices in parallel to the transition off the initrd. The SO_BINDTOIFINDEX ioctl plugs this race. Reviewed-by: Tom Gundersen Signed-off-by: David Herrmann Acked-by: Willem de Bruijn --- v2: - Rename to SO_BINDTOIFINDEX from SO_BINDTOIF - skip 0x0040 SO-value on sparc, as it is already used arch/alpha/include/uapi/asm/socket.h | 2 ++ arch/ia64/include/uapi/asm/socket.h | 2 ++ arch/mips/include/uapi/asm/socket.h | 2 ++ arch/parisc/include/uapi/asm/socket.h | 2 ++ arch/s390/include/uapi/asm/socket.h | 2 ++ arch/sparc/include/uapi/asm/socket.h | 2 ++ arch/xtensa/include/uapi/asm/socket.h | 2 ++ include/uapi/asm-generic/socket.h | 2 ++ net/core/sock.c | 46 +++++++++++++++++++++------ 9 files changed, 52 insertions(+), 10 deletions(-) diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h index 065fb372e355..b1c9b542c021 100644 --- a/arch/alpha/include/uapi/asm/socket.h +++ b/arch/alpha/include/uapi/asm/socket.h @@ -115,4 +115,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/ia64/include/uapi/asm/socket.h b/arch/ia64/include/uapi/asm/socket.h index c872c4e6bafb..ba0d245f9576 100644 --- a/arch/ia64/include/uapi/asm/socket.h +++ b/arch/ia64/include/uapi/asm/socket.h @@ -117,4 +117,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* _ASM_IA64_SOCKET_H */ diff --git a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/asm/socket.h index 71370fb3ceef..73e25e35d803 100644 --- a/arch/mips/include/uapi/asm/socket.h +++ b/arch/mips/include/uapi/asm/socket.h @@ -126,4 +126,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h index 061b9cf2a779..52bed5976cbe 100644 --- a/arch/parisc/include/uapi/asm/socket.h +++ b/arch/parisc/include/uapi/asm/socket.h @@ -107,4 +107,6 @@ #define SO_TXTIME 0x4036 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 0x4037 + #endif /* _UAPI_ASM_SOCKET_H */ diff --git a/arch/s390/include/uapi/asm/socket.h b/arch/s390/include/uapi/asm/socket.h index 39d901476ee5..49c971587087 100644 --- a/arch/s390/include/uapi/asm/socket.h +++ b/arch/s390/include/uapi/asm/socket.h @@ -114,4 +114,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* _ASM_SOCKET_H */ diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h index 7ea35e5601b6..bbdb81594dd4 100644 --- a/arch/sparc/include/uapi/asm/socket.h +++ b/arch/sparc/include/uapi/asm/socket.h @@ -104,6 +104,8 @@ #define SO_TXTIME 0x003f #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 0x0041 + /* Security levels - as per NRL IPv6 - don't actually do anything */ #define SO_SECURITY_AUTHENTICATION 0x5001 #define SO_SECURITY_ENCRYPTION_TRANSPORT 0x5002 diff --git a/arch/xtensa/include/uapi/asm/socket.h b/arch/xtensa/include/uapi/asm/socket.h index 1de07a7f7680..b434217783d0 100644 --- a/arch/xtensa/include/uapi/asm/socket.h +++ b/arch/xtensa/include/uapi/asm/socket.h @@ -119,4 +119,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* _XTENSA_SOCKET_H */ diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h index a12692e5f7a8..3066ab3853a8 100644 --- a/include/uapi/asm-generic/socket.h +++ b/include/uapi/asm-generic/socket.h @@ -110,4 +110,6 @@ #define SO_TXTIME 61 #define SCM_TXTIME SO_TXTIME +#define SO_BINDTOIFINDEX 62 + #endif /* __ASM_GENERIC_SOCKET_H */ diff --git a/net/core/sock.c b/net/core/sock.c index 6aa2e7e0b4fb..b53764ebb973 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -520,20 +520,43 @@ struct dst_entry *sk_dst_check(struct sock *sk, u32 cookie) } EXPORT_SYMBOL(sk_dst_check); -static int sock_setbindtodevice(struct sock *sk, char __user *optval, - int optlen) +static int sock_setbindtodevice_locked(struct sock *sk, int ifindex) { int ret = -ENOPROTOOPT; #ifdef CONFIG_NETDEVICES struct net *net = sock_net(sk); - char devname[IFNAMSIZ]; - int index; /* Sorry... */ ret = -EPERM; if (!ns_capable(net->user_ns, CAP_NET_RAW)) goto out; + ret = -EINVAL; + if (ifindex < 0) + goto out; + + sk->sk_bound_dev_if = ifindex; + if (sk->sk_prot->rehash) + sk->sk_prot->rehash(sk); + sk_dst_reset(sk); + + ret = 0; + +out: +#endif + + return ret; +} + +static int sock_setbindtodevice(struct sock *sk, char __user *optval, + int optlen) +{ + int ret = -ENOPROTOOPT; +#ifdef CONFIG_NETDEVICES + struct net *net = sock_net(sk); + char devname[IFNAMSIZ]; + int index; + ret = -EINVAL; if (optlen < 0) goto out; @@ -566,14 +589,9 @@ static int sock_setbindtodevice(struct sock *sk, char __user *optval, } lock_sock(sk); - sk->sk_bound_dev_if = index; - if (sk->sk_prot->rehash) - sk->sk_prot->rehash(sk); - sk_dst_reset(sk); + ret = sock_setbindtodevice_locked(sk, index); release_sock(sk); - ret = 0; - out: #endif @@ -1055,6 +1073,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname, } break; + case SO_BINDTOIFINDEX: + ret = sock_setbindtodevice_locked(sk, val); + break; + default: ret = -ENOPROTOOPT; break; @@ -1399,6 +1421,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname, SOF_TXTIME_REPORT_ERRORS : 0; break; + case SO_BINDTOIFINDEX: + v.val = sk->sk_bound_dev_if; + break; + default: /* We implement the SO_SNDLOWAT etc to not be settable * (1003.1g 7). From patchwork Tue Jan 15 13:42:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1025184 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IgeVx6fy"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fBP858RJz9sBQ for ; Wed, 16 Jan 2019 00:43:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729825AbfAONnH (ORCPT ); Tue, 15 Jan 2019 08:43:07 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:46979 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729370AbfAONnG (ORCPT ); Tue, 15 Jan 2019 08:43:06 -0500 Received: by mail-wr1-f68.google.com with SMTP id l9so2950853wrt.13 for ; Tue, 15 Jan 2019 05:43:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K3m1i0UMfTa4Fvk61ZdAjfUBd/S5v6yyxQWfax7CAJc=; b=IgeVx6fyq6W3D0IFDaQawMO5zMyuZIOU5G22zFDmYQtAhs2u5q/Sgdi2VyZVhso0+V kWndmEDcLXW8q+OxE5wQ7N43xgTcLOwxS0f/uv32lsjZr6HM8hmCt7MDduIrLZ7R4mng lscQsipqMIUrMqTw3D3p83npglVZ06tajG1tFTYKiXkn2QwjXfw06M1hlcZXrzzY6y3U EmYbNSRvQcrccRiRUto+JseH2/qKURaaIcBWNlV7edB99MX8t5v7V2Wn4VwuBfSjyinf 1X7bj/EKunHj+ExsZ0rwJFgnd7a8fceo4B3ELUUl0r8FPL511sEXYZ9rMwAuT2EkT2On DoEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K3m1i0UMfTa4Fvk61ZdAjfUBd/S5v6yyxQWfax7CAJc=; b=ex42i4GX3kIhBRvU5WNjFrSIQy2mhI+oYgOcPChvKc4v9bAq1cz0WPm5NqZ9kjisGW W0cXXX7r9LgwLs7r63wkkRLfyjt+9LYYK4bxcXRyTR48G6hBXzm2D/yPOR2/tdj0ytnJ NWzsID829ED2vNUteU+/Qdc8w0fIhsLti3TGfg8dDbuD7X1sQ7/hCusBcWFDs3r4QPd5 DxrnLotadwpbisLGWP0iIsurofQx7aMt/kSTATopA2sk9rXU2ZihpZqY6F1COowlUdpY DYo0f8yL3WkYp26PUNvaD63ggGJZ16Mpb7hBsCa9+pBlSkCg+0G9YEhlI/6K6Hr/ZI39 V18g== X-Gm-Message-State: AJcUukc24vnB9VsSACiw3FOd+NkWN82E5HQrSus0mgmS7eN5frCJODkf 7aQ+bxtDRERgFw1OoIvgSDJBx12b X-Google-Smtp-Source: ALg8bN7FNZHhwtoOk48cjn4L+Ypf8Frbbw+sanxpQ/RQ1fXcEJRkRTwfJ6AQ9w3UWbx48aB3CWPgUg== X-Received: by 2002:adf:b595:: with SMTP id c21mr3088421wre.125.1547559783816; Tue, 15 Jan 2019 05:43:03 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id t4sm81085998wrm.6.2019.01.15.05.43.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Jan 2019 05:43:02 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, David Ahern , Roopa Prabhu , David Herrmann , Tom Gundersen Subject: [PATCH v2 2/3] net/ipv4/udp_tunnel: prefer SO_BINDTOIFINDEX over SO_BINDTODEVICE Date: Tue, 15 Jan 2019 14:42:15 +0100 Message-Id: <20190115134216.1757-2-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190115134216.1757-1-dh.herrmann@gmail.com> References: <20190115134216.1757-1-dh.herrmann@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The udp-tunnel setup allows binding sockets to a network device. Prefer the new SO_BINDTOIFINDEX to avoid temporarily resolving the device-name just to look it up in the ioctl again. Reviewed-by: Tom Gundersen Signed-off-by: David Herrmann --- v2: - Rename to SO_BINDTOIFINDEX from SO_BINDTOIF net/ipv4/udp_tunnel.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/net/ipv4/udp_tunnel.c b/net/ipv4/udp_tunnel.c index be8b5b2157d8..e93cc0379201 100644 --- a/net/ipv4/udp_tunnel.c +++ b/net/ipv4/udp_tunnel.c @@ -21,18 +21,9 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg *cfg, goto error; if (cfg->bind_ifindex) { - struct net_device *dev; - - dev = dev_get_by_index(net, cfg->bind_ifindex); - if (!dev) { - err = -ENODEV; - goto error; - } - - err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, - dev->name, strlen(dev->name) + 1); - dev_put(dev); - + err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTOIFINDEX, + (void *)&cfg->bind_ifindex, + sizeof(cfg->bind_ifindex)); if (err < 0) goto error; } From patchwork Tue Jan 15 13:42:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Herrmann X-Patchwork-Id: 1025185 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="OfVejXyt"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43fBPB38yDz9sBQ for ; Wed, 16 Jan 2019 00:43:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729829AbfAONnJ (ORCPT ); Tue, 15 Jan 2019 08:43:09 -0500 Received: from mail-wr1-f68.google.com ([209.85.221.68]:44577 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729245AbfAONnH (ORCPT ); Tue, 15 Jan 2019 08:43:07 -0500 Received: by mail-wr1-f68.google.com with SMTP id z5so2965721wrt.11 for ; Tue, 15 Jan 2019 05:43:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HkQn4bG3pISjDbxvsZvRVeGYaPLNxlcaFkxUZcNsh1M=; b=OfVejXytTIhBBxfpULyLiPX0Y/eTTCsDoi6iLQAs+e+R2hjcMN+Bpr7mTrhLMIP0I7 A45J3/a/4MPGRvevHtSauJgHv9qIhA4ZkzZQfzWpSeEHatz1xsDPeOEeVdiOAWw9G6GO Mdl7laPj10eEeMrZXt7ynkwkAEajphYUxM+xjnxdRpyeRYwd7i2XXmHeFuA/TrfGPSOH Vd9fLrr6e4iZCVhY45khknKJRmrZ2lltJ2CjuD3o76He8L2UzXPA825Nua55RXWQZRkH dqLtdN5qZaNbg2GOtWbeGJC1spDG3z4MqE/63eoeZ35F66NkyfCopca2qms6s0LptQnt uXQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HkQn4bG3pISjDbxvsZvRVeGYaPLNxlcaFkxUZcNsh1M=; b=kZQp+mIHwCjPXQ7bhI/Yc4AtJcoQ8D6yz3fXoUaclXBA6JMYn6riTLNQ+pRWV+0n0C 3Uh4RraTgipGK7oavjeBLptWXJZKYXvvSncqnurePgmasmUAvGNOFhR9gqOYt+/kLaPM ZyISyynj9MQDPdXj8ryLbvmLzmPM1sdxFlo8Q3bcHy24URnAWPPs+H69S1ltcLMq6G4l oVVdkDPX+M/LkNUPBS651vQiaAIUTFL0HAumz8GTJcAY65ln/Fw2KJg4D0itzULLcSDD UZe5O2fWqAv2Wzo7rjPNPv3szCqt/YoE2V2YM2gBGq3xVlyu+FmG9vCaeIWXpVZQ5Ow+ iEHA== X-Gm-Message-State: AJcUukdqu4tRAg7oLfG7dANg4fxRQM65EYv2ZmLmigsoFBBkRBZEo4UR 1VKW9ELNzG9Vaz76cXiBejlEA1Q+ X-Google-Smtp-Source: ALg8bN6EggYU8L7nAldOUYDdE+3/CP5TUDEMonU0/S81d5AOIpad/Nj5PIlsHJ6cgWzhc0P0hBJfVA== X-Received: by 2002:a5d:6907:: with SMTP id t7mr3159003wru.226.1547559784975; Tue, 15 Jan 2019 05:43:04 -0800 (PST) Received: from david-x1.fritz.box (p200300C2A71D0D0011DEB1B092EC6547.dip0.t-ipconnect.de. [2003:c2:a71d:d00:11de:b1b0:92ec:6547]) by smtp.gmail.com with ESMTPSA id t4sm81085998wrm.6.2019.01.15.05.43.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Jan 2019 05:43:04 -0800 (PST) From: David Herrmann To: netdev@vger.kernel.org Cc: davem@davemloft.net, David Ahern , Roopa Prabhu , David Herrmann , Tom Gundersen Subject: [PATCH v2 3/3] net/ipv6/udp_tunnel: prefer SO_BINDTOIFINDEX over SO_BINDTODEVICE Date: Tue, 15 Jan 2019 14:42:16 +0100 Message-Id: <20190115134216.1757-3-dh.herrmann@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190115134216.1757-1-dh.herrmann@gmail.com> References: <20190115134216.1757-1-dh.herrmann@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The udp-tunnel setup allows binding sockets to a network device. Prefer the new SO_BINDTOIFINDEX to avoid temporarily resolving the device-name just to look it up in the ioctl again. Reviewed-by: Tom Gundersen Signed-off-by: David Herrmann --- v2: - Rename to SO_BINDTOIFINDEX from SO_BINDTOIF net/ipv6/ip6_udp_tunnel.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/net/ipv6/ip6_udp_tunnel.c b/net/ipv6/ip6_udp_tunnel.c index ad1a9ccd4b44..25430c991cea 100644 --- a/net/ipv6/ip6_udp_tunnel.c +++ b/net/ipv6/ip6_udp_tunnel.c @@ -32,18 +32,9 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg, goto error; } if (cfg->bind_ifindex) { - struct net_device *dev; - - dev = dev_get_by_index(net, cfg->bind_ifindex); - if (!dev) { - err = -ENODEV; - goto error; - } - - err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, - dev->name, strlen(dev->name) + 1); - dev_put(dev); - + err = kernel_setsockopt(sock, SOL_SOCKET, SO_BINDTOIFINDEX, + (void *)&cfg->bind_ifindex, + sizeof(cfg->bind_ifindex)); if (err < 0) goto error; }