Add a preferense wether console output should be made in case of unknown command codes, avps or flags etc

Default is off.

svn path=/trunk/; revision=10688
This commit is contained in:
Anders Broman 2004-04-25 10:40:42 +00:00
parent f2ecb66547
commit b5f6c7a820
1 changed files with 35 additions and 16 deletions

View File

@ -1,7 +1,7 @@
/* packet-diameter.c
* Routines for Diameter packet disassembly
*
* $Id: packet-diameter.c,v 1.67 2004/04/17 03:02:01 guy Exp $
* $Id: packet-diameter.c,v 1.68 2004/04/25 10:40:42 etxrab Exp $
*
* Copyright (c) 2001 by David Frascone <dave@frascone.com>
*
@ -230,6 +230,9 @@ static gboolean gbl_diameter_desegment = TRUE;
/* Allow zero as a valid application ID */
static gboolean allow_zero_as_app_id = FALSE;
/* Supress console output at unknown AVP:s,Flags etc */
static gboolean suppress_console_output = TRUE;
#define DICT_FN "diameter/dictionary.xml"
static gchar *gbl_diameterDictionary;
@ -863,10 +866,12 @@ diameter_command_to_str(guint32 commandCode, guint32 vendorId)
}
}
g_warning("Diameter: Unable to find name for command code 0x%08x, Vendor \"%u\"!",
if ( suppress_console_output == FALSE )
g_warning("Diameter: Unable to find name for command code 0x%08x, Vendor \"%u\"!",
commandCode, vendorId);
snprintf(buffer, sizeof(buffer),
"Cmd-0x%08x", commandCode);
return buffer;
}/*diameter_command_to_str */
@ -917,7 +922,8 @@ diameter_avp_get_type(guint32 avpCode, guint32 vendorId){
}
/* If we don't find it, assume it's data */
g_warning("Diameter: Unable to find type for avpCode %u, Vendor %u!", avpCode,
if ( suppress_console_output == FALSE )
g_warning("Diameter: Unable to find type for avpCode %u, Vendor %u!", avpCode,
vendorId);
return DIAMETER_OCTET_STRING;
} /* diameter_avp_get_type */
@ -951,8 +957,8 @@ diameter_avp_get_name(guint32 avpCode, guint32 vendorId)
}
}
}
g_warning("Diameter: Unable to find name for AVP 0x%08x, Vendor %u!",
if ( suppress_console_output == FALSE )
g_warning("Diameter: Unable to find name for AVP 0x%08x, Vendor %u!",
avpCode, vendorId);
/* If we don't find it, build a name string */
@ -1112,17 +1118,19 @@ dissect_diameter_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* Short packet. Should have at LEAST one avp */
if (pktLength < MIN_DIAMETER_SIZE) {
g_warning("Diameter: Packet too short: %u bytes less than min size (%lu bytes))",
if ( suppress_console_output == FALSE )
g_warning("Diameter: Packet too short: %u bytes less than min size (%lu bytes))",
pktLength, (unsigned long)MIN_DIAMETER_SIZE);
BadPacket = TRUE;
BadPacket = TRUE;
}
/* And, check our reserved flags/version */
if ((flags & DIAM_FLAGS_RESERVED) ||
(version != 1)) {
g_warning("Diameter: Bad packet: Bad Flags(0x%x) or Version(%u)",
if ( suppress_console_output == FALSE )
g_warning("Diameter: Bad packet: Bad Flags(0x%x) or Version(%u)",
flags, version);
BadPacket = TRUE;
BadPacket = TRUE;
}
if (check_col(pinfo->cinfo, COL_INFO)) {
@ -1361,9 +1369,10 @@ static void dissect_avps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *avp_tree
/* Check for short packet */
if (packetLength < (long)MIN_AVP_SIZE) {
g_warning("Diameter: AVP Payload too short: %d bytes less than min size (%ld bytes))",
if ( suppress_console_output == FALSE )
g_warning("Diameter: AVP Payload too short: %d bytes less than min size (%ld bytes))",
packetLength, (long)MIN_AVP_SIZE);
BadPacket = TRUE;
BadPacket = TRUE;
/* Don't even bother trying to parse a short packet. */
return;
}
@ -1417,16 +1426,18 @@ static void dissect_avps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *avp_tree
/* Check for bad length */
if (avpLength < MIN_AVP_SIZE ||
((long)avpLength > packetLength)) {
g_warning("Diameter: AVP payload size invalid: avp_length: %ld bytes, "
if ( suppress_console_output == FALSE )
g_warning("Diameter: AVP payload size invalid: avp_length: %ld bytes, "
"min: %ld bytes, packetLen: %d",
(long)avpLength, (long)MIN_AVP_SIZE,
packetLength);
BadPacket = TRUE;
BadPacket = TRUE;
}
/* Check for bad flags */
if (flags & AVP_FLAGS_RESERVED) {
g_warning("Diameter: Invalid AVP: Reserved bit set. flags = 0x%x,"
if ( suppress_console_output == FALSE )
g_warning("Diameter: Invalid AVP: Reserved bit set. flags = 0x%x,"
" resFl=0x%x",
flags, AVP_FLAGS_RESERVED);
/* For now, don't set bad packet, since I'm accidentally setting a wrong bit
@ -1446,9 +1457,10 @@ static void dissect_avps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *avp_tree
/* Check for out of bounds */
if (packetLength < 0) {
g_warning("Diameter: Bad AVP: Bad new length (%d bytes) ",
if ( suppress_console_output == FALSE )
g_warning("Diameter: Bad AVP: Bad new length (%d bytes) ",
packetLength);
BadPacket = TRUE;
BadPacket = TRUE;
}
/* Make avp Name & type */
@ -1941,6 +1953,13 @@ proto_register_diameter(void)
&allow_zero_as_app_id);
/* Register some preferences we no longer support, so we can report
them as obsolete rather than just illegal. */
/* Supress console output or not */
prefs_register_bool_preference(diameter_module, "suppress_console_output",
"Suppress console output for unknown AVP:s Flags etc.",
"If console output for errors should be suppressed or not",
&suppress_console_output);
/* Register some preferences we no longer support, so we can report
them as obsolete rather than just illegal. */
prefs_register_obsolete_preference(diameter_module, "udp.port");
prefs_register_obsolete_preference(diameter_module, "command_in_header");
} /* proto_register_diameter */