aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/bonding/bond_main.c12
-rw-r--r--drivers/net/cnic.c16
-rw-r--r--drivers/net/pptp.c45
3 files changed, 27 insertions, 46 deletions
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 68a5ce0a649f..3ad4f501949e 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -2676,7 +2676,6 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
2676 __be32 *targets = bond->params.arp_targets; 2676 __be32 *targets = bond->params.arp_targets;
2677 struct vlan_entry *vlan; 2677 struct vlan_entry *vlan;
2678 struct net_device *vlan_dev; 2678 struct net_device *vlan_dev;
2679 struct flowi fl;
2680 struct rtable *rt; 2679 struct rtable *rt;
2681 2680
2682 for (i = 0; (i < BOND_MAX_ARP_TARGETS); i++) { 2681 for (i = 0; (i < BOND_MAX_ARP_TARGETS); i++) {
@@ -2695,15 +2694,12 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
2695 * determine which VLAN interface would be used, so we 2694 * determine which VLAN interface would be used, so we
2696 * can tag the ARP with the proper VLAN tag. 2695 * can tag the ARP with the proper VLAN tag.
2697 */ 2696 */
2698 memset(&fl, 0, sizeof(fl)); 2697 rt = ip_route_output(dev_net(bond->dev), targets[i], 0,
2699 fl.fl4_dst = targets[i]; 2698 RTO_ONLINK, 0);
2700 fl.fl4_tos = RTO_ONLINK;
2701
2702 rt = ip_route_output_key(dev_net(bond->dev), &fl);
2703 if (IS_ERR(rt)) { 2699 if (IS_ERR(rt)) {
2704 if (net_ratelimit()) { 2700 if (net_ratelimit()) {
2705 pr_warning("%s: no route to arp_ip_target %pI4\n", 2701 pr_warning("%s: no route to arp_ip_target %pI4\n",
2706 bond->dev->name, &fl.fl4_dst); 2702 bond->dev->name, &targets[i]);
2707 } 2703 }
2708 continue; 2704 continue;
2709 } 2705 }
@@ -2739,7 +2735,7 @@ static void bond_arp_send_all(struct bonding *bond, struct slave *slave)
2739 2735
2740 if (net_ratelimit()) { 2736 if (net_ratelimit()) {
2741 pr_warning("%s: no path to arp_ip_target %pI4 via rt.dev %s\n", 2737 pr_warning("%s: no path to arp_ip_target %pI4 via rt.dev %s\n",
2742 bond->dev->name, &fl.fl4_dst, 2738 bond->dev->name, &targets[i],
2743 rt->dst.dev ? rt->dst.dev->name : "NULL"); 2739 rt->dst.dev ? rt->dst.dev->name : "NULL");
2744 } 2740 }
2745 ip_rt_put(rt); 2741 ip_rt_put(rt);
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
index 271a1f00c224..65832951fe07 100644
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -3407,20 +3407,14 @@ static int cnic_get_v4_route(struct sockaddr_in *dst_addr,
3407 struct dst_entry **dst) 3407 struct dst_entry **dst)
3408{ 3408{
3409#if defined(CONFIG_INET) 3409#if defined(CONFIG_INET)
3410 struct flowi fl;
3411 int err;
3412 struct rtable *rt; 3410 struct rtable *rt;
3413 3411
3414 memset(&fl, 0, sizeof(fl)); 3412 rt = ip_route_output(&init_net, dst_addr->sin_addr.s_addr, 0, 0, 0);
3415 fl.nl_u.ip4_u.daddr = dst_addr->sin_addr.s_addr; 3413 if (!IS_ERR(rt)) {
3416
3417 rt = ip_route_output_key(&init_net, &fl);
3418 err = 0;
3419 if (!IS_ERR(rt))
3420 *dst = &rt->dst; 3414 *dst = &rt->dst;
3421 else 3415 return 0;
3422 err = PTR_ERR(rt); 3416 }
3423 return err; 3417 return PTR_ERR(rt);
3424#else 3418#else
3425 return -ENETUNREACH; 3419 return -ENETUNREACH;
3426#endif 3420#endif
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;