Changeset View
Changeset View
Standalone View
Standalone View
contrib/tracing/log_raw_p2p_msgs.py
Show First 20 Lines • Show All 112 Lines • ▼ Show 20 Lines | int trace_outbound_message(struct pt_regs *ctx) { | ||||
return 0; | return 0; | ||||
}; | }; | ||||
""" | """ | ||||
def print_message(event, inbound): | def print_message(event, inbound): | ||||
print( | print( | ||||
"{} {} msg '{}' from peer {} ({}, {}) with {} bytes: {}".format( | "{} {} msg '{}' from peer {} ({}, {}) with {} bytes: {}".format( | ||||
( | |||||
"Warning: incomplete message (only {} out of {} bytes)!".format( | "Warning: incomplete message (only {} out of {} bytes)!".format( | ||||
len(event.msg), | len(event.msg), event.msg_size | ||||
event.msg_size | ) | ||||
) if len(event.msg) < event.msg_size else "", | if len(event.msg) < event.msg_size | ||||
else "" | |||||
), | |||||
"inbound" if inbound else "outbound", | "inbound" if inbound else "outbound", | ||||
event.msg_type.decode("utf-8"), | event.msg_type.decode("utf-8"), | ||||
event.peer_id, | event.peer_id, | ||||
event.peer_conn_type.decode("utf-8"), | event.peer_conn_type.decode("utf-8"), | ||||
event.peer_addr.decode("utf-8"), | event.peer_addr.decode("utf-8"), | ||||
event.msg_size, | event.msg_size, | ||||
bytes(event.msg[:event.msg_size]).hex(), | bytes(event.msg[: event.msg_size]).hex(), | ||||
) | ) | ||||
) | ) | ||||
def main(bitcoind_path): | def main(bitcoind_path): | ||||
bitcoind_with_usdts = USDT(path=str(bitcoind_path)) | bitcoind_with_usdts = USDT(path=str(bitcoind_path)) | ||||
# attaching the trace functions defined in the BPF program to the | # attaching the trace functions defined in the BPF program to the | ||||
# tracepoints | # tracepoints | ||||
bitcoind_with_usdts.enable_probe( | bitcoind_with_usdts.enable_probe( | ||||
probe="inbound_message", fn_name="trace_inbound_message") | probe="inbound_message", fn_name="trace_inbound_message" | ||||
) | |||||
bitcoind_with_usdts.enable_probe( | bitcoind_with_usdts.enable_probe( | ||||
probe="outbound_message", fn_name="trace_outbound_message") | probe="outbound_message", fn_name="trace_outbound_message" | ||||
) | |||||
bpf = BPF(text=program, usdt_contexts=[bitcoind_with_usdts]) | bpf = BPF(text=program, usdt_contexts=[bitcoind_with_usdts]) | ||||
# BCC: perf buffer handle function for inbound_messages | # BCC: perf buffer handle function for inbound_messages | ||||
def handle_inbound(_, data, size): | def handle_inbound(_, data, size): | ||||
""" Inbound message handler. | """Inbound message handler. | ||||
Called each time a message is submitted to the inbound_messages BPF table.""" | Called each time a message is submitted to the inbound_messages BPF table.""" | ||||
event = bpf["inbound_messages"].event(data) | event = bpf["inbound_messages"].event(data) | ||||
print_message(event, True) | print_message(event, True) | ||||
# BCC: perf buffer handle function for outbound_messages | # BCC: perf buffer handle function for outbound_messages | ||||
def handle_outbound(_, data, size): | def handle_outbound(_, data, size): | ||||
""" Outbound message handler. | """Outbound message handler. | ||||
Called each time a message is submitted to the outbound_messages BPF table.""" | Called each time a message is submitted to the outbound_messages BPF table.""" | ||||
event = bpf["outbound_messages"].event(data) | event = bpf["outbound_messages"].event(data) | ||||
print_message(event, False) | print_message(event, False) | ||||
# BCC: add handlers to the inbound and outbound perf buffers | # BCC: add handlers to the inbound and outbound perf buffers | ||||
bpf["inbound_messages"].open_perf_buffer(handle_inbound) | bpf["inbound_messages"].open_perf_buffer(handle_inbound) | ||||
Show All 18 Lines |