forked from osmocom/wireshark
David Frascone's DIAMETER dissector.
svn path=/trunk/; revision=2176
This commit is contained in:
parent
838b254def
commit
888b5a1cdb
5
AUTHORS
5
AUTHORS
|
@ -355,6 +355,10 @@ Jose Pedro Oliveira <jpo@di.uminho.pt> {
|
|||
DHCP enhancements
|
||||
}
|
||||
|
||||
David Frascone <dave@frascone.com> {
|
||||
DIAMETER
|
||||
}
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to
|
||||
give his permission to use his version of snprintf.c.
|
||||
|
||||
|
@ -368,4 +372,3 @@ We use the exception module from Kazlib, a C library written by
|
|||
Kaz Kylheku <kaz@ashi.footprints.net>. Thanks goes to him for his
|
||||
well-written library. The Kazlib home page can be found at
|
||||
http://users.footprint.net/~kaz/kazlib.html
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Makefile.am
|
||||
# Automake file for Ethereal
|
||||
#
|
||||
# $Id: Makefile.am,v 1.217 2000/07/28 20:03:39 gram Exp $
|
||||
# $Id: Makefile.am,v 1.218 2000/07/30 07:16:01 guy Exp $
|
||||
#
|
||||
# Ethereal - Network traffic analyzer
|
||||
# By Gerald Combs <gerald@zing.org>
|
||||
|
@ -116,6 +116,7 @@ DISSECTOR_SOURCES = \
|
|||
packet-q931.c \
|
||||
packet-quake.c \
|
||||
packet-radius.c\
|
||||
packet-diameter.c \
|
||||
packet-raw.c \
|
||||
packet-rip.c \
|
||||
packet-ripng.c \
|
||||
|
@ -179,6 +180,8 @@ noinst_HEADERS = \
|
|||
packet-clip.h \
|
||||
packet-clnp.h \
|
||||
packet-ddtp.h \
|
||||
packet-diameter.h \
|
||||
packet-diameter-defs.h \
|
||||
packet-dns.h \
|
||||
packet-esis.h \
|
||||
packet-eth.h \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## Makefile for building ethereal.exe with Microsoft C and nmake
|
||||
## Use: nmake -f makefile.nmake
|
||||
#
|
||||
# $Id: Makefile.nmake,v 1.48 2000/07/28 20:03:40 gram Exp $
|
||||
# $Id: Makefile.nmake,v 1.49 2000/07/30 07:16:02 guy Exp $
|
||||
|
||||
include config.nmake
|
||||
|
||||
|
@ -101,6 +101,7 @@ DISSECTOR_SOURCES = \
|
|||
packet-q931.c \
|
||||
packet-quake.c \
|
||||
packet-radius.c\
|
||||
packet-diameter.c \
|
||||
packet-raw.c \
|
||||
packet-rip.c \
|
||||
packet-ripng.c \
|
||||
|
|
|
@ -907,6 +907,7 @@ B<http://ethereal.zing.org>.
|
|||
Michael Tuexen <Michael.Tuexen@icn.siemens.de>
|
||||
Bruce Korb <bkorb@sco.com>
|
||||
Jose Pedro Oliveira <jpo@di.uminho.pt>
|
||||
David Frascone <dave@frascone.com>
|
||||
|
||||
Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
|
||||
permission to use his version of snprintf.c.
|
||||
|
|
|
@ -0,0 +1,837 @@
|
|||
/*
|
||||
* Filename: packet-diameter-defs.h
|
||||
* WARNING: This file was automatically generated by dict2h.pl. Modifications
|
||||
* will be erased by next invocation of dictionary parser.
|
||||
*/
|
||||
|
||||
#ifndef _PACKET_DIAMETER_DEFS_H
|
||||
#define _PACKET_DIAMETER_DEFS_H
|
||||
|
||||
/* Attributes */
|
||||
#define DIAMETER_ATT_USER_NAME 1
|
||||
#define DIAMETER_ATT_USER_PASSWORD 2
|
||||
#define DIAMETER_ATT_CHAP_PASSWORD 3
|
||||
#define DIAMETER_ATT_NAS_IP_ADDRESS 4
|
||||
#define DIAMETER_ATT_NAS_PORT 5
|
||||
#define DIAMETER_ATT_SERVICE_TYPE 6
|
||||
#define DIAMETER_ATT_FRAMED_PROTOCOL 7
|
||||
#define DIAMETER_ATT_FRAMED_IP_ADDRESS 8
|
||||
#define DIAMETER_ATT_FRAMED_IP_NETMASK 9
|
||||
#define DIAMETER_ATT_FRAMED_ROUTING 10
|
||||
#define DIAMETER_ATT_FILTER_ID 11
|
||||
#define DIAMETER_ATT_FRAMED_MTU 12
|
||||
#define DIAMETER_ATT_FRAMED_COMPRESSION 13
|
||||
#define DIAMETER_ATT_LOGIN_IP_HOST 14
|
||||
#define DIAMETER_ATT_LOGIN_SERVICE 15
|
||||
#define DIAMETER_ATT_LOGIN_TCP_PORT 16
|
||||
#define DIAMETER_ATT_OLD_PASSWORD 17
|
||||
#define DIAMETER_ATT_REPLY_MESSAGE 18
|
||||
#define DIAMETER_ATT_CALLBACK_NUMBER 19
|
||||
#define DIAMETER_ATT_CALLBACK_ID 20
|
||||
#define DIAMETER_ATT_FRAMED_ROUTE 22
|
||||
#define DIAMETER_ATT_FRAMED_IPX_NETWORK 23
|
||||
#define DIAMETER_ATT_STATE 24
|
||||
#define DIAMETER_ATT_CLASS 25
|
||||
#define DIAMETER_ATT_SESSION_TIMEOUT 27
|
||||
#define DIAMETER_ATT_IDLE_TIMEOUT 28
|
||||
#define DIAMETER_ATT_TERMINATION_ACTION 29
|
||||
#define DIAMETER_ATT_CALLED_STATION_ID 30
|
||||
#define DIAMETER_ATT_CALLING_STATION_ID 31
|
||||
#define DIAMETER_ATT_NAS_IDENTIFIER 32
|
||||
#define DIAMETER_ATT_PROXY_STATE 33
|
||||
#define DIAMETER_ATT_LOGIN_LAT_SERVICE 34
|
||||
#define DIAMETER_ATT_LOGIN_LAT_NODE 35
|
||||
#define DIAMETER_ATT_LOGIN_LAT_GROUP 36
|
||||
#define DIAMETER_ATT_FRAMED_APPLETALK_LINK 37
|
||||
#define DIAMETER_ATT_FRAMED_APPLETALK_NETWORK 38
|
||||
#define DIAMETER_ATT_FRAMED_APPLETALK_ZONE 39
|
||||
#define DIAMETER_ATT_CHAP_CHALLENGE 60
|
||||
#define DIAMETER_ATT_NAS_PORT_TYPE 61
|
||||
#define DIAMETER_ATT_PORT_LIMIT 62
|
||||
#define DIAMETER_ATT_LOGIN_LAT_PORT 63
|
||||
#define DIAMETER_ATT_TUNNEL_TYPE 64
|
||||
#define DIAMETER_ATT_TUNNEL_MEDIUM_TYPE 65
|
||||
#define DIAMETER_ATT_ACCT_TUNNEL_CLIENT_ENDPOINT 66
|
||||
#define DIAMETER_ATT_TUNNEL_SERVER_ENDPOINT 67
|
||||
#define DIAMETER_ATT_ACCT_TUNNEL_CONNECTION_ID 68
|
||||
#define DIAMETER_ATT_TUNNEL_PASSWORD 69
|
||||
#define DIAMETER_ATT_ARAP_PASSWORD 70
|
||||
#define DIAMETER_ATT_ARAP_FEATURES 71
|
||||
#define DIAMETER_ATT_ARAP_ZONE_ACCESS 72
|
||||
#define DIAMETER_ATT_ARAP_SECURITY 73
|
||||
#define DIAMETER_ATT_ARAP_SECURITY_DATA 74
|
||||
#define DIAMETER_ATT_PASSWORD_RETRY 75
|
||||
#define DIAMETER_ATT_PROMPT 76
|
||||
#define DIAMETER_ATT_CONNECT_INFO 77
|
||||
#define DIAMETER_ATT_CONFIGURATION_TOKEN 78
|
||||
#define DIAMETER_ATT_EAP_MESSAGE 79
|
||||
#define DIAMETER_ATT_SIGNATURE 80
|
||||
#define DIAMETER_ATT_ACCT_STATUS_TYPE 40
|
||||
#define DIAMETER_ATT_ACCT_DELAY_TIME 41
|
||||
#define DIAMETER_ATT_ACCT_INPUT_OCTETS 42
|
||||
#define DIAMETER_ATT_ACCT_OUTPUT_OCTETS 43
|
||||
#define DIAMETER_ATT_ACCT_SESSION_ID 44
|
||||
#define DIAMETER_ATT_ACCT_AUTHENTIC 45
|
||||
#define DIAMETER_ATT_ACCT_SESSION_TIME 46
|
||||
#define DIAMETER_ATT_ACCT_INPUT_PACKETS 47
|
||||
#define DIAMETER_ATT_ACCT_OUTPUT_PACKETS 48
|
||||
#define DIAMETER_ATT_ACCT_TERMINATE_CAUSE 49
|
||||
#define DIAMETER_ATT_ACCT_MULTI_SESSION_ID 50
|
||||
#define DIAMETER_ATT_ACCT_LINK_COUNT 51
|
||||
#define DIAMETER_ATT_MERIT_ENCAPSULATED 141
|
||||
#define DIAMETER_ATT_MERIT_REPLY_IF_ACK_MESSAGE 144
|
||||
#define DIAMETER_ATT_MERIT_LAS_START_TIME 145
|
||||
#define DIAMETER_ATT_MERIT_LAS_CODE 146
|
||||
#define DIAMETER_ATT_MERIT_LAS_DURATION 147
|
||||
#define DIAMETER_ATT_MERIT_LOCAL_DURATION 148
|
||||
#define DIAMETER_ATT_MERIT_HUNTGROUP_SERVICE 149
|
||||
#define DIAMETER_ATT_MERIT_PORT_ENTRY 150
|
||||
#define DIAMETER_ATT_MERIT_PROXY_ACTION 211
|
||||
#define DIAMETER_ATT_MERIT_TOKEN 213
|
||||
#define DIAMETER_ATT_MERIT_OWNERSHIP 219
|
||||
#define DIAMETER_ATT_MERIT_SUBGROUP 220
|
||||
#define DIAMETER_ATT_MERIT_HUNTGROUP_NAME 221
|
||||
#define DIAMETER_ATT_MERIT_USER_ID 222
|
||||
#define DIAMETER_ATT_MERIT_USER_REALM 223
|
||||
#define DIAMETER_ATT_COMMAND_CODE 256
|
||||
#define DIAMETER_ATT_EXTENSION_ID 258
|
||||
#define DIAMETER_ATT_INTEGRITY_CHECK_VALUE 259
|
||||
#define DIAMETER_ATT_ENCRYPTED_PAYLOAD 260
|
||||
#define DIAMETER_ATT_NONCE 261
|
||||
#define DIAMETER_ATT_TIMESTAMP 262
|
||||
#define DIAMETER_ATT_SESSION_ID 263
|
||||
#define DIAMETER_ATT_VENDOR_NAME 266
|
||||
#define DIAMETER_ATT_FIRMWARE_REVISION 267
|
||||
#define DIAMETER_ATT_RESULT_CODE 268
|
||||
#define DIAMETER_ATT_DESTINATION_NAI 269
|
||||
#define DIAMETER_ATT_REBOOT_TYPE 271
|
||||
#define DIAMETER_ATT_REBOOT_TIME 272
|
||||
#define DIAMETER_ATT_FAILED_AVP 279
|
||||
#define DIAMETER_ATT_RECEIVE_WINDOW 277
|
||||
#define DIAMETER_ATT_REDIRECT_HOST 278
|
||||
#define DIAMETER_ATT_IP_PORT 281
|
||||
#define DIAMETER_ATT_ACCOUNTING_RECORD_TYPE 480
|
||||
#define DIAMETER_ATT_ADIF_RECORD 481
|
||||
#define DIAMETER_ATT_ACCOUNTING_INTERIM_INTERVAL 482
|
||||
#define DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_BATCH 483
|
||||
#define DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_DELAY 484
|
||||
#define DIAMETER_ATT_ACCOUNTING_RECORD_NUMBER 485
|
||||
#define DIAMETER_ATT_MIP_REGISTRATION_REQUEST 320
|
||||
#define DIAMETER_ATT_MIP_REGISTRATION_REPLY 321
|
||||
#define DIAMETER_ATT_MN_FA_CHALLENGE_LENGTH 322
|
||||
#define DIAMETER_ATT_MN_FA_RESPONSE 323
|
||||
#define DIAMETER_ATT_MOBILE_NODE_ADDRESS 333
|
||||
#define DIAMETER_ATT_HOME_AGENT_ADDRESS 334
|
||||
#define DIAMETER_ATT_PREVIOUS_FA_NAI 335
|
||||
#define DIAMETER_ATT_MN_AAA_SPI 336
|
||||
#define DIAMETER_ATT_FOREIGN_HA_AVAIL 337
|
||||
#define DIAMETER_ATT_MN_TO_FA_KEY 325
|
||||
#define DIAMETER_ATT_MN_TO_HA_KEY 331
|
||||
#define DIAMETER_ATT_FA_TO_MN_KEY 326
|
||||
#define DIAMETER_ATT_FA_TO_HA_KEY 328
|
||||
#define DIAMETER_ATT_HA_TO_MN_KEY 332
|
||||
#define DIAMETER_ATT_HA_TO_FA_KEY 329
|
||||
#define DIAMETER_ATT_FA_MN_PREFERRED_SPI 324
|
||||
#define DIAMETER_ATT_FA_HA_PREFERRED_SPI 327
|
||||
#define DIAMETER_ATT_FILTER_RULE 400
|
||||
#define DIAMETER_ATT_REQUEST_TYPE 401
|
||||
#define DIAMETER_ATT_EAP_PAYLOAD 402
|
||||
#define DIAMETER_ATT_CMS_DATA 310
|
||||
#define DIAMETER_ATT_RES_MGMT_INDEX 573
|
||||
#define DIAMETER_ATT_RES_MGMT_TOKEN 574
|
||||
#define DIAMETER_ATT_SOURCE_HOST 600
|
||||
#define DIAMETER_ATT_DESTINATION_HOST 601
|
||||
#define DIAMETER_ATT_SOURCE_PORT 602
|
||||
#define DIAMETER_ATT_DESTINATION_PORT 603
|
||||
#define DIAMETER_ATT_PROTOCOL 604
|
||||
#define DIAMETER_ATT_RSVP_SERVICE_TYPE 605
|
||||
#define DIAMETER_ATT_TOKEN_BUCKET_RATE 606
|
||||
#define DIAMETER_ATT_TOKEN_BUCKET_SIZE 607
|
||||
#define DIAMETER_ATT_PEAK_DATA_RATE 608
|
||||
#define DIAMETER_ATT_MINIMUM_POLICED_UNIT 609
|
||||
#define DIAMETER_ATT_MAXIMUM_PACKET_SIZE 610
|
||||
#define DIAMETER_ATT_QOS_RATE 611
|
||||
#define DIAMETER_ATT_SLACK_TERM 612
|
||||
#define DIAMETER_ATT_TOS_DS_VALUE 613
|
||||
#define DIAMETER_ATT_INTERFACE_ADDRESS 614
|
||||
#define DIAMETER_ATT_QOS_SERVICE_TYPE 615
|
||||
#define DIAMETER_ATT_VOIP_CALLER 686
|
||||
#define DIAMETER_ATT_VOIP_CALLEE 687
|
||||
#define DIAMETER_ATT_VOIP_CHALLENGE 688
|
||||
#define DIAMETER_ATT_VOIP_RESPONSE 689
|
||||
#define DIAMETER_ATT_VOIP_SESSION_LENGTH 690
|
||||
#define DIAMETER_ATT_COMMENT 1024
|
||||
#define DIAMETER_ATT_XVALUE 1025
|
||||
#define DIAMETER_ATT_XSTRING 1026
|
||||
#define DIAMETER_ATT_AUTHENTICATION_TYPE 1027
|
||||
#define DIAMETER_ATT_PROHIBIT 1028
|
||||
#define DIAMETER_ATT_USER_CATEGORY 1029
|
||||
#define DIAMETER_ATT_GROUP_NAME 1030
|
||||
#define DIAMETER_ATT_ENCRYPTED_PASSWORD 1031
|
||||
#define DIAMETER_ATT_EXPIRATION 1032
|
||||
#define DIAMETER_ATT_PASSWORD 1033
|
||||
#define DIAMETER_ATT_SIMULTANEOUS_USE 1034
|
||||
#define DIAMETER_ATT_SESSION_LIMIT 1034
|
||||
#define DIAMETER_ATT_SERVER_NAME 1035
|
||||
#define DIAMETER_ATT_FRAMED_IP_ADDRESS_POOL_NAME 1036
|
||||
#define DIAMETER_ATT_SERVICE_CLASS 1037
|
||||
#define DIAMETER_ATT_DENY_MESSAGE 1038
|
||||
#define DIAMETER_ATT_SOURCE_SUBNET 1039
|
||||
#define DIAMETER_ATT_DESTINATION_SUBNET 1040
|
||||
#define DIAMETER_ATT_MAX_QOS_RATE 1041
|
||||
#define DIAMETER_ATT_ACCOUNTING_ADIF_RECORD 2000
|
||||
|
||||
|
||||
/* Attribute to String table */
|
||||
|
||||
static value_string diameter_attrib_type_vals[] = {
|
||||
{DIAMETER_ATT_USER_NAME, "User-Name"},
|
||||
{DIAMETER_ATT_USER_PASSWORD, "User-Password"},
|
||||
{DIAMETER_ATT_CHAP_PASSWORD, "CHAP-Password"},
|
||||
{DIAMETER_ATT_NAS_IP_ADDRESS, "NAS-IP-Address"},
|
||||
{DIAMETER_ATT_NAS_PORT, "NAS-Port"},
|
||||
{DIAMETER_ATT_SERVICE_TYPE, "Service-Type"},
|
||||
{DIAMETER_ATT_FRAMED_PROTOCOL, "Framed-Protocol"},
|
||||
{DIAMETER_ATT_FRAMED_IP_ADDRESS, "Framed-IP-Address"},
|
||||
{DIAMETER_ATT_FRAMED_IP_NETMASK, "Framed-IP-Netmask"},
|
||||
{DIAMETER_ATT_FRAMED_ROUTING, "Framed-Routing"},
|
||||
{DIAMETER_ATT_FILTER_ID, "Filter-Id"},
|
||||
{DIAMETER_ATT_FRAMED_MTU, "Framed-MTU"},
|
||||
{DIAMETER_ATT_FRAMED_COMPRESSION, "Framed-Compression"},
|
||||
{DIAMETER_ATT_LOGIN_IP_HOST, "Login-IP-Host"},
|
||||
{DIAMETER_ATT_LOGIN_SERVICE, "Login-Service"},
|
||||
{DIAMETER_ATT_LOGIN_TCP_PORT, "Login-TCP-Port"},
|
||||
{DIAMETER_ATT_OLD_PASSWORD, "Old-Password"},
|
||||
{DIAMETER_ATT_REPLY_MESSAGE, "Reply-Message"},
|
||||
{DIAMETER_ATT_CALLBACK_NUMBER, "Callback-Number"},
|
||||
{DIAMETER_ATT_CALLBACK_ID, "Callback-Id"},
|
||||
{DIAMETER_ATT_FRAMED_ROUTE, "Framed-Route"},
|
||||
{DIAMETER_ATT_FRAMED_IPX_NETWORK, "Framed-IPX-Network"},
|
||||
{DIAMETER_ATT_STATE, "State"},
|
||||
{DIAMETER_ATT_CLASS, "Class"},
|
||||
{DIAMETER_ATT_SESSION_TIMEOUT, "Session-Timeout"},
|
||||
{DIAMETER_ATT_IDLE_TIMEOUT, "Idle-Timeout"},
|
||||
{DIAMETER_ATT_TERMINATION_ACTION, "Termination-Action"},
|
||||
{DIAMETER_ATT_CALLED_STATION_ID, "Called-Station-Id"},
|
||||
{DIAMETER_ATT_CALLING_STATION_ID, "Calling-Station-Id"},
|
||||
{DIAMETER_ATT_NAS_IDENTIFIER, "NAS-Identifier"},
|
||||
{DIAMETER_ATT_PROXY_STATE, "Proxy-State"},
|
||||
{DIAMETER_ATT_LOGIN_LAT_SERVICE, "Login-LAT-Service"},
|
||||
{DIAMETER_ATT_LOGIN_LAT_NODE, "Login-LAT-Node"},
|
||||
{DIAMETER_ATT_LOGIN_LAT_GROUP, "Login-LAT-Group"},
|
||||
{DIAMETER_ATT_FRAMED_APPLETALK_LINK, "Framed-AppleTalk-Link"},
|
||||
{DIAMETER_ATT_FRAMED_APPLETALK_NETWORK, "Framed-AppleTalk-Network"},
|
||||
{DIAMETER_ATT_FRAMED_APPLETALK_ZONE, "Framed-AppleTalk-Zone"},
|
||||
{DIAMETER_ATT_CHAP_CHALLENGE, "CHAP-Challenge"},
|
||||
{DIAMETER_ATT_NAS_PORT_TYPE, "NAS-Port-Type"},
|
||||
{DIAMETER_ATT_PORT_LIMIT, "Port-Limit"},
|
||||
{DIAMETER_ATT_LOGIN_LAT_PORT, "Login-LAT-Port"},
|
||||
{DIAMETER_ATT_TUNNEL_TYPE, "Tunnel-Type"},
|
||||
{DIAMETER_ATT_TUNNEL_MEDIUM_TYPE, "Tunnel-Medium-Type"},
|
||||
{DIAMETER_ATT_ACCT_TUNNEL_CLIENT_ENDPOINT, "Acct-Tunnel-Client-Endpoint"},
|
||||
{DIAMETER_ATT_TUNNEL_SERVER_ENDPOINT, "Tunnel-Server-Endpoint"},
|
||||
{DIAMETER_ATT_ACCT_TUNNEL_CONNECTION_ID, "Acct-Tunnel-Connection-ID"},
|
||||
{DIAMETER_ATT_TUNNEL_PASSWORD, "Tunnel-Password"},
|
||||
{DIAMETER_ATT_ARAP_PASSWORD, "ARAP-Password"},
|
||||
{DIAMETER_ATT_ARAP_FEATURES, "ARAP-Features"},
|
||||
{DIAMETER_ATT_ARAP_ZONE_ACCESS, "ARAP-Zone-Access"},
|
||||
{DIAMETER_ATT_ARAP_SECURITY, "ARAP-Security"},
|
||||
{DIAMETER_ATT_ARAP_SECURITY_DATA, "ARAP-Security-Data"},
|
||||
{DIAMETER_ATT_PASSWORD_RETRY, "Password-Retry"},
|
||||
{DIAMETER_ATT_PROMPT, "Prompt"},
|
||||
{DIAMETER_ATT_CONNECT_INFO, "Connect-Info"},
|
||||
{DIAMETER_ATT_CONFIGURATION_TOKEN, "Configuration-Token"},
|
||||
{DIAMETER_ATT_EAP_MESSAGE, "EAP-Message"},
|
||||
{DIAMETER_ATT_SIGNATURE, "Signature"},
|
||||
{DIAMETER_ATT_ACCT_STATUS_TYPE, "Acct-Status-Type"},
|
||||
{DIAMETER_ATT_ACCT_DELAY_TIME, "Acct-Delay-Time"},
|
||||
{DIAMETER_ATT_ACCT_INPUT_OCTETS, "Acct-Input-Octets"},
|
||||
{DIAMETER_ATT_ACCT_OUTPUT_OCTETS, "Acct-Output-Octets"},
|
||||
{DIAMETER_ATT_ACCT_SESSION_ID, "Acct-Session-Id"},
|
||||
{DIAMETER_ATT_ACCT_AUTHENTIC, "Acct-Authentic"},
|
||||
{DIAMETER_ATT_ACCT_SESSION_TIME, "Acct-Session-Time"},
|
||||
{DIAMETER_ATT_ACCT_INPUT_PACKETS, "Acct-Input-Packets"},
|
||||
{DIAMETER_ATT_ACCT_OUTPUT_PACKETS, "Acct-Output-Packets"},
|
||||
{DIAMETER_ATT_ACCT_TERMINATE_CAUSE, "Acct-Terminate-Cause"},
|
||||
{DIAMETER_ATT_ACCT_MULTI_SESSION_ID, "Acct-Multi-Session-Id"},
|
||||
{DIAMETER_ATT_ACCT_LINK_COUNT, "Acct-Link-Count"},
|
||||
{DIAMETER_ATT_MERIT_ENCAPSULATED, "Merit.Encapsulated"},
|
||||
{DIAMETER_ATT_MERIT_REPLY_IF_ACK_MESSAGE, "Merit.Reply-If-Ack-Message"},
|
||||
{DIAMETER_ATT_MERIT_LAS_START_TIME, "Merit.LAS-Start-Time"},
|
||||
{DIAMETER_ATT_MERIT_LAS_CODE, "Merit.LAS-Code"},
|
||||
{DIAMETER_ATT_MERIT_LAS_DURATION, "Merit.LAS-Duration"},
|
||||
{DIAMETER_ATT_MERIT_LOCAL_DURATION, "Merit.Local-Duration"},
|
||||
{DIAMETER_ATT_MERIT_HUNTGROUP_SERVICE, "Merit.Huntgroup-Service"},
|
||||
{DIAMETER_ATT_MERIT_PORT_ENTRY, "Merit.Port-Entry"},
|
||||
{DIAMETER_ATT_MERIT_PROXY_ACTION, "Merit.Proxy-Action"},
|
||||
{DIAMETER_ATT_MERIT_TOKEN, "Merit.Token"},
|
||||
{DIAMETER_ATT_MERIT_OWNERSHIP, "Merit.Ownership"},
|
||||
{DIAMETER_ATT_MERIT_SUBGROUP, "Merit.Subgroup"},
|
||||
{DIAMETER_ATT_MERIT_HUNTGROUP_NAME, "Merit.Huntgroup-Name"},
|
||||
{DIAMETER_ATT_MERIT_USER_ID, "Merit.User-Id"},
|
||||
{DIAMETER_ATT_MERIT_USER_REALM, "Merit.User-Realm"},
|
||||
{DIAMETER_ATT_COMMAND_CODE, "Command-Code"},
|
||||
{DIAMETER_ATT_EXTENSION_ID, "Extension-Id"},
|
||||
{DIAMETER_ATT_INTEGRITY_CHECK_VALUE, "Integrity-Check-Value"},
|
||||
{DIAMETER_ATT_ENCRYPTED_PAYLOAD, "Encrypted-Payload"},
|
||||
{DIAMETER_ATT_NONCE, "Nonce"},
|
||||
{DIAMETER_ATT_TIMESTAMP, "Timestamp"},
|
||||
{DIAMETER_ATT_SESSION_ID, "Session-Id"},
|
||||
{DIAMETER_ATT_VENDOR_NAME, "Vendor-Name"},
|
||||
{DIAMETER_ATT_FIRMWARE_REVISION, "Firmware-Revision"},
|
||||
{DIAMETER_ATT_RESULT_CODE, "Result-Code"},
|
||||
{DIAMETER_ATT_DESTINATION_NAI, "Destination-NAI"},
|
||||
{DIAMETER_ATT_REBOOT_TYPE, "Reboot-Type"},
|
||||
{DIAMETER_ATT_REBOOT_TIME, "Reboot-Time"},
|
||||
{DIAMETER_ATT_FAILED_AVP, "Failed-AVP"},
|
||||
{DIAMETER_ATT_RECEIVE_WINDOW, "Receive-Window"},
|
||||
{DIAMETER_ATT_REDIRECT_HOST, "Redirect-Host"},
|
||||
{DIAMETER_ATT_IP_PORT, "IP-Port"},
|
||||
{DIAMETER_ATT_ACCOUNTING_RECORD_TYPE, "Accounting-Record-Type"},
|
||||
{DIAMETER_ATT_ADIF_RECORD, "ADIF-Record"},
|
||||
{DIAMETER_ATT_ACCOUNTING_INTERIM_INTERVAL, "Accounting-Interim-Interval"},
|
||||
{DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_BATCH, "Accounting-Delivery-Max-Batch"},
|
||||
{DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_DELAY, "Accounting-Delivery-Max-Delay"},
|
||||
{DIAMETER_ATT_ACCOUNTING_RECORD_NUMBER, "Accounting-Record-Number"},
|
||||
{DIAMETER_ATT_MIP_REGISTRATION_REQUEST, "MIP-Registration-Request"},
|
||||
{DIAMETER_ATT_MIP_REGISTRATION_REPLY, "MIP-Registration-Reply"},
|
||||
{DIAMETER_ATT_MN_FA_CHALLENGE_LENGTH, "MN-FA-Challenge-Length"},
|
||||
{DIAMETER_ATT_MN_FA_RESPONSE, "MN-FA-Response"},
|
||||
{DIAMETER_ATT_MOBILE_NODE_ADDRESS, "Mobile-Node-Address"},
|
||||
{DIAMETER_ATT_HOME_AGENT_ADDRESS, "Home-Agent-Address"},
|
||||
{DIAMETER_ATT_PREVIOUS_FA_NAI, "Previous-FA-NAI"},
|
||||
{DIAMETER_ATT_MN_AAA_SPI, "MN-AAA-SPI"},
|
||||
{DIAMETER_ATT_FOREIGN_HA_AVAIL, "Foreign-HA-Avail"},
|
||||
{DIAMETER_ATT_MN_TO_FA_KEY, "MN-to-FA-Key"},
|
||||
{DIAMETER_ATT_MN_TO_HA_KEY, "MN-to-HA-Key"},
|
||||
{DIAMETER_ATT_FA_TO_MN_KEY, "FA-to-MN-Key"},
|
||||
{DIAMETER_ATT_FA_TO_HA_KEY, "FA-to-HA-Key"},
|
||||
{DIAMETER_ATT_HA_TO_MN_KEY, "HA-to-MN-Key"},
|
||||
{DIAMETER_ATT_HA_TO_FA_KEY, "HA-to-FA-Key"},
|
||||
{DIAMETER_ATT_FA_MN_PREFERRED_SPI, "FA-MN-Preferred-SPI"},
|
||||
{DIAMETER_ATT_FA_HA_PREFERRED_SPI, "FA-HA-Preferred-SPI"},
|
||||
{DIAMETER_ATT_FILTER_RULE, "Filter-Rule"},
|
||||
{DIAMETER_ATT_REQUEST_TYPE, "Request-Type"},
|
||||
{DIAMETER_ATT_EAP_PAYLOAD, "EAP-Payload"},
|
||||
{DIAMETER_ATT_CMS_DATA, "CMS-Data"},
|
||||
{DIAMETER_ATT_RES_MGMT_INDEX, "Res-Mgmt-Index"},
|
||||
{DIAMETER_ATT_RES_MGMT_TOKEN, "Res-Mgmt-Token"},
|
||||
{DIAMETER_ATT_SOURCE_HOST, "Source-Host"},
|
||||
{DIAMETER_ATT_DESTINATION_HOST, "Destination-Host"},
|
||||
{DIAMETER_ATT_SOURCE_PORT, "Source-Port"},
|
||||
{DIAMETER_ATT_DESTINATION_PORT, "Destination-Port"},
|
||||
{DIAMETER_ATT_PROTOCOL, "Protocol"},
|
||||
{DIAMETER_ATT_RSVP_SERVICE_TYPE, "RSVP-Service-Type"},
|
||||
{DIAMETER_ATT_TOKEN_BUCKET_RATE, "Token-Bucket-Rate"},
|
||||
{DIAMETER_ATT_TOKEN_BUCKET_SIZE, "Token-Bucket-Size"},
|
||||
{DIAMETER_ATT_PEAK_DATA_RATE, "Peak-Data-Rate"},
|
||||
{DIAMETER_ATT_MINIMUM_POLICED_UNIT, "Minimum-Policed-Unit"},
|
||||
{DIAMETER_ATT_MAXIMUM_PACKET_SIZE, "Maximum-Packet-Size"},
|
||||
{DIAMETER_ATT_QOS_RATE, "QOS-Rate"},
|
||||
{DIAMETER_ATT_SLACK_TERM, "Slack-Term"},
|
||||
{DIAMETER_ATT_TOS_DS_VALUE, "TOS-DS-Value"},
|
||||
{DIAMETER_ATT_INTERFACE_ADDRESS, "Interface-Address"},
|
||||
{DIAMETER_ATT_QOS_SERVICE_TYPE, "QOS-Service-Type"},
|
||||
{DIAMETER_ATT_VOIP_CALLER, "Voip-Caller"},
|
||||
{DIAMETER_ATT_VOIP_CALLEE, "Voip-Callee"},
|
||||
{DIAMETER_ATT_VOIP_CHALLENGE, "Voip-Challenge"},
|
||||
{DIAMETER_ATT_VOIP_RESPONSE, "Voip-Response"},
|
||||
{DIAMETER_ATT_VOIP_SESSION_LENGTH, "Voip-Session-Length"},
|
||||
{DIAMETER_ATT_COMMENT, "Comment"},
|
||||
{DIAMETER_ATT_XVALUE, "Xvalue"},
|
||||
{DIAMETER_ATT_XSTRING, "Xstring"},
|
||||
{DIAMETER_ATT_AUTHENTICATION_TYPE, "Authentication-Type"},
|
||||
{DIAMETER_ATT_PROHIBIT, "Prohibit"},
|
||||
{DIAMETER_ATT_USER_CATEGORY, "User-Category"},
|
||||
{DIAMETER_ATT_GROUP_NAME, "Group-Name"},
|
||||
{DIAMETER_ATT_ENCRYPTED_PASSWORD, "Encrypted-Password"},
|
||||
{DIAMETER_ATT_EXPIRATION, "Expiration"},
|
||||
{DIAMETER_ATT_PASSWORD, "Password"},
|
||||
{DIAMETER_ATT_SIMULTANEOUS_USE, "Simultaneous-Use"},
|
||||
{DIAMETER_ATT_SESSION_LIMIT, "Session-Limit"},
|
||||
{DIAMETER_ATT_SERVER_NAME, "Server-Name"},
|
||||
{DIAMETER_ATT_FRAMED_IP_ADDRESS_POOL_NAME, "Framed-IP-Address-Pool-Name"},
|
||||
{DIAMETER_ATT_SERVICE_CLASS, "Service-Class"},
|
||||
{DIAMETER_ATT_DENY_MESSAGE, "Deny-Message"},
|
||||
{DIAMETER_ATT_SOURCE_SUBNET, "Source-Subnet"},
|
||||
{DIAMETER_ATT_DESTINATION_SUBNET, "Destination-Subnet"},
|
||||
{DIAMETER_ATT_MAX_QOS_RATE, "Max-QOS-Rate"},
|
||||
{DIAMETER_ATT_ACCOUNTING_ADIF_RECORD, "Accounting-Adif-Record"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
|
||||
/* Attribute to Type Table */
|
||||
|
||||
static value_value_pair diameter_printinfo[] = {
|
||||
{ DIAMETER_ATT_USER_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_USER_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CHAP_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_NAS_IP_ADDRESS, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_NAS_PORT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_SERVICE_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FRAMED_PROTOCOL, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FRAMED_IP_ADDRESS, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_FRAMED_IP_NETMASK, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_FRAMED_ROUTING, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FILTER_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FRAMED_MTU, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FRAMED_COMPRESSION, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_LOGIN_IP_HOST, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_LOGIN_SERVICE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_LOGIN_TCP_PORT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_OLD_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_REPLY_MESSAGE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CALLBACK_NUMBER, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CALLBACK_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FRAMED_ROUTE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FRAMED_IPX_NETWORK, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_STATE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CLASS, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_SESSION_TIMEOUT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_IDLE_TIMEOUT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_TERMINATION_ACTION, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_CALLED_STATION_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CALLING_STATION_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_NAS_IDENTIFIER, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_PROXY_STATE, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_LOGIN_LAT_SERVICE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_LOGIN_LAT_NODE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_LOGIN_LAT_GROUP, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FRAMED_APPLETALK_LINK, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FRAMED_APPLETALK_NETWORK, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FRAMED_APPLETALK_ZONE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CHAP_CHALLENGE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_NAS_PORT_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_PORT_LIMIT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_LOGIN_LAT_PORT, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_TUNNEL_TYPE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_TUNNEL_MEDIUM_TYPE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ACCT_TUNNEL_CLIENT_ENDPOINT, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_TUNNEL_SERVER_ENDPOINT, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ACCT_TUNNEL_CONNECTION_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_TUNNEL_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ARAP_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ARAP_FEATURES, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ARAP_ZONE_ACCESS, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ARAP_SECURITY, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ARAP_SECURITY_DATA, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_PASSWORD_RETRY, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_PROMPT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_CONNECT_INFO, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_CONFIGURATION_TOKEN, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_EAP_MESSAGE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_SIGNATURE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ACCT_STATUS_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_DELAY_TIME, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_INPUT_OCTETS, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_OUTPUT_OCTETS, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_SESSION_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ACCT_AUTHENTIC, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_SESSION_TIME, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_INPUT_PACKETS, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_OUTPUT_PACKETS, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_TERMINATE_CAUSE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCT_MULTI_SESSION_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ACCT_LINK_COUNT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_ENCAPSULATED, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MERIT_REPLY_IF_ACK_MESSAGE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_LAS_START_TIME, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_LAS_CODE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_LAS_DURATION, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_LOCAL_DURATION, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_HUNTGROUP_SERVICE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_PORT_ENTRY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MERIT_PROXY_ACTION, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_TOKEN, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_OWNERSHIP, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MERIT_SUBGROUP, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_HUNTGROUP_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_USER_ID, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MERIT_USER_REALM, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_COMMAND_CODE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_EXTENSION_ID, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_INTEGRITY_CHECK_VALUE, DIAMETER_COMPLEX },
|
||||
{ DIAMETER_ATT_ENCRYPTED_PAYLOAD, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_NONCE, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_TIMESTAMP, DIAMETER_TIME },
|
||||
{ DIAMETER_ATT_SESSION_ID, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_VENDOR_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FIRMWARE_REVISION, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_RESULT_CODE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_DESTINATION_NAI, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_REBOOT_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_REBOOT_TIME, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FAILED_AVP, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_RECEIVE_WINDOW, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_REDIRECT_HOST, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_IP_PORT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCOUNTING_RECORD_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ADIF_RECORD, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_ACCOUNTING_INTERIM_INTERVAL, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_BATCH, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCOUNTING_DELIVERY_MAX_DELAY, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCOUNTING_RECORD_NUMBER, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MIP_REGISTRATION_REQUEST, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MIP_REGISTRATION_REPLY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MN_FA_CHALLENGE_LENGTH, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MN_FA_RESPONSE, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MOBILE_NODE_ADDRESS, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_HOME_AGENT_ADDRESS, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_PREVIOUS_FA_NAI, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_MN_AAA_SPI, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FOREIGN_HA_AVAIL, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MN_TO_FA_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_MN_TO_HA_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_FA_TO_MN_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_FA_TO_HA_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_HA_TO_MN_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_HA_TO_FA_KEY, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_FA_MN_PREFERRED_SPI, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FA_HA_PREFERRED_SPI, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_FILTER_RULE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_REQUEST_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_EAP_PAYLOAD, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_CMS_DATA, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_RES_MGMT_INDEX, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_RES_MGMT_TOKEN, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_SOURCE_HOST, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_DESTINATION_HOST, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_SOURCE_PORT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_DESTINATION_PORT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_PROTOCOL, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_RSVP_SERVICE_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_TOKEN_BUCKET_RATE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_TOKEN_BUCKET_SIZE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_PEAK_DATA_RATE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MINIMUM_POLICED_UNIT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_MAXIMUM_PACKET_SIZE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_QOS_RATE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_SLACK_TERM, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_TOS_DS_VALUE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_INTERFACE_ADDRESS, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_QOS_SERVICE_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_VOIP_CALLER, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_VOIP_CALLEE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_VOIP_CHALLENGE, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_VOIP_RESPONSE, DIAMETER_DATA },
|
||||
{ DIAMETER_ATT_VOIP_SESSION_LENGTH, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_COMMENT, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_XVALUE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_XSTRING, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_AUTHENTICATION_TYPE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_PROHIBIT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_USER_CATEGORY, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_GROUP_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_ENCRYPTED_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_EXPIRATION, DIAMETER_TIME },
|
||||
{ DIAMETER_ATT_PASSWORD, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_SIMULTANEOUS_USE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_SESSION_LIMIT, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_SERVER_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_FRAMED_IP_ADDRESS_POOL_NAME, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_SERVICE_CLASS, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_DENY_MESSAGE, DIAMETER_STRING },
|
||||
{ DIAMETER_ATT_SOURCE_SUBNET, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_DESTINATION_SUBNET, DIAMETER_ADDRESS },
|
||||
{ DIAMETER_ATT_MAX_QOS_RATE, DIAMETER_INTEGER32 },
|
||||
{ DIAMETER_ATT_ACCOUNTING_ADIF_RECORD, DIAMETER_DATA },
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/* Values Structures */
|
||||
|
||||
static value_string diameter_qos_service_type_vals[]={
|
||||
{3, "Labels"},
|
||||
{1, "RSVP"},
|
||||
{2, "TOS"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_service_type_vals[]={
|
||||
{5, "Outbound"},
|
||||
{7, "NAS-Prompt"},
|
||||
{3, "Callback-Login"},
|
||||
{6, "Administrative"},
|
||||
{1, "Login"},
|
||||
{4, "Callback-Framed"},
|
||||
{9, "Callback-NAS-Prompt"},
|
||||
{8, "Authenticate-Only"},
|
||||
{2, "Framed"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_prohibit_vals[]={
|
||||
{0, "Dumb"},
|
||||
{2, "SLIP"},
|
||||
{1, "PPP"},
|
||||
{3, "Auth-Only"},
|
||||
{255, "All"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_prompt_vals[]={
|
||||
{0, "No-Echo"},
|
||||
{1, "Echo"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_source_port_vals[]={
|
||||
{23, "ftp"},
|
||||
{0, "*"},
|
||||
{21, "telnet"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_nas_port_type_vals[]={
|
||||
{6, "PIAFS"},
|
||||
{9, "X75"},
|
||||
{7, "HDLC-Clear-Channel"},
|
||||
{5, "Virtual"},
|
||||
{2, "ISDN-Sync"},
|
||||
{1, "Sync"},
|
||||
{0, "Async"},
|
||||
{4, "ISDN-Async-v110"},
|
||||
{3, "ISDN-Async-v120"},
|
||||
{8, "X25"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_interface_address_vals[]={
|
||||
{0, "Any-Interface"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_framed_routing_vals[]={
|
||||
{0, "None"},
|
||||
{1, "Broadcast"},
|
||||
{3, "Broadcast-Listen"},
|
||||
{2, "Listen"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_command_code_vals[]={
|
||||
{257, "Device-Reboot-Ind"},
|
||||
{258, "Device-Watchdog-Ind"},
|
||||
{259, "Message-Reject-Ind"},
|
||||
{260, "AA-Mobile-Node-Request"},
|
||||
{261, "AA-Mobile-Node-Answer"},
|
||||
{262, "Home-Agent-MIP-Request"},
|
||||
{263, "Home-Agent-MIP-Answer"},
|
||||
{264, "Mobile-Node-Terminate-Ind"},
|
||||
{265, "AA-Request"},
|
||||
{266, "AA-Answer"},
|
||||
{267, "AA-Challenge-Ind"},
|
||||
{268, "DIAMETER-EAP-Request"},
|
||||
{269, "DIAMETER-EAP-Answer"},
|
||||
{270, "DIAMETER-EAP-Ind"},
|
||||
{271, "Accounting-Request"},
|
||||
{272, "Accounting-Answer"},
|
||||
{273, "Accounting-Poll"},
|
||||
{483, "Accounting-Start-Answer"},
|
||||
{511, "Ping-Req"},
|
||||
{484, "Accounting-Interim-Req"},
|
||||
{480, "Voip-Stop-Req"},
|
||||
{512, "Ping-Answer"},
|
||||
{513, "EAP-Req"},
|
||||
{485, "Accounting-Interim-Answer"},
|
||||
{481, "Voip-Stop-Answer"},
|
||||
{478, "Voip-Start-Req"},
|
||||
{486, "Accounting-Stop-Req"},
|
||||
{514, "EAP-Answer"},
|
||||
{515, "Domain-Discovery-Request"},
|
||||
{479, "Voip-Start-Answer"},
|
||||
{516, "Domain-Discovery-Answer"},
|
||||
{487, "Accounting-Stop-Answer"},
|
||||
{482, "Accounting-Start-Req"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_framed_ip_address_vals[]={
|
||||
{-1, "Assigned"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_arap_zone_access_vals[]={
|
||||
{4, "Exclusive-Filter"},
|
||||
{2, "Inclusive-Filter"},
|
||||
{1, "Default-Zone"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_acct_authentic_vals[]={
|
||||
{1, "RADIUS"},
|
||||
{0, "None"},
|
||||
{2, "Local"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_framed_protocol_vals[]={
|
||||
{1, "PPP"},
|
||||
{260, "COMB"},
|
||||
{5, "Xylogics"},
|
||||
{257, "EURAW"},
|
||||
{3, "ARA"},
|
||||
{261, "FR"},
|
||||
{2, "SLIP"},
|
||||
{258, "EUUI"},
|
||||
{4, "Gandalf"},
|
||||
{256, "MPP"},
|
||||
{255, "Ascend-ARA"},
|
||||
{259, "X25"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_framed_compression_vals[]={
|
||||
{0, "None"},
|
||||
{1, "Van-Jacobson-TCP-IP"},
|
||||
{2, "IPX-Header-Compression"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_authentication_type_vals[]={
|
||||
{10, "File"},
|
||||
{22, "LDAP"},
|
||||
{21, "Slow"},
|
||||
{20, "Blackhole"},
|
||||
{2, "AFS-Krb"},
|
||||
{6, "KCHAP"},
|
||||
{4, "RADIUS"},
|
||||
{13, "ACE"},
|
||||
{9, "Local"},
|
||||
{7, "TACACS"},
|
||||
{0, "None"},
|
||||
{19, "Deny"},
|
||||
{23, "Unassigned"},
|
||||
{8, "Realm"},
|
||||
{1, "Passwd"},
|
||||
{5, "MNET"},
|
||||
{3, "MIT-Krb"},
|
||||
{17, "Oracle"},
|
||||
{1, "Unix-PW"},
|
||||
{16, "ODBC"},
|
||||
{11, "TACPLUS"},
|
||||
{15, "SKEY"},
|
||||
{12, "ARA-DES"},
|
||||
{14, "DEFENDER"},
|
||||
{18, "Allow"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_acct_terminate_cause_vals[]={
|
||||
{1, "User-Request"},
|
||||
{2, "Lost-Carrier"},
|
||||
{3, "Lost-Service"},
|
||||
{4, "Idle-Timeout"},
|
||||
{5, "Session-Timeout"},
|
||||
{6, "Admin-Reset"},
|
||||
{7, "Admin-Reboot"},
|
||||
{8, "Port-Error"},
|
||||
{9, "NAS-Error"},
|
||||
{10, "NAS-Request"},
|
||||
{11, "NAS-Reboot"},
|
||||
{12, "Port-Unneeded"},
|
||||
{13, "Port-Preempted"},
|
||||
{14, "Port-Suspended"},
|
||||
{15, "Service-Unavailable"},
|
||||
{16, "Callback"},
|
||||
{17, "User-Error"},
|
||||
{18, "Host-Request"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_protocol_vals[]={
|
||||
{65535, "Any"},
|
||||
{17, "UDP"},
|
||||
{1, "ICMP"},
|
||||
{0, "IP"},
|
||||
{6, "TCP"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_destination_port_vals[]={
|
||||
{10000, "vic-rsvp"},
|
||||
{23, "ftp"},
|
||||
{0, "*"},
|
||||
{21, "telnet"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_termination_action_vals[]={
|
||||
{0, "Default"},
|
||||
{1, "RADIUS-Request"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_extension_id_vals[]={
|
||||
{1, "NASREQ"},
|
||||
{2, "Strong-Security"},
|
||||
{4, "Mobile-IP"},
|
||||
{5, "Accounting"},
|
||||
{7, "VOIP"},
|
||||
{8, "EAP"},
|
||||
{555, "Test"},
|
||||
{556, "AccountingV3"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_merit_las_code_vals[]={
|
||||
{0, "LAS-Normal"},
|
||||
{1, "LAS-Reject"},
|
||||
{2, "LAS-Cancel"},
|
||||
{3, "LAS-Noconfirm"},
|
||||
{4, "LAS-Overtime"},
|
||||
{5, "LAS-Unknown"},
|
||||
{6, "LAS-Notoken"},
|
||||
{7, "LAS-Notlocal"},
|
||||
{8, "LAS-Suspend"},
|
||||
{9, "LAS-Failed"},
|
||||
{10, "LAS-Authorized"},
|
||||
{11, "LAS-NASreboot"},
|
||||
{12, "LAS-Remote"},
|
||||
{13, "LAS-Duplicate"},
|
||||
{14, "LAS-Collision"},
|
||||
{15, "LAS-Stop"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_login_service_vals[]={
|
||||
{0, "Telnet"},
|
||||
{1, "Rlogin"},
|
||||
{2, "TCP-Clear"},
|
||||
{3, "PortMaster"},
|
||||
{4, "LAT"},
|
||||
{5, "X25-PAD"},
|
||||
{6, "X25-T3POS"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_rsvp_service_type_vals[]={
|
||||
{1, "RSVP-Controlled-Load"},
|
||||
{2, "RSVP-Guaranteed"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_reboot_type_vals[]={
|
||||
{1, "Reboot-Imminent"},
|
||||
{2, "Reboot-Complete"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
static value_string diameter_acct_status_type_vals[]={
|
||||
{1, "Start"},
|
||||
{2, "Stop"},
|
||||
{3, "Alive"},
|
||||
{4, "Modem-Start"},
|
||||
{5, "Modem-Stop"},
|
||||
{6, "Cancel"},
|
||||
{7, "Accounting-On"},
|
||||
{8, "Accounting-Off"},
|
||||
{0, (char *)NULL}
|
||||
};
|
||||
|
||||
|
||||
#endif /* _PACKET_DIAMETER_DEFS_H */
|
|
@ -0,0 +1,752 @@
|
|||
/* packet-diameter.c
|
||||
* Routines for DIAMETER packet disassembly
|
||||
*
|
||||
* $Id: packet-diameter.c,v 1.1 2000/07/30 07:16:03 guy Exp $
|
||||
*
|
||||
* Copyright (c) 2000 by David Frascone <chaos@mindspring.com>
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Johan Feyaerts
|
||||
* Copyright 1999 Johan Feyaerts
|
||||
* 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "resolv.h"
|
||||
#include "prefs.h"
|
||||
|
||||
/* This must be defined before we include our dictionary defs */
|
||||
|
||||
typedef struct _value_value_pair {
|
||||
guint16 val1;
|
||||
guint16 val2;
|
||||
} value_value_pair;
|
||||
|
||||
typedef enum {
|
||||
DIAMETER_DATA=1,
|
||||
DIAMETER_STRING,
|
||||
DIAMETER_ADDRESS,
|
||||
DIAMETER_INTEGER32,
|
||||
DIAMETER_INTEGER64,
|
||||
DIAMETER_TIME,
|
||||
DIAMETER_COMPLEX
|
||||
} diameterDataTypes;
|
||||
|
||||
#include "packet-diameter.h"
|
||||
#include "packet-diameter-defs.h"
|
||||
|
||||
#define COMMAND_CODE_OFFSET 20
|
||||
#define NTP_TIME_DIFF (2208988800UL)
|
||||
|
||||
#undef SCTP_DISSECTORS_ENABLED
|
||||
|
||||
#define UDP_PORT_DIAMETER 2645
|
||||
#define TCP_PORT_DIAMETER 2645
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
#define SCTP_PORT_DIAMETER 2645
|
||||
#endif
|
||||
/* #define UDP_PORT_DIAMETER 1812 -- Compiling this in breaks RADIUS */
|
||||
|
||||
static int proto_diameter = -1;
|
||||
static int hf_diameter_length = -1;
|
||||
static int hf_diameter_code = -1;
|
||||
static int hf_diameter_id =-1;
|
||||
static int hf_diameter_flags = -1;
|
||||
static int hf_diameter_ns = -1;
|
||||
static int hf_diameter_nr = -1;
|
||||
|
||||
static gint ett_diameter = -1;
|
||||
static gint ett_diameter_avp = -1;
|
||||
static gint ett_diameter_avpinfo = -1;
|
||||
|
||||
static char gbl_diameterString[200];
|
||||
static int gbl_diameterUdpPort=UDP_PORT_DIAMETER;
|
||||
static int gbl_diameterTcpPort=TCP_PORT_DIAMETER;
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
static int gbl_diameterSctpPort=SCTP_PORT_DIAMETER;
|
||||
#endif
|
||||
gboolean gbl_commandCodeInHeader = FALSE;
|
||||
|
||||
typedef struct _e_diameterhdr {
|
||||
guint8 code; /* Must be 254 for diameter */
|
||||
guint8 flagsVer;
|
||||
guint16 pktLength;
|
||||
guint32 identifier;
|
||||
union {
|
||||
struct {
|
||||
guint16 nextSend;
|
||||
guint16 nextReceived;
|
||||
} old;
|
||||
struct {
|
||||
guint32 commandCode;
|
||||
guint32 vendorId;
|
||||
guint16 nextSend;
|
||||
guint16 nextReceived;
|
||||
} new;
|
||||
} u;
|
||||
} e_diameterhdr;
|
||||
|
||||
typedef struct _e_avphdr {
|
||||
guint32 avp_type;
|
||||
guint16 avp_length;
|
||||
guint16 avp_flags;
|
||||
guint32 avp_vendorId; /* optional */
|
||||
guint32 avp_tag; /* optional */
|
||||
|
||||
} e_avphdr;
|
||||
|
||||
#define AUTHENTICATOR_LENGTH 12
|
||||
|
||||
#define DIAM_FLAGS_A 0x10
|
||||
#define DIAM_FLAGS_W 0x08
|
||||
#define AVP_FLAGS_P 0x0010
|
||||
#define AVP_FLAGS_T 0x0008
|
||||
#define AVP_FLAGS_V 0x0004
|
||||
#define AVP_FLAGS_R 0x0002
|
||||
#define AVP_FLAGS_M 0x0001
|
||||
|
||||
void proto_reg_handoff_diameter(void);
|
||||
|
||||
static guint32 match_numval(guint32 val, const value_value_pair *vs)
|
||||
{
|
||||
guint32 i = 0;
|
||||
|
||||
while (vs[i].val1) {
|
||||
if (vs[i].val1 == val)
|
||||
return(vs[i].val2);
|
||||
i++;
|
||||
}
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
static gchar *rdconvertbufftostr(gchar *dest,guint8 length,const guint8 *pd)
|
||||
{
|
||||
/*converts the raw buffer into printable text */
|
||||
guint32 i;
|
||||
guint32 totlen=0;
|
||||
|
||||
dest[0]='"';
|
||||
dest[1]=0;
|
||||
totlen=1;
|
||||
for (i=0; i < (guint32)length; i++)
|
||||
{
|
||||
if( isalnum((int)pd[i])||ispunct((int)pd[i])
|
||||
||((int)pd[i]==' ')) {
|
||||
dest[totlen]=(gchar)pd[i];
|
||||
totlen++;
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(&(dest[totlen]), "\\%03u", pd[i]);
|
||||
totlen=totlen+strlen(&(dest[totlen]));
|
||||
}
|
||||
}
|
||||
dest[totlen]='"';
|
||||
dest[totlen+1]=0;
|
||||
return dest;
|
||||
}
|
||||
|
||||
static gchar *rd_match_strval(guint32 val, const value_string *vs) {
|
||||
gchar *result;
|
||||
result=match_strval(val,vs);
|
||||
if (result == NULL ) {
|
||||
result="Undefined";
|
||||
}
|
||||
return result;
|
||||
}
|
||||
static char *complexValCheck(e_avphdr *avp, const char *data, size_t dataLen)
|
||||
{
|
||||
const char *rawData;
|
||||
static char returnStr[1024];
|
||||
|
||||
switch (avp->avp_type) {
|
||||
case DIAMETER_ATT_INTEGRITY_CHECK_VALUE:
|
||||
{
|
||||
struct {
|
||||
guint32 transform;
|
||||
guint32 keyid;
|
||||
} icv;
|
||||
|
||||
memcpy(&icv, data, 8);
|
||||
icv.transform=ntohl(icv.transform);
|
||||
icv.keyid=ntohl(icv.keyid);
|
||||
rawData = &data[8];
|
||||
|
||||
sprintf(returnStr,
|
||||
"transform: 0x%08x (%d) keyid: 0x%08x (%d) Hash: ",
|
||||
icv.transform, icv.transform, icv.keyid, icv.keyid);
|
||||
|
||||
rdconvertbufftostr(&returnStr[strlen(returnStr)],
|
||||
dataLen-8,
|
||||
rawData);
|
||||
return returnStr;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;;
|
||||
} /* complexValCheck */
|
||||
static char *customValCheck(int code, int value)
|
||||
{
|
||||
switch (code) {
|
||||
case DIAMETER_ATT_QOS_SERVICE_TYPE:
|
||||
return rd_match_strval(value, diameter_qos_service_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_SERVICE_TYPE:
|
||||
return rd_match_strval(value, diameter_service_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_PROHIBIT:
|
||||
return rd_match_strval(value, diameter_prohibit_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_PROMPT:
|
||||
return rd_match_strval(value, diameter_prompt_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_SOURCE_PORT:
|
||||
return rd_match_strval(value, diameter_source_port_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_NAS_PORT_TYPE:
|
||||
return rd_match_strval(value, diameter_nas_port_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_INTERFACE_ADDRESS:
|
||||
return rd_match_strval(value, diameter_interface_address_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_FRAMED_ROUTING:
|
||||
return rd_match_strval(value, diameter_framed_routing_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_COMMAND_CODE:
|
||||
return rd_match_strval(value, diameter_command_code_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_FRAMED_IP_ADDRESS:
|
||||
return rd_match_strval(value, diameter_framed_ip_address_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_ARAP_ZONE_ACCESS:
|
||||
return rd_match_strval(value, diameter_arap_zone_access_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_ACCT_AUTHENTIC:
|
||||
return rd_match_strval(value, diameter_acct_authentic_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_FRAMED_PROTOCOL:
|
||||
return rd_match_strval(value, diameter_framed_protocol_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_FRAMED_COMPRESSION:
|
||||
return rd_match_strval(value, diameter_framed_compression_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_AUTHENTICATION_TYPE:
|
||||
return rd_match_strval(value, diameter_authentication_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_ACCT_TERMINATE_CAUSE:
|
||||
return rd_match_strval(value, diameter_acct_terminate_cause_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_PROTOCOL:
|
||||
return rd_match_strval(value, diameter_protocol_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_DESTINATION_PORT:
|
||||
return rd_match_strval(value, diameter_destination_port_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_TERMINATION_ACTION:
|
||||
return rd_match_strval(value, diameter_termination_action_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_EXTENSION_ID:
|
||||
return rd_match_strval(value, diameter_extension_id_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_MERIT_LAS_CODE:
|
||||
return rd_match_strval(value, diameter_merit_las_code_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_LOGIN_SERVICE:
|
||||
return rd_match_strval(value, diameter_login_service_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_RSVP_SERVICE_TYPE:
|
||||
return rd_match_strval(value, diameter_rsvp_service_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_REBOOT_TYPE:
|
||||
return rd_match_strval(value, diameter_reboot_type_vals);
|
||||
break;
|
||||
case DIAMETER_ATT_ACCT_STATUS_TYPE:
|
||||
return rd_match_strval(value, diameter_acct_status_type_vals);
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static gchar *rd_value_to_str(e_avphdr *avph,const u_char *pd, int offset)
|
||||
{
|
||||
int print_type;
|
||||
gchar *cont;
|
||||
guint32 intval;
|
||||
int dataLen;
|
||||
char *valstr;
|
||||
static char buffer[1024];
|
||||
|
||||
dataLen = avph->avp_length - sizeof(e_avphdr);
|
||||
|
||||
if (!(avph->avp_flags & AVP_FLAGS_V))
|
||||
dataLen += 4;
|
||||
if (!(avph->avp_flags & AVP_FLAGS_T))
|
||||
dataLen += 4;
|
||||
|
||||
/* prints the values of the attribute value pairs into a text buffer */
|
||||
|
||||
print_type=match_numval(avph->avp_type,diameter_printinfo);
|
||||
/* Default begin */
|
||||
sprintf(buffer,"Value: ");
|
||||
cont=&buffer[strlen(buffer)];
|
||||
switch(print_type)
|
||||
{
|
||||
case DIAMETER_COMPLEX:
|
||||
valstr=complexValCheck(avph, &(pd[offset]), dataLen);
|
||||
if (valstr) {
|
||||
strcpy(cont, valstr);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Intentional fall through */
|
||||
case DIAMETER_DATA:
|
||||
case DIAMETER_STRING:
|
||||
rdconvertbufftostr(cont,dataLen,
|
||||
&(pd[offset]));
|
||||
break;
|
||||
case DIAMETER_ADDRESS:
|
||||
sprintf(cont,"%u.%u.%u.%u",(guint8)pd[offset],
|
||||
(guint8)pd[offset+1],(guint8)pd[offset+2],
|
||||
(guint8)pd[offset+3]);
|
||||
break;
|
||||
case DIAMETER_INTEGER32:
|
||||
/* Check for custom values */
|
||||
intval=pntohl(&(pd[offset]));
|
||||
valstr=customValCheck(avph->avp_type, intval);
|
||||
if (valstr) {
|
||||
sprintf(cont,"%s (%u)", valstr, intval);
|
||||
} else {
|
||||
sprintf(cont,"%u", intval);
|
||||
}
|
||||
break;
|
||||
case DIAMETER_INTEGER64:
|
||||
sprintf(cont,"Unsupported Conversion");
|
||||
break;
|
||||
case DIAMETER_TIME:
|
||||
{
|
||||
struct tm lt;
|
||||
intval=pntohl(&(pd[offset]));
|
||||
intval -= NTP_TIME_DIFF;
|
||||
lt=*localtime((time_t *)&intval);
|
||||
strftime(cont, 1024,
|
||||
"%a, %d %b %Y %H:%M:%S %z",<);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
rdconvertbufftostr(cont,dataLen,
|
||||
&(pd[offset]));
|
||||
break;
|
||||
}
|
||||
if (cont == buffer) {
|
||||
strcpy(cont,"Unknown Value");
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
static void dissect_attribute_value_pairs(const u_char *pd, int offset,
|
||||
frame_data *fd, proto_tree *tree, int avplength) {
|
||||
/* adds the attribute value pairs to the tree */
|
||||
e_avphdr avph;
|
||||
gchar *avptpstrval;
|
||||
gchar *valstr;
|
||||
guint32 tag=0;
|
||||
guint32 vendorId=0;
|
||||
int dataOffset;
|
||||
int fixAmt;
|
||||
proto_item *avptf;
|
||||
proto_tree *avptree;
|
||||
int vendorOffset, tagOffset;
|
||||
|
||||
if (avplength==0) {
|
||||
proto_tree_add_text(tree, NullTVB,offset,0,
|
||||
"No Attribute Value Pairs Found");
|
||||
return;
|
||||
}
|
||||
|
||||
while (avplength > 0 ) {
|
||||
vendorOffset = tagOffset = 0;
|
||||
memcpy(&avph,&pd[offset],sizeof(e_avphdr));
|
||||
avph.avp_type = ntohl(avph.avp_type);
|
||||
avph.avp_length = ntohs(avph.avp_length);
|
||||
avph.avp_flags = ntohs(avph.avp_flags);
|
||||
|
||||
if (avph.avp_flags & AVP_FLAGS_V) {
|
||||
vendorId = ntohl(avph.avp_vendorId);
|
||||
vendorOffset = 8;
|
||||
if (avph.avp_flags & AVP_FLAGS_T) {
|
||||
tag = ntohl(avph.avp_tag);
|
||||
tagOffset = 12;
|
||||
dataOffset = sizeof(e_avphdr);
|
||||
} else {
|
||||
/* only a vendor id */
|
||||
dataOffset = sizeof(e_avphdr) - sizeof(guint32);
|
||||
}
|
||||
} else {
|
||||
if (avph.avp_flags & AVP_FLAGS_T) {
|
||||
/* tag in vendor field */
|
||||
tag = ntohl(avph.avp_vendorId);
|
||||
tagOffset = 8;
|
||||
dataOffset = sizeof(e_avphdr) - sizeof(guint32);
|
||||
} else {
|
||||
/* No vendor or tag info */
|
||||
dataOffset = sizeof(e_avphdr) -
|
||||
(2*sizeof(guint32));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Fix byte-alignment
|
||||
*/
|
||||
fixAmt = 4 - (avph.avp_length % 4);
|
||||
if (fixAmt == 4) fixAmt = 0;
|
||||
avplength=avplength - (avph.avp_length + fixAmt);
|
||||
avptpstrval=match_strval(avph.avp_type, diameter_attrib_type_vals);
|
||||
if (avptpstrval == NULL) avptpstrval="Unknown Type";
|
||||
if (!BYTES_ARE_IN_FRAME(offset, avph.avp_length)) {
|
||||
break;
|
||||
}
|
||||
avptf = proto_tree_add_text(tree,NullTVB,
|
||||
offset, avph.avp_length,
|
||||
"%s(%d) l:0x%x (%d bytes)",
|
||||
avptpstrval,avph.avp_type,avph.avp_length,
|
||||
avph.avp_length);
|
||||
avptree = proto_item_add_subtree(avptf,
|
||||
ett_diameter_avpinfo);
|
||||
if (avptree !=NULL) {
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset, 4,
|
||||
"AVP Code: %s(%d)",
|
||||
avptpstrval,avph.avp_type);
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset+4 , 2,
|
||||
"Length: 0x%x(%d bytes)",
|
||||
avph.avp_length, avph.avp_length);
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset+6, 2,
|
||||
"Flags: P:%d T:%d V:%d R:%d M:%d",
|
||||
(avph.avp_flags & AVP_FLAGS_P)?1:0,
|
||||
(avph.avp_flags & AVP_FLAGS_T)?1:0,
|
||||
(avph.avp_flags & AVP_FLAGS_V)?1:0,
|
||||
(avph.avp_flags & AVP_FLAGS_R)?1:0,
|
||||
(avph.avp_flags & AVP_FLAGS_M)?1:0);
|
||||
if (vendorOffset) {
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset+vendorOffset, 4,
|
||||
"VendorId: 0x%08x (%d)",
|
||||
vendorId, vendorId);
|
||||
}
|
||||
if (tagOffset) {
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset+tagOffset, 4,
|
||||
"Tag: 0x%08x (%d)",
|
||||
tag, tag);
|
||||
}
|
||||
valstr=rd_value_to_str(&avph, pd, offset+dataOffset);
|
||||
proto_tree_add_text(avptree,NullTVB,
|
||||
offset+dataOffset, avph.avp_length - dataOffset,
|
||||
"Data: (%d bytes) %s",
|
||||
avph.avp_length - dataOffset, valstr);
|
||||
}
|
||||
offset=offset+avph.avp_length + fixAmt;
|
||||
if (avph.avp_length == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dissect_diameter(const u_char *pd, int offset, frame_data *fd,
|
||||
proto_tree *tree)
|
||||
{
|
||||
proto_tree *diameter_tree,*avptree;
|
||||
proto_item *ti,*avptf;
|
||||
int avplength,hdrlength, offsetavp;
|
||||
e_diameterhdr dh;
|
||||
int commandCode;
|
||||
char buffer[2000];
|
||||
int nextSend=0, nextReceived=0;
|
||||
|
||||
gchar *codestrval;
|
||||
|
||||
|
||||
if (gbl_commandCodeInHeader)
|
||||
hdrlength=sizeof(e_diameterhdr);
|
||||
else
|
||||
hdrlength = sizeof(e_diameterhdr) - (2 * sizeof(uint32_t));
|
||||
|
||||
memcpy(&dh,&pd[offset],hdrlength);
|
||||
/* Fix byte ordering in our static structure */
|
||||
dh.pktLength = ntohs(dh.pktLength);
|
||||
dh.identifier = ntohl(dh.identifier);
|
||||
|
||||
/* Our code is in first avp */
|
||||
if (gbl_commandCodeInHeader) {
|
||||
dh.u.new.commandCode = ntohl(dh.u.new.commandCode);
|
||||
dh.u.new.vendorId = ntohl(dh.u.new.vendorId);
|
||||
|
||||
if ((DIAM_FLAGS_W & dh.flagsVer)) {
|
||||
dh.u.new.nextSend = ntohs(dh.u.new.nextSend);
|
||||
dh.u.new.nextReceived = ntohs(dh.u.new.nextReceived);
|
||||
nextSend = dh.u.new.nextSend;
|
||||
nextReceived = dh.u.new.nextReceived;
|
||||
}
|
||||
commandCode = dh.u.new.commandCode;
|
||||
} else {
|
||||
if ((DIAM_FLAGS_W & dh.flagsVer)) {
|
||||
dh.u.old.nextSend = ntohs(dh.u.old.nextSend);
|
||||
dh.u.old.nextReceived = ntohs(dh.u.old.nextReceived);
|
||||
nextSend = dh.u.old.nextSend;
|
||||
nextReceived = dh.u.old.nextReceived;
|
||||
}
|
||||
memcpy(&commandCode, &pd[offset+COMMAND_CODE_OFFSET], 4);
|
||||
commandCode = ntohl(commandCode);
|
||||
}
|
||||
|
||||
codestrval= match_strval(commandCode,diameter_command_code_vals);
|
||||
if (codestrval==NULL) {
|
||||
codestrval="Unknown Packet";
|
||||
}
|
||||
if (check_col(fd, COL_PROTOCOL))
|
||||
col_add_str(fd, COL_PROTOCOL, "DIAMETER");
|
||||
if (check_col(fd, COL_INFO)) {
|
||||
if (DIAM_FLAGS_A & dh.flagsVer) {
|
||||
sprintf(buffer,"ACK (id=%d, l=%d, s=%d, r=%d)",
|
||||
dh.identifier, dh.pktLength, nextSend,
|
||||
nextReceived);
|
||||
} else {
|
||||
sprintf(buffer,"%s(%d) (id=%d, l=%d, s=%d, r=%d)",
|
||||
codestrval,commandCode, dh.identifier, dh.pktLength,
|
||||
nextSend, nextReceived);
|
||||
}
|
||||
col_add_fstr(fd,COL_INFO,buffer);
|
||||
}
|
||||
|
||||
if (tree) {
|
||||
|
||||
ti = proto_tree_add_protocol_format(tree, proto_diameter, NullTVB,
|
||||
offset, dh.pktLength, "%s",
|
||||
gbl_diameterString);
|
||||
diameter_tree = proto_item_add_subtree(ti, ett_diameter);
|
||||
|
||||
if (!(DIAM_FLAGS_A & dh.flagsVer)) {
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_code,
|
||||
NullTVB,
|
||||
offset+0,
|
||||
1, dh.code, "Packet code:0x%02x",
|
||||
dh.code);
|
||||
}
|
||||
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_flags,
|
||||
NullTVB, offset+1, 1,
|
||||
dh.flagsVer,
|
||||
"Packet flags/Version: 0x%02x (Flags:0x%x,"
|
||||
" A:%d W:%d Version=0x%1x (%d)",
|
||||
dh.flagsVer, (dh.flagsVer&0xf8)>>3,
|
||||
(DIAM_FLAGS_A & dh.flagsVer)?1:0,
|
||||
(DIAM_FLAGS_W & dh.flagsVer)?1:0,
|
||||
dh.flagsVer&0x07, dh.flagsVer&0x07);
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_length, NullTVB,
|
||||
offset+2, 2,
|
||||
dh.pktLength,
|
||||
"Packet length: 0x%04x (%d)",dh.pktLength,
|
||||
dh.pktLength);
|
||||
proto_tree_add_uint_format(diameter_tree,hf_diameter_id,
|
||||
NullTVB, offset+4, 4,
|
||||
dh.identifier, "Packet identifier: 0x%08x (%d)",
|
||||
dh.identifier, dh.identifier);
|
||||
if (gbl_commandCodeInHeader) {
|
||||
proto_tree_add_uint_format(diameter_tree,hf_diameter_id,
|
||||
NullTVB, offset+8, 4,
|
||||
dh.identifier, "Command Code: 0x%08x (%d:%s)",
|
||||
dh.u.new.commandCode, dh.u.new.commandCode,
|
||||
codestrval);
|
||||
proto_tree_add_uint_format(diameter_tree,hf_diameter_id,
|
||||
NullTVB, offset+12, 4,
|
||||
dh.identifier, "VendorId: 0x%08x (%d)",
|
||||
dh.u.new.vendorId, dh.u.new.vendorId);
|
||||
if (DIAM_FLAGS_W & dh.flagsVer) {
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_ns, NullTVB,
|
||||
offset+16, 2,
|
||||
nextSend,
|
||||
"Ns: 0x%02x(%d)",nextSend, nextSend);
|
||||
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_nr, NullTVB,
|
||||
offset+20, 2,
|
||||
nextReceived,
|
||||
"Nr: 0x%02x(%d)", nextReceived,
|
||||
nextReceived);
|
||||
}
|
||||
} else {
|
||||
if (DIAM_FLAGS_W & dh.flagsVer) {
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_ns, NullTVB,
|
||||
offset+8, 2,
|
||||
nextSend,
|
||||
"Ns: 0x%02x(%d)",nextSend, nextSend);
|
||||
|
||||
proto_tree_add_uint_format(diameter_tree,
|
||||
hf_diameter_nr, NullTVB,
|
||||
offset+10, 2,
|
||||
nextReceived,
|
||||
"Nr: 0x%02x(%d)", nextReceived,
|
||||
nextReceived);
|
||||
}
|
||||
}
|
||||
|
||||
/* Update the lengths */
|
||||
avplength= dh.pktLength -hdrlength;
|
||||
offsetavp=offset+hdrlength;
|
||||
|
||||
/* list the attribute value pairs */
|
||||
|
||||
avptf = proto_tree_add_text(diameter_tree,
|
||||
NullTVB,offset+hdrlength,avplength,
|
||||
"Attribute value pairs");
|
||||
avptree = proto_item_add_subtree(avptf,
|
||||
ett_diameter_avp);
|
||||
if (avptree !=NULL) {
|
||||
dissect_attribute_value_pairs( pd,
|
||||
offsetavp,fd,avptree,avplength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* registration with the filtering engine */
|
||||
void
|
||||
proto_register_diameter(void)
|
||||
{
|
||||
static hf_register_info hf[] = {
|
||||
{ &hf_diameter_code,
|
||||
{ "Code","diameter.code", FT_UINT8, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
|
||||
{ &hf_diameter_flags,
|
||||
{ "Flags+Version", "diameter.flags", FT_UINT8, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
|
||||
{ &hf_diameter_length,
|
||||
{ "Length","diameter.length", FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
|
||||
{ &hf_diameter_id,
|
||||
{ "Identifier", "diameter.id", FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
|
||||
{ &hf_diameter_ns,
|
||||
{ "Next Send", "diameter.ns", FT_UINT16, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
{ &hf_diameter_nr,
|
||||
{ "Next Received", "diameter.nr", FT_UINT16, BASE_DEC, NULL, 0x0,
|
||||
"" }},
|
||||
|
||||
};
|
||||
static gint *ett[] = {
|
||||
&ett_diameter,
|
||||
&ett_diameter_avp,
|
||||
&ett_diameter_avpinfo
|
||||
};
|
||||
module_t *diameter_module;
|
||||
|
||||
/* Register a configuration option for port */
|
||||
diameter_module = prefs_register_module("Diameter", "Diameter",
|
||||
proto_reg_handoff_diameter);
|
||||
prefs_register_uint_preference(diameter_module, "udp.port",
|
||||
"DIAMETER UDP Port",
|
||||
"Set the port for DIAMETER messages (if"
|
||||
" other than RADIUS port)",
|
||||
10,
|
||||
&gbl_diameterUdpPort);
|
||||
prefs_register_uint_preference(diameter_module, "tcp.port",
|
||||
"DIAMETER UDP Port",
|
||||
"Set the TCP port for DIAMETER messages",
|
||||
10,
|
||||
&gbl_diameterTcpPort);
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
prefs_register_uint_preference(diameter_module, "sctp.port",
|
||||
"DIAMETER SCTP Port",
|
||||
"Set the SCTP port for DIAMETER messages",
|
||||
10,
|
||||
&gbl_diameterSctpPort);
|
||||
#endif
|
||||
prefs_register_bool_preference(diameter_module, "command_in_header",
|
||||
"Command code in header",
|
||||
"Whether the command code is in the header, or in the first AVP",
|
||||
&gbl_commandCodeInHeader);
|
||||
|
||||
proto_diameter = proto_register_protocol (gbl_diameterString, "diameter");
|
||||
proto_register_field_array(proto_diameter, hf, array_length(hf));
|
||||
proto_register_subtree_array(ett, array_length(ett));
|
||||
}
|
||||
|
||||
void
|
||||
proto_reg_handoff_diameter(void)
|
||||
{
|
||||
static int Initialized=FALSE;
|
||||
static int UdpPort=0;
|
||||
static int TcpPort=0;
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
static int SctpPort=0;
|
||||
#endif
|
||||
if (Initialized) {
|
||||
dissector_delete("udp.port", UdpPort, dissect_diameter);
|
||||
dissector_delete("tcp.port", TcpPort, dissect_diameter);
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
dissector_delete("sctp.srcport", SctpPort, dissect_diameter);
|
||||
dissector_delete("sctp.destport", SctpPort, dissect_diameter);
|
||||
#endif
|
||||
} else {
|
||||
Initialized=TRUE;
|
||||
}
|
||||
|
||||
/* set port for future deletes */
|
||||
UdpPort=gbl_diameterUdpPort;
|
||||
TcpPort=gbl_diameterTcpPort;
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
SctpPort=gbl_diameterSctpPort;
|
||||
#endif
|
||||
|
||||
strcpy(gbl_diameterString, "Diameter Protocol");
|
||||
|
||||
dissector_add("udp.port", gbl_diameterUdpPort, dissect_diameter);
|
||||
dissector_add("tcp.port", gbl_diameterTcpPort, dissect_diameter);
|
||||
#ifdef SCTP_DISSECTORS_ENABLED
|
||||
dissector_add("sctp.srcport", gbl_diameterSctpPort, dissect_diameter);
|
||||
dissector_add("sctp.destport", gbl_diameterSctpPort, dissect_diameter);
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/* packet-diameter.h
|
||||
* Declaration of the DIAMETER dissector.
|
||||
*
|
||||
* $Id: packet-diameter.h,v 1.1 2000/07/30 07:16:03 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Gerald Combs <gerald@zing.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
extern void dissect_diameter(const u_char *pd, int offset, frame_data *fd,
|
||||
proto_tree *tree);
|
|
@ -1,7 +1,7 @@
|
|||
/* packet-radius.c
|
||||
* Routines for RADIUS packet disassembly
|
||||
*
|
||||
* $Id: packet-radius.c,v 1.13 2000/05/31 05:07:33 guy Exp $
|
||||
* $Id: packet-radius.c,v 1.14 2000/07/30 07:16:03 guy Exp $
|
||||
*
|
||||
* Ethereal - Network traffic analyzer
|
||||
* By Johan Feyaerts
|
||||
|
@ -39,6 +39,7 @@
|
|||
#include <glib.h>
|
||||
#include "packet.h"
|
||||
#include "resolv.h"
|
||||
#include "packet-diameter.h"
|
||||
|
||||
static int proto_radius = -1;
|
||||
static int hf_radius_length = -1;
|
||||
|
@ -680,6 +681,12 @@ proto_tree
|
|||
|
||||
gchar *codestrval;
|
||||
|
||||
if (pd[offset] == 254) {
|
||||
/* We have a diameter packet */
|
||||
dissect_diameter(pd, offset, fd, tree);
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&rh,&pd[offset],sizeof(e_radiushdr));
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue