} ip6_un1;
nd_uint8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */
} ip6_ctlun;
- struct in6_addr ip6_src; /* source address */
- struct in6_addr ip6_dst; /* destination address */
+ nd_ipv6 ip6_src; /* source address */
+ nd_ipv6 ip6_dst; /* destination address */
} ND_UNALIGNED;
#define ip6_vfc ip6_ctlun.ip6_un2_vfc
nd_uint8_t ip6r0_type; /* always zero */
nd_uint8_t ip6r0_segleft; /* segments left */
nd_uint32_t ip6r0_reserved; /* reserved field */
- struct in6_addr ip6r0_addr[1]; /* up to 23 addresses */
+ nd_ipv6 ip6r0_addr[1]; /* up to 23 addresses */
};
/**
nd_uint8_t srh_last_ent; /* Last Entry*/
nd_uint8_t srh_flags; /* Flags */
nd_uint16_t srh_tag; /* Tag */
- struct in6_addr srh_segments[1]; /* SRH segments list*/
+ nd_ipv6 srh_segments[1]; /* SRH segments list*/
};
/* Fragment header */
const void *dst_addr;
const struct ip6_rthdr *dp;
const struct ip6_rthdr0 *dp0;
- const struct in6_addr *addr;
+ const u_char *p;
int i, len;
cp = (const u_char *)ip6;
if (len % 2 == 1)
goto trunc;
len >>= 1;
- addr = &dp0->ip6r0_addr[0];
+ p = (const u_char *) dp0->ip6r0_addr;
for (i = 0; i < len; i++) {
- if ((const u_char *)(addr + 1) > ndo->ndo_snapend)
- goto trunc;
-
- dst_addr = (const void *)addr;
- addr++;
+ ND_TCHECK_16(p);
+ dst_addr = (const void *)p;
+ p += 16;
}
break;
const struct ip6_rthdr *dp;
const struct ip6_rthdr0 *dp0;
const struct ip6_srh *srh;
- const u_char *ep;
u_int i, len, type;
- const struct in6_addr *addr;
+ const u_char *p;
dp = (const struct ip6_rthdr *)bp;
- /* 'ep' points to the end of available data. */
- ep = ndo->ndo_snapend;
-
ND_TCHECK_1(dp->ip6r_segleft);
len = EXTRACT_U_1(dp->ip6r_len);
if (len % 2 == 1)
goto trunc;
len >>= 1;
- addr = &dp0->ip6r0_addr[0];
+ p = (const u_char *) dp0->ip6r0_addr;
for (i = 0; i < len; i++) {
- if ((const u_char *)(addr + 1) > ep)
- goto trunc;
-
- ND_PRINT(", [%u]%s", i, ip6addr_string(ndo, addr));
- addr++;
+ ND_TCHECK_16(p);
+ ND_PRINT(", [%u]%s", i, ip6addr_string(ndo, p));
+ p += 16;
}
/*(*/
ND_PRINT(") ");
if (len % 2 == 1)
goto trunc;
len >>= 1;
- addr = &srh->srh_segments[0];
+ p = (const u_char *) srh->srh_segments;
for (i = 0; i < len; i++) {
- if ((const u_char *)(addr + 1) > ep)
- goto trunc;
-
- ND_PRINT(", [%u]%s", i, ip6addr_string(ndo, addr));
- addr++;
+ ND_TCHECK_16(p);
+ ND_PRINT(", [%u]%s", i, ip6addr_string(ndo, p));
+ p += 16;
}
/*(*/
ND_PRINT(") ");