summaryrefslogtreecommitdiff
path: root/ui/cli/tap-diameter-avp.c
diff options
context:
space:
mode:
Diffstat (limited to 'ui/cli/tap-diameter-avp.c')
-rw-r--r--ui/cli/tap-diameter-avp.c200
1 files changed, 107 insertions, 93 deletions
diff --git a/ui/cli/tap-diameter-avp.c b/ui/cli/tap-diameter-avp.c
index a4789737c0..7acc40922b 100644
--- a/ui/cli/tap-diameter-avp.c
+++ b/ui/cli/tap-diameter-avp.c
@@ -53,13 +53,13 @@ void register_tap_listener_diameteravp(void);
/* used to keep track of the statistics for an entire program interface */
typedef struct _diameteravp_t {
- guint32 frame;
- guint32 diammsg_toprocess;
- guint32 cmd_code;
- guint32 req_count;
- guint32 ans_count;
- guint32 paired_ans_count;
- gchar* filter;
+ guint32 frame;
+ guint32 diammsg_toprocess;
+ guint32 cmd_code;
+ guint32 req_count;
+ guint32 ans_count;
+ guint32 paired_ans_count;
+ gchar *filter;
} diameteravp_t;
/* Copied from proto.c */
@@ -84,36 +84,37 @@ tree_traverse_pre_order(proto_tree *tree, proto_tree_traverse_func func, gpointe
}
static gboolean
-diam_tree_to_csv(proto_node* node, gpointer data)
+diam_tree_to_csv(proto_node *node, gpointer data)
{
- char* val_str=NULL;
- char* val_tmp=NULL;
- ftenum_t ftype;
- field_info* fi;
- header_field_info *hfi;
- if(!node) {
- fprintf(stderr,"traverse end: empty node. node='%p' data='%p'\n",(void *)node,(void *)data);
+ char *val_str = NULL;
+ char *val_tmp = NULL;
+ ftenum_t ftype;
+ field_info *fi;
+ header_field_info *hfi;
+
+ if (!node) {
+ fprintf(stderr, "traverse end: empty node. node='%p' data='%p'\n", (void *)node, (void *)data);
return FALSE;
}
- fi=node->finfo;
- hfi=fi ? fi->hfinfo : NULL;
- if(!hfi) {
- fprintf(stderr,"traverse end: hfi not found. node='%p'\n",(void *)node);
+ fi = node->finfo;
+ hfi = fi ? fi->hfinfo : NULL;
+ if (!hfi) {
+ fprintf(stderr, "traverse end: hfi not found. node='%p'\n", (void *)node);
return FALSE;
}
- ftype=fvalue_type_ftenum(&fi->value);
- if (ftype!=FT_NONE&&ftype!=FT_PROTOCOL) {
+ ftype = fvalue_type_ftenum(&fi->value);
+ if (ftype != FT_NONE && ftype != FT_PROTOCOL) {
/* convert value to string */
- val_tmp=fvalue_to_string_repr(&fi->value,FTREPR_DISPLAY,NULL);
- if(val_tmp)
+ val_tmp = fvalue_to_string_repr(&fi->value, FTREPR_DISPLAY, NULL);
+ if (val_tmp)
{
- val_str=ep_strdup(val_tmp);
+ val_str = ep_strdup(val_tmp);
g_free(val_tmp);
} else
- val_str=ep_strdup_printf("unsupported type: %s",ftype_name(ftype));
+ val_str = ep_strdup_printf("unsupported type: %s", ftype_name(ftype));
- /*printf("traverse: name='%s', abbrev='%s',desc='%s', val='%s'\n",hfi->name,hfi->abbrev,ftype_name(hfi->type),val_str);*/
- printf("%s='%s' ",hfi->name,val_str);
+ /*printf("traverse: name='%s', abbrev='%s',desc='%s', val='%s'\n", hfi->name, hfi->abbrev, ftype_name(hfi->type), val_str);*/
+ printf("%s='%s' ", hfi->name, val_str);
}
return FALSE;
}
@@ -122,47 +123,47 @@ static int
diameteravp_packet(void *pds, packet_info *pinfo, epan_dissect_t *edt _U_, const void *pdi)
{
int ret = 0;
- double resp_time=0.;
- gboolean is_request=TRUE;
- guint32 cmd_code=0;
- guint32 req_frame=0;
- guint32 ans_frame=0;
- guint32 diam_child_node=0;
- proto_node* current=NULL;
- proto_node* node = NULL;
- header_field_info* hfi=NULL;
- field_info* finfo=NULL;
- const diameter_req_ans_pair_t* dp=(const diameter_req_ans_pair_t*)pdi;
- diameteravp_t *ds=NULL;
+ double resp_time = 0.;
+ gboolean is_request = TRUE;
+ guint32 cmd_code = 0;
+ guint32 req_frame = 0;
+ guint32 ans_frame = 0;
+ guint32 diam_child_node = 0;
+ proto_node *current = NULL;
+ proto_node *node = NULL;
+ header_field_info *hfi = NULL;
+ field_info *finfo = NULL;
+ const diameter_req_ans_pair_t *dp = (const diameter_req_ans_pair_t *)pdi;
+ diameteravp_t *ds = NULL;
/* Validate paramerers. */
- if(!dp || !edt || !edt->tree)
+ if (!dp || !edt || !edt->tree)
return ret;
/* Several diameter messages within one frame are possible. *
* Check if we processing the message in same frame like befor or in new frame.*/
- ds=(diameteravp_t *)pds;
- if(pinfo->fd->num > ds->frame) {
- ds->frame=pinfo->fd->num;
- ds->diammsg_toprocess=0;
+ ds = (diameteravp_t *)pds;
+ if (pinfo->fd->num > ds->frame) {
+ ds->frame = pinfo->fd->num;
+ ds->diammsg_toprocess = 0;
} else {
- ds->diammsg_toprocess+=1;
+ ds->diammsg_toprocess += 1;
}
/* Extract data from request/answer pair provided by diameter dissector.*/
- is_request=dp->processing_request;
- cmd_code=dp->cmd_code;
- req_frame=dp->req_frame;
- ans_frame=dp->ans_frame;
- if(!is_request) {
+ is_request = dp->processing_request;
+ cmd_code = dp->cmd_code;
+ req_frame = dp->req_frame;
+ ans_frame = dp->ans_frame;
+ if (!is_request) {
nstime_t ns;
nstime_delta(&ns, &pinfo->fd->abs_ts, &dp->req_time);
- resp_time=nstime_to_sec(&ns);
- resp_time=resp_time<0?0.:resp_time;
+ resp_time = nstime_to_sec(&ns);
+ resp_time = resp_time < 0. ? 0. : resp_time;
}
/* Check command code provided by command line option.*/
- if (ds->cmd_code && ds->cmd_code!=cmd_code)
+ if (ds->cmd_code && ds->cmd_code != cmd_code)
return ret;
/* Loop over top level nodes */
@@ -170,28 +171,28 @@ diameteravp_packet(void *pds, packet_info *pinfo, epan_dissect_t *edt _U_, const
while (node != NULL) {
current = node;
node = current->next;
- finfo=current->finfo;
- hfi=finfo ? finfo->hfinfo : NULL;
- /*fprintf(stderr,"DEBUG: diameteravp_packet %d %p %p node=%p abbrev=%s\n",cmd_code,edt,edt->tree,current,hfi->abbrev);*/
+ finfo = current->finfo;
+ hfi = finfo ? finfo->hfinfo : NULL;
+ /*fprintf(stderr, "DEBUG: diameteravp_packet %d %p %p node=%p abbrev=%s\n", cmd_code, edt, edt->tree, current, hfi->abbrev);*/
/* process current diameter subtree in the current frame. */
- if(hfi && hfi->abbrev && strcmp(hfi->abbrev,"diameter")==0) {
+ if (hfi && hfi->abbrev && strcmp(hfi->abbrev, "diameter") == 0) {
/* Process current diameter message in the frame */
- if (ds->diammsg_toprocess==diam_child_node) {
- if(is_request) {
+ if (ds->diammsg_toprocess == diam_child_node) {
+ if (is_request) {
ds->req_count++;
} else {
ds->ans_count++;
- if (req_frame>0)
+ if (req_frame > 0)
ds->paired_ans_count++;
}
/* Output frame data.*/
printf("frame='%d' time='%f' src='%s' srcport='%d' dst='%s' dstport='%d' proto='diameter' msgnr='%d' is_request='%d' cmd='%d' req_frame='%d' ans_frame='%d' resp_time='%f' ",
- pinfo->fd->num,nstime_to_sec(&pinfo->fd->abs_ts),ep_address_to_str(&pinfo->src),pinfo->srcport,ep_address_to_str(&pinfo->dst), pinfo->destport,ds->diammsg_toprocess,is_request,cmd_code,req_frame,ans_frame,resp_time);
+ pinfo->fd->num, nstime_to_sec(&pinfo->fd->abs_ts), ep_address_to_str(&pinfo->src), pinfo->srcport, ep_address_to_str(&pinfo->dst), pinfo->destport, ds->diammsg_toprocess, is_request, cmd_code, req_frame, ans_frame, resp_time);
/* Visit selected nodes of one diameter message.*/
tree_traverse_pre_order(current, diam_tree_to_csv, &ds);
/* End of message.*/
printf("\n");
- /*printf("hfi: name='%s', msg_curr='%d' abbrev='%s',type='%s'\n",hfi->name,diam_child_node,hfi->abbrev,ftype_name(hfi->type));*/
+ /*printf("hfi: name='%s', msg_curr='%d' abbrev='%s',type='%s'\n", hfi->name, diam_child_node, hfi->abbrev, ftype_name(hfi->type));*/
}
diam_child_node++;
}
@@ -200,62 +201,62 @@ diameteravp_packet(void *pds, packet_info *pinfo, epan_dissect_t *edt _U_, const
}
static void
-diameteravp_draw(void* pds)
+diameteravp_draw(void *pds)
{
- diameteravp_t *ds=(diameteravp_t *)pds;
+ diameteravp_t *ds = (diameteravp_t *)pds;
/* printing results */
- printf("=== Diameter Summary ===\nrequset count:\t%d\nanswer count:\t%d\nreq/ans pairs:\t%d\n",ds->req_count,ds->ans_count,ds->paired_ans_count);
+ printf("=== Diameter Summary ===\nrequset count:\t%d\nanswer count:\t%d\nreq/ans pairs:\t%d\n", ds->req_count, ds->ans_count, ds->paired_ans_count);
}
static void
-diameteravp_init(const char *opt_arg, void* userdata _U_)
+diameteravp_init(const char *opt_arg, void *userdata _U_)
{
- diameteravp_t *ds;
- gchar* field=NULL;
- gchar** tokens;
- guint opt_count=0;
- guint opt_idx=0;
- GString* filter=NULL;
- GString* error_string=NULL;
+ diameteravp_t *ds;
+ gchar *field = NULL;
+ gchar **tokens;
+ guint opt_count = 0;
+ guint opt_idx = 0;
+ GString *filter = NULL;
+ GString *error_string = NULL;
- ds=g_new(diameteravp_t,1);
- ds->frame=0;
- ds->diammsg_toprocess=0;
- ds->cmd_code=0;
- ds->req_count=0;
- ds->ans_count=0;
- ds->paired_ans_count=0;
- ds->filter=NULL;
+ ds = g_new(diameteravp_t, 1);
+ ds->frame = 0;
+ ds->diammsg_toprocess = 0;
+ ds->cmd_code = 0;
+ ds->req_count = 0;
+ ds->ans_count = 0;
+ ds->paired_ans_count = 0;
+ ds->filter = NULL;
- filter=g_string_new("diameter");
+ filter = g_string_new("diameter");
/* Split command line options. */
- tokens = g_strsplit(opt_arg,",", 1024);
- opt_count=0;
+ tokens = g_strsplit(opt_arg, ",", 1024);
+ opt_count = 0;
while (tokens[opt_count])
opt_count++;
- if (opt_count>2)
- ds->cmd_code=(guint32)atoi(tokens[2]);
+ if (opt_count > 2)
+ ds->cmd_code = (guint32)atoi(tokens[2]);
/* Loop over diameter field names. */
- for(opt_idx=3;opt_idx<opt_count;opt_idx++)
+ for (opt_idx=3; opt_idx<opt_count; opt_idx++)
{
/* Current field from command line arguments. */
- field=tokens[opt_idx];
+ field = tokens[opt_idx];
/* Connect all requested fields with logical OR. */
- g_string_append(filter,"||");
+ g_string_append(filter, "||");
/* Prefix field name with "diameter." by default. */
- if(!strchr(field,'.'))
+ if (!strchr(field, '.'))
g_string_append(filter, "diameter.");
/* Append field name to the filter. */
g_string_append(filter, field);
}
g_strfreev(tokens);
- ds->filter=g_string_free(filter,FALSE);
+ ds->filter = g_string_free(filter, FALSE);
- error_string=register_tap_listener("diameter", ds, ds->filter, 0, NULL, diameteravp_packet, diameteravp_draw);
- if(error_string){
+ error_string = register_tap_listener("diameter", ds, ds->filter, 0, NULL, diameteravp_packet, diameteravp_draw);
+ if (error_string) {
/* error, we failed to attach to the tap. clean up */
g_free(ds);
@@ -273,3 +274,16 @@ register_tap_listener_diameteravp(void)
register_stat_cmd_arg("diameter,avp", diameteravp_init, NULL);
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 8
+ * tab-width: 8
+ * indent-tabs-mode: t
+ * End:
+ *
+ * vi: set shiftwidth=8 tabstop=8 noexpandtab:
+ * :indentSize=8:tabSize=8:noTabs=false:
+ */