+ ND_PRINT("%02X", GET_U_1(message + j + 4));
+ }
+ }
+ break;
+
+ case MESSAGE_UPDATE_SRC_SPECIFIC : {
+ if(!ndo->ndo_vflag) {
+ ND_PRINT(" ss-update");
+ } else {
+ u_char prefix[16], src_prefix[16];
+ u_short interval, seqno, metric;
+ u_char ae, plen, src_plen, omitted;
+ int rc;
+ int parsed_len = 10;
+ ND_PRINT("\n\tSS-Update");
+ if(len < 10) goto invalid;
+ ae = GET_U_1(message + 2);
+ src_plen = GET_U_1(message + 3);
+ plen = GET_U_1(message + 4);
+ omitted = GET_U_1(message + 5);
+ interval = GET_BE_U_2(message + 6);
+ seqno = GET_BE_U_2(message + 8);
+ metric = GET_BE_U_2(message + 10);
+ rc = network_prefix(ae, plen, omitted, message + 2 + parsed_len,
+ ae == 1 ? v4_prefix : v6_prefix,
+ len - parsed_len, prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ plen += 96;
+ parsed_len += rc;
+ rc = network_prefix(ae, src_plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, src_prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ src_plen += 96;
+ parsed_len += rc;
+
+ ND_PRINT(" %s from", format_prefix(ndo, prefix, plen));
+ ND_PRINT(" %s metric %u seqno %u interval %s",
+ format_prefix(ndo, src_prefix, src_plen),
+ metric, seqno, format_interval_update(interval));
+ /* extra data? */
+ if((u_int)parsed_len < len)
+ subtlvs_print(ndo, message + 2 + parsed_len,
+ message + 2 + len, type);
+ }
+ }
+ break;
+
+ case MESSAGE_REQUEST_SRC_SPECIFIC : {
+ if(!ndo->ndo_vflag)
+ ND_PRINT(" ss-request");
+ else {
+ int rc, parsed_len = 3;
+ u_char ae, plen, src_plen, prefix[16], src_prefix[16];
+ ND_PRINT("\n\tSS-Request ");
+ if(len < 3) goto invalid;
+ ae = GET_U_1(message + 2);
+ plen = GET_U_1(message + 3);
+ src_plen = GET_U_1(message + 4);
+ rc = network_prefix(ae, plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ plen += 96;
+ parsed_len += rc;
+ rc = network_prefix(ae, src_plen, 0, message + 2 + parsed_len,
+ NULL, len - parsed_len, src_prefix);
+ if(rc < 0) goto invalid;
+ if(ae == 1)
+ src_plen += 96;
+ parsed_len += rc;
+ if(ae == 0) {
+ ND_PRINT("for any");
+ } else {
+ ND_PRINT("for (%s, ", format_prefix(ndo, prefix, plen));
+ ND_PRINT("%s)", format_prefix(ndo, src_prefix, src_plen));
+ }