aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-wsmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-wsmp.c')
-rw-r--r--epan/dissectors/packet-wsmp.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/epan/dissectors/packet-wsmp.c b/epan/dissectors/packet-wsmp.c
index 737eb24048..085f6c0b57 100644
--- a/epan/dissectors/packet-wsmp.c
+++ b/epan/dissectors/packet-wsmp.c
@@ -40,6 +40,7 @@ static const value_string wsmp_elemenid_names[] = {
/* Initialize the protocol and registered fields */
static int proto_wsmp = -1;
static int hf_wsmp_version = -1;
+static int hf_wsmp_var_len_det = -1;
static int hf_wsmp_psid = -1;
static int hf_wsmp_rate = -1;
static int hf_wsmp_channel = -1;
@@ -168,19 +169,19 @@ static const value_string wsmp_psid_vals[] = {
/* 0x28 to 0x7E 0p28 to 0p7E Not allocated */
/* 0x7F */ { 0x7F, "Testings" }, /* IEEE P1609 WG */
-/* 0x80 */ { 0x8000, "differential GPS corrections, uncompressed" }, /* SAE J2735 */
-/* 0x81 */ { 0x8001, "differential GPS corrections, compressed" }, /* SAE J2735 */
-/* 0x82 */ { 0x8002, "intersection safety and awareness" }, /* SAE J2735 */
-/* 0x83 */ { 0x8003, "traveller information and roadside signage" }, /* SAE J2735 */
-/* 0x84 */ { 0x8004, "mobile probe exchanges" }, /* SAE J2735 */
-/* 0x85 */ { 0x8005, "emergency and erratic vehicles present in roadway" }, /* SAE J2735 */
-/* 0x86 */ { 0x8006, "Remote ITS station management protocol-Remote Management Protocol Execution(RMPE)" }, /* ISO 24102-2 */
-/* 0x87 */ { 0x8007, "WAVE Service Advertisement" }, /* IEEE Std 1609.3 */
-/* 0x88 */ { 0x8008, "Peer-to-peer distribution of Security Management Information" }, /* CAMP */
+/* 0x80 */ { 0x80, "differential GPS corrections, uncompressed" }, /* SAE J2735 */
+/* 0x81 */ { 0x81, "differential GPS corrections, compressed" }, /* SAE J2735 */
+/* 0x82 */ { 0x82, "intersection safety and awareness" }, /* SAE J2735 */
+/* 0x83 */ { 0x83, "traveller information and roadside signage" }, /* SAE J2735 */
+/* 0x84 */ { 0x84, "mobile probe exchanges" }, /* SAE J2735 */
+/* 0x85 */ { 0x85, "emergency and erratic vehicles present in roadway" }, /* SAE J2735 */
+/* 0x86 */ { 0x86, "Remote ITS station management protocol-Remote Management Protocol Execution(RMPE)" }, /* ISO 24102-2 */
+/* 0x87 */ { 0x87, "WAVE Service Advertisement" }, /* IEEE Std 1609.3 */
+/* 0x88 */ { 0x88, "Peer-to-peer distribution of Security Management Information" }, /* CAMP */
/* 0x89 to 0xFF 0p80-09 to 0p80-7F Not allocated */
-/* 0x01-00 */ { 0x8080, "Certificate Revocation List Application" }, /* CAMP */
+/* 0x01-00 */ { 0x0100, "Certificate Revocation List Application" }, /* CAMP */
/*0x01-01 to 0x3E-7F 0p80-81 to 0pBD-FF Not allocated*/
/*0x3E-80 to 0x40-1F 0pBE-00 to 0pBF-9F Reserved IEEE P1609 WG 416*/
@@ -191,10 +192,10 @@ static const value_string wsmp_psid_vals[] = {
/*0x40-81 0pC0-00-01 Decentralized Environmental Notification Message(DENM) processor(deprecated) ETSI */
/*0x40-82 to 0x20-40-7F 0pC0-00-02 to 0pDF-FF-FF Not allocated*/
/* 2 097 152 total 3-octet p-encoded values*/
-/* 0x20-40-81 */{ 0xE0000001, "ITS-station Internal management Communications Protocol(IICP)" }, /* ISO 24102-4 */
+/* 0x20-40-81 */{ 0x204081, "ITS-station Internal management Communications Protocol(IICP)" }, /* ISO 24102-4 */
/*0x20-40-82 to 0x10-20-40-7D 0pE0-00-00 - 02 to 0pEF-FFFF - FD Not allocated*/
-/* 0x10-20-40-7E */{ 0xEFFFFFFE, "IPv6 routing" }, /* IEEE Std 1609.3 */
-/* 0x10-20-40-7F */{ 0xEFFFFFFF, "Not allocated" }, /* */
+/* 0x10-20-40-7E */{ 0x1020407E, "IPv6 routing" }, /* IEEE Std 1609.3 */
+/* 0x10-20-40-7F */{ 0x1020407F, "Not allocated" }, /* */
{ 0, NULL }
};
@@ -231,13 +232,15 @@ dissect_wsmp_psid(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int o
if (psidLen == 1)
*psid = oct;
else if (psidLen == 2)
- *psid = tvb_get_ntohs(tvb, offset);
+ *psid = (tvb_get_ntohs(tvb, offset) & ~0x8000) + 0x80;
else if (psidLen == 3)
- *psid = tvb_get_ntoh24(tvb, offset);
+ *psid = (tvb_get_ntoh24(tvb, offset) & ~0xc00000) + 0x4080;
else if (psidLen == 4)
- *psid = tvb_get_ntohl(tvb, offset);
+ *psid = (tvb_get_ntohl(tvb, offset) & ~0xe0000000) + 0x204080;
- proto_tree_add_item(tree, hf_wsmp_psid, tvb, offset, psidLen, ENC_BIG_ENDIAN);
+ proto_tree_add_bits_item(tree, hf_wsmp_var_len_det, tvb, offset << 3, psidLen, ENC_NA);
+ proto_tree_add_uint_bits_format_value(tree, hf_wsmp_psid, tvb, (offset << 3) + psidLen,
+ (psidLen << 3) - psidLen,*psid,"%s(%u)", val_to_str_const(*psid, wsmp_psid_vals, "Unknown"), *psid);
offset += psidLen;
return offset;
@@ -370,7 +373,7 @@ dissect_wsmp_v3(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint8 oct)
if((psid == 0x20) && (IEEE1609dot2_handle)){
tvbuff_t * tvb_new = tvb_new_subset_remaining(tvb, offset);
call_dissector(IEEE1609dot2_handle, tvb_new, pinfo, data_tree);
- } else if ((psid == 0x8002) && (IEEE1609dot2_handle)) {
+ } else if ((psid == 0x82) && (IEEE1609dot2_handle)) {
tvbuff_t * tvb_new = tvb_new_subset_remaining(tvb, offset);
call_dissector(IEEE1609dot2_handle, tvb_new, pinfo, data_tree);
}
@@ -479,7 +482,7 @@ dissect_wsmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
/* TODO: Branch on the application context and display accordingly
* Default: call the data dissector
*/
- if (psid == 0xbff0)
+ if (psid == 0x4070)
{
call_data_dissector(wsmdata_tvb, pinfo, wsmdata_tree);
}
@@ -494,6 +497,11 @@ proto_register_wsmp(void)
{ "Version", "wsmp.version", FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }},
+ { &hf_wsmp_var_len_det,
+ { "Length", "wsmp.len.det",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }},
+
{ &hf_wsmp_psid,
{ "PSID", "wsmp.psid", FT_UINT32, BASE_HEX, VALS(wsmp_psid_vals), 0x0,
NULL, HFILL }},