forked from osmocom/wireshark
From Luis Ontanon: add more filterable fields to DNS, PGM, GTP, and RADIUS.
svn path=/trunk/; revision=12835
This commit is contained in:
parent
5a89cfc00b
commit
ce604cf8f0
|
@ -67,6 +67,14 @@ static int hf_dns_count_prerequisites = -1;
|
|||
static int hf_dns_count_updates = -1;
|
||||
static int hf_dns_count_auth_rr = -1;
|
||||
static int hf_dns_count_add_rr = -1;
|
||||
static int hf_dns_qry_name = -1;
|
||||
static int hf_dns_qry_type = -1;
|
||||
static int hf_dns_qry_class = -1;
|
||||
static int hf_dns_rr_name = -1;
|
||||
static int hf_dns_rr_type = -1;
|
||||
static int hf_dns_rr_class = -1;
|
||||
static int hf_dns_rr_ttl = -1;
|
||||
static int hf_dns_rr_len = -1;
|
||||
|
||||
static gint ett_dns = -1;
|
||||
static gint ett_dns_qd = -1;
|
||||
|
@ -295,109 +303,88 @@ http://www.windows.com/windows2000/en/server/help/sag_DNS_imp_UsingWinsLookup.ht
|
|||
http://www.microsoft.com/windows2000/library/resources/reskit/samplechapters/cncf/cncf_imp_wwaw.asp
|
||||
|
||||
which discuss them to some extent. */
|
||||
|
||||
static const value_string dns_types[] = {
|
||||
{ 0, "Unused" },
|
||||
{ T_A, "A" },
|
||||
{ T_NS, "NS" },
|
||||
{ T_MD, "MD" },
|
||||
{ T_MF, "MF" },
|
||||
{ T_CNAME, "CNAME" },
|
||||
{ T_SOA, "SOA" },
|
||||
{ T_MB, "MB" },
|
||||
{ T_MG, "MG" },
|
||||
{ T_MR, "MR" },
|
||||
{ T_NULL, "NULL" },
|
||||
{ T_WKS, "WKS" },
|
||||
{ T_PTR, "PTR" },
|
||||
{ T_HINFO, "HINFO" },
|
||||
{ T_MINFO, "MINFO" },
|
||||
{ T_MX, "MX" },
|
||||
{ T_TXT, "TXT" },
|
||||
{ T_RP, "RP" }, /* RFC 1183 */
|
||||
{ T_AFSDB, "AFSDB" }, /* RFC 1183 */
|
||||
{ T_X25, "X25" }, /* RFC 1183 */
|
||||
{ T_ISDN, "ISDN" }, /* RFC 1183 */
|
||||
{ T_RT, "RT" }, /* RFC 1183 */
|
||||
{ T_NSAP, "NSAP" }, /* RFC 1706 */
|
||||
{ T_NSAP_PTR, "NSAP-PTR" }, /* RFC 1348 */
|
||||
{ T_SIG, "SIG" }, /* RFC 2535 */
|
||||
{ T_KEY, "KEY" }, /* RFC 2535 */
|
||||
{ T_PX, "PX" }, /* RFC 1664 */
|
||||
{ T_GPOS, "GPOS" }, /* RFC 1712 */
|
||||
{ T_AAAA, "AAAA" }, /* RFC 1886 */
|
||||
{ T_LOC, "LOC" }, /* RFC 1886 */
|
||||
{ T_NXT, "NXT" }, /* RFC 1876 */
|
||||
{ T_EID, "EID" },
|
||||
{ T_NIMLOC, "NIMLOC" },
|
||||
{ T_SRV, "SRV" }, /* RFC 2052 */
|
||||
{ T_ATMA, "ATMA" },
|
||||
{ T_NAPTR, "NAPTR" }, /* RFC 2168 */
|
||||
{ T_KX, "KX" }, /* RFC 2230 */
|
||||
{ T_CERT, "CERT" }, /* RFC 2538 */
|
||||
{ T_A6, "A6" }, /* RFC 2874 */
|
||||
{ T_DNAME, "DNAME" }, /* RFC 2672 */
|
||||
|
||||
{ T_OPT, "OPT" }, /* RFC 2671 */
|
||||
|
||||
{ T_DS, "DS" }, /* RFC 3658 */
|
||||
|
||||
{ T_IPSECKEY, "IPSECKEY" }, /* draft-ietf-ipseckey-rr */
|
||||
{ T_RRSIG, "RRSIG" }, /* future RFC 2535bis */
|
||||
{ T_NSEC, "NSEC" }, /* future RFC 2535bis */
|
||||
{ T_DNSKEY, "DNSKEY" }, /* future RFC 2535bis */
|
||||
|
||||
{ 100, "UINFO" },
|
||||
{ 101, "UID" },
|
||||
{ 102, "GID" },
|
||||
{ 103, "UNSPEC" },
|
||||
|
||||
{ T_TKEY, "TKEY"},
|
||||
{ T_TSIG, "TSIG"},
|
||||
|
||||
{ T_WINS, "WINS"},
|
||||
{ T_WINS_R, "WINS-R"},
|
||||
|
||||
{ 251, "IXFR"},
|
||||
{ 252, "AXFR"},
|
||||
{ 253, "MAILB"},
|
||||
{ 254, "MAILA"},
|
||||
{ 255, "ANY"},
|
||||
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static char *
|
||||
dns_type_name (guint type)
|
||||
{
|
||||
char *type_names[] = {
|
||||
"unused",
|
||||
"A",
|
||||
"NS",
|
||||
"MD",
|
||||
"MF",
|
||||
"CNAME",
|
||||
"SOA",
|
||||
"MB",
|
||||
"MG",
|
||||
"MR",
|
||||
"NULL",
|
||||
"WKS",
|
||||
"PTR",
|
||||
"HINFO",
|
||||
"MINFO",
|
||||
"MX",
|
||||
"TXT",
|
||||
"RP", /* RFC 1183 */
|
||||
"AFSDB", /* RFC 1183 */
|
||||
"X25", /* RFC 1183 */
|
||||
"ISDN", /* RFC 1183 */
|
||||
"RT", /* RFC 1183 */
|
||||
"NSAP", /* RFC 1706 */
|
||||
"NSAP-PTR", /* RFC 1348 */
|
||||
"SIG", /* RFC 2535 */
|
||||
"KEY", /* RFC 2535 */
|
||||
"PX", /* RFC 1664 */
|
||||
"GPOS", /* RFC 1712 */
|
||||
"AAAA", /* RFC 1886 */
|
||||
"LOC", /* RFC 1876 */
|
||||
"NXT", /* RFC 2535 */
|
||||
"EID",
|
||||
"NIMLOC",
|
||||
"SRV", /* RFC 2052 */
|
||||
"ATMA",
|
||||
"NAPTR", /* RFC 2168 */
|
||||
"KX", /* RFC 2230 */
|
||||
"CERT", /* RFC 2538 */
|
||||
"A6", /* RFC 2874 */
|
||||
"DNAME", /* RFC 2672 */
|
||||
NULL,
|
||||
"OPT", /* RFC 2671 */
|
||||
NULL,
|
||||
"DS", /* RFC 3658 */
|
||||
NULL,
|
||||
"IPSECKEY", /* draft-ietf-ipseckey-rr */
|
||||
"RRSIG", /* future RFC 2535bis */
|
||||
"NSEC", /* future RFC 2535bis */
|
||||
"DNSKEY" /* future RFC 2535bis */
|
||||
};
|
||||
|
||||
if (type < sizeof(type_names)/sizeof(type_names[0]))
|
||||
return type_names[type] ? type_names[type] : "unknown";
|
||||
|
||||
/* special cases */
|
||||
switch (type)
|
||||
{
|
||||
/* non standard */
|
||||
case 100:
|
||||
return "UINFO";
|
||||
case 101:
|
||||
return "UID";
|
||||
case 102:
|
||||
return "GID";
|
||||
case 103:
|
||||
return "UNSPEC";
|
||||
case T_WINS:
|
||||
return "WINS";
|
||||
case T_WINS_R:
|
||||
return "WINS-R";
|
||||
|
||||
/* meta */
|
||||
case T_TKEY:
|
||||
return "TKEY";
|
||||
case T_TSIG:
|
||||
return "TSIG";
|
||||
|
||||
/* queries */
|
||||
case 251:
|
||||
return "IXFR"; /* RFC 1995 */
|
||||
case 252:
|
||||
return "AXFR";
|
||||
case 253:
|
||||
return "MAILB";
|
||||
case 254:
|
||||
return "MAILA";
|
||||
case 255:
|
||||
return "ANY";
|
||||
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
return val_to_str(type, dns_types, "Unknown (%u)");
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
dns_long_type_name (guint type)
|
||||
dns_type_description (guint type)
|
||||
{
|
||||
char *type_names[] = {
|
||||
static const char *type_names[] = {
|
||||
"unused",
|
||||
"Host address",
|
||||
"Authoritative name server",
|
||||
|
@ -448,84 +435,117 @@ dns_long_type_name (guint type)
|
|||
"Next secured", /* future RFC 2535bis */
|
||||
"DNS public key" /* future RFC 2535bis */
|
||||
};
|
||||
static char unkbuf[7+1+2+1+4+1+1+10+1+1]; /* "Unknown RR type (%u)" */
|
||||
char *short_name;
|
||||
const char *long_name;
|
||||
static char strbuf[1024+1];
|
||||
|
||||
short_name = dns_type_name(type);
|
||||
if (short_name == NULL) {
|
||||
snprintf(strbuf, sizeof strbuf, "Unknown (%u)", type);
|
||||
return strbuf;
|
||||
}
|
||||
if (type < sizeof(type_names)/sizeof(type_names[0]))
|
||||
return type_names[type] ? type_names[type] : "unknown";
|
||||
long_name = type_names[type];
|
||||
else {
|
||||
/* special cases */
|
||||
switch (type) {
|
||||
/* meta */
|
||||
case T_TKEY:
|
||||
long_name = "Transaction Key";
|
||||
break;
|
||||
case T_TSIG:
|
||||
long_name = "Transaction Signature";
|
||||
break;
|
||||
|
||||
/* special cases */
|
||||
switch (type)
|
||||
{
|
||||
/* non standard */
|
||||
case 100:
|
||||
return "UINFO";
|
||||
case 101:
|
||||
return "UID";
|
||||
case 102:
|
||||
return "GID";
|
||||
case 103:
|
||||
return "UNSPEC";
|
||||
case T_WINS:
|
||||
return "WINS";
|
||||
case T_WINS_R:
|
||||
return "WINS-R";
|
||||
/* queries */
|
||||
case 251:
|
||||
long_name = "Request for incremental zone transfer"; /* RFC 1995 */
|
||||
break;
|
||||
case 252:
|
||||
long_name = "Request for full zone transfer";
|
||||
break;
|
||||
case 253:
|
||||
long_name = "Request for mailbox-related records";
|
||||
break;
|
||||
case 254:
|
||||
long_name = "Request for mail agent resource records";
|
||||
break;
|
||||
case 255:
|
||||
long_name = "Request for all records";
|
||||
break;
|
||||
default:
|
||||
long_name = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* meta */
|
||||
case T_TKEY:
|
||||
return "Transaction Key";
|
||||
case T_TSIG:
|
||||
return "Transaction Signature";
|
||||
|
||||
/* queries */
|
||||
case 251:
|
||||
return "Request for incremental zone transfer"; /* RFC 1995 */
|
||||
case 252:
|
||||
return "Request for full zone transfer";
|
||||
case 253:
|
||||
return "Request for mailbox-related records";
|
||||
case 254:
|
||||
return "Request for mail agent resource records";
|
||||
case 255:
|
||||
return "Request for all records";
|
||||
}
|
||||
|
||||
sprintf(unkbuf, "Unknown RR type (%u)", type);
|
||||
return unkbuf;
|
||||
if (long_name != NULL)
|
||||
snprintf(strbuf, sizeof strbuf, "%s (%s)", short_name, long_name);
|
||||
else
|
||||
snprintf(strbuf, sizeof strbuf, "%s", short_name);
|
||||
return strbuf;
|
||||
}
|
||||
|
||||
static const value_string dns_classes[] = {
|
||||
{C_IN, "IN"},
|
||||
{C_CS, "CS"},
|
||||
{C_CH, "CH"},
|
||||
{C_HS, "HS"},
|
||||
{C_NONE, "NONE"},
|
||||
{C_ANY, "ANY"},
|
||||
{C_IN | C_FLUSH, "FLUSH"},
|
||||
{0,NULL}
|
||||
};
|
||||
|
||||
char *
|
||||
dns_class_name(int class)
|
||||
{
|
||||
char *class_name;
|
||||
return val_to_str(class, dns_classes, "Unknown (%u)");
|
||||
}
|
||||
|
||||
char *
|
||||
dns_class_description(int class)
|
||||
{
|
||||
char *short_name, *long_name;
|
||||
static char strbuf[1024+1];
|
||||
|
||||
short_name = dns_class_name(class);
|
||||
if (short_name == NULL) {
|
||||
snprintf(strbuf, sizeof strbuf, "Unknown (%u)", class);
|
||||
return strbuf;
|
||||
}
|
||||
switch (class) {
|
||||
case C_IN:
|
||||
class_name = "inet";
|
||||
long_name = "Internet";
|
||||
break;
|
||||
case ( C_IN | C_FLUSH ):
|
||||
class_name = "inet (data flush)";
|
||||
long_name = "Internet (data flush)";
|
||||
break;
|
||||
case C_CS:
|
||||
class_name = "csnet";
|
||||
long_name = "CSNET";
|
||||
break;
|
||||
case C_CH:
|
||||
class_name = "chaos";
|
||||
long_name = "CHAOS";
|
||||
break;
|
||||
case C_HS:
|
||||
class_name = "hesiod";
|
||||
long_name = "Hesiod";
|
||||
break;
|
||||
case C_NONE:
|
||||
class_name = "none";
|
||||
long_name = "None";
|
||||
break;
|
||||
case C_ANY:
|
||||
class_name = "any";
|
||||
long_name = "Any";
|
||||
break;
|
||||
default:
|
||||
class_name = "unknown";
|
||||
long_name = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
return class_name;
|
||||
if (long_name != NULL)
|
||||
snprintf(strbuf, sizeof strbuf, "%s (%s)", short_name, long_name);
|
||||
else
|
||||
snprintf(strbuf, sizeof strbuf, "%s", short_name);
|
||||
return strbuf;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -775,9 +795,7 @@ dissect_dns_query(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
int name_len;
|
||||
int type;
|
||||
int class;
|
||||
char *class_name;
|
||||
char *type_name;
|
||||
char *long_type_name;
|
||||
int data_offset;
|
||||
int data_start;
|
||||
proto_tree *q_tree;
|
||||
|
@ -790,23 +808,23 @@ dissect_dns_query(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
data_offset += len;
|
||||
|
||||
type_name = dns_type_name(type);
|
||||
class_name = dns_class_name(class);
|
||||
long_type_name = dns_long_type_name(type);
|
||||
|
||||
if (cinfo != NULL)
|
||||
col_append_fstr(cinfo, COL_INFO, " %s %s", type_name, name);
|
||||
if (dns_tree != NULL) {
|
||||
tq = proto_tree_add_text(dns_tree, tvb, offset, len, "%s: type %s, class %s",
|
||||
name, type_name, class_name);
|
||||
name, type_name, dns_class_name(class));
|
||||
q_tree = proto_item_add_subtree(tq, ett_dns_qd);
|
||||
|
||||
proto_tree_add_text(q_tree, tvb, offset, name_len, "Name: %s", name);
|
||||
proto_tree_add_string(q_tree, hf_dns_qry_name, tvb, offset, name_len, name);
|
||||
offset += name_len;
|
||||
|
||||
proto_tree_add_text(q_tree, tvb, offset, 2, "Type: %s", long_type_name);
|
||||
proto_tree_add_uint_format(q_tree, hf_dns_qry_type, tvb, offset, 2, type,
|
||||
"Type: %s", dns_type_description(type));
|
||||
offset += 2;
|
||||
|
||||
proto_tree_add_text(q_tree, tvb, offset, 2, "Class: %s", class_name);
|
||||
proto_tree_add_uint_format(q_tree, hf_dns_qry_class, tvb, offset, 2, class,
|
||||
"Class: %s", dns_class_description(class));
|
||||
offset += 2;
|
||||
}
|
||||
|
||||
|
@ -814,39 +832,43 @@ dissect_dns_query(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
}
|
||||
|
||||
|
||||
proto_tree *
|
||||
static proto_tree *
|
||||
add_rr_to_tree(proto_item *trr, int rr_type, tvbuff_t *tvb, int offset,
|
||||
const char *name, int namelen, const char *type_name, const char *class_name,
|
||||
const char *name, int namelen, int type, int class,
|
||||
guint ttl, gushort data_len)
|
||||
{
|
||||
proto_tree *rr_tree;
|
||||
|
||||
rr_tree = proto_item_add_subtree(trr, rr_type);
|
||||
proto_tree_add_text(rr_tree, tvb, offset, namelen, "Name: %s", name);
|
||||
proto_tree_add_string(rr_tree, hf_dns_rr_name, tvb, offset, namelen, name);
|
||||
offset += namelen;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Type: %s", type_name);
|
||||
proto_tree_add_uint_format(rr_tree, hf_dns_rr_type, tvb, offset, 2, type,
|
||||
"Type: %s", dns_type_description(type));
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Class: %s", class_name);
|
||||
proto_tree_add_uint_format(rr_tree, hf_dns_rr_class, tvb, offset, 2, class,
|
||||
"Class: %s", dns_class_description(class));
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 4, "Time to live: %s",
|
||||
time_secs_to_str(ttl));
|
||||
proto_tree_add_uint_format(rr_tree, hf_dns_rr_ttl, tvb, offset, 4, ttl,
|
||||
"Time to live: %s", time_secs_to_str(ttl));
|
||||
offset += 4;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Data length: %u", data_len);
|
||||
proto_tree_add_uint(rr_tree, hf_dns_rr_len, tvb, offset, 2, data_len);
|
||||
return rr_tree;
|
||||
}
|
||||
|
||||
|
||||
static proto_tree *
|
||||
add_opt_rr_to_tree(proto_item *trr, int rr_type, tvbuff_t *tvb, int offset,
|
||||
const char *name, int namelen, const char *type_name, int class,
|
||||
const char *name, int namelen, int type, int class,
|
||||
guint ttl, gushort data_len)
|
||||
{
|
||||
proto_tree *rr_tree, *Z_tree;
|
||||
proto_item *Z_item = NULL;
|
||||
|
||||
rr_tree = proto_item_add_subtree(trr, rr_type);
|
||||
proto_tree_add_text(rr_tree, tvb, offset, namelen, "Name: %s", name);
|
||||
proto_tree_add_string(rr_tree, hf_dns_rr_name, tvb, offset, namelen, name);
|
||||
offset += namelen;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Type: %s", type_name);
|
||||
proto_tree_add_uint_format(rr_tree, hf_dns_rr_type, tvb, offset, 2, type,
|
||||
"Type: %s", dns_type_description(type));
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "UDP payload size: %u",
|
||||
class & 0xffff);
|
||||
|
@ -864,7 +886,7 @@ add_opt_rr_to_tree(proto_item *trr, int rr_type, tvbuff_t *tvb, int offset,
|
|||
proto_tree_add_text(Z_tree, tvb, offset, 2, "Bits 1-15: 0x%x (reserved)", (ttl >> 17) & 0xff);
|
||||
}
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Data length: %u", data_len);
|
||||
proto_tree_add_uint(rr_tree, hf_dns_rr_len, tvb, offset, 2, data_len);
|
||||
return rr_tree;
|
||||
}
|
||||
|
||||
|
@ -950,7 +972,6 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
int class;
|
||||
char *class_name;
|
||||
char *type_name;
|
||||
char *long_type_name;
|
||||
int data_offset;
|
||||
int cur_offset;
|
||||
int data_start;
|
||||
|
@ -969,7 +990,6 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
|
||||
type_name = dns_type_name(type);
|
||||
class_name = dns_class_name(class);
|
||||
long_type_name = dns_long_type_name(type);
|
||||
|
||||
ttl = tvb_get_ntohl(tvb, data_offset);
|
||||
data_offset += 4;
|
||||
|
@ -988,10 +1008,10 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
name, type_name, class_name);
|
||||
if (type != T_OPT) {
|
||||
rr_tree = add_rr_to_tree(trr, ett_dns_rr, tvb, offset, name, name_len,
|
||||
long_type_name, class_name, ttl, data_len);
|
||||
type, class, ttl, data_len);
|
||||
} else {
|
||||
rr_tree = add_opt_rr_to_tree(trr, ett_dns_rr, tvb, offset, name, name_len,
|
||||
long_type_name, class, ttl, data_len);
|
||||
type, class, ttl, data_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1280,9 +1300,8 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
if (rr_len < 2)
|
||||
goto bad_rr;
|
||||
type_covered = tvb_get_ntohs(tvb, cur_offset);
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset, 2, "Type covered: %s (%s)",
|
||||
dns_type_name(type_covered),
|
||||
dns_long_type_name(type_covered));
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset, 2, "Type covered: %s",
|
||||
dns_type_description(type_covered));
|
||||
cur_offset += 2;
|
||||
rr_len -= 2;
|
||||
|
||||
|
@ -1673,9 +1692,8 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
for (i = 0; i < 8; i++) {
|
||||
if (bits & mask) {
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset, 1,
|
||||
"RR type in bit map: %s (%s)",
|
||||
dns_type_name(rr_type),
|
||||
dns_long_type_name(rr_type));
|
||||
"RR type in bit map: %s",
|
||||
dns_type_description(rr_type));
|
||||
}
|
||||
mask >>= 1;
|
||||
rr_type++;
|
||||
|
@ -1716,9 +1734,8 @@ dissect_dns_answer(tvbuff_t *tvb, int offset, int dns_data_offset,
|
|||
for (i = 0; i < 8; i++) {
|
||||
if (bits & mask) {
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset, 1,
|
||||
"RR type in bit map: %s (%s)",
|
||||
dns_type_name(rr_type),
|
||||
dns_long_type_name(rr_type));
|
||||
"RR type in bit map: %s",
|
||||
dns_type_description(rr_type));
|
||||
}
|
||||
mask >>= 1;
|
||||
rr_type++;
|
||||
|
@ -2554,6 +2571,38 @@ proto_register_dns(void)
|
|||
{ "Transaction ID", "dns.id",
|
||||
FT_UINT16, BASE_HEX, NULL, 0x0,
|
||||
"Identification of transaction", HFILL }},
|
||||
{ &hf_dns_qry_type,
|
||||
{ "Type", "dns.qry.type",
|
||||
FT_UINT16, BASE_HEX, VALS(dns_types), 0x0,
|
||||
"Query Type", HFILL }},
|
||||
{ &hf_dns_qry_class,
|
||||
{ "Class", "dns.qry.class",
|
||||
FT_UINT16, BASE_HEX, VALS(dns_classes), 0x0,
|
||||
"Query Class", HFILL }},
|
||||
{ &hf_dns_qry_name,
|
||||
{ "Name", "dns.qry.name",
|
||||
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||
"Query Name", HFILL }},
|
||||
{ &hf_dns_rr_type,
|
||||
{ "Type", "dns.resp.type",
|
||||
FT_UINT16, BASE_HEX, VALS(dns_types), 0x0,
|
||||
"Response Type", HFILL }},
|
||||
{ &hf_dns_rr_class,
|
||||
{ "Class", "dns.resp.class",
|
||||
FT_UINT16, BASE_HEX, VALS(dns_classes), 0x0,
|
||||
"Response Class", HFILL }},
|
||||
{ &hf_dns_rr_name,
|
||||
{ "Name", "dns.resp.name",
|
||||
FT_STRING, BASE_NONE, NULL, 0x0,
|
||||
"Response Name", HFILL }},
|
||||
{ &hf_dns_rr_ttl,
|
||||
{ "Time to live", "dns.resp.ttl",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
"Response TTL", HFILL }},
|
||||
{ &hf_dns_rr_len,
|
||||
{ "Data length", "dns.resp.len",
|
||||
FT_UINT32, BASE_DEC, NULL, 0x0,
|
||||
"Response Length", HFILL }},
|
||||
{ &hf_dns_count_questions,
|
||||
{ "Questions", "dns.count.queries",
|
||||
FT_UINT16, BASE_DEC, NULL, 0x0,
|
||||
|
|
|
@ -28,13 +28,10 @@
|
|||
#define __PACKET_DNS_H__
|
||||
|
||||
char *dns_class_name(int class);
|
||||
char *dns_class_description(int class);
|
||||
|
||||
int get_dns_name(tvbuff_t *, int, int, char *, int);
|
||||
|
||||
#define MAXDNAME 1025 /* maximum domain name length */
|
||||
|
||||
proto_tree *
|
||||
add_rr_to_tree(proto_item *, int, tvbuff_t *, int, const char *,
|
||||
int, const char *, const char *, guint, gushort);
|
||||
|
||||
#endif /* packet-dns.h */
|
||||
|
|
|
@ -109,6 +109,7 @@ static int hf_gtp_node_ipv6 = -1;
|
|||
static int hf_gtp_nsapi = -1;
|
||||
static int hf_gtp_ptmsi = -1;
|
||||
static int hf_gtp_ptmsi_sig = -1;
|
||||
static int hf_gtp_qos_version = -1;
|
||||
static int hf_gtp_qos_spare1 = -1;
|
||||
static int hf_gtp_qos_delay = -1;
|
||||
static int hf_gtp_qos_mean = -1;
|
||||
|
@ -3107,7 +3108,6 @@ decode_qos_umts(tvbuff_t *tvb, int offset, proto_tree *tree, gchar* qos_str, gui
|
|||
* inconsistent and unuseful, I will check hyphen presence here and
|
||||
* will signal its presence.
|
||||
* */
|
||||
guint8 version_buffer[2];
|
||||
guint8 hyphen;
|
||||
|
||||
/* Will keep the value that will be returned
|
||||
|
@ -3140,9 +3140,8 @@ decode_qos_umts(tvbuff_t *tvb, int offset, proto_tree *tree, gchar* qos_str, gui
|
|||
te = proto_tree_add_text (tree, tvb, offset - 1, length, "%s", qos_str);
|
||||
|
||||
ext_tree_qos = proto_item_add_subtree (te, ett_gtp_qos);
|
||||
version_buffer[0] = tvb_get_guint8(tvb, offset + 1);
|
||||
version_buffer[1] = tvb_get_guint8(tvb, offset + 2);
|
||||
proto_tree_add_text (ext_tree_qos, tvb, offset + 1, 2, "Version: %c%c", version_buffer[0], version_buffer[1]);
|
||||
|
||||
proto_tree_add_item (ext_tree_qos, hf_gtp_qos_version, tvb, offset + 1, 2, FALSE);
|
||||
|
||||
/* Hyphen handling */
|
||||
hyphen = tvb_get_guint8(tvb, offset + 3);
|
||||
|
@ -4443,6 +4442,7 @@ proto_register_gtp(void)
|
|||
{ &hf_gtp_node_ipv6, { "Node address IPv6", "gtp.node_ipv6", FT_IPv6, BASE_HEX, NULL, 0, "Recommended node address IPv6", HFILL }},
|
||||
{ &hf_gtp_npdu_number, { "N-PDU Number", "gtp.npdu_number", FT_UINT8, BASE_HEX, NULL, 0, "N-PDU Number", HFILL }},
|
||||
{ &hf_gtp_nsapi, { "NSAPI", "gtp.nsapi", FT_UINT8, BASE_DEC, NULL, 0, "Network layer Service Access Point Identifier", HFILL }},
|
||||
{ &hf_gtp_qos_version, { "Version", "gtp.qos_version", FT_STRING, BASE_DEC, NULL, 0, "Version of the QoS Profile", HFILL }},
|
||||
{ &hf_gtp_qos_spare1, { "Spare", "gtp.qos_spare1", FT_UINT8, BASE_DEC, NULL, GTP_EXT_QOS_SPARE1_MASK, "Spare (shall be sent as '00' )", HFILL }},
|
||||
{ &hf_gtp_qos_delay, { "QoS delay", "gtp.qos_delay", FT_UINT8, BASE_DEC, VALS(qos_delay_type), GTP_EXT_QOS_DELAY_MASK, "Quality of Service Delay Class", HFILL }},
|
||||
{ &hf_gtp_qos_reliability, { "QoS reliability", "gtp.qos_reliabilty", FT_UINT8, BASE_DEC, VALS(qos_reliability_type), GTP_EXT_QOS_RELIABILITY_MASK, "Quality of Service Reliability Class", HFILL }},
|
||||
|
|
|
@ -245,6 +245,28 @@ nbns_type_name (int type)
|
|||
|
||||
#define NBNAME_BUF_LEN 128
|
||||
|
||||
static proto_tree *
|
||||
add_rr_to_tree(proto_item *trr, int rr_type, tvbuff_t *tvb, int offset,
|
||||
const char *name, int namelen,
|
||||
const char *type_name, const char *class_description,
|
||||
guint ttl, gushort data_len)
|
||||
{
|
||||
proto_tree *rr_tree;
|
||||
|
||||
rr_tree = proto_item_add_subtree(trr, rr_type);
|
||||
proto_tree_add_text(rr_tree, tvb, offset+1, namelen-1, "Name: %s", name);
|
||||
offset += namelen;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Type: %s", type_name);
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Class: %s", class_description);
|
||||
offset += 2;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 4, "Time to live: %s",
|
||||
time_secs_to_str(ttl));
|
||||
offset += 4;
|
||||
proto_tree_add_text(rr_tree, tvb, offset, 2, "Data length: %u", data_len);
|
||||
return rr_tree;
|
||||
}
|
||||
|
||||
static int
|
||||
get_nbns_name(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
||||
char *name_ret, int *name_type_ret)
|
||||
|
@ -386,7 +408,6 @@ dissect_nbns_query(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
int name_type;
|
||||
int type;
|
||||
int class;
|
||||
char *class_name;
|
||||
char *type_name;
|
||||
int data_offset;
|
||||
int data_start;
|
||||
|
@ -400,13 +421,13 @@ dissect_nbns_query(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
data_offset += len;
|
||||
|
||||
type_name = nbns_type_name(type);
|
||||
class_name = dns_class_name(class);
|
||||
|
||||
if (cinfo != NULL)
|
||||
col_append_fstr(cinfo, COL_INFO, " %s %s", type_name, name);
|
||||
if (nbns_tree != NULL) {
|
||||
tq = proto_tree_add_text(nbns_tree, tvb, offset, len,
|
||||
"%s: type %s, class %s", name, type_name, class_name);
|
||||
"%s: type %s, class %s", name, type_name,
|
||||
dns_class_name(class));
|
||||
q_tree = proto_item_add_subtree(tq, ett_nbns_qd);
|
||||
|
||||
add_name_and_type(q_tree, tvb, offset, name_len, "Name", name,
|
||||
|
@ -416,7 +437,8 @@ dissect_nbns_query(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
proto_tree_add_text(q_tree, tvb, offset, 2, "Type: %s", type_name);
|
||||
offset += 2;
|
||||
|
||||
proto_tree_add_text(q_tree, tvb, offset, 2, "Class: %s", class_name);
|
||||
proto_tree_add_text(q_tree, tvb, offset, 2, "Class: %s",
|
||||
dns_class_description(class));
|
||||
offset += 2;
|
||||
}
|
||||
|
||||
|
@ -631,7 +653,8 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
strcat(name, netbios_name_type_descr(name_type));
|
||||
strcat(name, ")");
|
||||
rr_tree = add_rr_to_tree(trr, ett_nbns_rr, tvb, offset, name,
|
||||
name_len, type_name, class_name, ttl, data_len);
|
||||
name_len, type_name, dns_class_description(class),
|
||||
ttl, data_len);
|
||||
while (data_len > 0) {
|
||||
if (opcode == OPCODE_WACK) {
|
||||
/* WACK response. This doesn't contain the
|
||||
|
@ -683,7 +706,8 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
"%s: type %s, class %s",
|
||||
name, type_name, class_name);
|
||||
rr_tree = add_rr_to_tree(trr, ett_nbns_rr, tvb, offset, name,
|
||||
name_len, type_name, class_name, ttl, data_len);
|
||||
name_len, type_name, dns_class_description(class),
|
||||
ttl, data_len);
|
||||
if (data_len < 1) {
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset,
|
||||
data_len, "(incomplete entry)");
|
||||
|
@ -927,7 +951,8 @@ dissect_nbns_answer(tvbuff_t *tvb, int offset, int nbns_data_offset,
|
|||
"%s: type %s, class %s",
|
||||
name, type_name, class_name);
|
||||
rr_tree = add_rr_to_tree(trr, ett_nbns_rr, tvb, offset, name,
|
||||
name_len, type_name, class_name, ttl, data_len);
|
||||
name_len, type_name, dns_class_description(class),
|
||||
ttl, data_len);
|
||||
proto_tree_add_text(rr_tree, tvb, cur_offset, data_len, "Data");
|
||||
cur_offset += data_len;
|
||||
break;
|
||||
|
|
|
@ -373,6 +373,7 @@ static int ett_pgm_opts_fragment = -1;
|
|||
|
||||
static int hf_pgm_main_sport = -1;
|
||||
static int hf_pgm_main_dport = -1;
|
||||
static int hf_pgm_port = -1;
|
||||
static int hf_pgm_main_type = -1;
|
||||
static int hf_pgm_main_opts = -1;
|
||||
static int hf_pgm_main_opts_opt = -1;
|
||||
|
@ -1316,8 +1317,13 @@ dissect_pgm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|||
pgm_tree = proto_item_add_subtree(ti, ett_pgm);
|
||||
proto_tree_add_uint(pgm_tree, hf_pgm_main_sport, tvb, offset, 2,
|
||||
pgmhdr.sport);
|
||||
proto_tree_add_uint_hidden(pgm_tree, hf_pgm_port, tvb, offset, 2,
|
||||
pgmhdr.sport);
|
||||
proto_tree_add_uint(pgm_tree, hf_pgm_main_dport, tvb, offset+2,
|
||||
2, pgmhdr.dport);
|
||||
proto_tree_add_uint_hidden(pgm_tree, hf_pgm_port, tvb, offset+2,
|
||||
2, pgmhdr.dport);
|
||||
|
||||
proto_tree_add_uint(pgm_tree, hf_pgm_main_type, tvb,
|
||||
offset+4, 1, pgmhdr.type);
|
||||
|
||||
|
@ -1600,6 +1606,9 @@ proto_register_pgm(void)
|
|||
{ &hf_pgm_main_dport,
|
||||
{ "Destination Port", "pgm.hdr.dport", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL }},
|
||||
{ &hf_pgm_port,
|
||||
{ "Port", "pgm.port", FT_UINT16, BASE_DEC,
|
||||
NULL, 0x0, "", HFILL }},
|
||||
{ &hf_pgm_main_type,
|
||||
{ "Type", "pgm.hdr.type", FT_UINT8, BASE_HEX,
|
||||
VALS(type_vals), 0x0, "", HFILL }},
|
||||
|
|
|
@ -79,6 +79,7 @@ static int hf_radius_serviceType = -1;
|
|||
static int hf_radius_callingStationId = -1;
|
||||
static int hf_radius_calledStationId = -1;
|
||||
static int hf_radius_framedAddress = -1;
|
||||
static int hf_radius_reply_message = -1;
|
||||
static int hf_radius_class = -1;
|
||||
static int hf_radius_nasIp = -1;
|
||||
static int hf_radius_acctStatusType = -1;
|
||||
|
@ -582,7 +583,7 @@ static const radius_attr_info radius_attrib[] =
|
|||
{15, RADIUS_INTEGER4, "Login Service", radius_login_service_vals, NULL},
|
||||
{16, RADIUS_INTEGER4, "Login TCP Port", NULL, NULL},
|
||||
{17, RADIUS_UNKNOWN, "Unassigned", NULL, NULL},
|
||||
{18, RADIUS_STRING, "Reply Message", NULL, NULL},
|
||||
{18, RADIUS_STRING, "Reply Message", NULL, &hf_radius_reply_message},
|
||||
{19, RADIUS_STRING, "Callback Number", NULL, NULL},
|
||||
{20, RADIUS_STRING, "Callback Id", NULL, NULL},
|
||||
{21, RADIUS_UNKNOWN, "Unassigned", NULL, NULL},
|
||||
|
@ -4755,6 +4756,11 @@ proto_register_radius(void)
|
|||
FT_STRING, BASE_NONE, NULL, 0,
|
||||
"PacketCable Terminal_Display_Info Calling_Name", HFILL }
|
||||
},
|
||||
{ &hf_radius_reply_message,
|
||||
{ "Reply-Message","radius.reply_msg",
|
||||
FT_STRING, BASE_NONE, NULL, 0,
|
||||
"Radius Reply Message", HFILL }
|
||||
},
|
||||
{ &hf_packetcable_terminal_display_info_message_waiting,
|
||||
{ "Message_Waiting","radius.vendor.pkt.tdi.mw",
|
||||
FT_STRING, BASE_NONE, NULL, 0,
|
||||
|
|
Loading…
Reference in New Issue