Added SCTP Endpoints table.
authorstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 8 Feb 2008 12:33:26 +0000 (12:33 +0000)
committerstig <stig@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 8 Feb 2008 12:33:26 +0000 (12:33 +0000)
Display port number in SCTP Conversations table.
Get correct display filter from SCTP Conversations.
Arrange Conversations and Endpoints tabs alphabetically.

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

gtk/Makefile.common
gtk/conversations_table.c
gtk/hostlist_sctp.c [new file with mode: 0644]
gtk/hostlist_table.c

index 03415e7b696e7f085f119f76fd44e0630d680c12..836a59dbf79a5d1b07106839ffcf58042989794a 100644 (file)
@@ -138,14 +138,14 @@ WIRESHARK_TAP_SRC = \
        conversations_ip.c      \
        conversations_ipx.c     \
        conversations_jxta.c            \
+       conversations_ncp.c     \
+       conversations_rsvp.c    \
        conversations_sctp.c    \
        conversations_tcpip.c   \
        conversations_tr.c      \
        conversations_udpip.c   \
        conversations_usb.c     \
        conversations_wlan.c    \
-       conversations_ncp.c     \
-       conversations_rsvp.c    \
        dcerpc_stat.c   \
        expert_comp_dlg.c     \
        expert_dlg.c    \
@@ -164,12 +164,13 @@ WIRESHARK_TAP_SRC = \
        hostlist_ipx.c  \
        hostlist_jxta.c \
        hostlist_ncp.c  \
+       hostlist_rsvp.c \
+       hostlist_sctp.c \
        hostlist_tcpip.c \
        hostlist_tr.c   \
        hostlist_udpip.c \
        hostlist_usb.c \
        hostlist_wlan.c \
-       hostlist_rsvp.c \
        io_stat.c       \
        ldap_stat.c     \
        mgcp_stat.c     \
index d3c3407e24dfaab126742f8bd632489e33d498a4..eda2934077d5995db5072a509840b8f3ad39cf3e 100644 (file)
@@ -92,8 +92,9 @@ ct_port_to_str(int port_type, guint32 port)
 
        switch(port_type){
        case PT_TCP:
-    case PT_UDP:
-    case PT_NCP:
+        case PT_UDP:
+        case PT_SCTP:
+        case PT_NCP:
                g_snprintf(strp, 11, "%d", port);
                return strp;
        }
@@ -132,7 +133,7 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        case SAT_TOKENRING:
                                return "tr.src";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_IPv4:
@@ -148,13 +149,13 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        case SAT_JXTA:
                                return "jxta.message.src";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_USB:
                        return "usb.sa";
                default:
-                       ;
+                       break;
                }
                 break;
        case FN_DST_ADDRESS:
@@ -170,7 +171,7 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        case SAT_TOKENRING:
                                return "tr.dst";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_IPv4:
@@ -186,13 +187,13 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        case SAT_JXTA:
                                return "jxta.message.dst";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_USB:
                        return "usb.da";
                default:
-                       ;
+                       break;
                }
                 break;
        case FN_ANY_ADDRESS:
@@ -224,13 +225,13 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        case SAT_JXTA:
                                return "jxta.message.address";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_USB:
                        return "usb.addr";
                default:
-                       ;
+                       break;
                }
                 break;
        case FN_SRC_PORT:
@@ -239,10 +240,12 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        return "tcp.srcport";
                case PT_UDP:
                        return "udp.srcport";
-        case PT_NCP:
-            return "ncp.connection";
-                default:
-                        ;
+               case PT_SCTP:
+                       return "sctp.srcport";
+               case PT_NCP:
+                       return "ncp.connection";
+               default:
+                       break;
                }
                break;
        case FN_DST_PORT:
@@ -251,10 +254,12 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        return "tcp.dstport";
                case PT_UDP:
                        return "udp.dstport";
-        case PT_NCP:
-            return "ncp.connection";
-                default:
-                        ;
+               case PT_SCTP:
+                       return "sctp.dstport";
+               case PT_NCP:
+                       return "ncp.connection";
+               default:
+                       break;
                }
                break;
        case FN_ANY_PORT:
@@ -263,10 +268,12 @@ ct_get_filter_name(address *addr, int specific_addr_type, int port_type, int nam
                        return "tcp.port";
                case PT_UDP:
                        return "udp.port";
-        case PT_NCP:
-            return "ncp.connection";
-                default:
-                        ;
+               case PT_SCTP:
+                       return "sctp.port";
+               case PT_NCP:
+                       return "ncp.connection";
+               default:
+                       break;
                }
                break;
        }
@@ -1092,6 +1099,9 @@ draw_ct_table_address(conversations_table *ct, int conversation_idx)
     case(PT_UDP):
         entry=get_udp_port(ct->conversations[conversation_idx].src_port);
         break;
+    case(PT_SCTP):
+        entry=get_sctp_port(ct->conversations[conversation_idx].src_port);
+        break;
     default:
         port=ct_port_to_str(ct->conversations[conversation_idx].port_type, ct->conversations[conversation_idx].src_port);
         entry=port?port:"";
@@ -1112,6 +1122,9 @@ draw_ct_table_address(conversations_table *ct, int conversation_idx)
     case(PT_UDP):
         entry=get_udp_port(ct->conversations[conversation_idx].dst_port);
         break;
+    case(PT_SCTP):
+        entry=get_sctp_port(ct->conversations[conversation_idx].dst_port);
+        break;
     default:
         port=ct_port_to_str(ct->conversations[conversation_idx].port_type, ct->conversations[conversation_idx].dst_port);
         entry=port?port:"";
diff --git a/gtk/hostlist_sctp.c b/gtk/hostlist_sctp.c
new file mode 100644 (file)
index 0000000..001b43d
--- /dev/null
@@ -0,0 +1,92 @@
+/* hostlist_sctp.c    2008 Stig Bjørlykke
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <string.h>
+#include "epan/packet.h"
+#include <epan/stat_cmd_args.h>
+#include "../stat_menu.h"
+#include "gui_stat_menu.h"
+#include <epan/tap.h>
+#include "../register.h"
+#include "hostlist_table.h"
+#include <epan/dissectors/packet-sctp.h>
+
+
+static int
+sctp_hostlist_packet(void *pit, packet_info *pinfo, epan_dissect_t *edt _U_, const void *vip)
+{
+        hostlist_table *hosts=(hostlist_table *)pit;
+        const struct _sctp_info *sctphdr=vip;
+
+        /* Take two "add" passes per packet, adding for each direction, ensures that all
+        packets are counted properly (even if address is sending to itself)
+        XXX - this could probably be done more efficiently inside hostlist_table */
+        add_hostlist_table_data(hosts, &sctphdr->ip_src, sctphdr->sport, TRUE, 1,
+                               pinfo->fd->pkt_len, SAT_NONE, PT_SCTP);
+        add_hostlist_table_data(hosts, &sctphdr->ip_dst, sctphdr->dport, FALSE, 1,
+                               pinfo->fd->pkt_len, SAT_NONE, PT_SCTP);
+
+        return 1;
+}
+
+static void
+gtk_sctp_hostlist_init(const char *optarg, void* userdata _U_)
+{
+        const char *filter=NULL;
+
+        if(!strncmp(optarg,"hosts,sctp,",11)){
+                filter=optarg+11;
+        } else {
+                filter=NULL;
+        }
+
+        init_hostlist_table(FALSE, "SCTP Hosts", "sctp", filter, sctp_hostlist_packet);
+}
+
+
+static void
+gtk_sctp_hostlist_cb(GtkWidget *w _U_, gpointer d _U_)
+{
+        gtk_sctp_hostlist_init("hosts,sctp",NULL);
+}
+
+
+void
+register_tap_listener_sctp_hostlist(void)
+{
+        register_stat_cmd_arg("hosts,sctp", gtk_sctp_hostlist_init,NULL);
+
+        register_stat_menu_item("SCTP", REGISTER_STAT_GROUP_ENDPOINT_LIST,
+            gtk_sctp_hostlist_cb, NULL, NULL, NULL);
+
+        register_hostlist_table(FALSE, "SCTP", "sctp", NULL /*filter*/, sctp_hostlist_packet);
+}
index e317c5c882c270607ab5cf0da23c863c37ecd7a5..c077c9a2dbc6129e6054bbc0846c3a93004ba966 100644 (file)
@@ -78,6 +78,7 @@ hostlist_port_to_str(int port_type, guint32 port)
        switch(port_type){
        case PT_TCP:
        case PT_UDP:
+       case PT_SCTP:
                g_snprintf(strp, 11, "%d", port);
                return strp;
        }
@@ -112,8 +113,8 @@ hostlist_get_filter_name(address *addr, int specific_addr_type, int port_type, i
                                return "fddi.addr";
                        case SAT_TOKENRING:
                                return "tr.addr";
-                        default :
-                                ;
+                        default:
+                                break;
                        }
                         break;
                case AT_IPv4:
@@ -129,13 +130,13 @@ hostlist_get_filter_name(address *addr, int specific_addr_type, int port_type, i
                        case SAT_JXTA:
                                return "jxta.message.address";
                         default:
-                            ;
+                                break;
                        }
                         break;
                case AT_USB:
                        return "usb.addr";
                default:
-                       ;
+                       break;
                }
        case FN_ANY_PORT:
                switch(port_type){
@@ -143,6 +144,8 @@ hostlist_get_filter_name(address *addr, int specific_addr_type, int port_type, i
                        return "tcp.port";
                case PT_UDP:
                        return "udp.port";
+               case PT_SCTP:
+                       return "sctp.port";
                }
                break;
        }
@@ -517,6 +520,9 @@ draw_hostlist_table_address(hostlist_table *hl, int hostlist_idx)
     case(PT_UDP):
         entry=get_udp_port(hl->hosts[hostlist_idx].port);
         break;
+    case(PT_SCTP):
+        entry=get_sctp_port(hl->hosts[hostlist_idx].port);
+        break;
     default:
         port=hostlist_port_to_str(hl->hosts[hostlist_idx].port_type, hl->hosts[hostlist_idx].port);
         entry=port?port:"";