From Robin Seggelmann: Improve SCTP chunk statistics.
authortuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 23 Jun 2010 07:47:15 +0000 (07:47 +0000)
committertuexen <tuexen@f5534014-38df-0310-8fa8-9805f1628bb7>
Wed, 23 Jun 2010 07:47:15 +0000 (07:47 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@33297 f5534014-38df-0310-8fa8-9805f1628bb7

AUTHORS
gtk/sctp_chunk_stat.c
gtk/sctp_chunk_stat_dlg.c
gtk/sctp_stat.c
gtk/sctp_stat.h
gtk/sctp_stat_dlg.c

diff --git a/AUTHORS b/AUTHORS
index 53e2fe9e2e4f4f7c91f598ad2febe986d1d598b1..0eb78484aa28bc0f6d3772a68f860061f8570fe9 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -2672,6 +2672,7 @@ Abhik Sarkar              <sarkar.abhik [AT] gmail.com> {
 
 Robin Seggelmann       <seggelmann [AT] fh-muenster.de> {
        Support for SCTP reassembly.
+       Improve chunk statistics.
 }
 
 Chris Bontje           <cbontje [AT] gmail.com> {
index 3b6d19f101222cf8464844d3498125f2afe62600..8ca0bba866ecea0806c4254f91e3318f064e04fe 100644 (file)
@@ -53,6 +53,7 @@
 #include "gtk/tap_dfilter_dlg.h"
 #include "gtk/gui_utils.h"
 #include "gtk/main.h"
+#include "gtk/sctp_stat.h"
 
 
 static void sctpstat_init(const char *optarg, void *userdata);
@@ -86,30 +87,6 @@ typedef struct _sctp_stat_t {
 
 typedef struct _sctp_info sctp_into_t;
 
-#define SCTP_DATA_CHUNK_ID              0
-#define SCTP_INIT_CHUNK_ID              1
-#define SCTP_INIT_ACK_CHUNK_ID          2
-#define SCTP_SACK_CHUNK_ID              3
-#define SCTP_HEARTBEAT_CHUNK_ID                 4
-#define SCTP_HEARTBEAT_ACK_CHUNK_ID     5
-#define SCTP_ABORT_CHUNK_ID             6
-#define SCTP_SHUTDOWN_CHUNK_ID          7
-#define SCTP_SHUTDOWN_ACK_CHUNK_ID      8
-#define SCTP_ERROR_CHUNK_ID             9
-#define SCTP_COOKIE_ECHO_CHUNK_ID      10
-#define SCTP_COOKIE_ACK_CHUNK_ID       11
-#define SCTP_ECNE_CHUNK_ID             12
-#define SCTP_CWR_CHUNK_ID              13
-#define SCTP_SHUTDOWN_COMPLETE_CHUNK_ID 14
-#define SCTP_AUTH_CHUNK_ID              15
-#define SCTP_NR_SACK_CHUNK_ID          16
-#define SCTP_ASCONF_ACK_CHUNK_ID      0x80
-#define SCTP_PKTDROP_CHUNK_ID        0x81
-#define SCTP_FORWARD_TSN_CHUNK_ID     0xC0
-#define SCTP_ASCONF_CHUNK_ID         0xC1
-#define SCTP_IETF_EXT                0xFF
-
-#define CHUNK_TYPE_OFFSET 0
 #define CHUNK_TYPE(x)(tvb_get_guint8((x), CHUNK_TYPE_OFFSET))
 
 static void
@@ -159,7 +136,6 @@ sctpstat_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, cons
        sctp_ep_t *tmp = NULL, *te = NULL;
        struct _sctp_info *si = (struct _sctp_info *) phi;
        guint32 tvb_number;
-       guint8 chunk_type;
 
        if (!hs)
                return (0);
@@ -191,14 +167,11 @@ sctpstat_packet(void *phs, packet_info *pinfo _U_, epan_dissect_t *edt _U_, cons
 
 
        if (si->number_of_tvbs > 0) {
-               chunk_type = CHUNK_TYPE(si->tvb[0]);
-               if ((chunk_type == SCTP_INIT_CHUNK_ID) ||
-                   (chunk_type == SCTP_INIT_ACK_CHUNK_ID)) {
-                       (te->chunk_count[chunk_type])++;
-               } else {
-                       for(tvb_number = 0; tvb_number < si->number_of_tvbs; tvb_number++) {
+               for(tvb_number = 0; tvb_number < si->number_of_tvbs; tvb_number++) {
+                       if (IS_SCTP_CHUNK_TYPE(CHUNK_TYPE(si->tvb[tvb_number])))
                                (te->chunk_count[CHUNK_TYPE(si->tvb[tvb_number])])++;
-                       }
+                       else
+                               (te->chunk_count[OTHER_CHUNKS_INDEX])++;
                }
        }
        return (1);
@@ -237,6 +210,11 @@ sctpstat_draw(void *phs)
                12, tmp->chunk_count[SCTP_ABORT_CHUNK_ID],
                13, tmp->chunk_count[SCTP_ERROR_CHUNK_ID],
                14, tmp->chunk_count[SCTP_NR_SACK_CHUNK_ID],
+               15, tmp->chunk_count[SCTP_ASCONF_ACK_CHUNK_ID],
+               16, tmp->chunk_count[SCTP_PKTDROP_CHUNK_ID],
+               17, tmp->chunk_count[SCTP_FORWARD_TSN_CHUNK_ID],
+               18, tmp->chunk_count[SCTP_ASCONF_CHUNK_ID],
+               19, tmp->chunk_count[OTHER_CHUNKS_INDEX],
                -1
                );
        }
@@ -267,14 +245,19 @@ static const stat_column titles[]={
        {G_TYPE_UINT, RIGHT,  "DATA" },
        {G_TYPE_UINT, RIGHT,  "SACK" },
        {G_TYPE_UINT, RIGHT,  "HBEAT" },
-       {G_TYPE_UINT, RIGHT,  "HBEAT_ACK" },
+       {G_TYPE_UINT, RIGHT,  "HBEAT-ACK" },
        {G_TYPE_UINT, RIGHT,  "INIT" },
-       {G_TYPE_UINT, RIGHT,  "INIT_ACK" },
+       {G_TYPE_UINT, RIGHT,  "INIT-ACK" },
        {G_TYPE_UINT, RIGHT,  "COOKIE" },
-       {G_TYPE_UINT, RIGHT,  "COOKIE_ACK" },
+       {G_TYPE_UINT, RIGHT,  "COOKIE-ACK" },
        {G_TYPE_UINT, RIGHT,  "ABORT" },
        {G_TYPE_UINT, RIGHT,  "ERROR" },
-       {G_TYPE_UINT, RIGHT,  "NR_SACK" }
+       {G_TYPE_UINT, RIGHT,  "NR-SACK" },
+       {G_TYPE_UINT, RIGHT,  "ASCONF-ACK" },
+       {G_TYPE_UINT, RIGHT,  "PKTDROP" },
+       {G_TYPE_UINT, RIGHT,  "FORWARD-TSN" },
+       {G_TYPE_UINT, RIGHT,  "ASCONF" },
+       {G_TYPE_UINT, RIGHT,  "Others" }
 };
 
 static void
@@ -297,7 +280,7 @@ sctpstat_init(const char *optarg, void *userdata _U_)
 
        hs->win = dlg_window_new("Wireshark: SCTP Chunk Statistics");  /* transient_for top_level */
        gtk_window_set_destroy_with_parent (GTK_WINDOW(hs->win), TRUE);
-       gtk_window_set_default_size(GTK_WINDOW(hs->win), 600, 200);
+       gtk_window_set_default_size(GTK_WINDOW(hs->win), 700, 250);
 
        hs->vbox=gtk_vbox_new(FALSE, 3);
        gtk_container_set_border_width(GTK_CONTAINER(hs->vbox), 12);
@@ -307,7 +290,7 @@ sctpstat_init(const char *optarg, void *userdata _U_)
        /* init a scrolled window*/
        hs->scrolled_window = scrolled_window_new(NULL, NULL);
 
-       hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 15, titles);
+       hs->table = create_stat_table(hs->scrolled_window, hs->vbox, 20, titles);
 
        error_string=register_tap_listener("sctp", hs, hs->filter, 0,
                                           sctpstat_reset,
index e019d4a612e9d780d2fb61769e8720f87bc159dc..7e9f0a3d1d52e340ec81c924c4ab0a9d268dc54c 100644 (file)
@@ -64,7 +64,11 @@ enum chunk_types {
        CWR           = 13,
        SHUT_COMPLETE = 14,
        AUTH          = 15,
-       NR_SACK       = 16
+       NR_SACK       = 16,
+       ASCONF_ACK    = 0x80,
+       PKTDROP       = 0x81,
+       FORWARD_TSN   = 0xC0,
+       ASCONF        = 0xC1
 };
 enum
 {
@@ -86,6 +90,10 @@ enum
    SHUT_COMPLETE_COLUMN,
    AUTH_COLUMN,
    NR_SACK_COLUMN,
+   ASCONF_ACK_COLUMN,
+   PKTDROP_COLUMN,
+   FORWARD_TSN_COLUMN,
+   ASCONF_COLUMN,
    OTHERS_COLUMN,
    N_COLUMN /* The number of columns */
 };
@@ -123,6 +131,10 @@ GtkWidget* create_list(void)
                                     G_TYPE_INT,    /* SHUT_COMPLETE               */
                                     G_TYPE_INT,    /* AUTH                        */
                                     G_TYPE_INT,    /* NR_SACK                     */
+                                    G_TYPE_INT,    /* ASCONF_ACK                  */
+                                    G_TYPE_INT,    /* PKTDROP                     */
+                                    G_TYPE_INT,    /* FORWARD_TSN                 */
+                                    G_TYPE_INT,    /* ASCONF                      */
                                     G_TYPE_INT);   /* Others                      */
     /* Create a view */
     list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
@@ -184,13 +196,13 @@ GtkWidget* create_list(void)
 
     /* 4:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("INIT_ACK", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("INIT-ACK", renderer, 
                "text", INIT_ACK_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, INIT_ACK_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 80);
+    gtk_tree_view_column_set_min_width(column, 90);
     gtk_tree_view_append_column (list_view, column);
 
     /* 5:th column... */
@@ -212,18 +224,18 @@ GtkWidget* create_list(void)
     gtk_tree_view_column_set_sort_column_id(column, HEARTBEAT_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 80);
+    gtk_tree_view_column_set_min_width(column, 110);
     gtk_tree_view_append_column (list_view, column);
 
     /* 7:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("HEARTBEAT_ACK", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("HEARTBEAT-ACK", renderer, 
                "text", HEARTBEAT_ACK_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, HEARTBEAT_ACK_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 120);
+    gtk_tree_view_column_set_min_width(column, 140);
     gtk_tree_view_append_column (list_view, column);
 
     /* 8:th column... */
@@ -234,7 +246,7 @@ GtkWidget* create_list(void)
     gtk_tree_view_column_set_sort_column_id(column, ABORT_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 70);
+    gtk_tree_view_column_set_min_width(column, 80);
     gtk_tree_view_append_column (list_view, column);
 
 
@@ -246,18 +258,18 @@ GtkWidget* create_list(void)
     gtk_tree_view_column_set_sort_column_id(column, SHUTDOWN_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 70);
+    gtk_tree_view_column_set_min_width(column, 120);
     gtk_tree_view_append_column (list_view, column);
 
     /* 10:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("SHUTDOWN_ACK", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("SHUTDOWN-ACK", renderer, 
                "text", SHUTDOWN_ACK_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, SHUTDOWN_ACK_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 120);
+    gtk_tree_view_column_set_min_width(column, 150);
     gtk_tree_view_append_column (list_view, column);
 
     /* 11:th column... */
@@ -268,29 +280,29 @@ GtkWidget* create_list(void)
     gtk_tree_view_column_set_sort_column_id(column, ERROR_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 70);
+    gtk_tree_view_column_set_min_width(column, 80);
     gtk_tree_view_append_column (list_view, column);
 
     /* 12:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("COOKIE_ECHO", renderer, 
-               "text", COOKIE_ECHO,
+    column = gtk_tree_view_column_new_with_attributes ("COOKIE-ECHO", renderer, 
+               "text", COOKIE_ECHO_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, COOKIE_ECHO_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 120);
+    gtk_tree_view_column_set_min_width(column, 130);
     gtk_tree_view_append_column (list_view, column);
 
     /* 13:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("COOKIE_ACK", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("COOKIE-ACK", renderer, 
                "text", COOKIE_ACK_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, COOKIE_ACK_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 120);
+    gtk_tree_view_column_set_min_width(column, 130);
     gtk_tree_view_append_column (list_view, column);
 
     /* 14:th column... */
@@ -317,13 +329,13 @@ GtkWidget* create_list(void)
    
     /* 16:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("SHUT_COMPLETE", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("SHUT-COMPLETE", renderer, 
                "text", SHUT_COMPLETE_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, SHUT_COMPLETE_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 140);
+    gtk_tree_view_column_set_min_width(column, 150);
     gtk_tree_view_append_column (list_view, column);
     
     /* 17:th column... */
@@ -339,7 +351,7 @@ GtkWidget* create_list(void)
     
     /* 18:th column... */
     renderer = gtk_cell_renderer_text_new ();
-    column = gtk_tree_view_column_new_with_attributes ("NR_SACK", renderer, 
+    column = gtk_tree_view_column_new_with_attributes ("NR-SACK", renderer, 
                "text", NR_SACK_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, NR_SACK_COLUMN);
@@ -350,13 +362,57 @@ GtkWidget* create_list(void)
     
     /* 19:th column... */
     renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("ASCONF-ACK", renderer, 
+               "text", ASCONF_ACK_COLUMN,
+               NULL);
+    gtk_tree_view_column_set_sort_column_id(column, ASCONF_ACK_COLUMN);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_min_width(column, 120);
+    gtk_tree_view_append_column (list_view, column);
+    
+    /* 20:th column... */
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("PKTDROP", renderer, 
+               "text", PKTDROP_COLUMN,
+               NULL);
+    gtk_tree_view_column_set_sort_column_id(column, PKTDROP_COLUMN);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_min_width(column, 100);
+    gtk_tree_view_append_column (list_view, column);
+    
+    /* 21:st column... */
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("FORWARD-TSN", renderer, 
+               "text", FORWARD_TSN_COLUMN,
+               NULL);
+    gtk_tree_view_column_set_sort_column_id(column, FORWARD_TSN_COLUMN);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_min_width(column, 140);
+    gtk_tree_view_append_column (list_view, column);
+    
+    /* 22:nd column... */
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("ASCONF", renderer, 
+               "text", ASCONF_COLUMN,
+               NULL);
+    gtk_tree_view_column_set_sort_column_id(column, ASCONF_COLUMN);
+    gtk_tree_view_column_set_resizable(column, TRUE);
+    gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
+    gtk_tree_view_column_set_min_width(column, 90);
+    gtk_tree_view_append_column (list_view, column);
+
+    /* 23:rd column... */
+    renderer = gtk_cell_renderer_text_new ();
     column = gtk_tree_view_column_new_with_attributes ("Others", renderer, 
                "text", OTHERS_COLUMN,
                NULL);
     gtk_tree_view_column_set_sort_column_id(column, OTHERS_COLUMN);
     gtk_tree_view_column_set_resizable(column, TRUE);
     gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
-    gtk_tree_view_column_set_min_width(column, 70);
+    gtk_tree_view_column_set_min_width(column, 80);
     gtk_tree_view_append_column (list_view, column);
 
     /* Now enable the sorting of each column */
@@ -394,6 +450,10 @@ static const char *chunk_name(int type)
                CASE(SHUT_COMPLETE);
                CASE(AUTH);
                CASE(NR_SACK);
+               CASE(ASCONF_ACK);
+               CASE(PKTDROP);
+               CASE(FORWARD_TSN);
+               CASE(ASCONF);
        }
        return s;
 }
@@ -447,24 +507,28 @@ static void add_to_clist(sctp_addr_chunk* sac)
     gtk_list_store_set  (list_store, &iter,
 #endif
          IP_ADDR_COLUMN,         field[0],
-         DATA_COLUMN,            sac->addr_count[0],
-         INIT_COLUMN,            sac->addr_count[1],
-         INIT_ACK_COLUMN,        sac->addr_count[2],
-         SACK_COLUMN,            sac->addr_count[3],
-         HEARTBEAT_COLUMN,       sac->addr_count[4],
-         HEARTBEAT_ACK_COLUMN,   sac->addr_count[5],
-         ABORT_COLUMN,           sac->addr_count[6],
-         SHUTDOWN_COLUMN,        sac->addr_count[7],
-         SHUTDOWN_ACK_COLUMN,    sac->addr_count[8],
-         ERROR_COLUMN,           sac->addr_count[9],
-         COOKIE_ECHO_COLUMN,     sac->addr_count[10],
-         COOKIE_ACK_COLUMN,      sac->addr_count[11],
-         ECNE_COLUMN,            sac->addr_count[12],
-         CWR_COLUMN,             sac->addr_count[13],
-         SHUT_COMPLETE_COLUMN,   sac->addr_count[14],
-         AUTH_COLUMN,            sac->addr_count[15],
-         NR_SACK_COLUMN,         sac->addr_count[16],
-         OTHERS_COLUMN,          sac->addr_count[17],
+         DATA_COLUMN,            sac->addr_count[SCTP_DATA_CHUNK_ID],
+         INIT_COLUMN,            sac->addr_count[SCTP_INIT_CHUNK_ID],
+         INIT_ACK_COLUMN,        sac->addr_count[SCTP_INIT_ACK_CHUNK_ID],
+         SACK_COLUMN,            sac->addr_count[SCTP_SACK_CHUNK_ID],
+         HEARTBEAT_COLUMN,       sac->addr_count[SCTP_HEARTBEAT_CHUNK_ID],
+         HEARTBEAT_ACK_COLUMN,   sac->addr_count[SCTP_HEARTBEAT_ACK_CHUNK_ID],
+         ABORT_COLUMN,           sac->addr_count[SCTP_ABORT_CHUNK_ID],
+         SHUTDOWN_COLUMN,        sac->addr_count[SCTP_SHUTDOWN_CHUNK_ID],
+         SHUTDOWN_ACK_COLUMN,    sac->addr_count[SCTP_SHUTDOWN_ACK_CHUNK_ID],
+         ERROR_COLUMN,           sac->addr_count[SCTP_ERROR_CHUNK_ID],
+         COOKIE_ECHO_COLUMN,     sac->addr_count[SCTP_COOKIE_ECHO_CHUNK_ID],
+         COOKIE_ACK_COLUMN,      sac->addr_count[SCTP_COOKIE_ACK_CHUNK_ID],
+         ECNE_COLUMN,            sac->addr_count[SCTP_ECNE_CHUNK_ID],
+         CWR_COLUMN,             sac->addr_count[SCTP_CWR_CHUNK_ID],
+         SHUT_COMPLETE_COLUMN,   sac->addr_count[SCTP_SHUTDOWN_COMPLETE_CHUNK_ID],
+         AUTH_COLUMN,            sac->addr_count[SCTP_AUTH_CHUNK_ID],
+         NR_SACK_COLUMN,         sac->addr_count[SCTP_NR_SACK_CHUNK_ID],
+         ASCONF_ACK_COLUMN,      sac->addr_count[SCTP_ASCONF_ACK_CHUNK_ID],
+         PKTDROP_COLUMN,         sac->addr_count[SCTP_PKTDROP_CHUNK_ID],
+         FORWARD_TSN_COLUMN,     sac->addr_count[SCTP_FORWARD_TSN_CHUNK_ID],
+         ASCONF_COLUMN,          sac->addr_count[SCTP_ASCONF_CHUNK_ID],
+         OTHERS_COLUMN,          sac->addr_count[OTHER_CHUNKS_INDEX],
          -1);
 }
 
@@ -647,24 +711,27 @@ static void sctp_chunk_dlg(struct sctp_udata *u_data)
        gtk_table_attach_defaults(GTK_TABLE(table), label, 3, 4, row, row+1);
        row ++;
 
-       for (i=0; i<NUM_CHUNKS-1; i++)
+       for (i=0; i<NUM_CHUNKS; i++)
        {
-               label = gtk_label_new(chunk_name(i));
-               gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
-               gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, row, row+1);   
-               g_snprintf(label_txt, 10, "%u", selected_stream->chunk_count[i]);
-               label = gtk_label_new(label_txt);
-               gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
-               gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, row, row+1);
-               g_snprintf(label_txt, 10, "%u", selected_stream->ep1_chunk_count[i]);
-               label = gtk_label_new(label_txt);
-               gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
-               gtk_table_attach_defaults(GTK_TABLE(table), label, 2, 3, row, row+1);
-               g_snprintf(label_txt, 10, "%u", selected_stream->ep2_chunk_count[i]);
-               label = gtk_label_new(label_txt);
-               gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
-               gtk_table_attach_defaults(GTK_TABLE(table), label, 3, 4, row, row+1);
-               row ++;
+               if (IS_SCTP_CHUNK_TYPE(i))
+               {
+                       label = gtk_label_new(chunk_name(i));
+                       gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+                       gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, row, row+1);   
+                       g_snprintf(label_txt, 10, "%u", selected_stream->chunk_count[i]);
+                       label = gtk_label_new(label_txt);
+                       gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+                       gtk_table_attach_defaults(GTK_TABLE(table), label, 1, 2, row, row+1);
+                       g_snprintf(label_txt, 10, "%u", selected_stream->ep1_chunk_count[i]);
+                       label = gtk_label_new(label_txt);
+                       gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+                       gtk_table_attach_defaults(GTK_TABLE(table), label, 2, 3, row, row+1);
+                       g_snprintf(label_txt, 10, "%u", selected_stream->ep2_chunk_count[i]);
+                       label = gtk_label_new(label_txt);
+                       gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.5f);
+                       gtk_table_attach_defaults(GTK_TABLE(table), label, 3, 4, row, row+1);
+                       row ++;
+               }
        }
        
        label = gtk_label_new("Others");
@@ -716,7 +783,8 @@ void sctp_chunk_dlg_show(struct sctp_analyse* userdata)
        selected_stream=u_data->assoc;
        for (i=0; i<NUM_CHUNKS; i++)
        {
-               selected_stream->chunk_count[i]=u_data->assoc->chunk_count[i];
+               if (IS_SCTP_CHUNK_TYPE(i) || i == OTHER_CHUNKS_INDEX)
+                       selected_stream->chunk_count[i]=u_data->assoc->chunk_count[i];
        }
        set_child(u_data, u_data->parent);
        increase_childcount(u_data->parent);
index a67bbade04efb249e14ea238cfbafadc80d364b7..3220dab444e77b90db31ca00fcfc3b99518efe72 100644 (file)
 #include "gtk/sctp_stat.h"
 #include "gtk/main.h"
 
-
-#define SCTP_HEARTBEAT_CHUNK_ID          4
-#define SCTP_HEARTBEAT_ACK_CHUNK_ID      5
-#define SCTP_ABORT_CHUNK_ID              6
-#define SCTP_SHUTDOWN_CHUNK_ID           7
-#define SCTP_SHUTDOWN_ACK_CHUNK_ID       8
-#define SCTP_ERROR_CHUNK_ID              9
-#define SCTP_COOKIE_ECHO_CHUNK_ID       10
-#define SCTP_COOKIE_ACK_CHUNK_ID        11
-#define SCTP_ECNE_CHUNK_ID              12
-#define SCTP_CWR_CHUNK_ID               13
-#define SCTP_SHUTDOWN_COMPLETE_CHUNK_ID 14
-#define SCTP_AUTH_CHUNK_ID              15 
-#define SCTP_NR_SACK_CHUNK_ID           16 
-#define SCTP_FORWARD_TSN_CHUNK_ID      192
-#define SCTP_ASCONF_ACK_CHUNK_ID      0x80
-#define SCTP_PKTDROP_CHUNK_ID         0X81
-#define SCTP_ASCONF_CHUNK_ID          0XC1
-#define SCTP_IETF_EXT                  255
-
 #define SCTP_ABORT_CHUNK_T_BIT        0x01
 
 #define PARAMETER_TYPE_LENGTH            2
@@ -471,7 +451,7 @@ static sctp_assoc_info_t * add_chunk_count(address * vadd, sctp_assoc_info_t * i
        guint8 * dat;
        int i;
 
-               list = g_list_first(info->addr_chunk_count);
+       list = g_list_first(info->addr_chunk_count);
 
        while (list)
        {
@@ -481,7 +461,7 @@ static sctp_assoc_info_t * add_chunk_count(address * vadd, sctp_assoc_info_t * i
                        v = (address *) (ch->addr);
                        if (ADDRESSES_EQUAL(vadd, v))
                        {       
-                               if (type <= UPPER_BOUND_CHUNK_TYPE)
+                               if (IS_SCTP_CHUNK_TYPE(type))
                                        ch->addr_count[type]++;
                                else
                                        ch->addr_count[OTHER_CHUNKS_INDEX]++;
@@ -506,7 +486,7 @@ static sctp_assoc_info_t * add_chunk_count(address * vadd, sctp_assoc_info_t * i
        for (i=0; i < NUM_CHUNKS; i++)
                ch->addr_count[i] = 0;
 
-       if (type <= UPPER_BOUND_CHUNK_TYPE)
+       if (IS_SCTP_CHUNK_TYPE(type))
                ch->addr_count[type]++;
        else
                ch->addr_count[OTHER_CHUNKS_INDEX]++;
@@ -791,7 +771,7 @@ packet(void *tapdata _U_, packet_info *pinfo , epan_dissect_t *edt _U_ , const v
                                }
 
                                idx = tvb_get_guint8(sctp_info->tvb[0],0); 
-                               if (idx > UPPER_BOUND_CHUNK_TYPE)
+                               if (!IS_SCTP_CHUNK_TYPE(idx))
                                        idx = OTHER_CHUNKS_INDEX;
 
                                info->chunk_count[idx]++;
@@ -816,7 +796,7 @@ packet(void *tapdata _U_, packet_info *pinfo , epan_dissect_t *edt _U_ , const v
                                for (chunk_number = 0; chunk_number < sctp_info->number_of_tvbs; chunk_number++)
                                {
                                        idx = tvb_get_guint8(sctp_info->tvb[0],0); 
-                                       if ( idx > UPPER_BOUND_CHUNK_TYPE )
+                                       if (!IS_SCTP_CHUNK_TYPE(idx))
                                                idx = OTHER_CHUNKS_INDEX;
 
                                        info->chunk_count[idx]++;
@@ -1064,7 +1044,7 @@ packet(void *tapdata _U_, packet_info *pinfo , epan_dissect_t *edt _U_ , const v
                        }
                        
                        idx = tvb_get_guint8(sctp_info->tvb[0],0);
-                       if (idx > UPPER_BOUND_CHUNK_TYPE)
+                       if (!IS_SCTP_CHUNK_TYPE(idx))
                                idx = OTHER_CHUNKS_INDEX;
                        info->chunk_count[idx]++;
                        if (info->direction == 1)
@@ -1122,7 +1102,7 @@ packet(void *tapdata _U_, packet_info *pinfo , epan_dissect_t *edt _U_ , const v
                        for (chunk_number = 0; chunk_number < sctp_info->number_of_tvbs; chunk_number++)
                        {
                                idx = tvb_get_guint8(sctp_info->tvb[chunk_number],0);
-                               if (idx > UPPER_BOUND_CHUNK_TYPE)
+                               if (!IS_SCTP_CHUNK_TYPE(idx))
                                        idx = OTHER_CHUNKS_INDEX;
 
                                info->chunk_count[idx]++;
index 15c83c31294f145552400b885bacc68bf7cc35d0..7a27c7174b80f8e3a6004f1fdb9cfc369ca79440 100644 (file)
 #define SCTP_ERROR_CHUNK_ID              9
 #define SCTP_COOKIE_ECHO_CHUNK_ID       10
 #define SCTP_COOKIE_ACK_CHUNK_ID        11
+#define SCTP_ECNE_CHUNK_ID              12
+#define SCTP_CWR_CHUNK_ID               13
+#define SCTP_SHUTDOWN_COMPLETE_CHUNK_ID 14
+#define SCTP_AUTH_CHUNK_ID              15 
 #define SCTP_NR_SACK_CHUNK_ID           16
+#define SCTP_FORWARD_TSN_CHUNK_ID     0xc0
+#define SCTP_ASCONF_ACK_CHUNK_ID      0x80
+#define SCTP_PKTDROP_CHUNK_ID         0x81
+#define SCTP_ASCONF_CHUNK_ID          0xc1
+#define SCTP_IETF_EXT                  255
+
+#define IS_SCTP_CHUNK_TYPE(t) \
+        (((t) <= 16) || ((t) == 0xC0) || ((t) == 0xC1) || ((t) == 0x80) || ((t) == 0x81))
 
 #define CHUNK_TYPE_LENGTH             1
 #define CHUNK_FLAGS_LENGTH            1
                                        DATA_CHUNK_PAYLOAD_PROTOCOL_ID_LENGTH)
 #define MAX_ADDRESS_LEN                47
 
-/* 
- * The NUM_CHUNKS field is used as the bound on the size of
- * counter arrays that store the sctp chunk counts for each 
- * "Chunk Type" in a given association.
- * UPPER_BOUND_CHUNK_TYPE variable is the upper bound on the 
- * "Chunk Type" field of an SCTP PDU, which will be
- * interpreted by the current version of wireshark for
- * displaying statistical information.
- * As per RFC 4960 Chunk Types 0 to 14 are in use.
- * Chunk Type 15 is AUTHENTICATION CHUNK defined in RFC 4895
- * The Chunk Type 16 is to be assigned to Non Renagable Sacks
- * This version of wireshark will interpret chunk types from 0
- * to 16 and information corresponding to all chunk types
- * > 16 are summed up and stored as "other" chunks at 
- * an index of 17 in appropriate data structures.
- */
-#define UPPER_BOUND_CHUNK_TYPE  16
-
-/* The below value is 18 */
-#define NUM_CHUNKS             UPPER_BOUND_CHUNK_TYPE+2 
+/* The below value is 256 */
+#define NUM_CHUNKS     0xff
 
 /* This variable is used as an index into arrays
  * which store the cumulative information corresponding
  * all chunks with Chunk Type greater > 16
  * The value for the below variable is 17
  */
-#define OTHER_CHUNKS_INDEX     NUM_CHUNKS-1
+#define OTHER_CHUNKS_INDEX     0xfe
 
 /* VNB */
 /* This variable stores the maximum chunk type value
index 631e66f4b85e4ce16539860a25f186ad3b1ea86f..196a5f633c7910e26180b05bb225f3becee4d4b2 100644 (file)
@@ -126,7 +126,7 @@ GtkWidget *create_list(void)
        GtkCellRenderer *renderer;
        GtkTreeView *list_view;
        GtkTreeSelection *selection;
-       
+
        list_store = gtk_list_store_new(N_COLUMN,
                G_TYPE_UINT, /* Port1*/
                G_TYPE_UINT, /* Port2*/