The commit adds the new trace_events for TIPC node object:

trace_tipc_node_create()
trace_tipc_node_delete()
trace_tipc_node_lost_contact()
trace_tipc_node_timeout()
trace_tipc_node_link_up()
trace_tipc_node_link_down()
trace_tipc_node_reset_links()
trace_tipc_node_fsm_evt()
trace_tipc_node_check_state()

Also, enables the traces for the following cases:
- When a node is created/deleted;
- When a node contact is lost;
- When a node timer is timed out;
- When a node link is up/down;
- When all node links are reset;
- When node state is changed;
- When a skb comes and node state needs to be checked/updated.

Signed-off-by: Tuong Lien <tuong.t.l...@dektech.com.au>
---
 net/tipc/node.c  | 19 +++++++++++++++++++
 net/tipc/trace.h |  9 +++++++++
 2 files changed, 28 insertions(+)

diff --git a/net/tipc/node.c b/net/tipc/node.c
index 06e704ff6b15..26ce66390d69 100644
--- a/net/tipc/node.c
+++ b/net/tipc/node.c
@@ -157,6 +157,10 @@ enum {
 static const char *link_lost = "error: link lost!";
 static const char *link_failover = "warning: link lost -> failover!";
 static const char *proto_invalid = "error: msg invalid, node check failed!";
+static const char *link_down = "error: node link down!";
+static const char *link_down2 = "warning: node link down <- failover!";
+static const char *node_lost = "error: node contact lost!";
+static const char *all_link_rst = "error: all node links reset!";
 
 static void __tipc_node_link_down(struct tipc_node *n, int *bearer_id,
                                  struct sk_buff_head *xmitq,
@@ -439,6 +443,7 @@ static struct tipc_node *tipc_node_create(struct net *net, 
u32 addr,
                        break;
        }
        list_add_tail_rcu(&n->list, &temp_node->list);
+       trace_tipc_node_create(n, true, " ");
 exit:
        spin_unlock_bh(&tn->node_list_lock);
        return n;
@@ -466,6 +471,7 @@ static void tipc_node_delete_from_list(struct tipc_node 
*node)
 
 static void tipc_node_delete(struct tipc_node *node)
 {
+       trace_tipc_node_delete(node, true, " ");
        tipc_node_delete_from_list(node);
 
        del_timer_sync(&node->timer);
@@ -620,6 +626,7 @@ static void tipc_node_timeout(struct timer_list *t)
        int bearer_id;
        int rc = 0;
 
+       trace_tipc_node_timeout(n, false, " ");
        if (!node_is_up(n) && tipc_node_cleanup(n)) {
                /*Removing the reference of Timer*/
                tipc_node_put(n);
@@ -679,6 +686,7 @@ static void __tipc_node_link_up(struct tipc_node *n, int 
bearer_id,
 
        pr_debug("Established link <%s> on network plane %c\n",
                 tipc_link_name(nl), tipc_link_plane(nl));
+       trace_tipc_node_link_up(n, true, " ");
 
        /* Ensure that a STATE message goes first */
        tipc_link_build_state_msg(nl, xmitq);
@@ -837,6 +845,7 @@ static void tipc_node_link_down(struct tipc_node *n, int 
bearer_id, bool delete)
                tipc_mon_remove_peer(n->net, n->addr, old_bearer_id);
        tipc_bearer_xmit(n->net, bearer_id, &xmitq, maddr);
        tipc_sk_rcv(n->net, &le->inputq);
+       trace_tipc_node_link_down(n, true, link_down);
 }
 
 static bool node_is_up(struct tipc_node *n)
@@ -1060,6 +1069,7 @@ static void tipc_node_reset_links(struct tipc_node *n)
        int i;
 
        pr_warn("Resetting all links to %x\n", n->addr);
+       trace_tipc_node_reset_links(n, true, all_link_rst);
 
        for (i = 0; i < MAX_BEARERS; i++) {
                tipc_node_link_down(n, i, false);
@@ -1236,6 +1246,8 @@ static void tipc_node_fsm_evt(struct tipc_node *n, int 
evt)
                pr_err("Unknown node fsm state %x\n", state);
                break;
        }
+
+       trace_tipc_node_fsm(n->peer_id, n->state, state, evt);
        n->state = state;
        return;
 
@@ -1254,6 +1266,7 @@ static void node_lost_contact(struct tipc_node *n,
 
        pr_debug("Lost contact with %x\n", n->addr);
        n->delete_at = jiffies + msecs_to_jiffies(NODE_CLEANUP_AFTER);
+       trace_tipc_node_lost_contact(n, true, node_lost);
 
        /* Clean up broadcast state */
        tipc_bcast_remove_peer(n->net, n->bc_entry.link);
@@ -1578,6 +1591,11 @@ static bool tipc_node_check_state(struct tipc_node *n, 
struct sk_buff *skb,
        struct tipc_media_addr *maddr;
        int pb_id;
 
+       if (trace_tipc_node_check_state_enabled()) {
+               trace_tipc_skb_dump(skb, false, "skb for node state check");
+               trace_tipc_node_check_state(n, true, " ");
+       }
+
        l = n->links[bearer_id].link;
        if (!l)
                return false;
@@ -1629,6 +1647,7 @@ static bool tipc_node_check_state(struct tipc_node *n, 
struct sk_buff *skb,
                syncpt = oseqno + exp_pkts - 1;
                if (pl && tipc_link_is_up(pl)) {
                        __tipc_node_link_down(n, &pb_id, xmitq, &maddr);
+                       trace_tipc_node_link_down(n, true, link_down2);
                        tipc_skb_queue_splice_tail_init(tipc_link_inputq(pl),
                                                        tipc_link_inputq(l));
                }
diff --git a/net/tipc/trace.h b/net/tipc/trace.h
index 9f70156690bf..7d95d05d597b 100644
--- a/net/tipc/trace.h
+++ b/net/tipc/trace.h
@@ -328,6 +328,14 @@ DEFINE_EVENT(tipc_node_class, name, \
        TP_PROTO(struct tipc_node *n, bool more, const char *header), \
        TP_ARGS(n, more, header))
 DEFINE_NODE_EVENT(tipc_node_dump);
+DEFINE_NODE_EVENT(tipc_node_create);
+DEFINE_NODE_EVENT(tipc_node_delete);
+DEFINE_NODE_EVENT(tipc_node_lost_contact);
+DEFINE_NODE_EVENT(tipc_node_timeout);
+DEFINE_NODE_EVENT(tipc_node_link_up);
+DEFINE_NODE_EVENT(tipc_node_link_down);
+DEFINE_NODE_EVENT(tipc_node_reset_links);
+DEFINE_NODE_EVENT(tipc_node_check_state);
 
 DECLARE_EVENT_CLASS(tipc_fsm_class,
 
@@ -359,6 +367,7 @@ DEFINE_EVENT(tipc_fsm_class, fsm_name, \
        TP_PROTO(const char *name, u32 os, u32 ns, int evt), \
        TP_ARGS(name, os, ns, evt))
 DEFINE_FSM_EVENT(tipc_link_fsm);
+DEFINE_FSM_EVENT(tipc_node_fsm);
 
 #endif /* _TIPC_TRACE_H */
 
-- 
2.13.7



_______________________________________________
tipc-discussion mailing list
tipc-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tipc-discussion

Reply via email to