diff options
| author | droidfivex <droidfivex@gmail.com> | 2016-11-18 01:05:47 +0900 |
|---|---|---|
| committer | droidfivex <droidfivex@gmail.com> | 2016-11-18 01:05:47 +0900 |
| commit | 1e8e1576c95730e425f472a569bb15325329a99e (patch) | |
| tree | 66b14ebbc47c0bc6023aa57b91b1ab5a9ee6c8e6 /net/ipv4/route.c | |
| parent | 8b77716a2a034c7658ea6569ddaa814c312dd94f (diff) | |
| parent | 30bdd78c2f639b28acc02a4133479311e01b18ce (diff) | |
Diffstat (limited to 'net/ipv4/route.c')
| -rw-r--r-- | net/ipv4/route.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 3097eca70fd..12e7474d6e3 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2156,9 +2156,10 @@ static int __mkroute_input(struct sk_buff *skb, flags |= RTCF_DIRECTSRC; if (out_dev == in_dev && err && + skb->protocol == htons(ETH_P_IP) && (IN_DEV_SHARED_MEDIA(out_dev) || inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res)))) - flags |= RTCF_DOREDIRECT; + IPCB(skb)->flags |= IPSKB_DOREDIRECT; if (skb->protocol != htons(ETH_P_IP)) { /* Not IP (i.e. ARP). Do not create route, if it is @@ -2987,6 +2988,8 @@ static int rt_fill_info(struct net *net, r->rtm_flags = (rt->rt_flags & ~0xFFFF) | RTM_F_CLONED; if (rt->rt_flags & RTCF_NOTIFY) r->rtm_flags |= RTM_F_NOTIFY; + if (IPCB(skb)->flags & IPSKB_DOREDIRECT) + r->rtm_flags |= RTCF_DOREDIRECT; NLA_PUT_BE32(skb, RTA_DST, rt->rt_dst); |
