From Robin Seggelmann: Improve SCTP chunk statistics.
svn path=/trunk/; revision=33297
This commit is contained in:
parent
ad2e1ed37a
commit
792c7add3a
1
AUTHORS
1
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> {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -44,26 +44,6 @@
|
|||
#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]++;
|
||||
|
|
|
@ -49,7 +49,19 @@
|
|||
#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
|
||||
|
@ -90,33 +102,15 @@
|
|||
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
|
||||
|
|
|
@ -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*/
|
||||
|
|
Loading…
Reference in New Issue