+ case DH6OPT_IA_NA:
+ case DH6OPT_IA_PD:
+ if (optlen < sizeof(ia) - 4) {
+ printf(" ?)");
+ break;
+ }
+ memcpy(&ia, (u_char *)dh6o, sizeof(ia));
+ ia.dh6opt_ia_iaid = ntohl(ia.dh6opt_ia_iaid);
+ ia.dh6opt_ia_t1 = ntohl(ia.dh6opt_ia_t1);
+ ia.dh6opt_ia_t2 = ntohl(ia.dh6opt_ia_t2);
+ printf(" IAID:%lu T1:%lu T2:%lu",
+ (unsigned long)ia.dh6opt_ia_iaid,
+ (unsigned long)ia.dh6opt_ia_t1,
+ (unsigned long)ia.dh6opt_ia_t2);
+ if (optlen > sizeof(ia) - 4) {
+ /* there are sub-options */
+ dhcp6opt_print((u_char *)dh6o + sizeof(ia),
+ (u_char *)(dh6o + 1) + optlen);
+ }
+ printf(")");
+ break;
+ case DH6OPT_IA_PD_PREFIX:
+ if (optlen < sizeof(ia_prefix) - 4) {
+ printf(" ?)");
+ break;
+ }
+ memcpy(&ia_prefix, (u_char *)dh6o, sizeof(ia_prefix));
+ printf(" %s/%d",
+ ip6addr_string(&ia_prefix.dh6opt_ia_prefix_addr),
+ ia_prefix.dh6opt_ia_prefix_plen);
+ ia_prefix.dh6opt_ia_prefix_pltime =
+ ntohl(ia_prefix.dh6opt_ia_prefix_pltime);
+ ia_prefix.dh6opt_ia_prefix_vltime =
+ ntohl(ia_prefix.dh6opt_ia_prefix_vltime);
+ printf(" pltime:%lu vltime:%lu",
+ (unsigned long)ia_prefix.dh6opt_ia_prefix_pltime,
+ (unsigned long)ia_prefix.dh6opt_ia_prefix_vltime);
+ if (optlen > sizeof(ia_prefix) - 4) {
+ /* there are sub-options */
+ dhcp6opt_print((u_char *)dh6o +
+ sizeof(ia_prefix),
+ (u_char *)(dh6o + 1) + optlen);
+ }
+ printf(")");
+ break;