1b4b9771bSTuong Lien /* 2b4b9771bSTuong Lien * net/tipc/trace.h: TIPC tracepoints 3b4b9771bSTuong Lien * 4b4b9771bSTuong Lien * Copyright (c) 2018, Ericsson AB 5b4b9771bSTuong Lien * All rights reserved. 6b4b9771bSTuong Lien * 7b4b9771bSTuong Lien * Redistribution and use in source and binary forms, with or without 8b4b9771bSTuong Lien * modification, are permitted provided that the following conditions are met: 9b4b9771bSTuong Lien * 10b4b9771bSTuong Lien * 1. Redistributions of source code must retain the above copyright 11b4b9771bSTuong Lien * notice, this list of conditions and the following disclaimer. 12b4b9771bSTuong Lien * 2. Redistributions in binary form must reproduce the above copyright 13b4b9771bSTuong Lien * notice, this list of conditions and the following disclaimer in the 14b4b9771bSTuong Lien * documentation and/or other materials provided with the distribution. 15b4b9771bSTuong Lien * 3. Neither the names of the copyright holders nor the names of its 16b4b9771bSTuong Lien * contributors may be used to endorse or promote products derived from 17b4b9771bSTuong Lien * this software without specific prior written permission. 18b4b9771bSTuong Lien * 19b4b9771bSTuong Lien * Alternatively, this software may be distributed under the terms of the 20b4b9771bSTuong Lien * GNU General Public License ("GPL") version 2 as published by the Free 21b4b9771bSTuong Lien * Software Foundation. 22b4b9771bSTuong Lien * 23b4b9771bSTuong Lien * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "ASIS" 24b4b9771bSTuong Lien * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE 25b4b9771bSTuong Lien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26b4b9771bSTuong Lien * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 27b4b9771bSTuong Lien * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28b4b9771bSTuong Lien * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29b4b9771bSTuong Lien * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30b4b9771bSTuong Lien * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 31b4b9771bSTuong Lien * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32b4b9771bSTuong Lien * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33b4b9771bSTuong Lien * POSSIBILITY OF SUCH DAMAGE. 34b4b9771bSTuong Lien */ 35b4b9771bSTuong Lien 36b4b9771bSTuong Lien #undef TRACE_SYSTEM 37b4b9771bSTuong Lien #define TRACE_SYSTEM tipc 38b4b9771bSTuong Lien 39b4b9771bSTuong Lien #if !defined(_TIPC_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 40b4b9771bSTuong Lien #define _TIPC_TRACE_H 41b4b9771bSTuong Lien 42b4b9771bSTuong Lien #include <linux/tracepoint.h> 43b4b9771bSTuong Lien #include "core.h" 44b4b9771bSTuong Lien #include "link.h" 45b4b9771bSTuong Lien #include "socket.h" 46b4b9771bSTuong Lien #include "node.h" 47b4b9771bSTuong Lien 48b4b9771bSTuong Lien #define SKB_LMIN (100) 49b4b9771bSTuong Lien #define SKB_LMAX (SKB_LMIN * 2) 50b4b9771bSTuong Lien #define LIST_LMIN (SKB_LMIN * 3) 51b4b9771bSTuong Lien #define LIST_LMAX (SKB_LMIN * 11) 52b4b9771bSTuong Lien #define SK_LMIN (SKB_LMIN * 2) 53b4b9771bSTuong Lien #define SK_LMAX (SKB_LMIN * 11) 54b4b9771bSTuong Lien #define LINK_LMIN (SKB_LMIN) 55b4b9771bSTuong Lien #define LINK_LMAX (SKB_LMIN * 16) 56b4b9771bSTuong Lien #define NODE_LMIN (SKB_LMIN) 57b4b9771bSTuong Lien #define NODE_LMAX (SKB_LMIN * 11) 58b4b9771bSTuong Lien 59b4b9771bSTuong Lien #ifndef __TIPC_TRACE_ENUM 60b4b9771bSTuong Lien #define __TIPC_TRACE_ENUM 61b4b9771bSTuong Lien enum { 62b4b9771bSTuong Lien TIPC_DUMP_NONE = 0, 63b4b9771bSTuong Lien 64b4b9771bSTuong Lien TIPC_DUMP_TRANSMQ = 1, 65b4b9771bSTuong Lien TIPC_DUMP_BACKLOGQ = (1 << 1), 66b4b9771bSTuong Lien TIPC_DUMP_DEFERDQ = (1 << 2), 67b4b9771bSTuong Lien TIPC_DUMP_INPUTQ = (1 << 3), 68b4b9771bSTuong Lien TIPC_DUMP_WAKEUP = (1 << 4), 69b4b9771bSTuong Lien 70b4b9771bSTuong Lien TIPC_DUMP_SK_SNDQ = (1 << 8), 71b4b9771bSTuong Lien TIPC_DUMP_SK_RCVQ = (1 << 9), 72b4b9771bSTuong Lien TIPC_DUMP_SK_BKLGQ = (1 << 10), 73b4b9771bSTuong Lien TIPC_DUMP_ALL = 0xffffu 74b4b9771bSTuong Lien }; 75b4b9771bSTuong Lien #endif 76b4b9771bSTuong Lien 7726574db0STuong Lien /* Link & Node FSM states: */ 7826574db0STuong Lien #define state_sym(val) \ 7926574db0STuong Lien __print_symbolic(val, \ 8026574db0STuong Lien {(0xe), "ESTABLISHED" },\ 8126574db0STuong Lien {(0xe << 4), "ESTABLISHING" },\ 8226574db0STuong Lien {(0x1 << 8), "RESET" },\ 8326574db0STuong Lien {(0x2 << 12), "RESETTING" },\ 8426574db0STuong Lien {(0xd << 16), "PEER_RESET" },\ 8526574db0STuong Lien {(0xf << 20), "FAILINGOVER" },\ 8626574db0STuong Lien {(0xc << 24), "SYNCHING" },\ 8726574db0STuong Lien {(0xdd), "SELF_DOWN_PEER_DOWN" },\ 8826574db0STuong Lien {(0xaa), "SELF_UP_PEER_UP" },\ 8926574db0STuong Lien {(0xd1), "SELF_DOWN_PEER_LEAVING" },\ 9026574db0STuong Lien {(0xac), "SELF_UP_PEER_COMING" },\ 9126574db0STuong Lien {(0xca), "SELF_COMING_PEER_UP" },\ 9226574db0STuong Lien {(0x1d), "SELF_LEAVING_PEER_DOWN" },\ 9326574db0STuong Lien {(0xf0), "FAILINGOVER" },\ 9426574db0STuong Lien {(0xcc), "SYNCHING" }) 9526574db0STuong Lien 9626574db0STuong Lien /* Link & Node FSM events: */ 9726574db0STuong Lien #define evt_sym(val) \ 9826574db0STuong Lien __print_symbolic(val, \ 9926574db0STuong Lien {(0xec1ab1e), "ESTABLISH_EVT" },\ 10026574db0STuong Lien {(0x9eed0e), "PEER_RESET_EVT" },\ 10126574db0STuong Lien {(0xfa110e), "FAILURE_EVT" },\ 10226574db0STuong Lien {(0x10ca1d0e), "RESET_EVT" },\ 10326574db0STuong Lien {(0xfa110bee), "FAILOVER_BEGIN_EVT" },\ 10426574db0STuong Lien {(0xfa110ede), "FAILOVER_END_EVT" },\ 10526574db0STuong Lien {(0xc1ccbee), "SYNCH_BEGIN_EVT" },\ 10626574db0STuong Lien {(0xc1ccede), "SYNCH_END_EVT" },\ 10726574db0STuong Lien {(0xece), "SELF_ESTABL_CONTACT_EVT" },\ 10826574db0STuong Lien {(0x1ce), "SELF_LOST_CONTACT_EVT" },\ 10926574db0STuong Lien {(0x9ece), "PEER_ESTABL_CONTACT_EVT" },\ 11026574db0STuong Lien {(0x91ce), "PEER_LOST_CONTACT_EVT" },\ 11126574db0STuong Lien {(0xfbe), "FAILOVER_BEGIN_EVT" },\ 11226574db0STuong Lien {(0xfee), "FAILOVER_END_EVT" },\ 11326574db0STuong Lien {(0xcbe), "SYNCH_BEGIN_EVT" },\ 11426574db0STuong Lien {(0xcee), "SYNCH_END_EVT" }) 11526574db0STuong Lien 116cf5f55f7STuong Lien /* Bearer, net device events: */ 117cf5f55f7STuong Lien #define dev_evt_sym(val) \ 118cf5f55f7STuong Lien __print_symbolic(val, \ 119cf5f55f7STuong Lien {(NETDEV_CHANGE), "NETDEV_CHANGE" },\ 120cf5f55f7STuong Lien {(NETDEV_GOING_DOWN), "NETDEV_GOING_DOWN" },\ 121cf5f55f7STuong Lien {(NETDEV_UP), "NETDEV_UP" },\ 122cf5f55f7STuong Lien {(NETDEV_CHANGEMTU), "NETDEV_CHANGEMTU" },\ 123cf5f55f7STuong Lien {(NETDEV_CHANGEADDR), "NETDEV_CHANGEADDR" },\ 124cf5f55f7STuong Lien {(NETDEV_UNREGISTER), "NETDEV_UNREGISTER" },\ 125cf5f55f7STuong Lien {(NETDEV_CHANGENAME), "NETDEV_CHANGENAME" }) 126cf5f55f7STuong Lien 12701e661ebSTuong Lien extern unsigned long sysctl_tipc_sk_filter[5] __read_mostly; 12801e661ebSTuong Lien 129b4b9771bSTuong Lien int tipc_skb_dump(struct sk_buff *skb, bool more, char *buf); 130b4b9771bSTuong Lien int tipc_list_dump(struct sk_buff_head *list, bool more, char *buf); 131b4b9771bSTuong Lien int tipc_sk_dump(struct sock *sk, u16 dqueues, char *buf); 132b4b9771bSTuong Lien int tipc_link_dump(struct tipc_link *l, u16 dqueues, char *buf); 133b4b9771bSTuong Lien int tipc_node_dump(struct tipc_node *n, bool more, char *buf); 13401e661ebSTuong Lien bool tipc_sk_filtering(struct sock *sk); 135b4b9771bSTuong Lien 136b4b9771bSTuong Lien DECLARE_EVENT_CLASS(tipc_skb_class, 137b4b9771bSTuong Lien 138b4b9771bSTuong Lien TP_PROTO(struct sk_buff *skb, bool more, const char *header), 139b4b9771bSTuong Lien 140b4b9771bSTuong Lien TP_ARGS(skb, more, header), 141b4b9771bSTuong Lien 142b4b9771bSTuong Lien TP_STRUCT__entry( 143b4b9771bSTuong Lien __string(header, header) 144b4b9771bSTuong Lien __dynamic_array(char, buf, (more) ? SKB_LMAX : SKB_LMIN) 145b4b9771bSTuong Lien ), 146b4b9771bSTuong Lien 147b4b9771bSTuong Lien TP_fast_assign( 148b4b9771bSTuong Lien __assign_str(header, header); 149b4b9771bSTuong Lien tipc_skb_dump(skb, more, __get_str(buf)); 150b4b9771bSTuong Lien ), 151b4b9771bSTuong Lien 152b4b9771bSTuong Lien TP_printk("%s\n%s", __get_str(header), __get_str(buf)) 153b4b9771bSTuong Lien ) 154b4b9771bSTuong Lien 155b4b9771bSTuong Lien #define DEFINE_SKB_EVENT(name) \ 156b4b9771bSTuong Lien DEFINE_EVENT(tipc_skb_class, name, \ 157b4b9771bSTuong Lien TP_PROTO(struct sk_buff *skb, bool more, const char *header), \ 158b4b9771bSTuong Lien TP_ARGS(skb, more, header)) 159b4b9771bSTuong Lien DEFINE_SKB_EVENT(tipc_skb_dump); 16026574db0STuong Lien DEFINE_SKB_EVENT(tipc_proto_build); 16126574db0STuong Lien DEFINE_SKB_EVENT(tipc_proto_rcv); 162b4b9771bSTuong Lien 163b4b9771bSTuong Lien DECLARE_EVENT_CLASS(tipc_list_class, 164b4b9771bSTuong Lien 165b4b9771bSTuong Lien TP_PROTO(struct sk_buff_head *list, bool more, const char *header), 166b4b9771bSTuong Lien 167b4b9771bSTuong Lien TP_ARGS(list, more, header), 168b4b9771bSTuong Lien 169b4b9771bSTuong Lien TP_STRUCT__entry( 170b4b9771bSTuong Lien __string(header, header) 171b4b9771bSTuong Lien __dynamic_array(char, buf, (more) ? LIST_LMAX : LIST_LMIN) 172b4b9771bSTuong Lien ), 173b4b9771bSTuong Lien 174b4b9771bSTuong Lien TP_fast_assign( 175b4b9771bSTuong Lien __assign_str(header, header); 176b4b9771bSTuong Lien tipc_list_dump(list, more, __get_str(buf)); 177b4b9771bSTuong Lien ), 178b4b9771bSTuong Lien 179b4b9771bSTuong Lien TP_printk("%s\n%s", __get_str(header), __get_str(buf)) 180b4b9771bSTuong Lien ); 181b4b9771bSTuong Lien 182b4b9771bSTuong Lien #define DEFINE_LIST_EVENT(name) \ 183b4b9771bSTuong Lien DEFINE_EVENT(tipc_list_class, name, \ 184b4b9771bSTuong Lien TP_PROTO(struct sk_buff_head *list, bool more, const char *header), \ 185b4b9771bSTuong Lien TP_ARGS(list, more, header)) 186b4b9771bSTuong Lien DEFINE_LIST_EVENT(tipc_list_dump); 187b4b9771bSTuong Lien 188b4b9771bSTuong Lien DECLARE_EVENT_CLASS(tipc_sk_class, 189b4b9771bSTuong Lien 190b4b9771bSTuong Lien TP_PROTO(struct sock *sk, struct sk_buff *skb, u16 dqueues, 191b4b9771bSTuong Lien const char *header), 192b4b9771bSTuong Lien 193b4b9771bSTuong Lien TP_ARGS(sk, skb, dqueues, header), 194b4b9771bSTuong Lien 195b4b9771bSTuong Lien TP_STRUCT__entry( 196b4b9771bSTuong Lien __string(header, header) 197b4b9771bSTuong Lien __field(u32, portid) 198b4b9771bSTuong Lien __dynamic_array(char, buf, (dqueues) ? SK_LMAX : SK_LMIN) 199b4b9771bSTuong Lien __dynamic_array(char, skb_buf, (skb) ? SKB_LMIN : 1) 200b4b9771bSTuong Lien ), 201b4b9771bSTuong Lien 202b4b9771bSTuong Lien TP_fast_assign( 203b4b9771bSTuong Lien __assign_str(header, header); 204b4b9771bSTuong Lien __entry->portid = tipc_sock_get_portid(sk); 205b4b9771bSTuong Lien tipc_sk_dump(sk, dqueues, __get_str(buf)); 206b4b9771bSTuong Lien if (skb) 207b4b9771bSTuong Lien tipc_skb_dump(skb, false, __get_str(skb_buf)); 208b4b9771bSTuong Lien else 209b4b9771bSTuong Lien *(__get_str(skb_buf)) = '\0'; 210b4b9771bSTuong Lien ), 211b4b9771bSTuong Lien 212b4b9771bSTuong Lien TP_printk("<%u> %s\n%s%s", __entry->portid, __get_str(header), 213b4b9771bSTuong Lien __get_str(skb_buf), __get_str(buf)) 214b4b9771bSTuong Lien ); 215b4b9771bSTuong Lien 21601e661ebSTuong Lien #define DEFINE_SK_EVENT_FILTER(name) \ 21701e661ebSTuong Lien DEFINE_EVENT_CONDITION(tipc_sk_class, name, \ 218b4b9771bSTuong Lien TP_PROTO(struct sock *sk, struct sk_buff *skb, u16 dqueues, \ 219b4b9771bSTuong Lien const char *header), \ 22001e661ebSTuong Lien TP_ARGS(sk, skb, dqueues, header), \ 22101e661ebSTuong Lien TP_CONDITION(tipc_sk_filtering(sk))) 22201e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_dump); 22301e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_create); 22401e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_sendmcast); 22501e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_sendmsg); 22601e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_sendstream); 22701e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_poll); 22801e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_filter_rcv); 22901e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_advance_rx); 23001e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_rej_msg); 23101e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_drop_msg); 23201e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_release); 23301e661ebSTuong Lien DEFINE_SK_EVENT_FILTER(tipc_sk_shutdown); 23401e661ebSTuong Lien 23501e661ebSTuong Lien #define DEFINE_SK_EVENT_FILTER_COND(name, cond) \ 23601e661ebSTuong Lien DEFINE_EVENT_CONDITION(tipc_sk_class, name, \ 23701e661ebSTuong Lien TP_PROTO(struct sock *sk, struct sk_buff *skb, u16 dqueues, \ 23801e661ebSTuong Lien const char *header), \ 23901e661ebSTuong Lien TP_ARGS(sk, skb, dqueues, header), \ 24001e661ebSTuong Lien TP_CONDITION(tipc_sk_filtering(sk) && (cond))) 24101e661ebSTuong Lien DEFINE_SK_EVENT_FILTER_COND(tipc_sk_overlimit1, tipc_sk_overlimit1(sk, skb)); 24201e661ebSTuong Lien DEFINE_SK_EVENT_FILTER_COND(tipc_sk_overlimit2, tipc_sk_overlimit2(sk, skb)); 243b4b9771bSTuong Lien 244b4b9771bSTuong Lien DECLARE_EVENT_CLASS(tipc_link_class, 245b4b9771bSTuong Lien 246b4b9771bSTuong Lien TP_PROTO(struct tipc_link *l, u16 dqueues, const char *header), 247b4b9771bSTuong Lien 248b4b9771bSTuong Lien TP_ARGS(l, dqueues, header), 249b4b9771bSTuong Lien 250b4b9771bSTuong Lien TP_STRUCT__entry( 251b4b9771bSTuong Lien __string(header, header) 252b4b9771bSTuong Lien __array(char, name, TIPC_MAX_LINK_NAME) 253b4b9771bSTuong Lien __dynamic_array(char, buf, (dqueues) ? LINK_LMAX : LINK_LMIN) 254b4b9771bSTuong Lien ), 255b4b9771bSTuong Lien 256b4b9771bSTuong Lien TP_fast_assign( 257b4b9771bSTuong Lien __assign_str(header, header); 258*03b6fefdSTuong Lien memcpy(__entry->name, tipc_link_name(l), TIPC_MAX_LINK_NAME); 259b4b9771bSTuong Lien tipc_link_dump(l, dqueues, __get_str(buf)); 260b4b9771bSTuong Lien ), 261b4b9771bSTuong Lien 262b4b9771bSTuong Lien TP_printk("<%s> %s\n%s", __entry->name, __get_str(header), 263b4b9771bSTuong Lien __get_str(buf)) 264b4b9771bSTuong Lien ); 265b4b9771bSTuong Lien 266b4b9771bSTuong Lien #define DEFINE_LINK_EVENT(name) \ 267b4b9771bSTuong Lien DEFINE_EVENT(tipc_link_class, name, \ 268b4b9771bSTuong Lien TP_PROTO(struct tipc_link *l, u16 dqueues, const char *header), \ 269b4b9771bSTuong Lien TP_ARGS(l, dqueues, header)) 270b4b9771bSTuong Lien DEFINE_LINK_EVENT(tipc_link_dump); 27126574db0STuong Lien DEFINE_LINK_EVENT(tipc_link_conges); 27226574db0STuong Lien DEFINE_LINK_EVENT(tipc_link_timeout); 27326574db0STuong Lien DEFINE_LINK_EVENT(tipc_link_reset); 27426574db0STuong Lien 27526574db0STuong Lien #define DEFINE_LINK_EVENT_COND(name, cond) \ 27626574db0STuong Lien DEFINE_EVENT_CONDITION(tipc_link_class, name, \ 27726574db0STuong Lien TP_PROTO(struct tipc_link *l, u16 dqueues, const char *header), \ 27826574db0STuong Lien TP_ARGS(l, dqueues, header), \ 27926574db0STuong Lien TP_CONDITION(cond)) 28026574db0STuong Lien DEFINE_LINK_EVENT_COND(tipc_link_too_silent, tipc_link_too_silent(l)); 28126574db0STuong Lien 28226574db0STuong Lien DECLARE_EVENT_CLASS(tipc_link_transmq_class, 28326574db0STuong Lien 28426574db0STuong Lien TP_PROTO(struct tipc_link *r, u16 f, u16 t, struct sk_buff_head *tq), 28526574db0STuong Lien 28626574db0STuong Lien TP_ARGS(r, f, t, tq), 28726574db0STuong Lien 28826574db0STuong Lien TP_STRUCT__entry( 28926574db0STuong Lien __array(char, name, TIPC_MAX_LINK_NAME) 29026574db0STuong Lien __field(u16, from) 29126574db0STuong Lien __field(u16, to) 29226574db0STuong Lien __field(u32, len) 29326574db0STuong Lien __field(u16, fseqno) 29426574db0STuong Lien __field(u16, lseqno) 29526574db0STuong Lien ), 29626574db0STuong Lien 29726574db0STuong Lien TP_fast_assign( 298*03b6fefdSTuong Lien memcpy(__entry->name, tipc_link_name(r), TIPC_MAX_LINK_NAME); 29926574db0STuong Lien __entry->from = f; 30026574db0STuong Lien __entry->to = t; 30126574db0STuong Lien __entry->len = skb_queue_len(tq); 302c6ed7a5cSTuong Lien __entry->fseqno = __entry->len ? 303c6ed7a5cSTuong Lien msg_seqno(buf_msg(skb_peek(tq))) : 0; 304c6ed7a5cSTuong Lien __entry->lseqno = __entry->len ? 305c6ed7a5cSTuong Lien msg_seqno(buf_msg(skb_peek_tail(tq))) : 0; 30626574db0STuong Lien ), 30726574db0STuong Lien 30826574db0STuong Lien TP_printk("<%s> retrans req: [%u-%u] transmq: %u [%u-%u]\n", 30926574db0STuong Lien __entry->name, __entry->from, __entry->to, 31026574db0STuong Lien __entry->len, __entry->fseqno, __entry->lseqno) 31126574db0STuong Lien ); 31226574db0STuong Lien 313c6ed7a5cSTuong Lien DEFINE_EVENT_CONDITION(tipc_link_transmq_class, tipc_link_retrans, 31426574db0STuong Lien TP_PROTO(struct tipc_link *r, u16 f, u16 t, struct sk_buff_head *tq), 315c6ed7a5cSTuong Lien TP_ARGS(r, f, t, tq), 316c6ed7a5cSTuong Lien TP_CONDITION(less_eq(f, t)) 31726574db0STuong Lien ); 31826574db0STuong Lien 31926574db0STuong Lien DEFINE_EVENT_PRINT(tipc_link_transmq_class, tipc_link_bc_ack, 32026574db0STuong Lien TP_PROTO(struct tipc_link *r, u16 f, u16 t, struct sk_buff_head *tq), 32126574db0STuong Lien TP_ARGS(r, f, t, tq), 322c6ed7a5cSTuong Lien TP_printk("<%s> acked: %u gap: %u transmq: %u [%u-%u]\n", 32326574db0STuong Lien __entry->name, __entry->from, __entry->to, 32426574db0STuong Lien __entry->len, __entry->fseqno, __entry->lseqno) 32526574db0STuong Lien ); 326b4b9771bSTuong Lien 327b4b9771bSTuong Lien DECLARE_EVENT_CLASS(tipc_node_class, 328b4b9771bSTuong Lien 329b4b9771bSTuong Lien TP_PROTO(struct tipc_node *n, bool more, const char *header), 330b4b9771bSTuong Lien 331b4b9771bSTuong Lien TP_ARGS(n, more, header), 332b4b9771bSTuong Lien 333b4b9771bSTuong Lien TP_STRUCT__entry( 334b4b9771bSTuong Lien __string(header, header) 335b4b9771bSTuong Lien __field(u32, addr) 336b4b9771bSTuong Lien __dynamic_array(char, buf, (more) ? NODE_LMAX : NODE_LMIN) 337b4b9771bSTuong Lien ), 338b4b9771bSTuong Lien 339b4b9771bSTuong Lien TP_fast_assign( 340b4b9771bSTuong Lien __assign_str(header, header); 341b4b9771bSTuong Lien __entry->addr = tipc_node_get_addr(n); 342b4b9771bSTuong Lien tipc_node_dump(n, more, __get_str(buf)); 343b4b9771bSTuong Lien ), 344b4b9771bSTuong Lien 345b4b9771bSTuong Lien TP_printk("<%x> %s\n%s", __entry->addr, __get_str(header), 346b4b9771bSTuong Lien __get_str(buf)) 347b4b9771bSTuong Lien ); 348b4b9771bSTuong Lien 349b4b9771bSTuong Lien #define DEFINE_NODE_EVENT(name) \ 350b4b9771bSTuong Lien DEFINE_EVENT(tipc_node_class, name, \ 351b4b9771bSTuong Lien TP_PROTO(struct tipc_node *n, bool more, const char *header), \ 352b4b9771bSTuong Lien TP_ARGS(n, more, header)) 353b4b9771bSTuong Lien DEFINE_NODE_EVENT(tipc_node_dump); 354eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_create); 355eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_delete); 356eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_lost_contact); 357eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_timeout); 358eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_link_up); 359eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_link_down); 360eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_reset_links); 361eb18a510STuong Lien DEFINE_NODE_EVENT(tipc_node_check_state); 362b4b9771bSTuong Lien 36326574db0STuong Lien DECLARE_EVENT_CLASS(tipc_fsm_class, 36426574db0STuong Lien 36526574db0STuong Lien TP_PROTO(const char *name, u32 os, u32 ns, int evt), 36626574db0STuong Lien 36726574db0STuong Lien TP_ARGS(name, os, ns, evt), 36826574db0STuong Lien 36926574db0STuong Lien TP_STRUCT__entry( 37026574db0STuong Lien __string(name, name) 37126574db0STuong Lien __field(u32, os) 37226574db0STuong Lien __field(u32, ns) 37326574db0STuong Lien __field(u32, evt) 37426574db0STuong Lien ), 37526574db0STuong Lien 37626574db0STuong Lien TP_fast_assign( 37726574db0STuong Lien __assign_str(name, name); 37826574db0STuong Lien __entry->os = os; 37926574db0STuong Lien __entry->ns = ns; 38026574db0STuong Lien __entry->evt = evt; 38126574db0STuong Lien ), 38226574db0STuong Lien 38326574db0STuong Lien TP_printk("<%s> %s--(%s)->%s\n", __get_str(name), 38426574db0STuong Lien state_sym(__entry->os), evt_sym(__entry->evt), 38526574db0STuong Lien state_sym(__entry->ns)) 38626574db0STuong Lien ); 38726574db0STuong Lien 38826574db0STuong Lien #define DEFINE_FSM_EVENT(fsm_name) \ 38926574db0STuong Lien DEFINE_EVENT(tipc_fsm_class, fsm_name, \ 39026574db0STuong Lien TP_PROTO(const char *name, u32 os, u32 ns, int evt), \ 39126574db0STuong Lien TP_ARGS(name, os, ns, evt)) 39226574db0STuong Lien DEFINE_FSM_EVENT(tipc_link_fsm); 393eb18a510STuong Lien DEFINE_FSM_EVENT(tipc_node_fsm); 39426574db0STuong Lien 395cf5f55f7STuong Lien TRACE_EVENT(tipc_l2_device_event, 396cf5f55f7STuong Lien 397cf5f55f7STuong Lien TP_PROTO(struct net_device *dev, struct tipc_bearer *b, 398cf5f55f7STuong Lien unsigned long evt), 399cf5f55f7STuong Lien 400cf5f55f7STuong Lien TP_ARGS(dev, b, evt), 401cf5f55f7STuong Lien 402cf5f55f7STuong Lien TP_STRUCT__entry( 403cf5f55f7STuong Lien __string(dev_name, dev->name) 404cf5f55f7STuong Lien __string(b_name, b->name) 405cf5f55f7STuong Lien __field(unsigned long, evt) 406cf5f55f7STuong Lien __field(u8, b_up) 407cf5f55f7STuong Lien __field(u8, carrier) 408cf5f55f7STuong Lien __field(u8, oper) 409cf5f55f7STuong Lien ), 410cf5f55f7STuong Lien 411cf5f55f7STuong Lien TP_fast_assign( 412cf5f55f7STuong Lien __assign_str(dev_name, dev->name); 413cf5f55f7STuong Lien __assign_str(b_name, b->name); 414cf5f55f7STuong Lien __entry->evt = evt; 415cf5f55f7STuong Lien __entry->b_up = test_bit(0, &b->up); 416cf5f55f7STuong Lien __entry->carrier = netif_carrier_ok(dev); 417cf5f55f7STuong Lien __entry->oper = netif_oper_up(dev); 418cf5f55f7STuong Lien ), 419cf5f55f7STuong Lien 420cf5f55f7STuong Lien TP_printk("%s on: <%s>/<%s> oper: %s carrier: %s bearer: %s\n", 421cf5f55f7STuong Lien dev_evt_sym(__entry->evt), __get_str(dev_name), 422cf5f55f7STuong Lien __get_str(b_name), (__entry->oper) ? "up" : "down", 423cf5f55f7STuong Lien (__entry->carrier) ? "ok" : "notok", 424cf5f55f7STuong Lien (__entry->b_up) ? "up" : "down") 425cf5f55f7STuong Lien ); 426cf5f55f7STuong Lien 427b4b9771bSTuong Lien #endif /* _TIPC_TRACE_H */ 428b4b9771bSTuong Lien 429b4b9771bSTuong Lien /* This part must be outside protection */ 430b4b9771bSTuong Lien #undef TRACE_INCLUDE_PATH 431b4b9771bSTuong Lien #define TRACE_INCLUDE_PATH . 432b4b9771bSTuong Lien #undef TRACE_INCLUDE_FILE 433b4b9771bSTuong Lien #define TRACE_INCLUDE_FILE trace 434b4b9771bSTuong Lien #include <trace/define_trace.h> 435