diff options
author | Guy Harris <guy@alum.mit.edu> | 2001-07-21 10:27:13 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2001-07-21 10:27:13 +0000 |
commit | 681f73adb7706ab536dd68d2eb64601f9329e522 (patch) | |
tree | 207cd0b91dec0714b7feb94bae45fb1aa13dea10 /packet-bgp.c | |
parent | c5c33a055415d73b7ee3f7d4020d7a7867bfc9c3 (diff) |
There is really no need to have the BGP dissector and the LDP dissector
have two independent "value_string" tables mapping RFC 1700 address
family numbers to names, nor is there any need to have the BGP dissector
and the PIM dissector have two independent sets of #defines for RFC 1700
address family numbers; put a single "value_string" table in "afn.c" and
put a declaration of it, and #defines for the address family numbers,
into "afn.h", and have the dissectors use that.
Move the #define for PGM into "ipproto.h", and add an entry for it in
the "value_string" table in "ipproto.c".
Have the PGM dissector use the standard Ethereal mechanisms for
resolving addresses, and have it use "value_string" tables for mapping
option types, the OPX bits, and packet types to strings. Use
"bytes_to_str()" to turn byte arrays into strings of hex digits. Pass
the packet type string to "dissect_pgmopts()" as an argument, rather
than making it a global. Don't use "proto_tree_add_XXX_format" routines
if you can possibly just use "proto_tree_add_XXX"; give various fields
the correct radix and type, and VALS() strings if necessary, to make
that happen (and to make filtering on them more pleasant). Put the
type, length, and total length of the options into the protocol tree as
separate fields. Don't have separate type, length, and OPX fields for
every type of option; one field will suffice. Don't format a string
with "sprintf()" and then pass that string to "col_add_fstr()" with a
format of "%s" and the string as an argument - "col_add_fstr()" can
format strings itself (that's what the "f" stands for). Don't byte-swap
and then un-byte-swap IPv4 address fields in the header, just leave them
network byte order to start with. Use the correct fields for
"proto_tree_add_XXX", rather than using the same field multiple times.
Quit early if an address family identifier isn't AFNUM_INET, as that
means the structure we use to dissect the header doesn't match the
actual header.
svn path=/trunk/; revision=3761
Diffstat (limited to 'packet-bgp.c')
-rw-r--r-- | packet-bgp.c | 32 |
1 files changed, 6 insertions, 26 deletions
diff --git a/packet-bgp.c b/packet-bgp.c index e72aecdf90..a394b4b860 100644 --- a/packet-bgp.c +++ b/packet-bgp.c @@ -2,7 +2,7 @@ * Routines for BGP packet dissection. * Copyright 1999, Jun-ichiro itojun Hagino <itojun@itojun.org> * - * $Id: packet-bgp.c,v 1.45 2001/07/09 11:08:39 guy Exp $ + * $Id: packet-bgp.c,v 1.46 2001/07/21 10:27:12 guy Exp $ * * Supports: * RFC1771 A Border Gateway Protocol 4 (BGP-4) @@ -66,6 +66,7 @@ #include "packet.h" #include "packet-bgp.h" #include "packet-ipv6.h" +#include "afn.h" static const value_string bgptypevals[] = { { BGP_OPEN, "OPEN Message" }, @@ -185,27 +186,6 @@ static const value_string bgpext_ospf_rtype[] = { /* MUST be resized if a longer named extended community is added */ #define MAX_SIZE_OF_EXT_COM_NAMES 20 -static const value_string afnumber[] = { - { 0, "Reserved" }, - { AFNUM_INET, "IPv4" }, - { AFNUM_INET6, "IPv6" }, - { AFNUM_NSAP, "NSAP" }, - { AFNUM_HDLC, "HDLC" }, - { AFNUM_BBN1822, "BBN 1822" }, - { AFNUM_802, "802" }, - { AFNUM_E163, "E.163" }, - { AFNUM_E164, "E.164" }, - { AFNUM_F69, "F.69" }, - { AFNUM_X121, "X.121" }, - { AFNUM_IPX, "IPX" }, - { AFNUM_ATALK, "Appletalk" }, - { AFNUM_DECNET, "Decnet IV" }, - { AFNUM_BANYAN, "Banyan Vines" }, - { AFNUM_E164NSAP, "E.164 with NSAP subaddress" }, - { 65535, "Reserved" }, - { 0, NULL }, -}; - /* Subsequent address family identifier, RFC2858 */ static const value_string bgpattr_nlri_safi[] = { { 0, "Reserved" }, @@ -615,7 +595,7 @@ dissect_bgp_open(tvbuff_t *tvb, int offset, proto_tree *tree) i = tvb_get_ntohs(tvb, p); proto_tree_add_text(subtree3, tvb, p, 2, "Address family identifier: %s (%u)", - val_to_str(i, afnumber, "Unknown"), i); + val_to_str(i, afn_vals, "Unknown"), i); p += 2; /* Reserved */ proto_tree_add_text(subtree3, tvb, p, @@ -1316,7 +1296,7 @@ dissect_bgp_update(tvbuff_t *tvb, int offset, proto_tree *tree) af = tvb_get_ntohs(tvb, o + i + aoff); proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, "Address family: %s (%u)", - val_to_str(af, afnumber, "Unknown"), af); + val_to_str(af, afn_vals, "Unknown"), af); saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, "Subsequent address family identifier: %s (%u)", @@ -1379,7 +1359,7 @@ dissect_bgp_update(tvbuff_t *tvb, int offset, proto_tree *tree) af = tvb_get_ntohs(tvb, o + i + aoff); proto_tree_add_text(subtree2, tvb, o + i + aoff, 2, "Address family: %s (%u)", - val_to_str(af, afnumber, "Unknown"), af); + val_to_str(af, afn_vals, "Unknown"), af); saf = tvb_get_guint8(tvb, o + i + aoff + 2) ; proto_tree_add_text(subtree2, tvb, o + i + aoff + 2, 1, "Subsequent address family identifier: %s (%u)", @@ -1576,7 +1556,7 @@ dissect_bgp_route_refresh(tvbuff_t *tvb, int offset, proto_tree *tree) i = tvb_get_ntohs(tvb, offset + BGP_HEADER_SIZE); proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE, 2, "Address family identifier: %s (%u)", - val_to_str(i, afnumber, "Unknown"), i); + val_to_str(i, afn_vals, "Unknown"), i); offset += 2; /* Reserved */ proto_tree_add_text(tree, tvb, offset + BGP_HEADER_SIZE + 2, 1, |