ipv6: Make ipv6_is_mld() inline and use it from ip6_mc_input().
Move generalized version of ipv6_is_mld() to header, and use it from ip6_mc_input(). Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
此提交包含在:

提交者
David S. Miller

父節點
e7219858ac
當前提交
daad151263
@@ -150,7 +150,31 @@ extern void addrconf_dad_failure(struct inet6_ifaddr *ifp);
|
||||
extern bool ipv6_chk_mcast_addr(struct net_device *dev,
|
||||
const struct in6_addr *group,
|
||||
const struct in6_addr *src_addr);
|
||||
extern bool ipv6_is_mld(struct sk_buff *skb, int nexthdr);
|
||||
|
||||
/*
|
||||
* identify MLD packets for MLD filter exceptions
|
||||
*/
|
||||
static inline bool ipv6_is_mld(struct sk_buff *skb, int nexthdr, int offset)
|
||||
{
|
||||
struct icmp6hdr *hdr;
|
||||
|
||||
if (nexthdr != IPPROTO_ICMPV6 ||
|
||||
!pskb_network_may_pull(skb, offset + sizeof(struct icmp6hdr)))
|
||||
return false;
|
||||
|
||||
hdr = (struct icmp6hdr *)(skb_network_header(skb) + offset);
|
||||
|
||||
switch (hdr->icmp6_type) {
|
||||
case ICMPV6_MGM_QUERY:
|
||||
case ICMPV6_MGM_REPORT:
|
||||
case ICMPV6_MGM_REDUCTION:
|
||||
case ICMPV6_MLD2_REPORT:
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
extern void addrconf_prefix_rcv(struct net_device *dev,
|
||||
u8 *opt, int len, bool sllao);
|
||||
|
新增問題並參考
封鎖使用者