mirror of https://gitee.com/openkylin/linux.git
[IPV6]: Bring Type 0 routing header in-line with rfc3542.
Signed-off-by: Brian Haley <brian.haley@hp.com> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3874b98c65
commit
e6df439b89
|
@ -68,7 +68,7 @@ struct ipv6_opt_hdr {
|
|||
|
||||
struct rt0_hdr {
|
||||
struct ipv6_rt_hdr rt_hdr;
|
||||
__u32 bitmap; /* strict/loose bit map */
|
||||
__u32 reserved;
|
||||
struct in6_addr addr[0];
|
||||
|
||||
#define rt0_type rt_hdr.type
|
||||
|
|
|
@ -406,8 +406,7 @@ ipv6_invert_rthdr(struct sock *sk, struct ipv6_rt_hdr *hdr)
|
|||
|
||||
memcpy(opt->srcrt, hdr, sizeof(*hdr));
|
||||
irthdr = (struct rt0_hdr*)opt->srcrt;
|
||||
/* Obsolete field, MBZ, when originated by us */
|
||||
irthdr->bitmap = 0;
|
||||
irthdr->reserved = 0;
|
||||
opt->srcrt->segments_left = n;
|
||||
for (i=0; i<n; i++)
|
||||
memcpy(irthdr->addr+i, rthdr->addr+(n-1-i), 16);
|
||||
|
|
|
@ -161,8 +161,8 @@ match(const struct sk_buff *skb,
|
|||
((rtinfo->hdrlen == hdrlen) ^
|
||||
!!(rtinfo->invflags & IP6T_RT_INV_LEN))));
|
||||
DEBUGP("res %02X %02X %02X ",
|
||||
(rtinfo->flags & IP6T_RT_RES), ((struct rt0_hdr *)rh)->bitmap,
|
||||
!((rtinfo->flags & IP6T_RT_RES) && (((struct rt0_hdr *)rh)->bitmap)));
|
||||
(rtinfo->flags & IP6T_RT_RES), ((struct rt0_hdr *)rh)->reserved,
|
||||
!((rtinfo->flags & IP6T_RT_RES) && (((struct rt0_hdr *)rh)->reserved)));
|
||||
|
||||
ret = (rh != NULL)
|
||||
&&
|
||||
|
@ -179,12 +179,12 @@ match(const struct sk_buff *skb,
|
|||
!!(rtinfo->invflags & IP6T_RT_INV_TYP)));
|
||||
|
||||
if (ret && (rtinfo->flags & IP6T_RT_RES)) {
|
||||
u_int32_t *bp, _bitmap;
|
||||
bp = skb_header_pointer(skb,
|
||||
ptr + offsetof(struct rt0_hdr, bitmap),
|
||||
sizeof(_bitmap), &_bitmap);
|
||||
u_int32_t *rp, _reserved;
|
||||
rp = skb_header_pointer(skb,
|
||||
ptr + offsetof(struct rt0_hdr, reserved),
|
||||
sizeof(_reserved), &_reserved);
|
||||
|
||||
ret = (*bp == 0);
|
||||
ret = (*rp == 0);
|
||||
}
|
||||
|
||||
DEBUGP("#%d ",rtinfo->addrnr);
|
||||
|
|
Loading…
Reference in New Issue