Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 351358
b: refs/heads/master
c: dd3332b
h: refs/heads/master
v: v3
  • Loading branch information
YOSHIFUJI Hideaki / 吉藤英明 authored and David S. Miller committed Jan 14, 2013
1 parent 394722a commit f185171
Show file tree
Hide file tree
Showing 5 changed files with 9 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2b464f61f036f7fb9cbc34710c9b2390499e87d0
refs/heads/master: dd3332bfcb2223458f553f341d3388cb84040e6a
3 changes: 2 additions & 1 deletion trunk/include/linux/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ static inline struct ipv6hdr *ipipv6_hdr(const struct sk_buff *skb)

struct inet6_skb_parm {
int iif;
__u16 ra;
__be16 ra;
__u16 hop;
__u16 dst0;
__u16 srcrt;
Expand All @@ -100,6 +100,7 @@ struct inet6_skb_parm {
#define IP6SKB_XFRM_TRANSFORMED 1
#define IP6SKB_FORWARDED 2
#define IP6SKB_REROUTED 4
#define IP6SKB_ROUTERALERT 8
};

#define IP6CB(skb) ((struct inet6_skb_parm*)((skb)->cb))
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/uapi/linux/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ struct ipv6_opt_hdr {
#define ipv6_destopt_hdr ipv6_opt_hdr
#define ipv6_hopopt_hdr ipv6_opt_hdr

/* Router Alert option values (RFC2711) */
#define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */

/*
* routing header type 0 (used in cmsghdr struct)
Expand Down
3 changes: 2 additions & 1 deletion trunk/net/ipv6/exthdrs.c
Original file line number Diff line number Diff line change
Expand Up @@ -553,7 +553,8 @@ static bool ipv6_hop_ra(struct sk_buff *skb, int optoff)
const unsigned char *nh = skb_network_header(skb);

if (nh[optoff + 1] == 2) {
IP6CB(skb)->ra = optoff;
IP6CB(skb)->flags |= IP6SKB_ROUTERALERT;
memcpy(&IP6CB(skb)->ra, nh + optoff + 2, sizeof(IP6CB(skb)->ra));
return true;
}
LIMIT_NETDEBUG(KERN_DEBUG "ipv6_hop_ra: wrong RA length %d\n",
Expand Down
5 changes: 2 additions & 3 deletions trunk/net/ipv6/ip6_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -280,17 +280,16 @@ int ip6_mc_input(struct sk_buff *skb)
struct inet6_skb_parm *opt = IP6CB(skb);

/* Check for MLD */
if (unlikely(opt->ra)) {
if (unlikely(opt->flags & IP6SKB_ROUTERALERT)) {
/* Check if this is a mld message */
u8 *ptr = skb_network_header(skb) + opt->ra;
u8 nexthdr = hdr->nexthdr;
__be16 frag_off;
int offset;

/* Check if the value of Router Alert
* is for MLD (0x0000).
*/
if ((ptr[2] | ptr[3]) == 0) {
if (opt->ra == htons(IPV6_OPT_ROUTERALERT_MLD)) {
deliver = false;

if (!ipv6_ext_hdr(nexthdr)) {
Expand Down

0 comments on commit f185171

Please sign in to comment.