From Alexis La Goutte via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5713 :
authormorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 23 Feb 2011 17:31:03 +0000 (17:31 +0000)
committermorriss <morriss@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 23 Feb 2011 17:31:03 +0000 (17:31 +0000)
Enhance RIPng
* Replace tvb_memcpy/proto_tree_add_text by proto_tree_add_item
* Remove dependency to packet-ipv6.h
* Remove packet-ripng.h (not needed)

Also update AUTHORS file

From me:
Put a check_col() back and reword (shorten) a couple of the new blurbs.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@36033 f5534014-38df-0310-8fa8-9805f1628bb7

AUTHORS
epan/dissectors/Makefile.common
epan/dissectors/packet-ripng.c
epan/dissectors/packet-ripng.h [deleted file]

diff --git a/AUTHORS b/AUTHORS
index 3d7698a..f465fb5 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -2957,8 +2957,10 @@ Alexis La Goutte <alexis.lagoutte [AT] gmail.com> {
        PAPI dissector
        MONGO dissector
        Miscellaneous ISAKMP enhancements
        PAPI dissector
        MONGO dissector
        Miscellaneous ISAKMP enhancements
+       Miscellaneous ICMPv6 enhancements
+       Miscellaneous 802.11 enhancements
        Packet TCP Mood Option (RFC5841) support
        Packet TCP Mood Option (RFC5841) support
-       ICMPv6, PPTP, GRE, PPP PAP dissector enhancements (Rework)
+       PPTP, GRE, PPP PAP, RIPng dissector enhancements (Rework)
 }
 
 Varun Notibala         <nbvarun [AT] gmail.com> {
 }
 
 Varun Notibala         <nbvarun [AT] gmail.com> {
index b9f1c51..45e020f 100644 (file)
@@ -1244,7 +1244,6 @@ DISSECTOR_INCLUDES =      \
        packet-raw.h    \
        packet-rdt.h    \
        packet-rgmp.h   \
        packet-raw.h    \
        packet-rdt.h    \
        packet-rgmp.h   \
-       packet-ripng.h  \
        packet-rlc.h    \
        packet-rlc-lte.h                \
        packet-rmi.h    \
        packet-rlc.h    \
        packet-rlc-lte.h                \
        packet-rmi.h    \
index 4df7af2..0ab0f89 100644 (file)
@@ -9,6 +9,8 @@
  * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
  * By Gerald Combs <gerald@wireshark.org>
  * Copyright 1998 Gerald Combs
  *
+ * Enhance RIPng by Alexis La Goutte
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * References:
+ * RFC2080: RIPng for IPv6
  */
 
 #include "config.h"
 
 #include <glib.h>
 #include <epan/packet.h>
  */
 
 #include "config.h"
 
 #include <glib.h>
 #include <epan/packet.h>
-#include "packet-ripng.h"
-
-#ifndef offsetof
-#define        offsetof(type, member)  ((size_t)(&((type *)0)->member))
-#endif
 
 static int proto_ripng = -1;
 static int hf_ripng_cmd = -1;
 static int hf_ripng_version = -1;
 
 static int proto_ripng = -1;
 static int hf_ripng_cmd = -1;
 static int hf_ripng_version = -1;
+static int hf_ripng_reserved = -1;
+
+static int hf_ripng_rte = -1;
+static int hf_ripng_rte_ipv6_prefix = -1;
+static int hf_ripng_rte_route_tag = -1;
+static int hf_ripng_rte_prefix_length = -1;
+static int hf_ripng_rte_metric = -1;
 
 static gint ett_ripng = -1;
 
 static gint ett_ripng = -1;
-static gint ett_ripng_addr = -1;
+static gint ett_ripng_rte = -1;
 
 #define UDP_PORT_RIPNG  521
 
 
 #define UDP_PORT_RIPNG  521
 
+#define        RIP6_REQUEST    1
+#define        RIP6_RESPONSE   2
+
 static const value_string cmdvals[] = {
     { RIP6_REQUEST, "Request" },
     { RIP6_RESPONSE, "Response" },
 static const value_string cmdvals[] = {
     { RIP6_REQUEST, "Request" },
     { RIP6_RESPONSE, "Response" },
@@ -52,69 +62,57 @@ static const value_string cmdvals[] = {
 static void
 dissect_ripng(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
     int offset = 0;
 static void
 dissect_ripng(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
     int offset = 0;
-    struct rip6 rip6;
-    struct netinfo6 ni6;
-    proto_tree *ripng_tree = NULL;
-    proto_tree *subtree = NULL;
-    proto_item *ti;
+    proto_tree *ripng_tree = NULL, *rte_tree = NULL;
+    proto_item *ti, *rte_ti;
 
     col_set_str(pinfo->cinfo, COL_PROTOCOL, "RIPng");
 
     col_set_str(pinfo->cinfo, COL_PROTOCOL, "RIPng");
-    col_clear(pinfo->cinfo, COL_INFO);
-
-    /* avoid alignment problem */
-    tvb_memcpy(tvb, (guint8 *)&rip6, offset, sizeof(rip6));
-
-    if (check_col(pinfo->cinfo, COL_PROTOCOL))
-        col_add_fstr(pinfo->cinfo, COL_PROTOCOL, "RIPng version %u", rip6.rip6_vers);
-    if (check_col(pinfo->cinfo, COL_INFO))
-       col_add_str(pinfo->cinfo, COL_INFO,
-           val_to_str(rip6.rip6_cmd, cmdvals, "Unknown command (%u)"));
+    if (check_col(pinfo->cinfo, COL_INFO)) {
+       col_clear(pinfo->cinfo, COL_INFO);
+       col_add_fstr(pinfo->cinfo, COL_INFO," Command %s, Version %u",
+                    val_to_str(tvb_get_guint8(tvb, offset), cmdvals, "Unknown (%u)"),
+                    tvb_get_guint8(tvb, offset +1));
+    }
 
     if (tree) {
        ti = proto_tree_add_item(tree, proto_ripng, tvb, offset, -1, FALSE);
        ripng_tree = proto_item_add_subtree(ti, ett_ripng);
 
 
     if (tree) {
        ti = proto_tree_add_item(tree, proto_ripng, tvb, offset, -1, FALSE);
        ripng_tree = proto_item_add_subtree(ti, ett_ripng);
 
-       proto_tree_add_uint(ripng_tree, hf_ripng_cmd, tvb, offset, 1,
-           rip6.rip6_cmd);
-       proto_tree_add_uint(ripng_tree, hf_ripng_version, tvb, offset + 1, 1,
-           rip6.rip6_vers);
+       /* Command */
+       proto_tree_add_item(ripng_tree, hf_ripng_cmd, tvb, offset, 1, FALSE);
+       offset += 1;
 
 
-       offset += 4;
+       /* Version */
+       proto_tree_add_item(ripng_tree, hf_ripng_version, tvb, offset, 1, FALSE);
+       offset += 1;
+
+       /* Reserved */
+       proto_tree_add_item(ripng_tree, hf_ripng_reserved, tvb, offset, 2, FALSE);
+       offset += 2;
+
+       /* Route Table Entry */
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
-                   tvb_memcpy(tvb, (guint8 *)&ni6, offset, sizeof(ni6));
-                   if (ni6.rip6_tag) {
-                       ti = proto_tree_add_text(ripng_tree, tvb, offset,
-                                       sizeof(ni6), "IP Address: %s/%u, Metric: %u, tag: 0x%04x",
-                                       ip6_to_str(&ni6.rip6_dest),
-                                       ni6.rip6_plen,
-                                       ni6.rip6_metric,
-                                       g_ntohs(ni6.rip6_tag));
-                   } else {
-                       ti = proto_tree_add_text(ripng_tree, tvb, offset,
-                                       sizeof(ni6), "IP Address: %s/%u, Metric: %u",
-                                       ip6_to_str(&ni6.rip6_dest),
-                                       ni6.rip6_plen,
-                                       ni6.rip6_metric);
-                   }
-                   subtree = proto_item_add_subtree(ti, ett_ripng_addr);
-                   proto_tree_add_text(subtree, tvb,
-                               offset + offsetof(struct netinfo6, rip6_dest),
-                               sizeof(ni6.rip6_dest), "IP Address: %s",
-                               ip6_to_str(&ni6.rip6_dest));
-                   proto_tree_add_text(subtree, tvb,
-                               offset + offsetof(struct netinfo6, rip6_tag),
-                               sizeof(ni6.rip6_tag), "Tag: 0x%04x",
-                               g_ntohs(ni6.rip6_tag));
-                   proto_tree_add_text(subtree, tvb,
-                               offset + offsetof(struct netinfo6, rip6_plen),
-                               sizeof(ni6.rip6_plen), "Prefix length: %u",
-                               ni6.rip6_plen);
-                   proto_tree_add_text(subtree, tvb,
-                               offset + offsetof(struct netinfo6, rip6_metric),
-                               sizeof(ni6.rip6_metric), "Metric: %u",
-                               ni6.rip6_metric);
-
-                   offset += sizeof(ni6);
+
+               rte_ti = proto_tree_add_item(ripng_tree, hf_ripng_rte, tvb, offset, 16 + 2 + 1 + 1, FALSE);
+               rte_tree = proto_item_add_subtree(rte_ti, ett_ripng_rte);
+
+               /* IPv6 Prefix */
+               proto_tree_add_item(rte_tree, hf_ripng_rte_ipv6_prefix, tvb, offset, 16, FALSE);
+               proto_item_append_text(rte_ti, ": IPv6 Prefix: %s", tvb_ip6_to_str(tvb, offset));
+               offset += 16;
+
+               /* Route Tag */
+               proto_tree_add_item(rte_tree, hf_ripng_rte_route_tag, tvb, offset, 2, FALSE);
+               offset += 2;
+
+               /* Prefix Length */
+               proto_tree_add_item(rte_tree, hf_ripng_rte_prefix_length, tvb, offset, 1, FALSE);
+               proto_item_append_text(rte_ti, "/%u", tvb_get_guint8(tvb, offset));
+               offset += 1;
+
+               /* Metric */
+               proto_tree_add_item(rte_tree, hf_ripng_rte_metric, tvb, offset, 1, FALSE);
+               proto_item_append_text(rte_ti, " Metric: %u", tvb_get_guint8(tvb, offset));
+               offset += 1;
        }
     }
 }
        }
     }
 }
@@ -125,16 +123,43 @@ proto_register_ripng(void)
     static hf_register_info hf[] = {
       { &hf_ripng_cmd,
        { "Command",            "ripng.cmd",
     static hf_register_info hf[] = {
       { &hf_ripng_cmd,
        { "Command",            "ripng.cmd",
-                               FT_UINT8, BASE_DEC, VALS(cmdvals),
-                               0x0, NULL, HFILL }},
+       FT_UINT8, BASE_DEC, VALS(cmdvals), 0x0,
+       "Used to specify the purpose of this message", HFILL }},
       { &hf_ripng_version,
        { "Version",            "ripng.version",
       { &hf_ripng_version,
        { "Version",            "ripng.version",
-                               FT_UINT8, BASE_DEC, NULL,
-                               0x0, NULL, HFILL }},
+       FT_UINT8, BASE_DEC, NULL, 0x0,
+       "Version of RIPng", HFILL }},
+      { &hf_ripng_reserved,
+       { "Reserved",           "ripng.reserved",
+       FT_BYTES, BASE_NONE, NULL, 0x0,
+       "Must be Zero", HFILL }},
+      { &hf_ripng_rte,
+       { "Route Table Entry",          "ripng.rte",
+       FT_NONE, BASE_NONE, NULL, 0x0,
+       NULL, HFILL }},
+      { &hf_ripng_rte_ipv6_prefix,
+       { "IPv6 Prefix",                "ripng.rte.ipv6_prefix",
+       FT_IPv6, BASE_NONE, NULL, 0x0,
+       "Destination", HFILL }},
+      { &hf_ripng_rte_route_tag,
+       { "Route Tag",          "ripng.rte.route_tag",
+       FT_UINT16, BASE_HEX, NULL, 0x0,
+       "Provides a method of separating internal RIPng routes (routes for networks within the RIPng routing domain) from external RIPng routes, which may have been imported from an EGP or another IGP", HFILL }},
+
+      { &hf_ripng_rte_prefix_length,
+       { "Prefix Length",              "ripng.rte.prefix_length",
+       FT_UINT8, BASE_DEC, NULL, 0x0,
+       "The length in bits of the significant part of the prefix starting from the left of the prefix", HFILL }},
+
+      { &hf_ripng_rte_metric,
+       { "Metric",             "ripng.rte.metric",
+       FT_UINT8, BASE_DEC, NULL, 0x0,
+       "The current metric for the destination; the value 16 (infinity) indicates that the destination is not reachable", HFILL }},
     };
     };
+
     static gint *ett[] = {
       &ett_ripng,
     static gint *ett[] = {
       &ett_ripng,
-      &ett_ripng_addr,
+      &ett_ripng_rte,
     };
 
     proto_ripng = proto_register_protocol("RIPng", "RIPng", "ripng");
     };
 
     proto_ripng = proto_register_protocol("RIPng", "RIPng", "ripng");
diff --git a/epan/dissectors/packet-ripng.h b/epan/dissectors/packet-ripng.h
deleted file mode 100644 (file)
index cb02801..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/* packet-ripng.h
- * RIPng definition
- * (c) Copyright Jun-ichiro itojun Hagino <itojun@itojun.org>
- *
- * $Id$
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@ewireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- */
-
-#ifndef __PACKET_RIPNG_H_DEFINED__
-#define __PACKET_RIPNG_H_DEFINED__
-
-#include "packet-ipv6.h"
-
-/*
- * KAME Header: /cvsroot/kame/kame/kame/kame/route6d/route6d.h,v 1.1.1.1 1999/08/08 23:31:35 itojun Exp
- */
-
-/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#define        RIP6_VERSION    1
-
-#define        RIP6_REQUEST    1
-#define        RIP6_RESPONSE   2
-
-struct netinfo6 {
-       struct  e_in6_addr      rip6_dest;
-       gushort rip6_tag;
-       guchar  rip6_plen;
-       guchar  rip6_metric;
-};
-
-struct rip6 {
-       guchar  rip6_cmd;
-       guchar  rip6_vers;
-       guchar  rip6_res1[2];
-       union {
-               struct  netinfo6        ru6_nets[1];
-               char    ru6_tracefile[1];
-       } rip6un;
-#define        rip6_nets       rip6un.ru6_nets
-#define        rip6_tracefile  rip6un.ru6_tracefile
-};
-
-#define        HOPCNT_INFINITY6        16
-#define        NEXTHOP_METRIC          0xff
-#define        RIP6_MAXMTU             1500
-
-#define        IFMINMTU                576
-
-#ifndef        DEBUG
-#define        SUPPLY_INTERVAL6        30
-#define        RIP_LIFETIME            180
-#define        RIP_HOLDDOWN            120
-#define        RIP_TRIG_INT6_MAX       5
-#define        RIP_TRIG_INT6_MIN       1
-#else
-/* only for debugging; can not wait for 30sec to appear a bug */
-#define        SUPPLY_INTERVAL6        10
-#define        RIP_LIFETIME            60
-#define        RIP_HOLDDOWN            40
-#define        RIP_TRIG_INT6_MAX       5
-#define        RIP_TRIG_INT6_MIN       1
-#endif
-
-#define        RIP6_PORT               521
-#define        RIP6_DEST               "ff02::9"
-
-#define        LOOPBACK_IF             "lo0"
-
-#endif /* __PACKET_RIPNG_H_DEFINED__ */