Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: David 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: Jakub Kicinski <kuba@kernel.org>

authored by

David Howells and committed by
Jakub Kicinski
fba69957 d98c317f

+85 -1
+77 -1
include/trace/events/rxrpc.h
··· 1201 1201 __entry->abort_code) 1202 1202 ); 1203 1203 1204 + TRACE_EVENT(rxrpc_tx_challenge, 1205 + TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial, 1206 + u32 version, u32 nonce), 1207 + 1208 + TP_ARGS(conn, serial, version, nonce), 1209 + 1210 + TP_STRUCT__entry( 1211 + __field(unsigned int, conn) 1212 + __field(rxrpc_serial_t, serial) 1213 + __field(u32, version) 1214 + __field(u32, nonce) 1215 + __field(u16, service_id) 1216 + __field(u8, security_ix) 1217 + ), 1218 + 1219 + TP_fast_assign( 1220 + __entry->conn = conn->debug_id; 1221 + __entry->serial = serial; 1222 + __entry->version = version; 1223 + __entry->nonce = nonce; 1224 + __entry->service_id = conn->service_id; 1225 + __entry->security_ix = conn->security_ix; 1226 + ), 1227 + 1228 + TP_printk("C=%08x CHALLENGE r=%08x sv=%u+%u v=%x n=%x", 1229 + __entry->conn, 1230 + __entry->serial, 1231 + __entry->service_id, 1232 + __entry->security_ix, 1233 + __entry->version, 1234 + __entry->nonce) 1235 + ); 1236 + 1204 1237 TRACE_EVENT(rxrpc_rx_challenge, 1205 1238 TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial, 1206 1239 u32 version, u32 nonce, u32 min_level), ··· 1246 1213 __field(u32, version) 1247 1214 __field(u32, nonce) 1248 1215 __field(u32, min_level) 1216 + __field(u16, service_id) 1249 1217 __field(u8, security_ix) 1250 1218 ), 1251 1219 ··· 1256 1222 __entry->version = version; 1257 1223 __entry->nonce = nonce; 1258 1224 __entry->min_level = min_level; 1225 + __entry->service_id = conn->service_id; 1259 1226 __entry->security_ix = conn->security_ix; 1260 1227 ), 1261 1228 1262 - TP_printk("C=%08x CHALLENGE r=%08x sx=%u v=%x n=%x ml=%x", 1229 + TP_printk("C=%08x CHALLENGE r=%08x sv=%u+%u v=%x n=%x ml=%x", 1263 1230 __entry->conn, 1264 1231 __entry->serial, 1232 + __entry->service_id, 1265 1233 __entry->security_ix, 1266 1234 __entry->version, 1267 1235 __entry->nonce, 1268 1236 __entry->min_level) 1237 + ); 1238 + 1239 + TRACE_EVENT(rxrpc_tx_response, 1240 + TP_PROTO(struct rxrpc_connection *conn, rxrpc_serial_t serial, 1241 + struct rxrpc_skb_priv *rsp), 1242 + 1243 + TP_ARGS(conn, serial, rsp), 1244 + 1245 + TP_STRUCT__entry( 1246 + __field(unsigned int, conn) 1247 + __field(rxrpc_serial_t, serial) 1248 + __field(rxrpc_serial_t, challenge) 1249 + __field(u32, version) 1250 + __field(u32, kvno) 1251 + __field(u16, ticket_len) 1252 + __field(u16, appdata_len) 1253 + __field(u16, service_id) 1254 + __field(u8, security_ix) 1255 + ), 1256 + 1257 + TP_fast_assign( 1258 + __entry->conn = conn->debug_id; 1259 + __entry->serial = serial; 1260 + __entry->challenge = rsp->resp.challenge_serial; 1261 + __entry->version = rsp->resp.version; 1262 + __entry->kvno = rsp->resp.kvno; 1263 + __entry->ticket_len = rsp->resp.ticket_len; 1264 + __entry->service_id = conn->service_id; 1265 + __entry->security_ix = conn->security_ix; 1266 + ), 1267 + 1268 + TP_printk("C=%08x RESPONSE r=%08x cr=%08x sv=%u+%u v=%x kv=%x tl=%u", 1269 + __entry->conn, 1270 + __entry->serial, 1271 + __entry->challenge, 1272 + __entry->service_id, 1273 + __entry->security_ix, 1274 + __entry->version, 1275 + __entry->kvno, 1276 + __entry->ticket_len) 1269 1277 ); 1270 1278 1271 1279 TRACE_EVENT(rxrpc_rx_response,
+2
net/rxrpc/output.c
··· 953 953 serial = rxrpc_get_next_serials(conn, 1); 954 954 wserial = htonl(serial); 955 955 956 + trace_rxrpc_tx_response(conn, serial, sp); 957 + 956 958 ret = skb_store_bits(response, offsetof(struct rxrpc_wire_header, serial), 957 959 &wserial, sizeof(wserial)); 958 960 if (ret < 0)
+4
net/rxrpc/rxgk.c
··· 668 668 serial = rxrpc_get_next_serials(conn, 1); 669 669 whdr->serial = htonl(serial); 670 670 671 + trace_rxrpc_tx_challenge(conn, serial, 0, *(u32 *)&conn->rxgk.nonce); 672 + 671 673 ret = do_udp_sendmsg(conn->local->socket, &msg, len); 672 674 if (ret > 0) 673 675 conn->peer->last_tx_at = ktime_get_seconds(); ··· 1204 1202 token_len = ntohl(rhdr.token_len); 1205 1203 if (xdr_round_up(token_len) + sizeof(__be32) > len) 1206 1204 goto short_packet; 1205 + 1206 + trace_rxrpc_rx_response(conn, sp->hdr.serial, 0, sp->hdr.cksum, token_len); 1207 1207 1208 1208 offset += xdr_round_up(token_len); 1209 1209 len -= xdr_round_up(token_len);
+2
net/rxrpc/rxkad.c
··· 685 685 serial = rxrpc_get_next_serial(conn); 686 686 whdr.serial = htonl(serial); 687 687 688 + trace_rxrpc_tx_challenge(conn, serial, 0, conn->rxkad.nonce); 689 + 688 690 ret = kernel_sendmsg(conn->local->socket, &msg, iov, 2, len); 689 691 if (ret < 0) { 690 692 trace_rxrpc_tx_fail(conn->debug_id, serial, ret,