aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/epan
diff options
context:
space:
mode:
authorBaşak Kalfa <basakkalfa@gmail.com>2019-10-10 00:05:46 -0700
committerAnders Broman <a.broman58@gmail.com>2019-11-05 10:13:36 +0000
commitd793c8d70e7f01ec1c6fe881bb2c844de07a4b8f (patch)
tree81cc04de6a2e3c0cbcf38dbafa40f6e6a7546d75 /plugins/epan
parentf70c14af07819ec94914e2d3cceda644ad2cc85f (diff)
PROFINET: Manufacturer Data ranges are modified.
According to specification, ranges for manufacturer data are modified for both DCP and MRP. Small fixes are done. Change-Id: I08fa8a8b04e8b82ade7f6a275774cfcbdb490495 Reviewed-on: https://code.wireshark.org/review/34755 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'plugins/epan')
-rw-r--r--plugins/epan/profinet/packet-dcerpc-pn-io.c4
-rw-r--r--plugins/epan/profinet/packet-pn-dcp.c125
-rw-r--r--plugins/epan/profinet/packet-pn-mrp.c49
3 files changed, 92 insertions, 86 deletions
diff --git a/plugins/epan/profinet/packet-dcerpc-pn-io.c b/plugins/epan/profinet/packet-dcerpc-pn-io.c
index f3111127ca..8a23d8d2c8 100644
--- a/plugins/epan/profinet/packet-dcerpc-pn-io.c
+++ b/plugins/epan/profinet/packet-dcerpc-pn-io.c
@@ -1627,7 +1627,7 @@ static const value_string pn_io_index[] = {
/*0xF843 - 0xF84F reserved */
{ 0xF850, "AutoConfigurarion" },
{ 0xF880, "AssetManagementData" },
- /*0xF851 - 0xFBFF reserved */
+ /*0xF851 - 0xFBFF reserved except 0xF880*/
/*0xFC00 - 0xFFFF reserved for profiles */
{ 0, NULL }
};
@@ -13380,7 +13380,7 @@ proto_register_pn_io (void)
{ &hf_pn_io_mrp_lnknrmax,
{ "MRP_LNKNRmax", "pn_io.mrp_lnknrmax",
FT_UINT16, BASE_HEX, NULL, 0x0,
- NULL, HFILL }
+ "number of iterations", HFILL }
},
{ &hf_pn_io_mrp_version,
{ "MRP_Version", "pn_io.mrp_version",
diff --git a/plugins/epan/profinet/packet-pn-dcp.c b/plugins/epan/profinet/packet-pn-dcp.c
index f99a1e997c..f0d83f0fb3 100644
--- a/plugins/epan/profinet/packet-pn-dcp.c
+++ b/plugins/epan/profinet/packet-pn-dcp.c
@@ -153,10 +153,9 @@ static const value_string pn_dcp_block_error[] = {
{ 0, NULL }
};
-static const value_string pn_dcp_block_info[] = {
- { 0x0000, "Reserved" },
- /*0x0001 - 0xffff reserved */
- { 0, NULL }
+static const range_string pn_dcp_block_info[] = {
+ { 0x0000, 0xFFFF, "Reserved" },
+ { 0, 0, NULL }
};
static const value_string pn_dcp_block_qualifier[] = {
@@ -197,33 +196,22 @@ static const value_string pn_dcp_BlockQualifier[] = {
#define PNDCP_OPTION_CONTROL 0x05
#define PNDCP_OPTION_DEVICEINITIATIVE 0x06
#define PNDCP_OPTION_MANUF_X80 0x80
-#define PNDCP_OPTION_MANUF_X81 0x81
-#define PNDCP_OPTION_MANUF_X82 0x82
-#define PNDCP_OPTION_MANUF_X83 0x83
-#define PNDCP_OPTION_MANUF_X84 0x84
-#define PNDCP_OPTION_MANUF_X85 0x85
-#define PNDCP_OPTION_MANUF_X86 0x86
-#define PNDCP_OPTION_ALLSELECTOR 0xff
-
-static const value_string pn_dcp_option[] = {
- { 0x00, "reserved" },
- { PNDCP_OPTION_IP, "IP" },
- { PNDCP_OPTION_DEVICE, "Device properties" },
- { PNDCP_OPTION_DHCP, "DHCP" },
- { PNDCP_OPTION_RESERVED, "Reserved" },
- { PNDCP_OPTION_CONTROL, "Control" },
- { PNDCP_OPTION_DEVICEINITIATIVE, "Device Initiative" },
- /*0x07 - 0x7f reserved */
- /*0x80 - 0xfe manufacturer specific */
- { PNDCP_OPTION_MANUF_X80, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X81, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X82, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X83, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X84, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X85, "Manufacturer specific" },
- { PNDCP_OPTION_MANUF_X86, "Manufacturer specific" },
- { PNDCP_OPTION_ALLSELECTOR, "All Selector" },
- { 0, NULL }
+#define PNDCP_OPTION_MANUF_XFE 0xFE
+#define PNDCP_OPTION_ALLSELECTOR 0xFF
+
+static const range_string pn_dcp_option[] = {
+ { 0x00, 0x00, "Reserved" },
+ { PNDCP_OPTION_IP , PNDCP_OPTION_IP , "IP" },
+ { PNDCP_OPTION_DEVICE , PNDCP_OPTION_DEVICE , "Device properties" },
+ { PNDCP_OPTION_DHCP , PNDCP_OPTION_DHCP , "DHCP" },
+ { PNDCP_OPTION_RESERVED , PNDCP_OPTION_RESERVED , "Reserved" },
+ { PNDCP_OPTION_CONTROL , PNDCP_OPTION_CONTROL , "Control" },
+ { PNDCP_OPTION_DEVICEINITIATIVE, PNDCP_OPTION_DEVICEINITIATIVE, "Device Initiative" },
+ /*0x07 - 0x7F reserved */
+ /*0x80 - 0xFE manufacturer specific */
+ { PNDCP_OPTION_MANUF_X80 , PNDCP_OPTION_MANUF_XFE , "Manufacturer specific" },
+ { PNDCP_OPTION_ALLSELECTOR, PNDCP_OPTION_ALLSELECTOR, "All Selector" },
+ { 0, 0, NULL }
};
#define PNDCP_SUBOPTION_IP_MAC 0x01
@@ -399,7 +387,7 @@ dissect_PNDCP_Option(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
proto_item_append_text(block_item, ", Status from %s - %s",
- val_to_str(option, pn_dcp_option, "Unknown"), val_to_str(suboption, val_str, "Unknown"));
+ rval_to_str(option, pn_dcp_option, "Unknown"), val_to_str(suboption, val_str, "Unknown"));
if (append_col) {
col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", val_to_str(suboption, val_str, "Unknown"));
@@ -460,7 +448,7 @@ dissect_PNDCP_Suboption_IP(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
offset = dissect_pn_mac(tvb, offset, pinfo, tree, hf_pn_dcp_suboption_ip_mac_address, mac);
@@ -539,7 +527,7 @@ dissect_PNDCP_Suboption_IP(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
/* IPAddress */
@@ -657,7 +645,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info){
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", DeviceVendorValue: \"%s\"", typeofstation);
@@ -714,7 +702,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", \"%s\"", nameofstation);
@@ -784,7 +772,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", VendorID: 0x%04x / DeviceID: 0x%04x", vendor_id, device_id);
break;
@@ -798,7 +786,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
val_to_str(block_qualifier, pn_dcp_block_qualifier, "Unknown"));
}
if (have_block_info)
- proto_item_append_text(block_item, ", BlockInfo: %s", val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ proto_item_append_text(block_item, ", BlockInfo: %s", rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
if (device_role & 0x01)
proto_item_append_text(block_item, ", IO-Device");
if (device_role & 0x02)
@@ -818,7 +806,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", %u options", block_length/2);
for( ; block_length != 0; block_length -= 2) {
@@ -862,7 +850,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", \"%s\"", aliasname);
offset += block_length;
@@ -878,7 +866,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", InstanceHigh: %d, Instance Low: %d",
device_instance_high, device_instance_low);
@@ -894,7 +882,7 @@ dissect_PNDCP_Suboption_Device(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if(have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
proto_item_append_text(block_item, ", OEMVendorID: 0x%04x / OEMDeviceID: 0x%04x", oem_vendor_id, oem_device_id);
break;
@@ -952,7 +940,7 @@ dissect_PNDCP_Suboption_DHCP(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
offset = dissect_pn_uint8(tvb, offset, pinfo, tree, hf_pn_dcp_suboption_dhcp_option_code, &option_code);
offset = dissect_pn_uint8(tvb, offset, pinfo, tree, hf_pn_dcp_suboption_dhcp_parameter_length, &dhcpparameterlength);
@@ -993,7 +981,7 @@ dissect_PNDCP_Suboption_DHCP(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (have_block_info) {
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
}
offset = dissect_pn_uint8(tvb, offset, pinfo, tree, hf_pn_dcp_suboption_dhcp_option_code, &option_code);
offset = dissect_pn_uint8(tvb, offset, pinfo, tree, hf_pn_dcp_suboption_dhcp_parameter_length, &dhcpparameterlength);
@@ -1118,7 +1106,7 @@ dissect_PNDCP_Suboption_DeviceInitiative(tvbuff_t *tvb, int offset, packet_info
((service_id == PNDCP_SERVICE_ID_GET) && is_response)) {
offset = dissect_pn_uint16(tvb, offset, pinfo, tree, hf_pn_dcp_block_info, &block_info);
proto_item_append_text(block_item, ", BlockInfo: %s",
- val_to_str(block_info, pn_dcp_block_info, "Unknown"));
+ rval_to_str(block_info, pn_dcp_block_info, "Unknown"));
block_length -= 2;
}
@@ -1201,30 +1189,39 @@ dissect_PNDCP_Block(tvbuff_t *tvb, int offset, packet_info *pinfo,
offset = dissect_pn_uint8(tvb, offset, pinfo, block_tree, hf_pn_dcp_option, &option);
- switch (option) {
- case PNDCP_OPTION_IP:
+ if (option == PNDCP_OPTION_IP)
+ {
offset = dissect_PNDCP_Suboption_IP(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_DEVICE:
+ }
+ else if (option == PNDCP_OPTION_DEVICE)
+ {
offset = dissect_PNDCP_Suboption_Device(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_DHCP:
+ }
+ else if (option == PNDCP_OPTION_DHCP)
+ {
offset = dissect_PNDCP_Suboption_DHCP(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_CONTROL:
+ }
+ else if (option == PNDCP_OPTION_CONTROL)
+ {
offset = dissect_PNDCP_Suboption_Control(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_DEVICEINITIATIVE:
+ }
+ else if (option == PNDCP_OPTION_DEVICEINITIATIVE)
+ {
offset = dissect_PNDCP_Suboption_DeviceInitiative(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_ALLSELECTOR:
+ }
+ else if (option == PNDCP_OPTION_ALLSELECTOR)
+ {
offset = dissect_PNDCP_Suboption_All(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
- break;
- case PNDCP_OPTION_MANUF_X80:
- case PNDCP_OPTION_MANUF_X81:
- default:
+ }
+ else if (PNDCP_OPTION_MANUF_X80 <= option && option <= PNDCP_OPTION_MANUF_XFE)
+ {
offset = dissect_PNDCP_Suboption_Manuf(tvb, offset, pinfo, block_tree, block_item, dcp_item, service_id, is_response);
}
+ else
+ {
+ pn_append_info(pinfo, dcp_item, ", Reserved");
+ proto_item_append_text(block_item, "Reserved");
+ }
proto_item_set_len(block_item, offset-ori_offset);
@@ -1403,7 +1400,7 @@ proto_register_pn_dcp (void)
{ &hf_pn_dcp_option,
{ "Option", "pn_dcp.option",
- FT_UINT8, BASE_DEC, VALS(pn_dcp_option), 0x0,
+ FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(pn_dcp_option), 0x0,
NULL, HFILL }},
#if 0
@@ -1425,7 +1422,7 @@ proto_register_pn_dcp (void)
{ &hf_pn_dcp_block_info,
{ "BlockInfo", "pn_dcp.block_info",
- FT_UINT16, BASE_DEC, VALS(pn_dcp_block_info), 0x0,
+ FT_UINT16, BASE_DEC|BASE_RANGE_STRING, RVALS(pn_dcp_block_info), 0x0,
NULL, HFILL }},
{ &hf_pn_dcp_block_qualifier,
@@ -1565,7 +1562,7 @@ proto_register_pn_dcp (void)
{ &hf_pn_dcp_suboption_control_option,
{ "Option", "pn_dcp.suboption_control_option",
- FT_UINT8, BASE_DEC, VALS(pn_dcp_option), 0x0,
+ FT_UINT8, BASE_DEC|BASE_RANGE_STRING, RVALS(pn_dcp_option), 0x0,
NULL, HFILL }},
{ &hf_pn_dcp_suboption_control_signal_value,
diff --git a/plugins/epan/profinet/packet-pn-mrp.c b/plugins/epan/profinet/packet-pn-mrp.c
index 23dcfefe9d..9d83a859da 100644
--- a/plugins/epan/profinet/packet-pn-mrp.c
+++ b/plugins/epan/profinet/packet-pn-mrp.c
@@ -44,6 +44,7 @@ static int hf_pn_mrp_sub_tlv_header_length = -1;
static int hf_pn_mrp_sub_option2 = -1;
static int hf_pn_mrp_other_mrm_prio = -1;
static int hf_pn_mrp_other_mrm_sa = -1;
+static int hf_pn_mrp_manufacturer_data = -1;
static gint ett_pn_mrp = -1;
static gint ett_pn_mrp_type = -1;
@@ -113,10 +114,26 @@ static const value_string pn_mrp_prio_vals[] = {
#endif
static const value_string pn_mrp_sub_tlv_header_type_vals[] = {
- { 0x00, "End" },
+ /* 0x00 Reserved */
{ 0x01, "MRP_TestMgrNAck" },
{ 0x02, "MRP_TestPropagate" },
{ 0x03, "MRP_AutoMgr" },
+ /* 0x04 - 0xF0 Reserved for IEC specific functions */
+ { 0xF1, "Manufacturer specific functions" },
+ { 0xF2, "Manufacturer specific functions" },
+ { 0xF3, "Manufacturer specific functions" },
+ { 0xF4, "Manufacturer specific functions" },
+ { 0xF5, "Manufacturer specific functions" },
+ { 0xF6, "Manufacturer specific functions" },
+ { 0xF7, "Manufacturer specific functions" },
+ { 0xF8, "Manufacturer specific functions" },
+ { 0xF9, "Manufacturer specific functions" },
+ { 0xFA, "Manufacturer specific functions" },
+ { 0xFB, "Manufacturer specific functions" },
+ { 0xFC, "Manufacturer specific functions" },
+ { 0xFD, "Manufacturer specific functions" },
+ { 0xFE, "Manufacturer specific functions" },
+ { 0xFF, "Manufacturer specific functions" },
{ 0, NULL },
};
@@ -324,12 +341,13 @@ packet_info *pinfo, proto_tree *tree)
if (u8SubType == 0x00)
{
- // IEC area: 0x00: MRP_End;
+ // IEC area: 0x00: Reserved;
return offset;
}
- else if (u8SubType == 0x01)
+ else if ( u8SubType == 0x01 || u8SubType == 0x02 )
{
// IEC area: 0x01: MRP_TestMgrNAck;
+ // IEC area: 0x02: MRP_AutoMgr;
/* MRP_Prio */
offset = dissect_pn_uint16_ret_item(tvb, offset, pinfo, sub_tree, hf_pn_mrp_prio, &u16Prio, &sub_item);
@@ -348,24 +366,11 @@ packet_info *pinfo, proto_tree *tree)
offset = dissect_pn_align4(tvb, offset, pinfo, sub_tree);
}
- else if (u8SubType == 0x02)
+ else if ( 0xF1 <= u8SubType )
{
- /* MRP_Prio */
- offset = dissect_pn_uint16_ret_item(tvb, offset, pinfo, sub_tree, hf_pn_mrp_prio, &u16Prio, &sub_item);
- proto_item_append_text(sub_item, "%s", mrp_Prio2msg(u16Prio));
-
- /* MRP_SA */
- offset = dissect_pn_mac(tvb, offset, pinfo, sub_tree, hf_pn_mrp_sa, mac);
-
- /* MRP_OtherMRMPrio */
- offset = dissect_pn_uint16_ret_item(tvb, offset, pinfo, sub_tree, hf_pn_mrp_other_mrm_prio,
- &u16OtherPrio, &sub_item);
- proto_item_append_text(sub_item, "%s", mrp_Prio2msg(u16OtherPrio));
-
- /* MRP_OtherMRMSA */
- offset = dissect_pn_mac(tvb, offset, pinfo, sub_tree, hf_pn_mrp_other_mrm_sa, otherMac);
-
- offset = dissect_pn_align4(tvb, offset, pinfo, sub_tree);
+ proto_tree_add_string_format(sub_tree, hf_pn_mrp_manufacturer_data, tvb, offset, u8Sublength, "data",
+ "Reserved for vendor specific data: %u byte", u8Sublength);
+ offset += u8Sublength;
}
return offset;
}
@@ -628,6 +633,10 @@ proto_register_pn_mrp (void)
{ &hf_pn_mrp_other_mrm_sa,
{ "MRP_OtherMRMSA", "pn_mrp.other_mrm_sa",
FT_ETHER, BASE_NONE, 0x0, 0x0,
+ NULL, HFILL }},
+ { &hf_pn_mrp_manufacturer_data,
+ { "MRP_ManufacturerData", "pn_mrp.manufacturer_data",
+ FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }}
};