aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2008-02-08 12:33:26 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2008-02-08 12:33:26 +0000
commit59a76191b4feb61121d1a2cb73629c91051a9142 (patch)
tree3aff8ddee613f09dd85e9abed7b4dc0411de97be
parent42fe2398b9b51ab73b5815726730e8febe99f82d (diff)
Added SCTP Endpoints table.
Display port number in SCTP Conversations table. Get correct display filter from SCTP Conversations. Arrange Conversations and Endpoints tabs alphabetically. svn path=/trunk/; revision=24291
-rw-r--r--gtk/Makefile.common7
-rw-r--r--gtk/conversations_table.c57
-rw-r--r--gtk/hostlist_sctp.c92
-rw-r--r--gtk/hostlist_table.c14
4 files changed, 141 insertions, 29 deletions
diff --git a/gtk/Makefile.common b/gtk/Makefile.common
index 03415e7b69..836a59dbf7 100644
--- a/gtk/Makefile.common
+++ b/gtk/Makefile.common
@@ -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 \
diff --git a/gtk/conversations_table.c b/gtk/conversations_table.c
index d3c3407e24..eda2934077 100644
--- a/gtk/conversations_table.c
+++ b/gtk/conversations_table.c
@@ -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
index 0000000000..001b43dbd8
--- /dev/null
+++ b/gtk/hostlist_sctp.c
@@ -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);
+}
diff --git a/gtk/hostlist_table.c b/gtk/hostlist_table.c
index e317c5c882..c077c9a2db 100644
--- a/gtk/hostlist_table.c
+++ b/gtk/hostlist_table.c
@@ -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:"";