The udp-tunnel setup allows binding sockets to a network device. Prefer
the new SO_BINDTOIF to avoid temporarily resolving the device-name just
to look it up in the ioctl again.

Signed-off-by: David Herrmann <dh.herrm...@gmail.com>
---
 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..5d26c501da3b 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_BINDTOIF,
+                                       (void *)&cfg->bind_ifindex,
+                                       sizeof(cfg->bind_ifindex));
                if (err < 0)
                        goto error;
        }
-- 
2.20.1

Reply via email to