Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49e19ec7 authored by David Howells's avatar David Howells
Browse files

rxrpc: Add tracepoints to record received packets and end of data_ready



Add two tracepoints:

 (1) Record the RxRPC protocol header of packets retrieved from the UDP
     socket by the data_ready handler.

 (2) Record the outcome of the data_ready handler.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent 2ab27215
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -80,6 +80,44 @@ TRACE_EVENT(rxrpc_skb,
		      __entry->where)
	    );

TRACE_EVENT(rxrpc_rx_packet,
	    TP_PROTO(struct rxrpc_skb_priv *sp),

	    TP_ARGS(sp),

	    TP_STRUCT__entry(
		    __field_struct(struct rxrpc_host_header,	hdr		)
			     ),

	    TP_fast_assign(
		    memcpy(&__entry->hdr, &sp->hdr, sizeof(__entry->hdr));
			   ),

	    TP_printk("%08x:%08x:%08x:%04x %08x %08x %02x %02x",
		      __entry->hdr.epoch, __entry->hdr.cid,
		      __entry->hdr.callNumber, __entry->hdr.serviceId,
		      __entry->hdr.serial, __entry->hdr.seq,
		      __entry->hdr.type, __entry->hdr.flags)
	    );

TRACE_EVENT(rxrpc_rx_done,
	    TP_PROTO(int result, int abort_code),

	    TP_ARGS(result, abort_code),

	    TP_STRUCT__entry(
		    __field(int,			result		)
		    __field(int,			abort_code	)
			     ),

	    TP_fast_assign(
		    __entry->result = result;
		    __entry->abort_code = abort_code;
			   ),

	    TP_printk("r=%d a=%d", __entry->result, __entry->abort_code)
	    );

TRACE_EVENT(rxrpc_abort,
	    TP_PROTO(const char *why, u32 cid, u32 call_id, rxrpc_seq_t seq,
		     int abort_code, int error),
+6 −2
Original line number Diff line number Diff line
@@ -683,6 +683,7 @@ void rxrpc_data_ready(struct sock *sk)
	/* dig out the RxRPC connection details */
	if (rxrpc_extract_header(sp, skb) < 0)
		goto bad_message;
	trace_rxrpc_rx_packet(sp);

	_net("Rx RxRPC %s ep=%x call=%x:%x",
	     sp->hdr.flags & RXRPC_CLIENT_INITIATED ? "ToServer" : "ToClient",
@@ -767,6 +768,7 @@ void rxrpc_data_ready(struct sock *sk)
out_unlock:
	rcu_read_unlock();
out:
	trace_rxrpc_rx_done(0, 0);
	return;

cant_route_call:
@@ -780,7 +782,7 @@ void rxrpc_data_ready(struct sock *sk)
			skb_queue_tail(&local->accept_queue, skb);
			rxrpc_queue_work(&local->processor);
			_leave(" [incoming]");
			return;
			goto out;
		}
		skb->priority = RX_INVALID_OPERATION;
	} else {
@@ -789,7 +791,7 @@ void rxrpc_data_ready(struct sock *sk)

	if (sp->hdr.type != RXRPC_PACKET_TYPE_ABORT) {
		_debug("reject type %d",sp->hdr.type);
		rxrpc_reject_packet(local, skb);
		goto reject_packet;
	} else {
		rxrpc_free_skb(skb);
	}
@@ -798,6 +800,8 @@ void rxrpc_data_ready(struct sock *sk)

bad_message:
	skb->priority = RX_PROTOCOL_ERROR;
reject_packet:
	trace_rxrpc_rx_done(skb->mark, skb->priority);
	rxrpc_reject_packet(local, skb);
	_leave(" [badmsg]");
}