]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
pptp: support sockets bound to an interface
authorUlrich Weber <ulrich.weber@gmail.com>
Tue, 14 Jan 2020 14:19:43 +0000 (15:19 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Jan 2020 22:13:09 +0000 (23:13 +0100)
use sk_bound_dev_if for route lookup as already done
in most of the other ip_route_output_ports() calls.

Since most PPPoA providers use 10.0.0.138 as default gateway IP
this will allow connections to multiple PPTP providers with the
same IP address over different interfaces.

Signed-off-by: Ulrich Weber <ulrich.weber@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ppp/pptp.c

index e1fabb3e3246f351dd34de0ae51e6d386148e1a1..acccb747aedad6e4b5d82f16df78cfbe1fa529fb 100644 (file)
@@ -155,7 +155,7 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
                                   opt->dst_addr.sin_addr.s_addr,
                                   opt->src_addr.sin_addr.s_addr,
                                   0, 0, IPPROTO_GRE,
-                                  RT_TOS(0), 0);
+                                  RT_TOS(0), sk->sk_bound_dev_if);
        if (IS_ERR(rt))
                goto tx_error;
 
@@ -444,7 +444,8 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
                                   opt->dst_addr.sin_addr.s_addr,
                                   opt->src_addr.sin_addr.s_addr,
                                   0, 0,
-                                  IPPROTO_GRE, RT_CONN_FLAGS(sk), 0);
+                                  IPPROTO_GRE, RT_CONN_FLAGS(sk),
+                                  sk->sk_bound_dev_if);
        if (IS_ERR(rt)) {
                error = -EHOSTUNREACH;
                goto end;