Commit fba69957 authored by David Howells's avatar David Howells Committed by Jakub Kicinski
Browse files

rxrpc: Add more CHALLENGE/RESPONSE packet tracing



Add more tracing for CHALLENGE and RESPONSE packets.  Currently, rxrpc only
has client-relevant tracepoints (rx_challenge and tx_response), but add the
server-side ones too.

Further, record the service ID in the rx_challenge tracepoint as well.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/20250411095303.2316168-14-dhowells@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent d98c317f
Loading
Loading
Loading
Loading
+77 −1
Original line number Diff line number Diff line
@@ -1201,6 +1201,39 @@ TRACE_EVENT(rxrpc_rx_conn_abort,
		      __entry->abort_code)
	    );

TRACE_EVENT(rxrpc_tx_challenge,
	    TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
		     u32 version, u32 nonce),

	    TP_ARGS(conn, serial, version, nonce),

	    TP_STRUCT__entry(
		    __field(unsigned int,	conn)
		    __field(rxrpc_serial_t,	serial)
		    __field(u32,		version)
		    __field(u32,		nonce)
		    __field(u16,		service_id)
		    __field(u8,			security_ix)
			     ),

	    TP_fast_assign(
		    __entry->conn = conn->debug_id;
		    __entry->serial = serial;
		    __entry->version = version;
		    __entry->nonce = nonce;
		    __entry->service_id = conn->service_id;
		    __entry->security_ix = conn->security_ix;
			   ),

	    TP_printk("C=%08x CHALLENGE r=%08x sv=%u+%u v=%x n=%x",
		      __entry->conn,
		      __entry->serial,
		      __entry->service_id,
		      __entry->security_ix,
		      __entry->version,
		      __entry->nonce)
	    );

TRACE_EVENT(rxrpc_rx_challenge,
	    TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
		     u32 version, u32 nonce, u32 min_level),
@@ -1213,6 +1246,7 @@ TRACE_EVENT(rxrpc_rx_challenge,
		    __field(u32,		version)
		    __field(u32,		nonce)
		    __field(u32,		min_level)
		    __field(u16,		service_id)
		    __field(u8,			security_ix)
			     ),

@@ -1222,18 +1256,60 @@ TRACE_EVENT(rxrpc_rx_challenge,
		    __entry->version = version;
		    __entry->nonce = nonce;
		    __entry->min_level = min_level;
		    __entry->service_id = conn->service_id;
		    __entry->security_ix = conn->security_ix;
			   ),

	    TP_printk("C=%08x CHALLENGE r=%08x sx=%u v=%x n=%x ml=%x",
	    TP_printk("C=%08x CHALLENGE r=%08x sv=%u+%u v=%x n=%x ml=%x",
		      __entry->conn,
		      __entry->serial,
		      __entry->service_id,
		      __entry->security_ix,
		      __entry->version,
		      __entry->nonce,
		      __entry->min_level)
	    );

TRACE_EVENT(rxrpc_tx_response,
	    TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
		     struct rxrpc_skb_priv *rsp),

	    TP_ARGS(conn, serial, rsp),

	    TP_STRUCT__entry(
		    __field(unsigned int,	conn)
		    __field(rxrpc_serial_t,	serial)
		    __field(rxrpc_serial_t,	challenge)
		    __field(u32,		version)
		    __field(u32,		kvno)
		    __field(u16,		ticket_len)
		    __field(u16,		appdata_len)
		    __field(u16,		service_id)
		    __field(u8,			security_ix)
			     ),

	    TP_fast_assign(
		    __entry->conn	= conn->debug_id;
		    __entry->serial	= serial;
		    __entry->challenge	= rsp->resp.challenge_serial;
		    __entry->version	= rsp->resp.version;
		    __entry->kvno	= rsp->resp.kvno;
		    __entry->ticket_len = rsp->resp.ticket_len;
		    __entry->service_id = conn->service_id;
		    __entry->security_ix = conn->security_ix;
			   ),

	    TP_printk("C=%08x RESPONSE r=%08x cr=%08x sv=%u+%u v=%x kv=%x tl=%u",
		      __entry->conn,
		      __entry->serial,
		      __entry->challenge,
		      __entry->service_id,
		      __entry->security_ix,
		      __entry->version,
		      __entry->kvno,
		      __entry->ticket_len)
	    );

TRACE_EVENT(rxrpc_rx_response,
	    TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial,
		     u32 version, u32 kvno, u32 ticket_len),
+2 −0
Original line number Diff line number Diff line
@@ -953,6 +953,8 @@ void rxrpc_send_response(struct rxrpc_connection *conn, struct sk_buff *response
	serial = rxrpc_get_next_serials(conn, 1);
	wserial = htonl(serial);

	trace_rxrpc_tx_response(conn, serial, sp);

	ret = skb_store_bits(response, offsetof(struct rxrpc_wire_header, serial),
			     &wserial, sizeof(wserial));
	if (ret < 0)
+4 −0
Original line number Diff line number Diff line
@@ -668,6 +668,8 @@ static int rxgk_issue_challenge(struct rxrpc_connection *conn)
	serial = rxrpc_get_next_serials(conn, 1);
	whdr->serial = htonl(serial);

	trace_rxrpc_tx_challenge(conn, serial, 0, *(u32 *)&conn->rxgk.nonce);

	ret = do_udp_sendmsg(conn->local->socket, &msg, len);
	if (ret > 0)
		conn->peer->last_tx_at = ktime_get_seconds();
@@ -1203,6 +1205,8 @@ static int rxgk_verify_response(struct rxrpc_connection *conn,
	if (xdr_round_up(token_len) + sizeof(__be32) > len)
		goto short_packet;

	trace_rxrpc_rx_response(conn, sp->hdr.serial, 0, sp->hdr.cksum, token_len);

	offset	+= xdr_round_up(token_len);
	len	-= xdr_round_up(token_len);

+2 −0
Original line number Diff line number Diff line
@@ -685,6 +685,8 @@ static int rxkad_issue_challenge(struct rxrpc_connection *conn)
	serial = rxrpc_get_next_serial(conn);
	whdr.serial = htonl(serial);

	trace_rxrpc_tx_challenge(conn, serial, 0, conn->rxkad.nonce);

	ret = kernel_sendmsg(conn->local->socket, &msg, iov, 2, len);
	if (ret < 0) {
		trace_rxrpc_tx_fail(conn->debug_id, serial, ret,