Updates from David Frascone: includes DIAMETER-over-SCTP support.
svn path=/trunk/; revision=3073
This commit is contained in:
parent
62a9621831
commit
9c9abf8c54
|
@ -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 },
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue