Ethereal-dev: [Ethereal-dev] DNS ipseckey RR support
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: David Fort <david.fort@xxxxxxxx>
Date: Tue, 28 Sep 2004 12:00:17 +0200
This little patch adds the decoding for ipseckey DNS RR defined in
'draft-ietf-ipseckey-rr' which can be tested with that BIND patch:
ftp://idsa.irisa.fr/local/idsa/code/patch-bind/bind+ipseckey_20040921.patch
-- Fort David, Projet IDsA IRISA-INRIA, Campus de Beaulieu, 35042 Rennes cedex, France Tél: +33 (0) 2 99 84 71 33
Index: epan/dissectors/packet-dns.c =================================================================== --- epan/dissectors/packet-dns.c (revision 12119) +++ epan/dissectors/packet-dns.c (working copy) @@ -141,6 +141,7 @@ #define T_RRSIG 46 /* future RFC 2535bis */ #define T_NSEC 47 /* future RFC 2535bis */ #define T_DNSKEY 48 /* future RFC 2535bis */ +#define T_IPSECKEY 49 /* still TBD draft-ietf-ipseckey-rr */ #define T_TKEY 249 /* Transaction Key (RFC 2930) */ #define T_TSIG 250 /* Transaction Signature (RFC 2845) */ #define T_WINS 65281 /* Microsoft's WINS RR */ @@ -339,7 +340,8 @@ NULL, "RRSIG", /* future RFC 2535bis */ "NSEC", /* future RFC 2535bis */ - "DNSKEY" /* future RFC 2535bis */ + "DNSKEY", /* future RFC 2535bis */ + "IPSECKEY" /* draft-ietf-ipseckey-rr */ }; if (type < sizeof(type_names)/sizeof(type_names[0])) @@ -438,7 +440,8 @@ NULL, "RR signature", /* future RFC 2535bis */ "Next secured", /* future RFC 2535bis */ - "DNS public key" /* future RFC 2535bis */ + "DNS public key", /* future RFC 2535bis */ + "key to use with IPSEC" /* draft-ietf-ipseckey-rr */ }; static char unkbuf[7+1+2+1+4+1+1+10+1+1]; /* "Unknown RR type (%u)" */ @@ -1419,7 +1422,75 @@ } } break; + case T_IPSECKEY: + { + int rr_len = data_len; + guint8 gw_type, algo; + const guint8 *addr; + char gw[MAXDNAME]; + int gw_name_len; + static const value_string gw_algo[] = { + { 1, "DSA" }, + { 2, "RSA" }, + { 0, NULL } + }; + + if( dns_tree != NULL ) { + if(rr_len < 3) + goto bad_rr; + + proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Gateway precedence: %u", + tvb_get_guint8(tvb, cur_offset)); + cur_offset += 1; + rr_len -= 1; + + gw_type = tvb_get_guint8(tvb, cur_offset); + cur_offset += 1; + rr_len -= 1; + + algo = tvb_get_guint8(tvb, cur_offset); + proto_tree_add_text(rr_tree, tvb, cur_offset, 1, "Algorithm: %s", + val_to_str(algo, gw_algo, "Unknown (0x%02X)")); + cur_offset += 1; + rr_len -= 1; + switch( gw_type ) { + case 0: + proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: no gateway"); + break; + case 1: + addr = tvb_get_ptr(tvb, cur_offset, 4); + proto_tree_add_text(rr_tree, tvb, cur_offset, 4, "Gateway: %s", + ip_to_str(addr) ); + + cur_offset += 4; + rr_len -= 4; + break; + case 2: + addr = tvb_get_ptr(tvb, cur_offset, 16); + proto_tree_add_text(rr_tree, tvb, cur_offset, 16, "Gateway: %s", + ip6_to_str((const struct e_in6_addr *)addr)); + + cur_offset += 16; + rr_len -= 16; + break; + case 3: + gw_name_len = get_dns_name(tvb, cur_offset, dns_data_offset, gw, sizeof(gw)); + proto_tree_add_text(rr_tree, tvb, cur_offset, gw_name_len, "Gateway: %s", gw); + + cur_offset += gw_name_len; + rr_len -= gw_name_len; + break; + default: + proto_tree_add_text(rr_tree, tvb, cur_offset, 0, "Gateway: Unknow gateway type(%u)", gw_type); + break; + } + if (rr_len != 0) + proto_tree_add_text(rr_tree, tvb, cur_offset, rr_len, "Public key"); + } + } + break; + case T_AAAA: { const guint8 *addr6;
- Follow-Ups:
- Re: [Ethereal-dev] DNS ipseckey RR support
- From: Guy Harris
- Re: [Ethereal-dev] DNS ipseckey RR support
- Prev by Date: [Ethereal-dev] use a outside program from ethereal code
- Next by Date: [Ethereal-dev] GSM Decoding
- Previous by thread: Re: [Ethereal-dev] use a outside program from ethereal code
- Next by thread: Re: [Ethereal-dev] DNS ipseckey RR support
- Index(es):