diff options
Diffstat (limited to 'net/ipv4/ipmr.c')
-rw-r--r-- | net/ipv4/ipmr.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 86dd5691af4..3f3a9afd73e 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -1537,13 +1537,9 @@ static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt, | |||
1537 | if (vif->flags & VIFF_TUNNEL) { | 1537 | if (vif->flags & VIFF_TUNNEL) { |
1538 | struct flowi fl = { | 1538 | struct flowi fl = { |
1539 | .oif = vif->link, | 1539 | .oif = vif->link, |
1540 | .nl_u = { | 1540 | .fl4_dst = vif->remote, |
1541 | .ip4_u = { | 1541 | .fl4_src = vif->local, |
1542 | .daddr = vif->remote, | 1542 | .fl4_tos = RT_TOS(iph->tos), |
1543 | .saddr = vif->local, | ||
1544 | .tos = RT_TOS(iph->tos) | ||
1545 | } | ||
1546 | }, | ||
1547 | .proto = IPPROTO_IPIP | 1543 | .proto = IPPROTO_IPIP |
1548 | }; | 1544 | }; |
1549 | 1545 | ||
@@ -1553,12 +1549,8 @@ static void ipmr_queue_xmit(struct net *net, struct mr_table *mrt, | |||
1553 | } else { | 1549 | } else { |
1554 | struct flowi fl = { | 1550 | struct flowi fl = { |
1555 | .oif = vif->link, | 1551 | .oif = vif->link, |
1556 | .nl_u = { | 1552 | .fl4_dst = iph->daddr, |
1557 | .ip4_u = { | 1553 | .fl4_tos = RT_TOS(iph->tos), |
1558 | .daddr = iph->daddr, | ||
1559 | .tos = RT_TOS(iph->tos) | ||
1560 | } | ||
1561 | }, | ||
1562 | .proto = IPPROTO_IPIP | 1554 | .proto = IPPROTO_IPIP |
1563 | }; | 1555 | }; |
1564 | 1556 | ||
@@ -1654,7 +1646,7 @@ static int ip_mr_forward(struct net *net, struct mr_table *mrt, | |||
1654 | if (mrt->vif_table[vif].dev != skb->dev) { | 1646 | if (mrt->vif_table[vif].dev != skb->dev) { |
1655 | int true_vifi; | 1647 | int true_vifi; |
1656 | 1648 | ||
1657 | if (skb_rtable(skb)->fl.iif == 0) { | 1649 | if (rt_is_output_route(skb_rtable(skb))) { |
1658 | /* It is our own packet, looped back. | 1650 | /* It is our own packet, looped back. |
1659 | * Very complicated situation... | 1651 | * Very complicated situation... |
1660 | * | 1652 | * |