aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/pptp.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-03-12 00:00:52 -0500
committerDavid S. Miller <davem@davemloft.net>2011-03-12 18:08:42 -0500
commit78fbfd8a653ca972afe479517a40661bfff6d8c3 (patch)
tree9dccc5c16bf269d53d8499064ec95a998e84c646 /drivers/net/pptp.c
parent1561747ddf9d28185548687b11aae7074d6129c4 (diff)
ipv4: Create and use route lookup helpers.
The idea here is this minimizes the number of places one has to edit in order to make changes to how flows are defined and used. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/pptp.c')
-rw-r--r--drivers/net/pptp.c45
1 files changed, 18 insertions, 27 deletions
diff --git a/drivers/net/pptp.c b/drivers/net/pptp.c
index 1af549c89d51..51dfcf8023c7 100644
--- a/drivers/net/pptp.c
+++ b/drivers/net/pptp.c
@@ -189,18 +189,14 @@ static int pptp_xmit(struct ppp_channel *chan, struct sk_buff *skb)
189 if (sk_pppox(po)->sk_state & PPPOX_DEAD) 189 if (sk_pppox(po)->sk_state & PPPOX_DEAD)
190 goto tx_error; 190 goto tx_error;
191 191
192 { 192 rt = ip_route_output_ports(&init_net, NULL,
193 struct flowi fl = { .oif = 0, 193 opt->dst_addr.sin_addr.s_addr,
194 .nl_u = { 194 opt->src_addr.sin_addr.s_addr,
195 .ip4_u = { 195 0, 0, IPPROTO_GRE,
196 .daddr = opt->dst_addr.sin_addr.s_addr, 196 RT_TOS(0), 0);
197 .saddr = opt->src_addr.sin_addr.s_addr, 197 if (IS_ERR(rt))
198 .tos = RT_TOS(0) } }, 198 goto tx_error;
199 .proto = IPPROTO_GRE }; 199
200 rt = ip_route_output_key(&init_net, &fl);
201 if (IS_ERR(rt))
202 goto tx_error;
203 }
204 tdev = rt->dst.dev; 200 tdev = rt->dst.dev;
205 201
206 max_headroom = LL_RESERVED_SPACE(tdev) + sizeof(*iph) + sizeof(*hdr) + 2; 202 max_headroom = LL_RESERVED_SPACE(tdev) + sizeof(*iph) + sizeof(*hdr) + 2;
@@ -467,22 +463,17 @@ static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr,
467 po->chan.private = sk; 463 po->chan.private = sk;
468 po->chan.ops = &pptp_chan_ops; 464 po->chan.ops = &pptp_chan_ops;
469 465
470 { 466 rt = ip_route_output_ports(&init_net, sk,
471 struct flowi fl = { 467 opt->dst_addr.sin_addr.s_addr,
472 .nl_u = { 468 opt->src_addr.sin_addr.s_addr,
473 .ip4_u = { 469 0, 0,
474 .daddr = opt->dst_addr.sin_addr.s_addr, 470 IPPROTO_GRE, RT_CONN_FLAGS(sk), 0);
475 .saddr = opt->src_addr.sin_addr.s_addr, 471 if (IS_ERR(rt)) {
476 .tos = RT_CONN_FLAGS(sk) } }, 472 error = -EHOSTUNREACH;
477 .proto = IPPROTO_GRE }; 473 goto end;
478 security_sk_classify_flow(sk, &fl);
479 rt = ip_route_output_key(&init_net, &fl);
480 if (IS_ERR(rt)) {
481 error = -EHOSTUNREACH;
482 goto end;
483 }
484 sk_setup_caps(sk, &rt->dst);
485 } 474 }
475 sk_setup_caps(sk, &rt->dst);
476
486 po->chan.mtu = dst_mtu(&rt->dst); 477 po->chan.mtu = dst_mtu(&rt->dst);
487 if (!po->chan.mtu) 478 if (!po->chan.mtu)
488 po->chan.mtu = PPP_MTU; 479 po->chan.mtu = PPP_MTU;