Skip to content

Commit d58d05c

Browse files
committed
nettrace: show message for BASIC and SOCK mode
Signed-off-by: Menglong Dong <imagedong@tencent.com>
1 parent cd02760 commit d58d05c

3 files changed

Lines changed: 84 additions & 73 deletions

File tree

src/analysis.c

Lines changed: 75 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,68 @@ static int try_run_exit(trace_t *trace, analyzer_t *analyzer,
309309
return RESULT_CONT;
310310
}
311311

312+
static inline void rule_run_ret(analy_entry_t *entry, trace_t *trace, int ret)
313+
{
314+
bool hit = false;
315+
rule_t *rule;
316+
317+
list_for_each_entry(rule, &trace->rules, list) {
318+
switch (rule->type) {
319+
case RULE_RETURN_ANY:
320+
hit = true;
321+
break;
322+
case RULE_RETURN_EQ:
323+
hit = rule->expected == ret;
324+
break;
325+
case RULE_RETURN_RANGE:
326+
hit = rule->range.min < ret && rule->range.max > ret;
327+
break;
328+
case RULE_RETURN_LT:
329+
hit = rule->expected < ret;
330+
break;
331+
case RULE_RETURN_GT:
332+
hit = rule->expected > ret;
333+
break;
334+
case RULE_RETURN_NE:
335+
hit = rule->expected != ret;
336+
break;
337+
default:
338+
continue;
339+
}
340+
if (!hit)
341+
continue;
342+
entry->rule = rule;
343+
if (!mode_has_context())
344+
break;
345+
switch (rule->level) {
346+
case RULE_INFO:
347+
break;
348+
case RULE_WARN:
349+
entry->ctx->status |= ANALY_CTX_WARN;
350+
break;
351+
case RULE_ERROR:
352+
entry->ctx->status |= ANALY_CTX_ERROR;
353+
break;
354+
}
355+
break;
356+
}
357+
}
358+
359+
static inline void rule_run_any(analy_entry_t *entry, trace_t *trace)
360+
{
361+
rule_t *rule;
362+
363+
if (list_empty(&trace->rules))
364+
return;
365+
366+
list_for_each_entry(rule, &trace->rules, list) {
367+
if (rule->type == RULE_RETURN_ANY) {
368+
entry->rule = rule;
369+
return;
370+
}
371+
}
372+
}
373+
312374
void tl_poll_handler(void *raw_ctx, int cpu, void *data, u32 size)
313375
{
314376
static char buf[1024], tinfo[128];
@@ -506,68 +568,19 @@ void async_poll_handler(void *ctx, int cpu, void *data, u32 size)
506568
}
507569
}
508570

509-
static inline void rule_run(analy_entry_t *entry, trace_t *trace, int ret)
510-
{
511-
bool hit = false;
512-
rule_t *rule;
513-
514-
list_for_each_entry(rule, &trace->rules, list) {
515-
switch (rule->type) {
516-
case RULE_RETURN_ANY:
517-
hit = true;
518-
break;
519-
case RULE_RETURN_EQ:
520-
hit = rule->expected == ret;
521-
break;
522-
case RULE_RETURN_RANGE:
523-
hit = rule->range.min < ret && rule->range.max > ret;
524-
break;
525-
case RULE_RETURN_LT:
526-
hit = rule->expected < ret;
527-
break;
528-
case RULE_RETURN_GT:
529-
hit = rule->expected > ret;
530-
break;
531-
case RULE_RETURN_NE:
532-
hit = rule->expected != ret;
533-
break;
534-
default:
535-
continue;
536-
}
537-
if (!hit)
538-
continue;
539-
entry->rule = rule;
540-
if (!mode_has_context())
541-
break;
542-
switch (rule->level) {
543-
case RULE_INFO:
544-
break;
545-
case RULE_WARN:
546-
entry->ctx->status |= ANALY_CTX_WARN;
547-
break;
548-
case RULE_ERROR:
549-
entry->ctx->status |= ANALY_CTX_ERROR;
550-
break;
551-
}
552-
break;
553-
}
554-
}
555-
556-
DEFINE_ANALYZER_ENTRY(free, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK)
571+
DEFINE_ANALYZER_ENTRY(free, TRACE_MODE_CTX_MASK)
557572
{
558573
put_fake_analy_ctx(e->fake_ctx);
559574
hlist_del(&e->fake_ctx->hash);
560575
if (!trace_mode_intel())
561576
goto out;
562577

563-
rule_run(e, trace, 0);
578+
rule_run_ret(e, trace, 0);
564579
out:
565580
return RESULT_CONT;
566581
}
567582

568-
DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
569-
TRACE_MODE_DROP_MASK |
570-
TRACE_MODE_MONITOR_MASK)
583+
DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_ALL_MASK)
571584
{
572585
define_pure_event(drop_event_t, event, e->event);
573586
char *reason = NULL, *sym_str, *info;
@@ -594,7 +607,7 @@ DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
594607

595608
info = malloc(1024);
596609
info[0] = '\0';
597-
rule_run(e, trace, 0);
610+
rule_run_ret(e, trace, 0);
598611
sprintf(info, PFMT_EMPH_STR(" location")":\n\t%s", sym_str);
599612
if (trace_ctx.drop_reason) {
600613
sprintf_end(info, PFMT_EMPH_STR("\n drop reason")":\n\t%s",
@@ -605,7 +618,7 @@ DEFINE_ANALYZER_ENTRY(drop, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK |
605618
return RESULT_CONT;
606619
}
607620

608-
DEFINE_ANALYZER_EXIT(clone, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK)
621+
DEFINE_ANALYZER_EXIT(clone, TRACE_MODE_CTX_MASK)
609622
{
610623
analy_entry_t *entry = e->entry;
611624

@@ -617,23 +630,22 @@ DEFINE_ANALYZER_EXIT(clone, TRACE_MODE_TIMELINE_MASK | TRACE_MODE_DIAG_MASK)
617630
pr_debug("clone analyzer triggered on: %llx\n", e->event.val);
618631
analy_fake_ctx_alloc(e->event.val, entry->ctx);
619632
if (trace_mode_intel())
620-
rule_run(entry, trace, 0);
633+
rule_run_ret(entry, trace, 0);
621634
out:
622635
return RESULT_CONSUME;
623636
}
624637

625-
DEFINE_ANALYZER_EXIT(ret, TRACE_MODE_DIAG_MASK |
626-
TRACE_MODE_MONITOR_MASK)
638+
DEFINE_ANALYZER_EXIT(ret, TRACE_MODE_CTX_MASK)
627639
{
628640
int ret = (int) e->event.val;
629641

630-
rule_run(e->entry, trace, ret);
642+
rule_run_ret(e->entry, trace, ret);
631643
return RESULT_CONT;
632644
}
633645

634-
DEFINE_ANALYZER_ENTRY(default, TRACE_MODE_DIAG_MASK)
646+
DEFINE_ANALYZER_ENTRY(default, TRACE_MODE_ALL_MASK)
635647
{
636-
rule_run(e, trace, 0);
648+
rule_run_any(e, trace);
637649
return RESULT_CONT;
638650
}
639651

@@ -670,10 +682,7 @@ const char *pf_names[] = {
670682
[NFPROTO_IPV6] = "ipv6",
671683
[NFPROTO_DECNET] = "decnet",
672684
};
673-
DEFINE_ANALYZER_ENTRY(nf, TRACE_MODE_DIAG_MASK |
674-
TRACE_MODE_BASIC_MASK |
675-
TRACE_MODE_TIMELINE_MASK |
676-
TRACE_MODE_MONITOR_MASK)
685+
DEFINE_ANALYZER_ENTRY(nf, TRACE_MODE_ALL_MASK)
677686
{
678687
define_pure_event(nf_hooks_event_t, event, e->event);
679688
char *msg = malloc(1024), *extinfo;
@@ -708,10 +717,7 @@ DEFINE_ANALYZER_ENTRY(nf, TRACE_MODE_DIAG_MASK |
708717
}
709718
DEFINE_ANALYZER_EXIT_FUNC_DEFAULT(nf)
710719

711-
DEFINE_ANALYZER_ENTRY(iptable, TRACE_MODE_DIAG_MASK |
712-
TRACE_MODE_BASIC_MASK |
713-
TRACE_MODE_TIMELINE_MASK |
714-
TRACE_MODE_MONITOR_MASK)
720+
DEFINE_ANALYZER_ENTRY(iptable, TRACE_MODE_ALL_MASK)
715721
{
716722
define_pure_event(nf_event_t, event, e->event);
717723
char *msg = malloc(1024);
@@ -730,10 +736,7 @@ DEFINE_ANALYZER_ENTRY(iptable, TRACE_MODE_DIAG_MASK |
730736
}
731737
DEFINE_ANALYZER_EXIT_FUNC_DEFAULT(iptable)
732738

733-
DEFINE_ANALYZER_ENTRY(qdisc, TRACE_MODE_DIAG_MASK |
734-
TRACE_MODE_BASIC_MASK |
735-
TRACE_MODE_TIMELINE_MASK |
736-
TRACE_MODE_MONITOR_MASK)
739+
DEFINE_ANALYZER_ENTRY(qdisc, TRACE_MODE_ALL_MASK)
737740
{
738741
define_pure_event(qdisc_event_t, event, e->event);
739742
char *msg = malloc(1024);

src/analysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ typedef struct analyzer {
114114
#define DEFINE_ANALYZER_EXIT_FUNC_DEFAULT(name) \
115115
DEFINE_ANALYZER_EXIT_FUNC(name) \
116116
{ \
117-
rule_run(e->entry, trace, e->event.val); \
117+
rule_run_ret(e->entry, trace, e->event.val); \
118118
return RESULT_CONT; \
119119
}
120120

src/progs/shared.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,14 @@ typedef struct {
136136
#define TRACE_MODE_DROP_MASK (1 << TRACE_MODE_DROP)
137137
#define TRACE_MODE_SOCK_MASK (1 << TRACE_MODE_SOCK)
138138
#define TRACE_MODE_MONITOR_MASK (1 << TRACE_MODE_MONITOR)
139+
#define TRACE_MODE_SKB_MASK \
140+
(TRACE_MODE_BASIC_MASK | TRACE_MODE_TIMELINE_MASK | \
141+
TRACE_MODE_DIAG_MASK | TRACE_MODE_DROP_MASK | \
142+
TRACE_MODE_MONITOR_MASK)
143+
#define TRACE_MODE_ALL_MASK \
144+
(TRACE_MODE_SKB_MASK | TRACE_MODE_SOCK_MASK)
145+
#define TRACE_MODE_CTX_MASK \
146+
(TRACE_MODE_DIAG_MASK | TRACE_MODE_TIMELINE_MASK)
139147

140148
#define __MACRO_SIZE(macro) sizeof(#macro)
141149
#define MACRO_SIZE(macro) __MACRO_SIZE(macro)

0 commit comments

Comments
 (0)