Updates from David Frascone: includes DIAMETER-over-SCTP support.

svn path=/trunk/; revision=3073
This commit is contained in:
Guy Harris 2001-02-23 19:26:26 +00:00
parent 62a9621831
commit 9c9abf8c54
2 changed files with 66 additions and 55 deletions

View File

@ -3,7 +3,7 @@
* WARNING: This file was automatically generated by dict2h.pl. Modifications
* will be erased by next invocation of dictionary parser.
*
* Generated: Fri Feb 9 14:03:07 2001
* Generated: Fri Feb 23 13:04:15 2001
*/
#ifndef _PACKET_DIAMETER_DEFS_H
@ -117,9 +117,9 @@
#define DIAMETER_ATT_PROXY_ADDRESS 289
#define DIAMETER_ATT_PROXY_INFO 284
#define DIAMETER_ATT_PROXY_STATE 33
#define DIAMETER_ATT_REDIRECT_HOST 292
#define DIAMETER_ATT_REDIRECT_HOST_ADDRESS 278
#define DIAMETER_ATT_REDIRECT_HOST_PORT 277
#define DIAMETER_ATT_REDIRECT_HOST 292
#define DIAMETER_ATT_RESULT_CODE 268
#define DIAMETER_ATT_ROUTE_RECORD 282
#define DIAMETER_ATT_ROUTING_REALM 283
@ -141,24 +141,24 @@
#define DIAMETER_ATT_ACCOUNTING_SESSION_TIME 46
#define DIAMETER_ATT_MIP_REG_REQUEST 320
#define DIAMETER_ATT_MIP_REG_REPLY 321
#define DIAMETER_ATT_MIP_MN_AAA_SPI 341
#define DIAMETER_ATT_MIP_AUTH_INPUT_DATA_LENGTH 338
#define DIAMETER_ATT_MIP_AUTHENTICATOR_LENGTH 339
#define DIAMETER_ATT_MIP_AUTHENTICATOR_OFFSET 340
#define DIAMETER_ATT_MIP_MN_AAA_AUTH 322
#define DIAMETER_ATT_MIP_MOBILE_NODE_ADDRESS 333
#define DIAMETER_ATT_MIP_HOME_AGENT_ADDRESS 334
#define DIAMETER_ATT_MIP_PREVIOUS_FA_NAI 335
#define DIAMETER_ATT_MIP_PREVIOUS_FA_ADDR 336
#define DIAMETER_ATT_MIP_MN_AAA_SPI 341
#define DIAMETER_ATT_MIP_AUTH_INPUT_DATA_LENGTH 338
#define DIAMETER_ATT_MIP_AUTHENTICATOR_LENGTH 339
#define DIAMETER_ATT_MIP_AUTHENTICATOR_OFFSET 340
#define DIAMETER_ATT_MIP_FEATURE_VECTOR 337
#define DIAMETER_ATT_MIP_PEER_SPI 342
#define DIAMETER_ATT_MIP_SESSION_KEY 343
#define DIAMETER_ATT_MIP_MN_TO_FA_KEY 325
#define DIAMETER_ATT_MIP_MN_TO_HA_KEY 331
#define DIAMETER_ATT_MIP_FA_TO_MN_KEY 326
#define DIAMETER_ATT_MIP_FA_TO_HA_KEY 328
#define DIAMETER_ATT_MIP_HA_TO_FA_KEY 329
#define DIAMETER_ATT_MIP_HA_TO_MN_KEY 332
#define DIAMETER_ATT_MIP_PEER_SPI 999
#define DIAMETER_ATT_MIP_SESSION_KEY 999
#define DIAMETER_ATT_MIP_FA_MN_PREFERRED_SPI 324
#define DIAMETER_ATT_MIP_FA_HA_PREFERRED_SPI 327
#define DIAMETER_ATT_FILTER_RULE 400
@ -208,7 +208,7 @@
#define DIAMETER_ATT_SOURCE_SUBNET 1039
#define DIAMETER_ATT_DESTINATION_SUBNET 1040
#define DIAMETER_ATT_MAX_QOS_RATE 1041
#define DIAMETER_ATT_EXAMPLE_AVP 99999
#define DIAMETER_ATT_EXAMPLE_AVP 999999
/* Attribute to String table */
@ -321,9 +321,9 @@ static value_string diameter_attrib_type_vals[] = {
{DIAMETER_ATT_PROXY_ADDRESS, "Proxy-Address"},
{DIAMETER_ATT_PROXY_INFO, "Proxy-Info"},
{DIAMETER_ATT_PROXY_STATE, "Proxy-State"},
{DIAMETER_ATT_REDIRECT_HOST, "Redirect-Host"},
{DIAMETER_ATT_REDIRECT_HOST_ADDRESS, "Redirect-Host-Address"},
{DIAMETER_ATT_REDIRECT_HOST_PORT, "Redirect-Host-Port"},
{DIAMETER_ATT_REDIRECT_HOST, "Redirect-Host"},
{DIAMETER_ATT_RESULT_CODE, "Result-Code"},
{DIAMETER_ATT_ROUTE_RECORD, "Route-Record"},
{DIAMETER_ATT_ROUTING_REALM, "Routing-Realm"},
@ -345,24 +345,24 @@ static value_string diameter_attrib_type_vals[] = {
{DIAMETER_ATT_ACCOUNTING_SESSION_TIME, "Accounting-Session-Time"},
{DIAMETER_ATT_MIP_REG_REQUEST, "MIP-Reg-Request"},
{DIAMETER_ATT_MIP_REG_REPLY, "MIP-Reg-Reply"},
{DIAMETER_ATT_MIP_MN_AAA_SPI, "MIP-MN-AAA-SPI"},
{DIAMETER_ATT_MIP_AUTH_INPUT_DATA_LENGTH, "MIP-Auth-Input-Data-Length"},
{DIAMETER_ATT_MIP_AUTHENTICATOR_LENGTH, "MIP-Authenticator-Length"},
{DIAMETER_ATT_MIP_AUTHENTICATOR_OFFSET, "MIP-Authenticator-Offset"},
{DIAMETER_ATT_MIP_MN_AAA_AUTH, "MIP-MN-AAA-Auth"},
{DIAMETER_ATT_MIP_MOBILE_NODE_ADDRESS, "MIP-Mobile-Node-Address"},
{DIAMETER_ATT_MIP_HOME_AGENT_ADDRESS, "MIP-Home-Agent-Address"},
{DIAMETER_ATT_MIP_PREVIOUS_FA_NAI, "MIP-Previous-FA-NAI"},
{DIAMETER_ATT_MIP_PREVIOUS_FA_ADDR, "MIP-Previous-FA-Addr"},
{DIAMETER_ATT_MIP_MN_AAA_SPI, "MIP-MN-AAA-SPI"},
{DIAMETER_ATT_MIP_AUTH_INPUT_DATA_LENGTH, "MIP-Auth-Input-Data-Length"},
{DIAMETER_ATT_MIP_AUTHENTICATOR_LENGTH, "MIP-Authenticator-Length"},
{DIAMETER_ATT_MIP_AUTHENTICATOR_OFFSET, "MIP-Authenticator-Offset"},
{DIAMETER_ATT_MIP_FEATURE_VECTOR, "MIP-Feature-Vector"},
{DIAMETER_ATT_MIP_PEER_SPI, "MIP-Peer-SPI"},
{DIAMETER_ATT_MIP_SESSION_KEY, "MIP-Session-Key"},
{DIAMETER_ATT_MIP_MN_TO_FA_KEY, "MIP-MN-to-FA-Key"},
{DIAMETER_ATT_MIP_MN_TO_HA_KEY, "MIP-MN-to-HA-Key"},
{DIAMETER_ATT_MIP_FA_TO_MN_KEY, "MIP-FA-to-MN-Key"},
{DIAMETER_ATT_MIP_FA_TO_HA_KEY, "MIP-FA-to-HA-Key"},
{DIAMETER_ATT_MIP_HA_TO_FA_KEY, "MIP-HA-to-FA-Key"},
{DIAMETER_ATT_MIP_HA_TO_MN_KEY, "MIP-HA-to-MN-Key"},
{DIAMETER_ATT_MIP_PEER_SPI, "MIP-Peer-SPI"},
{DIAMETER_ATT_MIP_SESSION_KEY, "MIP-Session-Key"},
{DIAMETER_ATT_MIP_FA_MN_PREFERRED_SPI, "MIP-FA-MN-Preferred-SPI"},
{DIAMETER_ATT_MIP_FA_HA_PREFERRED_SPI, "MIP-FA-HA-Preferred-SPI"},
{DIAMETER_ATT_FILTER_RULE, "Filter-Rule"},
@ -526,16 +526,16 @@ static value_value_pair diameter_printinfo[] = {
{ DIAMETER_ATT_PLAINTEXT_DATA_LENGTH, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_PROXY_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_PROXY_INFO, DIAMETER_DATA },
{ DIAMETER_ATT_PROXY_STATE, DIAMETER_DATA },
{ DIAMETER_ATT_REDIRECT_HOST, DIAMETER_DATA },
{ DIAMETER_ATT_PROXY_STATE, DIAMETER_GROUPED },
{ DIAMETER_ATT_REDIRECT_HOST_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_REDIRECT_HOST_PORT, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_REDIRECT_HOST, DIAMETER_GROUPED },
{ DIAMETER_ATT_RESULT_CODE, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_ROUTE_RECORD, DIAMETER_STRING },
{ DIAMETER_ATT_ROUTING_REALM, DIAMETER_STRING },
{ DIAMETER_ATT_SESSION_ID, DIAMETER_DATA },
{ DIAMETER_ATT_SESSION_TIMEOUT, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_TIMESTAMP, DIAMETER_TIME },
{ DIAMETER_ATT_TIMESTAMP, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_USER_NAME, DIAMETER_STRING },
{ DIAMETER_ATT_VENDOR_ID, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_ACCOUNTING_AUTHENTICATION_TYPE, DIAMETER_INTEGER32 },
@ -551,23 +551,24 @@ static value_value_pair diameter_printinfo[] = {
{ DIAMETER_ATT_ACCOUNTING_SESSION_TIME, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_REG_REQUEST, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_REG_REPLY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_MOBILE_NODE_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_HOME_AGENT_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_PREVIOUS_FA_NAI, DIAMETER_STRING },
{ DIAMETER_ATT_MIP_PREVIOUS_FA_ADDR, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_MN_AAA_SPI, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_AUTH_INPUT_DATA_LENGTH, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_AUTHENTICATOR_LENGTH, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_AUTHENTICATOR_OFFSET, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_MN_AAA_AUTH, DIAMETER_GROUPED },
{ DIAMETER_ATT_MIP_MOBILE_NODE_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_HOME_AGENT_ADDRESS, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_PREVIOUS_FA_NAI, DIAMETER_STRING },
{ DIAMETER_ATT_MIP_PREVIOUS_FA_ADDR, DIAMETER_ADDRESS },
{ DIAMETER_ATT_MIP_FEATURE_VECTOR, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_MN_TO_FA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_MN_TO_HA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_FA_TO_MN_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_FA_TO_HA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_HA_TO_FA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_HA_TO_MN_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_PEER_SPI, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_SESSION_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_MN_TO_FA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_MN_TO_HA_KEY, DIAMETER_DATA },
{ DIAMETER_ATT_MIP_FA_TO_MN_KEY, DIAMETER_GROUPED },
{ DIAMETER_ATT_MIP_FA_TO_HA_KEY, DIAMETER_GROUPED },
{ DIAMETER_ATT_MIP_HA_TO_FA_KEY, DIAMETER_GROUPED },
{ DIAMETER_ATT_MIP_HA_TO_MN_KEY, DIAMETER_GROUPED },
{ DIAMETER_ATT_MIP_FA_MN_PREFERRED_SPI, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_MIP_FA_HA_PREFERRED_SPI, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_FILTER_RULE, DIAMETER_STRING },
@ -597,7 +598,7 @@ static value_value_pair diameter_printinfo[] = {
{ DIAMETER_ATT_VOIP_CHALLENGE, DIAMETER_DATA },
{ DIAMETER_ATT_VOIP_RESPONSE, DIAMETER_DATA },
{ DIAMETER_ATT_VOIP_SESSION_LENGTH, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_SUN_PING_TIMESTAMP, DIAMETER_TIME },
{ DIAMETER_ATT_SUN_PING_TIMESTAMP, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_COMMENT, DIAMETER_STRING },
{ DIAMETER_ATT_XVALUE, DIAMETER_INTEGER32 },
{ DIAMETER_ATT_XSTRING, DIAMETER_STRING },

View File

@ -1,7 +1,7 @@
/* packet-diameter.c
* Routines for DIAMETER packet disassembly
*
* $Id: packet-diameter.c,v 1.19 2001/02/20 08:10:14 guy Exp $
* $Id: packet-diameter.c,v 1.20 2001/02/23 19:26:26 guy Exp $
*
* Copyright (c) 2001 by David Frascone <dave@frascone.com>
*
@ -71,12 +71,8 @@ typedef enum {
#define NTP_TIME_DIFF (2208988800UL)
#undef SCTP_DISSECTORS_ENABLED
#define TCP_PORT_DIAMETER 1812
#ifdef SCTP_DISSECTORS_ENABLED
#define SCTP_PORT_DIAMETER 1812
#endif
static int proto_diameter = -1;
static int hf_diameter_length = -1;
@ -112,9 +108,7 @@ static gint ett_diameter_avpinfo = -1;
static char gbl_diameterString[200];
static int gbl_diameterTcpPort=TCP_PORT_DIAMETER;
#ifdef SCTP_DISSECTORS_ENABLED
static int gbl_diameterSctpPort=SCTP_PORT_DIAMETER;
#endif
typedef struct _e_diameterhdr {
guint8 reserved;
@ -153,6 +147,7 @@ typedef struct _e_avphdr {
static gchar *rd_value_to_str(e_avphdr *avph,const u_char *input, int length);
static void dissect_avps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
static guint32 match_numval(guint32 val, const value_value_pair *vs);
static gchar *DetermineMessageType(char flagsVer);
/* Code to actually dissect the packets */
@ -208,8 +203,9 @@ static void dissect_diameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
if (check_col(pinfo->fd, COL_INFO)) {
col_add_fstr(pinfo->fd, COL_INFO,
"%s%s(%d) vendor=%d (id=%d) EIR=%d%d%d",
"%s%s: %s(%d) vendor=%d (id=%d) EIR=%d%d%d",
(BadPacket)?"***** Bad Packet!: ":"",
DetermineMessageType(dh.flagsVer),
codestrval, dh.commandCode, dh.vendorId,
dh.identifier,
(dh.flagsVer & DIAM_FLAGS_E)?1:0,
@ -235,11 +231,12 @@ static void dissect_diameter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree
hf_diameter_flags,
tvb, offset, 1,
dh.flagsVer,
"Packet flags: 0x%02x E:%d I:%d R:%d",
"Packet flags: 0x%02x E:%d I:%d R:%d (%s)",
(dh.flagsVer&0xf8)>>3,
(dh.flagsVer & DIAM_FLAGS_E)?1:0,
(dh.flagsVer & DIAM_FLAGS_I)?1:0,
(dh.flagsVer & DIAM_FLAGS_R)?1:0);
(dh.flagsVer & DIAM_FLAGS_R)?1:0,
DetermineMessageType(dh.flagsVer));
/* Version */
proto_tree_add_uint(diameter_tree,
@ -699,30 +696,49 @@ static gchar *rd_value_to_str(e_avphdr *avph, const u_char *input, int length)
return buffer;
} /* rd value to str */
static gchar *
DetermineMessageType(char flagsVer)
{
/* Get rid of version */
flagsVer = flagsVer >> 3;
/* Mask out reserved bits */
flagsVer = flagsVer & 0x7;
switch (flagsVer) {
case 0x0: /* Indication */
return "Indication";
case 0x4: /* Request */
return "Request";
case 0x1: /* Answer */
return "Answer";
case 0x6: /* Query */
return "Query";
case 0x3: /* Reply */
return "Reply";
default:
return "Illegal Command Type";
}
} /* DetermineMessageType */
void
proto_reg_handoff_diameter(void)
{
static int Initialized=FALSE;
static int TcpPort=0;
#ifdef SCTP_DISSECTORS_ENABLED
static int SctpPort=0;
#endif
if (Initialized) {
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
dissector_delete("sctp.port", SctpPort, dissect_diameter);
} else {
Initialized=TRUE;
}
/* set port for future deletes */
TcpPort=gbl_diameterTcpPort;
#ifdef SCTP_DISSECTORS_ENABLED
SctpPort=gbl_diameterSctpPort;
#endif
strcpy(gbl_diameterString, "Diameter Protocol");
@ -730,12 +746,8 @@ proto_reg_handoff_diameter(void)
gbl_diameterTcpPort); */
dissector_add("tcp.port", gbl_diameterTcpPort, dissect_diameter,
proto_diameter);
#ifdef SCTP_DISSECTORS_ENABLED
dissector_add("sctp.srcport", gbl_diameterSctpPort,
dissector_add("sctp.port", gbl_diameterSctpPort,
dissect_diameter, proto_diameter);
dissector_add("sctp.destport", gbl_diameterSctpPort,
dissect_diameter, proto_diameter);
#endif
}
/* registration with the filtering engine */
@ -835,11 +847,9 @@ proto_register_diameter(void)
"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
}