Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e6df439b authored by Brian Haley's avatar Brian Haley Committed by David S. Miller
Browse files

[IPV6]: Bring Type 0 routing header in-line with rfc3542.

parent 3874b98c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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
+1 −2
Original line number Diff line number Diff line
@@ -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);
+7 −7
Original line number Diff line number Diff line
@@ -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);