wireshark/epan/dissectors/packet-aruba-papi.c
Michael Mann 2eb7b05b8c Convert most UDP dissectors to use "auto" preferences.
Similar to the "tcp.port" changes in I99604f95d426ad345f4b494598d94178b886eb67,
convert dissectors that use "udp.port".

More cleanup done on dissectors that use both TCP and UDP dissector
tables, so that less preference callbacks exist.

Change-Id: If07be9b9e850c244336a7069599cd554ce312dd3
Reviewed-on: https://code.wireshark.org/review/18120
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
2016-10-13 02:51:18 +00:00

679 lines
24 KiB
C

/* packet-aruba-papi.c
* Routines for Aruba PAPI dissection
* Copyright 2010, Alexis La Goutte <alexis.lagoutte at gmail dot com>
*
* Real name of PAPI : Protocol Application Program Interface
* Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org>
* Copyright 1998 Gerald Combs
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "config.h"
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/expert.h>
/* This is not IANA assigned nor registered */
#define UDP_PORT_PAPI 8211
void proto_register_papi(void);
void proto_reg_handoff_papi(void);
/* Initialize the protocol and registered fields */
static int proto_papi = -1;
static int hf_papi_hdr_magic = -1;
static int hf_papi_hdr_version = -1;
static int hf_papi_hdr_dest_ip = -1;
static int hf_papi_hdr_src_ip = -1;
static int hf_papi_hdr_nat_port_number = -1;
static int hf_papi_hdr_garbage = -1;
static int hf_papi_hdr_dest_port = -1;
static int hf_papi_hdr_src_port = -1;
static int hf_papi_hdr_packet_type = -1;
static int hf_papi_hdr_packet_size = -1;
static int hf_papi_hdr_seq_number = -1;
static int hf_papi_hdr_message_code = -1;
static int hf_papi_hdr_checksum = -1;
static int hf_papi_debug = -1;
static int hf_papi_debug_text = -1;
static int hf_papi_debug_text_length = -1;
static int hf_papi_debug_48bits = -1;
static int hf_papi_debug_8bits = -1;
static int hf_papi_debug_16bits = -1;
static int hf_papi_debug_32bits = -1;
static int hf_papi_debug_ipv4 = -1;
static int hf_papi_debug_64bits = -1;
static int hf_papi_debug_bytes = -1;
static int hf_papi_debug_bytes_length = -1;
static expert_field ei_papi_debug_unknown = EI_INIT;
/* Global PAPI Debug Preference */
static gboolean g_papi_debug = FALSE;
/* Initialize the subtree pointers */
static gint ett_papi = -1;
#define SAMBA_WRAPPER 8442
#define RESOLVER_PORT 8392
#define PB_INT_TASK 8448
#define STATION_MANAGEMENT_LOPRI 8419
#define MOBILE_IP 8383
#define SIBYTE_FASTPATH_PORT 8355
#define WLAN_MANAGEMENT_SERVER 8224
#define SIBYTE_CONSOLE_CLIENT2 8357
#define AUTH_SERVER_LOPRI 8420
#define MOB_FASTPATH_PORT 8354
#define SAP_RRAD_PORT 8382
#define REPGEN 8418
#define RAPPER_PORT2 8424
#define IKE_DAEMON_RAW 8232
#define STATION_MANAGEMENT 8345
#define PPPD_START 8241
#define SETUP_DIALOG 8434
#define WEB_GRAPHGEN1 8346
#define SNMP_TRAP_RAW 8402
#define ARUBA_NTPD 8377
#define STATION_MANAGEMENT_LOPRI_AP 8452
#define CLI_LOG_RAW 8364
#define AUTH_SERVER_RAW 8227
#define RAPPER_PORT5 8427
#define MESH_DAEMON 8433
#define PHONE_HOME 8437
#define FPCLI_SIBYTE_CONSOLE2 8368
#define FASTPATH_WEB_CLIENT 8218
#define SERVER_LOAD_BALANCING 8384
#define IKE_DAEMON 8231
#define CPSEC 8453
#define MOBILITY_CLIENT 8217
#define SNMP_TRAPMGR 8363
#define PIM_TOSIBYTE 8416
#define RAPPER_PORT9 8431
#define CERT_MANAGER_MASTER 8353
#define MISC_PROC 8445
#define PPPD_END 8340
#define SYSMGR 8450
#define RAPPER_PORT6 8428
#define RRA_SERVER 8238
#define NANNY_PORT_MEM_MON 8371
#define SYS_MAPPER_LOPRI 8435
#define RAPPER_PORT4 8426
#define SAPM_HYBRID_AP 8436
#define FASTPATH_CLI_CLIENT 8213
#define CFGM_RAW 8362
#define SPOTMGR 8398
#define SYSLOGDWRAP 8407
#define WEBS_AM_PORT 8352
#define QPDQ_STANDALONE 8401
#define FPCLI_RAW 8361
#define VRRP_DAEMON 8391
#define AMAP_MGMT_PORT 8395
#define CAP_MGMT_PORT 8351
#define SAPM_SERVER 8222
#define PPPD_DAEMON 8234
#define LAST_SERVICE 8999
#define DHCP_SERVER 8390
#define ADMINSERVER 8403
#define SYS_MAPPER 8396
#define PUBSUB_SERVER 8378
#define AMAPI_SNMP_TRAP_CLIENT 8440
#define PPTPD 8341
#define SIBYTE_CONSOLE_PORT 8348
#define SNMP_DAEMON 8219
#define SIBYTE_DNLD_FILE 8374
#define UTILITY_PROCESS 8449
#define SAPM_RAPCP 8438
#define SIBYTE_MACH_INFO 8386
#define SIBYTE_CONSOLE_CLIENT1 8356
#define SWKEY 8373
#define RF_CLIENT 8410
#define HAMGR 8408
#define FASTPATH_CLI_SERVER 8239
#define FASTPATH_AUTH_CLIENT 8360
#define CRYPTO_POST_PORT 8400
#define HTTPD_WRAP 8404
#define MMSCONFIGMGR 8412
#define FPAPPS_AUTH_PORT 8381
#define FPWEB_RAW 8415
#define L2TPD 8342
#define CERT_CLIENT 8349
#define SIBYTE_RAW 8228
#define FPAPPS_VRRP_PORT 8379
#define AIR_MONITOR 8225
#define ANOMALY_DETECTION 8387
#define ARUBA_FILTER 8388
#define MSGH_HELPER 8446
#define FASTPATH_SERVER 8212
#define MOBILITY_AGENT 8229
#define OSPF_DAEMON 8441
#define PIM 8385
#define MOBILITY_SERVER 8216
#define SIBYTE_CONSOLE_CLIENT3 8358
#define FPCLI_SIBYTE_CONSOLE1 8367
#define AUTH_CLIENT 8215
#define FPCLI_SIBYTE_CONSOLE3 8369
#define AMAPI_SAMPLE_CLIENT 8221
#define PPPOE_DAEMON 8411
#define UDB_SERVER 8344
#define RAPPER_PORT1 8423
#define PAPI_EPHEMERAL 65535
#define MVC_SERVER 8422
#define RAPPER_PORT3 8425
#define DHCP_DAEMON 8359
#define EMWEB_RAW 8365
#define STATSMGR 8397
#define FASTPATH_ADD_SERVER 8240
#define AMAPI_CLI_CLIENT 8220
#define AUTH_SERVER 8214
#define MESSAGE_HANDLER 8999
#define AMAP_PROC 8394
#define CTS 8413
#define CFGMANAGER 8226
#define RAPPER_PORT8 8430
#define L2TPD_DAEMON_RAW 8233
#define WLAN_MANAGEMENT_SERVER_LOPRI 8421
#define NANNY_PORT 8370
#define RAPPER_PORT10 8432
#define RAPPER_PORT7 8429
#define AMAPI_WEB_CLIENT 8235
#define WEB_CLI_RAW 8375
#define CERT_MANAGER 8343
#define NCFGTEST_APP 8406
#define REM_DSLMGR 8439
#define PROFILE_MANAGER 8405
#define LICENSE_MANAGER 8389
#define MMSWEBSVC 8414
#define SSH_AUTH_PORT 8393
#define STATION_MANAGEMENT_AP 8451
#define AMP_SERVER 8444
#define HTTPD_WRAP_AUTH_PORT 8417
#define FAULTMGR 8399
#define SIBYTE_HEARTBEAT 8237
#define USBHELPER_CLIENT 8447
#define SAPM_CLIENT 8223
#define RF_MANAGER 8409
#define WEB_GRAPHGEN2 8347
#define HARDWARE_MONITOR_PORT 8366
#define P8MGR 8454
#define WIRED_MAC_LOOKUP 8376
#define CDP_PROC 8350
#define AAA_MGMT_PORT 8372
#define DBSYNC_PORT 8380
#define AMAPI_SNMP_CLIENT 8236
static const value_string papi_port_vals[] = {
{ FASTPATH_SERVER, "FASTPATH_SERVER" },
{ FASTPATH_CLI_CLIENT, "FASTPATH_CLI_CLIENT" },
{ AUTH_SERVER, "AUTH_SERVER" },
{ AUTH_CLIENT, "AUTH_CLIENT" },
{ MOBILITY_SERVER, "MOBILITY_SERVER" },
{ MOBILITY_CLIENT, "MOBILITY_CLIENT" },
{ FASTPATH_WEB_CLIENT, "FASTPATH_WEB_CLIENT" },
{ SNMP_DAEMON, "SNMP_DAEMON" },
{ AMAPI_CLI_CLIENT, "AMAPI_CLI_CLIENT" },
{ AMAPI_SAMPLE_CLIENT, "AMAPI_SAMPLE_CLIENT" },
{ SAPM_SERVER, "SAPM_SERVER" },
{ SAPM_CLIENT, "SAPM_CLIENT" },
{ WLAN_MANAGEMENT_SERVER, "WLAN_MANAGEMENT_SERVER" },
{ AIR_MONITOR, "AIR_MONITOR" },
{ CFGMANAGER, "CFGMANAGER" },
{ AUTH_SERVER_RAW, "AUTH_SERVER_RAW" },
{ SIBYTE_RAW, "SIBYTE_RAW" },
{ MOBILITY_AGENT, "MOBILITY_AGENT" },
{ IKE_DAEMON, "IKE_DAEMON" },
{ IKE_DAEMON_RAW, "IKE_DAEMON_RAW" },
{ L2TPD_DAEMON_RAW, "L2TPD_DAEMON_RAW" },
{ PPPD_DAEMON, "PPPD_DAEMON" },
{ AMAPI_WEB_CLIENT, "AMAPI_WEB_CLIENT" },
{ AMAPI_SNMP_CLIENT, "AMAPI_SNMP_CLIENT" },
{ SIBYTE_HEARTBEAT, "SIBYTE_HEARTBEAT" },
{ RRA_SERVER, "RRA_SERVER" },
{ FASTPATH_CLI_SERVER, "FASTPATH_CLI_SERVER" },
{ FASTPATH_ADD_SERVER, "FASTPATH_ADD_SERVER" },
{ PPPD_START, "PPPD_START" },
{ PPPD_END, "PPPD_END" },
{ PPTPD, "PPTPD" },
{ L2TPD, "L2TPD" },
{ CERT_MANAGER, "CERT_MANAGER" },
{ UDB_SERVER, "UDB_SERVER" },
{ STATION_MANAGEMENT, "STATION_MANAGEMENT" },
{ WEB_GRAPHGEN1, "WEB_GRAPHGEN1" },
{ WEB_GRAPHGEN2, "WEB_GRAPHGEN2" },
{ SIBYTE_CONSOLE_PORT, "SIBYTE_CONSOLE_PORT" },
{ CERT_CLIENT, "CERT_CLIENT" },
{ CDP_PROC, "CDP_PROC" },
{ CAP_MGMT_PORT, "CAP_MGMT_PORT" },
{ WEBS_AM_PORT, "WEBS_AM_PORT" },
{ CERT_MANAGER_MASTER, "CERT_MANAGER_MASTER" },
{ MOB_FASTPATH_PORT, "MOB_FASTPATH_PORT" },
{ SIBYTE_FASTPATH_PORT, "SIBYTE_FASTPATH_PORT" },
{ SIBYTE_CONSOLE_CLIENT1, "SIBYTE_CONSOLE_CLIENT1" },
{ SIBYTE_CONSOLE_CLIENT2, "SIBYTE_CONSOLE_CLIENT2" },
{ SIBYTE_CONSOLE_CLIENT3, "SIBYTE_CONSOLE_CLIENT3" },
{ DHCP_DAEMON, "DHCP_DAEMON" },
{ FASTPATH_AUTH_CLIENT, "FASTPATH_AUTH_CLIENT" },
{ FPCLI_RAW, "FPCLI_RAW" },
{ CFGM_RAW, "CFGM_RAW" },
{ SNMP_TRAPMGR, "SNMP_TRAPMGR" },
{ CLI_LOG_RAW, "CLI_LOG_RAW" },
{ EMWEB_RAW, "EMWEB_RAW" },
{ HARDWARE_MONITOR_PORT, "HARDWARE_MONITOR_PORT" },
{ FPCLI_SIBYTE_CONSOLE1, "FPCLI_SIBYTE_CONSOLE1" },
{ FPCLI_SIBYTE_CONSOLE2, "FPCLI_SIBYTE_CONSOLE2" },
{ FPCLI_SIBYTE_CONSOLE3, "FPCLI_SIBYTE_CONSOLE3" },
{ NANNY_PORT, "NANNY_PORT" },
{ NANNY_PORT_MEM_MON, "NANNY_PORT_MEM_MON" },
{ AAA_MGMT_PORT, "AAA_MGMT_PORT" },
{ SWKEY, "SWKEY" },
{ SIBYTE_DNLD_FILE, "SIBYTE_DNLD_FILE" },
{ WEB_CLI_RAW, "WEB_CLI_RAW" },
{ WIRED_MAC_LOOKUP, "WIRED_MAC_LOOKUP" },
{ ARUBA_NTPD, "ARUBA_NTPD" },
{ PUBSUB_SERVER, "PUBSUB_SERVER" },
{ FPAPPS_VRRP_PORT, "FPAPPS_VRRP_PORT" },
{ DBSYNC_PORT, "DBSYNC_PORT" },
{ FPAPPS_AUTH_PORT, "FPAPPS_AUTH_PORT" },
{ SAP_RRAD_PORT, "SAP_RRAD_PORT" },
{ MOBILE_IP, "MOBILE_IP" },
{ SERVER_LOAD_BALANCING, "SERVER_LOAD_BALANCING" },
{ PIM, "PIM" },
{ SIBYTE_MACH_INFO, "SIBYTE_MACH_INFO" },
{ ANOMALY_DETECTION, "ANOMALY_DETECTION" },
{ ARUBA_FILTER, "ARUBA_FILTER" },
{ LICENSE_MANAGER, "LICENSE_MANAGER" },
{ DHCP_SERVER, "DHCP_SERVER" },
{ VRRP_DAEMON, "VRRP_DAEMON" },
{ RESOLVER_PORT, "RESOLVER_PORT" },
{ SSH_AUTH_PORT, "SSH_AUTH_PORT" },
{ AMAP_PROC, "AMAP_PROC" },
{ AMAP_MGMT_PORT, "AMAP_MGMT_PORT" },
{ SYS_MAPPER, "SYS_MAPPER" },
{ STATSMGR, "STATSMGR" },
{ SPOTMGR, "SPOTMGR" },
{ FAULTMGR, "FAULTMGR" },
{ CRYPTO_POST_PORT, "CRYPTO_POST_PORT" },
{ QPDQ_STANDALONE, "QPDQ_STANDALONE" },
{ SNMP_TRAP_RAW, "SNMP_TRAP_RAW" },
{ ADMINSERVER, "ADMINSERVER" },
{ HTTPD_WRAP, "HTTPD_WRAP" },
{ PROFILE_MANAGER, "PROFILE_MANAGER" },
{ NCFGTEST_APP, "NCFGTEST_APP" },
{ SYSLOGDWRAP, "SYSLOGDWRAP" },
{ HAMGR, "HAMGR" },
{ RF_MANAGER, "RF_MANAGER" },
{ RF_CLIENT, "RF_CLIENT" },
{ PPPOE_DAEMON, "PPPOE_DAEMON" },
{ MMSCONFIGMGR, "MMSCONFIGMGR" },
{ CTS, "CTS" },
{ MMSWEBSVC, "MMSWEBSVC" },
{ FPWEB_RAW, "FPWEB_RAW" },
{ PIM_TOSIBYTE, "PIM_TOSIBYTE" },
{ HTTPD_WRAP_AUTH_PORT, "HTTPD_WRAP_AUTH_PORT" },
{ REPGEN, "REPGEN" },
{ STATION_MANAGEMENT_LOPRI, "STATION_MANAGEMENT_LOPRI" },
{ AUTH_SERVER_LOPRI, "AUTH_SERVER_LOPRI" },
{ WLAN_MANAGEMENT_SERVER_LOPRI, "WLAN_MANAGEMENT_SERVER_LOPRI" },
{ MVC_SERVER, "MVC_SERVER" },
{ RAPPER_PORT1, "RAPPER_PORT1" },
{ RAPPER_PORT2, "RAPPER_PORT2" },
{ RAPPER_PORT3, "RAPPER_PORT3" },
{ RAPPER_PORT4, "RAPPER_PORT4" },
{ RAPPER_PORT5, "RAPPER_PORT5" },
{ RAPPER_PORT6, "RAPPER_PORT6" },
{ RAPPER_PORT7, "RAPPER_PORT7" },
{ RAPPER_PORT8, "RAPPER_PORT8" },
{ RAPPER_PORT9, "RAPPER_PORT9" },
{ RAPPER_PORT10, "RAPPER_PORT10" },
{ MESH_DAEMON, "MESH_DAEMON" },
{ SETUP_DIALOG, "SETUP_DIALOG" },
{ SYS_MAPPER_LOPRI, "SYS_MAPPER_LOPRI" },
{ SAPM_HYBRID_AP, "SAPM_HYBRID_AP" },
{ PHONE_HOME, "PHONE_HOME" },
{ SAPM_RAPCP, "SAPM_RAPCP" },
{ REM_DSLMGR, "REM_DSLMGR" },
{ AMAPI_SNMP_TRAP_CLIENT, "AMAPI_SNMP_TRAP_CLIENT" },
{ OSPF_DAEMON, "OSPF_DAEMON" },
{ SAMBA_WRAPPER, "SAMBA_WRAPPER" },
{ AMP_SERVER, "AMP_SERVER" },
{ MISC_PROC, "MISC_PROC" },
{ MSGH_HELPER, "MSGH_HELPER" },
{ USBHELPER_CLIENT, "USBHELPER_CLIENT" },
{ PB_INT_TASK, "PB_INT_TASK" },
{ UTILITY_PROCESS, "UTILITY_PROCESS" },
{ SYSMGR, "SYSMGR" },
{ STATION_MANAGEMENT_AP, "STATION_MANAGEMENT_AP" },
{ STATION_MANAGEMENT_LOPRI_AP, "STATION_MANAGEMENT_LOPRI_AP" },
{ CPSEC, "CPSEC" },
{ P8MGR, "P8MGR" },
{ LAST_SERVICE, "LAST_SERVICE" },
{ MESSAGE_HANDLER, "MESSAGE_HANDLER" },
{ PAPI_EPHEMERAL, "PAPI_EPHEMERAL" },
{ 0, NULL }
};
static value_string_ext papi_port_vals_ext = VALUE_STRING_EXT_INIT(papi_port_vals);
/* PAPI Debug loop ! */
static int
dissect_papi_debug(tvbuff_t *tvb, packet_info *pinfo, guint offset, proto_tree *tree)
{
proto_item *ti;
proto_tree *debug_tree, *debug_sub_tree;
ti = proto_tree_add_item(tree, hf_papi_debug, tvb, offset, -1, ENC_NA);
debug_tree = proto_item_add_subtree(ti, ett_papi);
while(offset < tvb_reported_length(tvb)) {
switch(tvb_get_guint8(tvb,offset)) {
case 0x00:
ti = proto_tree_add_item(debug_tree, hf_papi_debug_text, tvb, offset+3, tvb_get_ntohs(tvb,offset+1), ENC_ASCII|ENC_NA);
debug_sub_tree = proto_item_add_subtree(ti, ett_papi);
proto_tree_add_item(debug_sub_tree, hf_papi_debug_text_length, tvb, offset+1, 2, ENC_BIG_ENDIAN);
offset += tvb_get_ntohs(tvb, offset+1) + 3;
break;
case 0x01:
proto_tree_add_item(debug_tree, hf_papi_debug_48bits, tvb, offset+1, 6, ENC_BIG_ENDIAN);
offset += 7;
break;
case 0x02:
proto_tree_add_item(debug_tree, hf_papi_debug_8bits, tvb, offset+1, 1, ENC_BIG_ENDIAN);
offset += 2;
break;
case 0x03:
proto_tree_add_item(debug_tree, hf_papi_debug_16bits, tvb, offset+1, 2, ENC_BIG_ENDIAN);
offset += 3;
break;
case 0x04:
proto_tree_add_item(debug_tree, hf_papi_debug_32bits, tvb, offset+1, 4, ENC_BIG_ENDIAN);
offset += 5;
break;
case 0x05:
proto_tree_add_item(debug_tree, hf_papi_debug_ipv4, tvb, offset+1, 4, ENC_BIG_ENDIAN);
offset += 5;
break;
case 0x07:
proto_tree_add_item(debug_tree, hf_papi_debug_16bits, tvb, offset+1, 2, ENC_BIG_ENDIAN);
offset += 3;
break;
case 0x08:
ti = proto_tree_add_item(debug_tree, hf_papi_debug_bytes, tvb, offset+3, tvb_get_ntohs(tvb,offset+1), ENC_NA);
debug_sub_tree = proto_item_add_subtree(ti, ett_papi);
proto_tree_add_item(debug_sub_tree, hf_papi_debug_bytes_length, tvb, offset+1, 2, ENC_BIG_ENDIAN);
offset += tvb_get_ntohs(tvb,offset+1) + 3;
break;
case 0x09:
proto_tree_add_item(debug_tree, hf_papi_debug_64bits, tvb, offset+1, 8, ENC_BIG_ENDIAN);
offset += 9;
break;
default:
proto_tree_add_expert_format(debug_tree, pinfo, &ei_papi_debug_unknown, tvb, offset, 1, "Unknown (%d)", tvb_get_guint8(tvb, offset));
offset +=1;
}
}
return offset;
}
static gboolean
dissect_papi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
{
proto_item *ti;
proto_tree *papi_tree;
guint offset = 0;
tvbuff_t *next_tvb;
/* All PAPI packet start with 0x4972 ! */
if ( tvb_get_ntohs(tvb, offset) != 0x4972 )
return FALSE;
col_set_str(pinfo->cinfo, COL_PROTOCOL, "PAPI");
col_set_str(pinfo->cinfo, COL_INFO, "PAPI - Aruba AP Control Protocol");
ti = proto_tree_add_item(tree, proto_papi, tvb, 0, -1, ENC_NA);
papi_tree = proto_item_add_subtree(ti, ett_papi);
proto_tree_add_item(papi_tree, hf_papi_hdr_magic, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_version, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_dest_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
proto_tree_add_item(papi_tree, hf_papi_hdr_src_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
proto_tree_add_item(papi_tree, hf_papi_hdr_nat_port_number, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_garbage, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_dest_port, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_src_port, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_packet_type, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_packet_size, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_seq_number, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_message_code, tvb, offset, 2, ENC_BIG_ENDIAN);
offset += 2;
proto_tree_add_item(papi_tree, hf_papi_hdr_checksum, tvb, offset, 16, ENC_NA);
offset += 16;
if(g_papi_debug)
{
offset = dissect_papi_debug(tvb, pinfo, offset, papi_tree);
}
next_tvb = tvb_new_subset_remaining(tvb, offset);
call_data_dissector(next_tvb, pinfo, tree);
return(TRUE);
}
void
proto_register_papi(void)
{
module_t *papi_module;
static hf_register_info hf[] = {
{ &hf_papi_hdr_magic,
{ "Magic", "papi.hdr.magic",
FT_UINT16, BASE_HEX, NULL, 0x0,
"PAPI Header Magic Number", HFILL }
},
{ &hf_papi_hdr_version,
{ "Version", "papi.hdr.version",
FT_UINT16, BASE_DEC, NULL, 0x0,
"PAPI Protocol Version", HFILL }
},
{ &hf_papi_hdr_dest_ip,
{ "Destination IP", "papi.hdr.dest.ip",
FT_IPv4, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_src_ip,
{ "Source IP", "papi.hdr.src.ip",
FT_IPv4, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_nat_port_number,
{ "NAT Port Number", "papi.hdr.nat_port_number",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_garbage,
{ "Garbage", "papi.hdr.garbage",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_dest_port,
{ "Destination Port", "papi.hdr.dest.port",
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &papi_port_vals_ext, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_src_port,
{ "Source Port", "papi.hdr.src.port",
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &papi_port_vals_ext, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_packet_type,
{ "Packet Type", "papi.hdr.packet.type",
FT_UINT16, BASE_DEC|BASE_HEX, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_packet_size,
{ "Packet Size", "papi.hdr.packet.size",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_seq_number,
{ "Sequence Number", "papi.hdr.seq_number",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_message_code,
{ "Message Code", "papi.hdr.message_code",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_hdr_checksum,
{ "Checksum", "papi.hdr.checksum",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug,
{ "Debug", "papi.debug",
FT_NONE, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_text,
{ "Debug (Text)", "papi.debug.text",
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_text_length,
{ "Debug Text Length", "papi.debug.text_length",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_bytes,
{ "Debug (Bytes)", "papi.debug.bytes",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_bytes_length,
{ "Debug Bytes Length", "papi.debug.bytes_length",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_48bits,
{ "Debug (48 Bits)", "papi.debug.48bits",
FT_UINT64, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_8bits,
{ "Debug (8 Bits)", "papi.debug.8bits",
FT_UINT8, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_16bits,
{ "Debug (16 Bits)", "papi.debug.16bits",
FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_32bits,
{ "Debug (32 Bits)", "papi.debug.32bits",
FT_UINT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_ipv4,
{ "Debug (IPv4)", "papi.debug.ipv4",
FT_IPv4, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
{ &hf_papi_debug_64bits,
{ "Debug (64 Bits)", "papi.debug.64bits",
FT_UINT64, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
};
/* Setup protocol subtree array */
static gint *ett[] = {
&ett_papi
};
static ei_register_info ei[] = {
{ &ei_papi_debug_unknown, { "papi.debug.unknown", PI_PROTOCOL, PI_WARN, "Unknown", EXPFILL }},
};
expert_module_t* expert_papi;
proto_papi = proto_register_protocol("Aruba PAPI", "PAPI", "papi");
proto_register_field_array(proto_papi, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
expert_papi = expert_register_protocol(proto_papi);
expert_register_field_array(expert_papi, ei, array_length(ei));
papi_module = prefs_register_protocol(proto_papi, NULL);
prefs_register_bool_preference(papi_module, "experimental_decode",
"Do experimental decode",
"Attempt to decode parts of the message that aren't fully understood yet",
&g_papi_debug);
}
void
proto_reg_handoff_papi(void)
{
dissector_handle_t papi_handle;
papi_handle = create_dissector_handle(dissect_papi, proto_papi);
dissector_add_uint_with_preference("udp.port", UDP_PORT_PAPI, papi_handle);
}
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*
* Local variables:
* c-basic-offset: 4
* tab-width: 8
* indent-tabs-mode: nil
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab:
* :indentSize=4:tabSize=8:noTabs=true:
*/