- /*
- * the destination address used in the pseudo-header is that of the final
- * destination : the last address of the routing header
- */
- if (last_addr != NULL) {
- const struct ip6_hdr *ip6 = (const struct ip6_hdr *)bp2;
- UNALIGNED_MEMCPY(&ip6->ip6_dst, last_addr, sizeof (struct in6_addr));
+ /*(*/
+ ND_PRINT(") ");
+ return((EXTRACT_U_1(dp0->ip6r0_len) + 1) << 3);
+ break;
+ case IPV6_RTHDR_TYPE_4:
+ srh = (const struct ip6_srh *)dp;
+ ND_TCHECK_1(srh->srh_last_ent);
+ ND_PRINT(", last-entry=%u", EXTRACT_U_1(srh->srh_last_ent));
+
+ ND_TCHECK_1(srh->srh_flags);
+ if (EXTRACT_U_1(srh->srh_flags) || ndo->ndo_vflag) {
+ ND_PRINT(", flags=0x%0x",
+ EXTRACT_U_1(srh->srh_flags));
+ }
+
+ ND_TCHECK_2(srh->srh_tag);
+ ND_PRINT(", tag=%x", EXTRACT_BE_U_2(srh->srh_tag));
+
+ if (len % 2 == 1)
+ goto trunc;
+ len >>= 1;
+ p = (const u_char *) srh->srh_segments;
+ for (i = 0; i < len; i++) {
+ ND_TCHECK_16(p);
+ ND_PRINT(", [%u]%s", i, ip6addr_string(ndo, p));
+ p += 16;