QUIC: Update QUIC Error Codes lists...

From See src/net/quic/quic_protocol.h

Change-Id: I5fbc037186491dc8555f7f41b3e43d7d6a628f88
Reviewed-on: https://code.wireshark.org/review/10647
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
This commit is contained in:
Alexis La Goutte 2015-09-24 17:17:51 +02:00 committed by Michael Mann
parent 8980919f41
commit 7645baef74
1 changed files with 249 additions and 9 deletions

View File

@ -397,14 +397,254 @@ static const value_string tag_kexs_vals[] = {
/* See src/net/quic/quic_protocol.h from Chromium Source */
/**************************************************************************/
#define QUIC_NO_ERROR 0
enum QuicErrorCode {
QUIC_NO_ERROR = 0,
/* Connection has reached an invalid state. */
QUIC_INTERNAL_ERROR = 1,
/* There were data frames after the a fin or reset. */
QUIC_STREAM_DATA_AFTER_TERMINATION = 2,
/* Control frame is malformed. */
QUIC_INVALID_PACKET_HEADER = 3,
/* Frame data is malformed. */
QUIC_INVALID_FRAME_DATA = 4,
/* The packet contained no payload. */
QUIC_MISSING_PAYLOAD = 48,
/* FEC data is malformed. */
QUIC_INVALID_FEC_DATA = 5,
/* STREAM frame data is malformed. */
QUIC_INVALID_STREAM_DATA = 46,
/* STREAM frame data is not encrypted. */
QUIC_UNENCRYPTED_STREAM_DATA = 61,
/* RST_STREAM frame data is malformed. */
QUIC_INVALID_RST_STREAM_DATA = 6,
/* CONNECTION_CLOSE frame data is malformed. */
QUIC_INVALID_CONNECTION_CLOSE_DATA = 7,
/* GOAWAY frame data is malformed. */
QUIC_INVALID_GOAWAY_DATA = 8,
/* WINDOW_UPDATE frame data is malformed. */
QUIC_INVALID_WINDOW_UPDATE_DATA = 57,
/* BLOCKED frame data is malformed. */
QUIC_INVALID_BLOCKED_DATA = 58,
/* STOP_WAITING frame data is malformed. */
QUIC_INVALID_STOP_WAITING_DATA = 60,
/* ACK frame data is malformed. */
QUIC_INVALID_ACK_DATA = 9,
/* deprecated: */
QUIC_INVALID_CONGESTION_FEEDBACK_DATA = 47,
/* Version negotiation packet is malformed. */
QUIC_INVALID_VERSION_NEGOTIATION_PACKET = 10,
/* Public RST packet is malformed. */
QUIC_INVALID_PUBLIC_RST_PACKET = 11,
/* There was an error decrypting. */
QUIC_DECRYPTION_FAILURE = 12,
/* There was an error encrypting. */
QUIC_ENCRYPTION_FAILURE = 13,
/* The packet exceeded kMaxPacketSize. */
QUIC_PACKET_TOO_LARGE = 14,
/* Data was sent for a stream which did not exist. */
QUIC_PACKET_FOR_NONEXISTENT_STREAM = 15,
/* The peer is going away. May be a client or server. */
QUIC_PEER_GOING_AWAY = 16,
/* A stream ID was invalid. */
QUIC_INVALID_STREAM_ID = 17,
/* A priority was invalid. */
QUIC_INVALID_PRIORITY = 49,
/* Too many streams already open. */
QUIC_TOO_MANY_OPEN_STREAMS = 18,
/* The peer must send a FIN/RST for each stream, and has not been doing so. */
QUIC_TOO_MANY_UNFINISHED_STREAMS = 66,
/* Received public reset for this connection. */
QUIC_PUBLIC_RESET = 19,
/* Invalid protocol version. */
QUIC_INVALID_VERSION = 20,
/* deprecated: */
QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED = 21,
/* The Header ID for a stream was too far from the previous. */
QUIC_INVALID_HEADER_ID = 22,
/* Negotiable parameter received during handshake had invalid value. */
QUIC_INVALID_NEGOTIATED_VALUE = 23,
/* There was an error decompressing data. */
QUIC_DECOMPRESSION_FAILURE = 24,
/* We hit our prenegotiated (or default) timeout */
QUIC_CONNECTION_TIMED_OUT = 25,
/* We hit our overall connection timeout */
QUIC_CONNECTION_OVERALL_TIMED_OUT = 67,
/* There was an error encountered migrating addresses */
QUIC_ERROR_MIGRATING_ADDRESS = 26,
/* There was an error while writing to the socket. */
QUIC_PACKET_WRITE_ERROR = 27,
/* There was an error while reading from the socket. */
QUIC_PACKET_READ_ERROR = 51,
/* We received a STREAM_FRAME with no data and no fin flag set. */
QUIC_INVALID_STREAM_FRAME = 50,
/* We received invalid data on the headers stream. */
QUIC_INVALID_HEADERS_STREAM_DATA = 56,
/* The peer received too much data, violating flow control. */
QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA = 59,
/* The peer sent too much data, violating flow control. */
QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA = 63,
/* The peer received an invalid flow control window. */
QUIC_FLOW_CONTROL_INVALID_WINDOW = 64,
/* The connection has been IP pooled into an existing connection. */
QUIC_CONNECTION_IP_POOLED = 62,
/* The connection has too many outstanding sent packets. */
QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS = 68,
/* The connection has too many outstanding received packets. */
QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS = 69,
/* The quic connection job to load server config is cancelled. */
QUIC_CONNECTION_CANCELLED = 70,
/* Disabled QUIC because of high packet loss rate. */
QUIC_BAD_PACKET_LOSS_RATE = 71,
/* Disabled QUIC because of too many PUBLIC_RESETs post handshake. */
QUIC_PUBLIC_RESETS_POST_HANDSHAKE = 73,
/* Disabled QUIC because of too many timeouts with streams open. */
QUIC_TIMEOUTS_WITH_OPEN_STREAMS = 74,
/* Closed because we failed to serialize a packet. */
QUIC_FAILED_TO_SERIALIZE_PACKET = 75,
/* Crypto errors. */
/* Hanshake failed. */
QUIC_HANDSHAKE_FAILED = 28,
/* Handshake message contained out of order tags. */
QUIC_CRYPTO_TAGS_OUT_OF_ORDER = 29,
/* Handshake message contained too many entries. */
QUIC_CRYPTO_TOO_MANY_ENTRIES = 30,
/* Handshake message contained an invalid value length. */
QUIC_CRYPTO_INVALID_VALUE_LENGTH = 31,
/* A crypto message was received after the handshake was complete. */
QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE = 32,
/* A crypto message was received with an illegal message tag. */
QUIC_INVALID_CRYPTO_MESSAGE_TYPE = 33,
/* A crypto message was received with an illegal parameter. */
QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER = 34,
/* An invalid channel id signature was supplied. */
QUIC_INVALID_CHANNEL_ID_SIGNATURE = 52,
/* A crypto message was received with a mandatory parameter missing. */
QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND = 35,
/* A crypto message was received with a parameter that has no overlap
with the local parameter. */
QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP = 36,
/* A crypto message was received that contained a parameter with too few
values. */
QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND = 37,
/* An internal error occured in crypto processing. */
QUIC_CRYPTO_INTERNAL_ERROR = 38,
/* A crypto handshake message specified an unsupported version. */
QUIC_CRYPTO_VERSION_NOT_SUPPORTED = 39,
/* A crypto handshake message resulted in a stateless reject. */
QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT = 72,
/* There was no intersection between the crypto primitives supported by the
peer and ourselves. */
QUIC_CRYPTO_NO_SUPPORT = 40,
/* The server rejected our client hello messages too many times. */
QUIC_CRYPTO_TOO_MANY_REJECTS = 41,
/* The client rejected the server's certificate chain or signature. */
QUIC_PROOF_INVALID = 42,
/* A crypto message was received with a duplicate tag. */
QUIC_CRYPTO_DUPLICATE_TAG = 43,
/* A crypto message was received with the wrong encryption level (i.e. it
should have been encrypted but was not. ) */
QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT = 44,
/* The server config for a server has expired. */
QUIC_CRYPTO_SERVER_CONFIG_EXPIRED = 45,
/* We failed to setup the symmetric keys for a connection. */
QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED = 53,
/* A handshake message arrived, but we are still validating the
previous handshake message. */
QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO = 54,
/* A server config update arrived before the handshake is complete. */
QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE = 65,
/* This connection involved a version negotiation which appears to have been
tampered with. */
QUIC_VERSION_NEGOTIATION_MISMATCH = 55,
/* No error. Used as bound while iterating. */
QUIC_LAST_ERROR = 76
};
static const value_string error_code_vals[] = {
{ QUIC_NO_ERROR, "There was no error" },
/*TODO Complete... */
{ QUIC_INTERNAL_ERROR, "Connection has reached an invalid state" },
{ QUIC_STREAM_DATA_AFTER_TERMINATION, "There were data frames after the a fin or reset" },
{ QUIC_INVALID_PACKET_HEADER, "Control frame is malformed" },
{ QUIC_INVALID_FRAME_DATA, "Frame data is malformed" },
{ QUIC_INVALID_FEC_DATA, "FEC data is malformed" },
{ QUIC_INVALID_RST_STREAM_DATA, "RST_STREAM frame data is malformed" },
{ QUIC_INVALID_CONNECTION_CLOSE_DATA, "CONNECTION_CLOSE frame data is malformed" },
{ QUIC_INVALID_GOAWAY_DATA, "GOAWAY frame data is malformed" },
{ QUIC_INVALID_ACK_DATA, "ACK frame data is malformed" },
{ QUIC_INVALID_VERSION_NEGOTIATION_PACKET, "Version negotiation packet is malformed" },
{ QUIC_INVALID_PUBLIC_RST_PACKET, "Public RST packet is malformed" },
{ QUIC_DECRYPTION_FAILURE, "There was an error decrypting" },
{ QUIC_ENCRYPTION_FAILURE, "There was an error encrypting" },
{ QUIC_PACKET_TOO_LARGE, "The packet exceeded kMaxPacketSize" },
{ QUIC_PACKET_FOR_NONEXISTENT_STREAM, "Data was sent for a stream which did not exist" },
{ QUIC_PEER_GOING_AWAY, "The peer is going away. May be a client or server" },
{ QUIC_INVALID_STREAM_ID, "A stream ID was invalid" },
{ QUIC_TOO_MANY_OPEN_STREAMS, "Too many streams already open" },
{ QUIC_PUBLIC_RESET, "Received public reset for this connection" },
{ QUIC_INVALID_VERSION, "Invalid protocol version" },
{ QUIC_STREAM_RST_BEFORE_HEADERS_DECOMPRESSED, "Stream RST before Headers decompressed (Deprecated)" },
{ QUIC_INVALID_HEADER_ID, "The Header ID for a stream was too far from the previous" },
{ QUIC_INVALID_NEGOTIATED_VALUE, "Negotiable parameter received during handshake had invalid value" },
{ QUIC_DECOMPRESSION_FAILURE, "There was an error decompressing data" },
{ QUIC_CONNECTION_TIMED_OUT, "We hit our prenegotiated (or default) timeout" },
{ QUIC_ERROR_MIGRATING_ADDRESS, "There was an error encountered migrating addresses" },
{ QUIC_PACKET_WRITE_ERROR, "There was an error while writing to the socket" },
{ QUIC_HANDSHAKE_FAILED, "Hanshake failed" },
{ QUIC_CRYPTO_TAGS_OUT_OF_ORDER, "Handshake message contained out of order tags" },
{ QUIC_CRYPTO_TOO_MANY_ENTRIES, "Handshake message contained too many entries" },
{ QUIC_CRYPTO_INVALID_VALUE_LENGTH, "Handshake message contained an invalid value length" },
{ QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE, "A crypto message was received after the handshake was complete" },
{ QUIC_INVALID_CRYPTO_MESSAGE_TYPE, "A crypto message was received with an illegal message tag" },
{ QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER, "A crypto message was received with an illegal parameter" },
{ QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND, "A crypto message was received with a mandatory parameter missing" },
{ QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP, "A crypto message was received with a parameter that has no overlap with the local parameter" },
{ QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND, "A crypto message was received that contained a parameter with too few values" },
{ QUIC_CRYPTO_INTERNAL_ERROR, "An internal error occured in crypto processing" },
{ QUIC_CRYPTO_VERSION_NOT_SUPPORTED, "A crypto handshake message specified an unsupported version" },
{ QUIC_CRYPTO_NO_SUPPORT, "There was no intersection between the crypto primitives supported by the peer and ourselves" },
{ QUIC_CRYPTO_TOO_MANY_REJECTS, "The server rejected our client hello messages too many times" },
{ QUIC_PROOF_INVALID, "The client rejected the server's certificate chain or signature" },
{ QUIC_CRYPTO_DUPLICATE_TAG, "A crypto message was received with a duplicate tag" },
{ QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT, "A crypto message was received with the wrong encryption level (i.e. it should have been encrypted but was not" },
{ QUIC_CRYPTO_SERVER_CONFIG_EXPIRED, "The server config for a server has expired" },
{ QUIC_INVALID_STREAM_DATA, "STREAM frame data is malformed" },
{ QUIC_INVALID_CONGESTION_FEEDBACK_DATA, "Invalid congestion Feedback data (Deprecated)" },
{ QUIC_MISSING_PAYLOAD, "The packet contained no payload" },
{ QUIC_INVALID_PRIORITY, "A priority was invalid" },
{ QUIC_INVALID_STREAM_FRAME, "We received a STREAM_FRAME with no data and no fin flag set" },
{ QUIC_PACKET_READ_ERROR, "There was an error while reading from the socket" },
{ QUIC_INVALID_CHANNEL_ID_SIGNATURE, "An invalid channel id signature was supplied" },
{ QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED, "We failed to setup the symmetric keys for a connection" },
{ QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO, "A handshake message arrived, but we are still validating the previous handshake message" },
{ QUIC_VERSION_NEGOTIATION_MISMATCH, "This connection involved a version negotiation which appears to have been tampered with" },
{ QUIC_INVALID_HEADERS_STREAM_DATA, "We received invalid data on the headers stream" },
{ QUIC_INVALID_WINDOW_UPDATE_DATA, "WINDOW_UPDATE frame data is malformed" },
{ QUIC_INVALID_BLOCKED_DATA, "BLOCKED frame data is malformed" },
{ QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, "The peer received too much data, violating flow control" },
{ QUIC_INVALID_STOP_WAITING_DATA, "STOP_WAITING frame data is malformed" },
{ QUIC_UNENCRYPTED_STREAM_DATA, "STREAM frame data is not encrypted" },
{ QUIC_CONNECTION_IP_POOLED, "The connection has been IP pooled into an existing connection" },
{ QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA, "The peer sent too much data, violating flow control" },
{ QUIC_FLOW_CONTROL_INVALID_WINDOW, "The peer received an invalid flow control window" },
{ QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE, "A server config update arrived before the handshake is complete" },
{ QUIC_TOO_MANY_UNFINISHED_STREAMS, "The peer must send a FIN/RST for each stream, and has not been doing so" },
{ QUIC_CONNECTION_OVERALL_TIMED_OUT, "We hit our overall connection timeout" },
{ QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, "The connection has too many outstanding sent packets" },
{ QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, "The connection has too many outstanding received packets" },
{ QUIC_CONNECTION_CANCELLED, "The quic connection job to load server config is cancelled" },
{ QUIC_BAD_PACKET_LOSS_RATE, "Disabled QUIC because of high packet loss rate" },
{ QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, "A crypto handshake message resulted in a stateless reject" },
{ QUIC_PUBLIC_RESETS_POST_HANDSHAKE, "Disabled QUIC because of too many PUBLIC_RESETs post handshake" },
{ QUIC_TIMEOUTS_WITH_OPEN_STREAMS, "Disabled QUIC because of too many timeouts with streams open" },
{ QUIC_FAILED_TO_SERIALIZE_PACKET, "Closed because we failed to serialize a packet" },
{ QUIC_LAST_ERROR, "No error. Used as bound while iterating" },
{ 0, NULL }
};
static value_string_ext error_code_vals_ext = VALUE_STRING_EXT_INIT(error_code_vals);
static guint32 get_len_offset(guint8 frame_type){
guint32 len;
@ -989,7 +1229,7 @@ dissect_quic_frame_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *quic_tree
offset += 8;
proto_tree_add_item_ret_uint(ft_tree, hf_quic_frame_type_rsts_error_code, tvb, offset, 4, ENC_LITTLE_ENDIAN, &error_code);
offset += 4;
proto_item_append_text(ti_ft, " Stream ID: %u, Error code: %s", stream_id, val_to_str(error_code, error_code_vals, "Unknown (%d)"));
proto_item_append_text(ti_ft, " Stream ID: %u, Error code: %s", stream_id, val_to_str_ext(error_code, &error_code_vals_ext, "Unknown (%d)"));
}
break;
case FT_CONNECTION_CLOSE:{
@ -1003,7 +1243,7 @@ dissect_quic_frame_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *quic_tree
offset += 2;
proto_tree_add_item(ft_tree, hf_quic_frame_type_cc_reason_phrase, tvb, offset, len_reason, ENC_ASCII|ENC_NA);
offset += len_reason;
proto_item_append_text(ti_ft, " Error code: %s", val_to_str(error_code, error_code_vals, "Unknown (%d)"));
proto_item_append_text(ti_ft, " Error code: %s", val_to_str_ext(error_code, &error_code_vals_ext, "Unknown (%d)"));
}
break;
case FT_GOAWAY:{
@ -1019,7 +1259,7 @@ dissect_quic_frame_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *quic_tree
offset += 2;
proto_tree_add_item(ft_tree, hf_quic_frame_type_goaway_reason_phrase, tvb, offset, len_reason, ENC_ASCII|ENC_NA);
offset += len_reason;
proto_item_append_text(ti_ft, " Stream ID: %u, Error code: %s", last_good_stream_id, val_to_str(error_code, error_code_vals, "Unknown (%d)"));
proto_item_append_text(ti_ft, " Stream ID: %u, Error code: %s", last_good_stream_id, val_to_str_ext(error_code, &error_code_vals_ext, "Unknown (%d)"));
}
break;
case FT_WINDOW_UPDATE:{
@ -1457,12 +1697,12 @@ proto_register_quic(void)
},
{ &hf_quic_frame_type_rsts_error_code,
{ "Error code", "quic.frame_type.rsts.error_code",
FT_UINT32, BASE_DEC, VALS(error_code_vals), 0x0,
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &error_code_vals_ext, 0x0,
"Indicates why the stream is being closed", HFILL }
},
{ &hf_quic_frame_type_cc_error_code,
{ "Error code", "quic.frame_type.cc.error_code",
FT_UINT32, BASE_DEC, VALS(error_code_vals), 0x0,
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &error_code_vals_ext, 0x0,
"Stream ID of the stream being terminated", HFILL }
},
{ &hf_quic_frame_type_cc_reason_phrase_length,
@ -1477,12 +1717,12 @@ proto_register_quic(void)
},
{ &hf_quic_frame_type_goaway_error_code,
{ "Error code", "quic.frame_type.goaway.error_code",
FT_UINT32, BASE_DEC, VALS(error_code_vals), 0x0,
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &error_code_vals_ext, 0x0,
"Stream ID of the stream being terminated", HFILL }
},
{ &hf_quic_frame_type_goaway_last_good_stream_id,
{ "Error code", "quic.frame_type.goaway.error_code",
FT_UINT32, BASE_DEC, VALS(error_code_vals), 0x0,
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &error_code_vals_ext, 0x0,
"Stream ID of the stream being terminated", HFILL }
},
{ &hf_quic_frame_type_goaway_reason_phrase_length,