+ ND_PRINT("%s optlen goes past header length",
+ tok2str(dccp_option_values, "Option %u", GET_U_1(option)));
+ return 0;
+ }
+ ND_TCHECK_LEN(option, optlen);
+
+ if (GET_U_1(option) >= 128) {
+ ND_PRINT("CCID option %u", GET_U_1(option));
+ switch (optlen) {
+ case 4:
+ ND_PRINT(" %u", GET_BE_U_2(option + 2));
+ break;
+ case 6:
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ break;
+ default:
+ break;
+ }
+ } else {
+ ND_PRINT("%s",
+ tok2str(dccp_option_values, "Option %u", GET_U_1(option)));
+ switch (GET_U_1(option)) {
+ case DCCP_OPTION_CHANGE_L:
+ case DCCP_OPTION_CONFIRM_L:
+ case DCCP_OPTION_CHANGE_R:
+ case DCCP_OPTION_CONFIRM_R:
+ if (optlen < 3) {
+ ND_PRINT(" optlen too short");
+ return optlen;
+ }
+ ND_PRINT(" %s", tok2str(dccp_feature_num_str,
+ "invalid (%u)", GET_U_1(option + 2)));
+ for (i = 0; i < optlen - 3; i++)
+ ND_PRINT(" %u", GET_U_1(option + 3 + i));
+ break;
+ case DCCP_OPTION_INIT_COOKIE:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case DCCP_OPTION_NDP_COUNT:
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT(" %u", GET_U_1(option + 2 + i));
+ break;
+ case DCCP_OPTION_ACK_VECTOR_NONCE_0:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case DCCP_OPTION_ACK_VECTOR_NONCE_1:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case DCCP_OPTION_DATA_DROPPED:
+ if (optlen > 2) {
+ ND_PRINT(" 0x");
+ for (i = 0; i < optlen - 2; i++)
+ ND_PRINT("%02x",
+ GET_U_1(option + 2 + i));
+ }
+ break;
+ case DCCP_OPTION_TIMESTAMP:
+ /*
+ * 13.1. Timestamp Option
+ *
+ * +--------+--------+--------+--------+--------+--------+
+ * |00101001|00000110| Timestamp Value |
+ * +--------+--------+--------+--------+--------+--------+
+ * Type=41 Length=6
+ */
+ if (optlen == 6)
+ ND_PRINT(" %u", GET_BE_U_4(option + 2));
+ else
+ ND_PRINT(" [optlen != 6]");
+ break;
+ case DCCP_OPTION_TIMESTAMP_ECHO:
+ /*
+ * 13.3. Timestamp Echo Option
+ *
+ * +--------+--------+--------+--------+--------+--------+
+ * |00101010|00000110| Timestamp Echo |
+ * +--------+--------+--------+--------+--------+--------+
+ * Type=42 Len=6
+ *
+ * +--------+--------+------- ... -------+--------+--------+
+ * |00101010|00001000| Timestamp Echo | Elapsed Time |
+ * +--------+--------+------- ... -------+--------+--------+
+ * Type=42 Len=8 (4 bytes)
+ *
+ * +--------+--------+------- ... -------+------- ... -------+
+ * |00101010|00001010| Timestamp Echo | Elapsed Time |
+ * +--------+--------+------- ... -------+------- ... -------+
+ * Type=42 Len=10 (4 bytes) (4 bytes)
+ */