- Extend and correct value strings.

- Fix tree handling for QoS.
- Add references.

svn path=/trunk/; revision=48718
This commit is contained in:
Anders Broman 2013-04-03 16:49:55 +00:00
parent 88324c19ea
commit c534f5e0db
1 changed files with 82 additions and 32 deletions

View File

@ -99,6 +99,8 @@ static int hf_a11_vse_qosmode = -1;
static int hf_a11_vse_pdit = -1;
static int hf_a11_vse_code = -1;
static int hf_a11_vse_dormant = -1;
static int hf_a11_vse_ehrpd_mode = -1;
static int hf_a11_vse_ehrpd_pmk = -1;
static int hf_a11_vse_ppaddr = -1;
/* Additional Session Information */
@ -283,7 +285,7 @@ static const value_string a11_reply_codes[]= {
{136, "Reg Deny (HA)- Unknown PDSN Address"},
{137, "Reg Deny (HA)- Requested Reverse Tunnel Unavailable"},
{138, "Reg Deny (HA)- Reverse Tunnel is Mandatory and 'T' Bit Not Set"},
{139, "Reg Deny (HA)- Requested Encapsulation Unavailable"},
{139, "Registration Denied service option not supported"},
{140, "Registration Denied - no CID available"},
{141, "Reg Deny (HA)- unsupported Vendor ID / Application Type in CVSE"},
{142, "Registration Denied - nonexistent A10 or IP flow"},
@ -292,16 +294,17 @@ static const value_string a11_reply_codes[]= {
static const value_string a11_ack_status[]= {
{0, "Update Accepted"},
{1, "Partial QoS updated"},
{128, "Update Deny - Unspecified"},
{131, "Update Deny - Sending Node Failed Authentication"},
{133, "Update Deny - Registration ID Mismatch"},
{134, "Update Deny - Poorly Formed Request"},
{193, "Update Deny - Session Parameter Not Updated"},
{253, "Update Denied - QoS profileID not supported"},
{254, "Update Denied - insufficient resources"},
{255, "Update Denied - handoff in progress"},
{0x00, "Update Accepted"},
{0x01, "Partial QoS updated"},
{0x80, "Update Denied - reason unspecified"},
{0x83, "Update Denied sending node failed authentication"},
{0x85, "Update Denied - identification mismatch)"},
{0x86, "Update Denied - poorly formed registration update"},
{0xc9, "Update Denied - Session Parameter Not Updated"},
{0xca, "Update Denied PMK not requested"},
{0xfd, "Update Denied - QoS profileID not supported"},
{0xfe, "Update Denied - insufficient resources"},
{0xff, "Update Denied - handoff in progress"},
{0, NULL},
};
@ -353,8 +356,9 @@ static const value_string a11_ext_nvose_srvopt[]= {
{0x003B, "HRPD Main Service Connection"},
{0x003C, "Link Layer Assisted Header Removal"},
{0x003D, "Link Layer Assisted Robust Header Compression"},
{0x0040, "HRPD Auxiliary Service Connection with higher layer framing for packet synchronization"},
{0x0043, "HRPD Auxiliary Service Connection without higher layer framing for packet synchronization"},
{0x0040, "HRPD Accounting Records Identifier"}, /* 3GPP2 A.S0009-C v4.0 */
{0x0043, "HRPD Packet Data IP Service where Higher Layer Protocol is IP or ROHC"}, /* 3GPP2 A.S0009-C v4.0 */
{0x0047, "HRPD AltPPP operation"}, /* 3GPP2 A.S0009-C v4.0 */
{0, NULL},
};
@ -376,6 +380,12 @@ static const value_string a11_ext_dormant[]= {
{0, NULL},
};
static const true_false_string a11_tfs_ehrpd_mode = {
"eAT is operating in evolved mode",
"eAT is operating in legacy mode"
};
static const value_string a11_ext_app[]= {
{0x0101, "Accounting (RADIUS)"},
{0x0102, "Accounting (DIAMETER)"},
@ -384,6 +394,8 @@ static const value_string a11_ext_app[]= {
{0x0401, "Access Network Identifiers (ANID)"},
{0x0501, "PDSN Identifiers (Anchor P-P Address)"},
{0x0601, "Indicators (All Dormant Indicator)"},
{0x0602, "Indicators (eHRPD Mode)"}, /* 3GPP2 A.S0022-B v1.0 */
{0x0603, "Indicators (eHRPD Indicators)"}, /* 3GPP2 A.S0009-C v4.0 */
{0x0701, "PDSN Code (PDSN Code)"},
{0x0801, "Session Parameter (RN-PDIT:Radio Network Packet Data Inactivity Timer)"},
{0x0802, "Session Parameter (Always On)"},
@ -398,9 +410,14 @@ static const value_string a11_ext_app[]= {
{0x0D01, "QoS Information (Forward QoS Information)"},
{0x0D02, "QoS Information (Reverse QoS Information)"},
{0x0D03, "QoS Information (Subscriber QoS Profile)"},
{0x0D04, "QoS Information (Forward Flow Priority Update Information)"},
{0x0D05, "QoS Information (Reverse Flow Priority Update Information)"},
{0x0DFE, "QoS Information (Forward QoS Update Information)"},
{0x0DFF, "QoS Information (Reverse QoS Update Information)"},
{0x0E01, "Header Compression (ROHC Configuration Parameters)"},
{0x0F01, "Information (Cause Code)"},
{0x0F04, "Information (Additional HSGW Information)"},
{0x1001, "HRPD Indicators (Emergency Services)"},
{0, NULL},
};
@ -457,6 +474,17 @@ static const value_string a11_rohc_profile_vals[] =
else
Last Byte: [F] [Digit N]
*/
/* 3GPP2 A.S0008-C v4.0 */
static const value_string a11_ses_msid_type_vals[] =
{
{ 0x0001, "MEID" },
{ 0x0005, "ESN" },
{ 0x0006, "IMSI" },
{ 0, NULL },
};
static void
decode_sse(proto_tree *ext_tree, tvbuff_t *tvb, int offset, guint ext_len)
{
@ -754,7 +782,7 @@ dissect_ase(tvbuff_t *tvb, int offset, guint ase_len, proto_tree *ext_tree)
proto_tree_add_item(exts_tree, hf_a11_ase_pcf_addr_key, tvb, offset, 4, ENC_BIG_ENDIAN);
offset+=4;
if (registration_request_msg){
if ((entry_lenght>14)&&(registration_request_msg)){
if (service_option == 0x0043){
proto_item *tl;
proto_tree *extv_tree;
@ -915,24 +943,24 @@ dissect_fwd_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti = proto_tree_add_text
(ext_tree, tvb, offset+clen, entry_len+1, "Forward Flow Entry (Flow Id: %d)", flow_id);
proto_tree *exts_tree = proto_item_add_subtree(ti, ett_a11_fqi_flowentry);
proto_tree *flow_tree = proto_item_add_subtree(ti, ett_a11_fqi_flowentry);
/* Entry Length */
proto_tree_add_item(exts_tree, hf_a11_fqi_entrylen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_fqi_entrylen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Flow Id */
proto_tree_add_item(exts_tree, hf_a11_fqi_flowid, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_fqi_flowid, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* DSCP and Flow State*/
dissect_fqi_entry_flags(tvb, offset+clen, exts_tree, dscp_enabled);
dissect_fqi_entry_flags(tvb, offset+clen, flow_tree, dscp_enabled);
clen++;
/* Requested QoS Length */
requested_qos_len = tvb_get_guint8(tvb, offset+clen);
proto_tree_add_item(exts_tree, hf_a11_fqi_requested_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_fqi_requested_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Requested QoS Blob */
@ -941,7 +969,7 @@ dissect_fwd_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti2;
proto_tree *exts_tree2;
proto_item *ti1 = proto_tree_add_text(ext_tree, tvb, offset+clen,requested_qos_len, "Forward Requested QoS ");
proto_item *ti1 = proto_tree_add_text(flow_tree, tvb, offset+clen,requested_qos_len, "Forward Requested QoS ");
proto_tree *exts_tree1 = proto_item_add_subtree(ti1, ett_a11_fqi_requestedqos);
proto_tree_add_text(exts_tree1, tvb, offset+clen, requested_qos_len, "Forward Requested QoS Sub Blob");
@ -975,7 +1003,7 @@ dissect_fwd_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
/* Granted QoS Length */
granted_qos_len = tvb_get_guint8(tvb, offset+clen);
proto_tree_add_item(exts_tree, hf_a11_fqi_granted_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_fqi_granted_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Granted QoS Blob */
@ -984,7 +1012,7 @@ dissect_fwd_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti3;
proto_tree *exts_tree3;
ti3 = proto_tree_add_text(ext_tree, tvb, offset+clen, granted_qos_len, "Forward Granted QoS ");
ti3 = proto_tree_add_text(flow_tree, tvb, offset+clen, granted_qos_len, "Forward Granted QoS ");
exts_tree3 = proto_item_add_subtree(ti3, ett_a11_fqi_grantedqos);
@ -994,7 +1022,7 @@ dissect_fwd_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_tree_add_item(exts_tree3, hf_a11_fqi_qos_granted_attribute_setid, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
}
}
}/*for(flow_index...) */
}
/* Code to dissect Reverse QoS Info */
@ -1026,23 +1054,23 @@ dissect_rev_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti = proto_tree_add_text
(ext_tree, tvb, offset+clen, entry_len+1, "Reverse Flow Entry (Flow Id: %d)", flow_id);
proto_tree *exts_tree = proto_item_add_subtree(ti, ett_a11_rqi_flowentry);
proto_tree *flow_tree = proto_item_add_subtree(ti, ett_a11_rqi_flowentry);
/* Entry Length */
proto_tree_add_item(exts_tree, hf_a11_rqi_entrylen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_rqi_entrylen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Flow Id */
proto_tree_add_item(exts_tree, hf_a11_rqi_flowid, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_rqi_flowid, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Flags */
dissect_rqi_entry_flags(tvb, offset+clen, exts_tree);
dissect_rqi_entry_flags(tvb, offset+clen, flow_tree);
clen++;
/* Requested QoS Length */
requested_qos_len = tvb_get_guint8(tvb, offset+clen);
proto_tree_add_item(exts_tree, hf_a11_rqi_requested_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_rqi_requested_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Requested QoS Blob */
@ -1051,7 +1079,7 @@ dissect_rev_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti1, *ti2;
proto_tree *exts_tree1, *exts_tree2;
ti1 = proto_tree_add_text(ext_tree, tvb, offset+clen,requested_qos_len , "Reverse Requested QoS ");
ti1 = proto_tree_add_text(flow_tree, tvb, offset+clen,requested_qos_len , "Reverse Requested QoS ");
exts_tree1 = proto_item_add_subtree(ti1, ett_a11_rqi_requestedqos);
@ -1085,7 +1113,7 @@ dissect_rev_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
/* Granted QoS Length */
granted_qos_len = tvb_get_guint8(tvb, offset+clen);
proto_tree_add_item(exts_tree, hf_a11_rqi_granted_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(flow_tree, hf_a11_rqi_granted_qoslen, tvb, offset+clen, 1, ENC_BIG_ENDIAN);
clen++;
/* Granted QoS Blob */
@ -1094,7 +1122,7 @@ dissect_rev_qosinfo(tvbuff_t *tvb, int offset, proto_tree *ext_tree)
proto_item *ti3;
proto_tree *exts_tree3;
ti3 = proto_tree_add_text(ext_tree, tvb, offset+clen,granted_qos_len , "Reverse Granted QoS ");
ti3 = proto_tree_add_text(flow_tree, tvb, offset+clen,granted_qos_len , "Reverse Granted QoS ");
exts_tree3 = proto_item_add_subtree(ti3, ett_a11_rqi_grantedqos);
proto_tree_add_text(exts_tree3, tvb, offset+clen, granted_qos_len, "Reverse Granted QoS Sub Blob");
@ -1392,6 +1420,18 @@ dissect_a11_extensions( tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tre
break;
proto_tree_add_item(ext_tree, hf_a11_vse_dormant, tvb, offset, 2, ENC_BIG_ENDIAN);
break;
case 0x0602:
/* eHRPD Mode */
if (ext_len < 1)
break;
proto_tree_add_item(ext_tree, hf_a11_vse_ehrpd_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
break;
case 0x0603:
/* eHRPD Indicators */
if (ext_len < 1)
break;
proto_tree_add_item(ext_tree, hf_a11_vse_ehrpd_pmk, tvb, offset, 1, ENC_BIG_ENDIAN);
break;
case 0x0701:
if (ext_len < 1)
break;
@ -1905,7 +1945,7 @@ proto_register_a11(void)
},
{ &hf_a11_ses_msid_type,
{ "MSID Type", "a11.ext.msid_type",
FT_UINT16, BASE_DEC, NULL, 0,
FT_UINT16, BASE_DEC, VALS(a11_ses_msid_type_vals), 0,
NULL, HFILL }
},
{ &hf_a11_ses_msid_len,
@ -1943,6 +1983,16 @@ proto_register_a11(void)
FT_UINT16, BASE_HEX, VALS(a11_ext_dormant), 0,
NULL, HFILL }
},
{ &hf_a11_vse_ehrpd_mode,
{ "eHRPD Mode", "a11.ext.ehrpd.mode",
FT_BOOLEAN, 8, TFS(&a11_tfs_ehrpd_mode), 0,
NULL, HFILL }
},
{ &hf_a11_vse_ehrpd_pmk,
{ "PMK", "a11.ext.ehrpd.pmk",
FT_BOOLEAN, 8, NULL, 0,
NULL, HFILL }
},
{ &hf_a11_vse_code,
{ "Reply Code", "a11.ext.code",
FT_UINT8, BASE_DEC, VALS(a11_reply_codes), 0,