@@ -1709,8 +1709,9 @@ int ip_mc_validate_source(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1709
1709
}
1710
1710
1711
1711
/* called in rcu_read_lock() section */
1712
- static int ip_route_input_mc (struct sk_buff * skb , __be32 daddr , __be32 saddr ,
1713
- dscp_t dscp , struct net_device * dev , int our )
1712
+ static enum skb_drop_reason
1713
+ ip_route_input_mc (struct sk_buff * skb , __be32 daddr , __be32 saddr ,
1714
+ dscp_t dscp , struct net_device * dev , int our )
1714
1715
{
1715
1716
struct in_device * in_dev = __in_dev_get_rcu (dev );
1716
1717
unsigned int flags = RTCF_MULTICAST ;
@@ -1721,7 +1722,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1721
1722
err = ip_mc_validate_source (skb , daddr , saddr , dscp , dev , in_dev ,
1722
1723
& itag );
1723
1724
if (err )
1724
- return err ;
1725
+ return SKB_DROP_REASON_NOT_SPECIFIED ;
1725
1726
1726
1727
if (our )
1727
1728
flags |= RTCF_LOCAL ;
@@ -1732,7 +1733,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1732
1733
rth = rt_dst_alloc (dev_net (dev )-> loopback_dev , flags , RTN_MULTICAST ,
1733
1734
false);
1734
1735
if (!rth )
1735
- return - ENOBUFS ;
1736
+ return SKB_DROP_REASON_NOMEM ;
1736
1737
1737
1738
#ifdef CONFIG_IP_ROUTE_CLASSID
1738
1739
rth -> dst .tclassid = itag ;
@@ -1748,7 +1749,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
1748
1749
1749
1750
skb_dst_drop (skb );
1750
1751
skb_dst_set (skb , & rth -> dst );
1751
- return 0 ;
1752
+ return SKB_NOT_DROPPED_YET ;
1752
1753
}
1753
1754
1754
1755
@@ -2446,12 +2447,12 @@ static int ip_route_input_rcu(struct sk_buff *skb, __be32 daddr, __be32 saddr,
2446
2447
* route cache entry is created eventually.
2447
2448
*/
2448
2449
if (ipv4_is_multicast (daddr )) {
2450
+ enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED ;
2449
2451
struct in_device * in_dev = __in_dev_get_rcu (dev );
2450
2452
int our = 0 ;
2451
- int err = - EINVAL ;
2452
2453
2453
2454
if (!in_dev )
2454
- return err ;
2455
+ return - EINVAL ;
2455
2456
our = ip_check_mc_rcu (in_dev , daddr , saddr ,
2456
2457
ip_hdr (skb )-> protocol );
2457
2458
@@ -2472,10 +2473,10 @@ static int ip_route_input_rcu(struct sk_buff *skb, __be32 daddr, __be32 saddr,
2472
2473
IN_DEV_MFORWARD (in_dev ))
2473
2474
#endif
2474
2475
) {
2475
- err = ip_route_input_mc (skb , daddr , saddr , dscp , dev ,
2476
- our );
2476
+ reason = ip_route_input_mc (skb , daddr , saddr , dscp ,
2477
+ dev , our );
2477
2478
}
2478
- return err ;
2479
+ return reason ? - EINVAL : 0 ;
2479
2480
}
2480
2481
2481
2482
return ip_route_input_slow (skb , daddr , saddr , dscp , dev , res );
0 commit comments