diff --git a/tools/tcpaccept.py b/tools/tcpaccept.py index d52d20974b3a..eab66276063e 100755 --- a/tools/tcpaccept.py +++ b/tools/tcpaccept.py @@ -51,22 +51,22 @@ struct ipv4_data_t { // XXX: switch some to u32's when supported u64 ts_us; - u64 pid; + u32 pid; u32 saddr; u32 daddr; u64 ip; - u64 lport; + u16 lport; char task[TASK_COMM_LEN]; }; BPF_PERF_OUTPUT(ipv4_events); struct ipv6_data_t { u64 ts_us; - u64 pid; + u32 pid; unsigned __int128 saddr; unsigned __int128 daddr; u64 ip; - u64 lport; + u16 lport; char task[TASK_COMM_LEN]; }; BPF_PERF_OUTPUT(ipv6_events); @@ -212,22 +212,22 @@ class Data_ipv4(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("saddr", ct.c_uint), ("daddr", ct.c_uint), ("ip", ct.c_ulonglong), - ("lport", ct.c_ulonglong), + ("lport", ct.c_ushort), ("task", ct.c_char * TASK_COMM_LEN) ] class Data_ipv6(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("saddr", (ct.c_ulonglong * 2)), ("daddr", (ct.c_ulonglong * 2)), ("ip", ct.c_ulonglong), - ("lport", ct.c_ulonglong), + ("lport", ct.c_ushort), ("task", ct.c_char * TASK_COMM_LEN) ] diff --git a/tools/tcpconnect.py b/tools/tcpconnect.py index fe793ad55f73..a9b803ce5501 100755 --- a/tools/tcpconnect.py +++ b/tools/tcpconnect.py @@ -59,22 +59,22 @@ struct ipv4_data_t { // XXX: switch some to u32's when supported u64 ts_us; - u64 pid; - u64 saddr; - u64 daddr; + u32 pid; + u32 saddr; + u32 daddr; u64 ip; - u64 dport; + u16 dport; char task[TASK_COMM_LEN]; }; BPF_PERF_OUTPUT(ipv4_events); struct ipv6_data_t { u64 ts_us; - u64 pid; + u32 pid; unsigned __int128 saddr; unsigned __int128 daddr; u64 ip; - u64 dport; + u16 dport; char task[TASK_COMM_LEN]; }; BPF_PERF_OUTPUT(ipv6_events); @@ -175,22 +175,22 @@ class Data_ipv4(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), - ("saddr", ct.c_ulonglong), - ("daddr", ct.c_ulonglong), + ("pid", ct.c_uint), + ("saddr", ct.c_uint), + ("daddr", ct.c_uint), ("ip", ct.c_ulonglong), - ("dport", ct.c_ulonglong), + ("dport", ct.c_ushort), ("task", ct.c_char * TASK_COMM_LEN) ] class Data_ipv6(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("saddr", (ct.c_ulonglong * 2)), ("daddr", (ct.c_ulonglong * 2)), ("ip", ct.c_ulonglong), - ("dport", ct.c_ulonglong), + ("dport", ct.c_ushort), ("task", ct.c_char * TASK_COMM_LEN) ] diff --git a/tools/tcpdrop.py b/tools/tcpdrop.py index 1f60f8e5d8e0..598c56abc3db 100755 --- a/tools/tcpdrop.py +++ b/tools/tcpdrop.py @@ -54,8 +54,8 @@ struct ipv4_data_t { u32 pid; u64 ip; - u64 saddr; - u64 daddr; + u32 saddr; + u32 daddr; u16 sport; u16 dport; u8 state; @@ -113,7 +113,9 @@ dport = ntohs(dport); if (family == AF_INET) { - struct ipv4_data_t data4 = {.pid = pid, .ip = 4}; + struct ipv4_data_t data4 = {}; + data4.pid = pid; + data4.ip = 4; data4.saddr = ip->saddr; data4.daddr = ip->daddr; data4.dport = dport; @@ -150,10 +152,10 @@ # event data class Data_ipv4(ct.Structure): _fields_ = [ - ("pid", ct.c_ulong), + ("pid", ct.c_uint), ("ip", ct.c_ulonglong), - ("saddr", ct.c_ulonglong), - ("daddr", ct.c_ulonglong), + ("saddr", ct.c_uint), + ("daddr", ct.c_uint), ("sport", ct.c_ushort), ("dport", ct.c_ushort), ("state", ct.c_ubyte), @@ -163,7 +165,7 @@ class Data_ipv4(ct.Structure): class Data_ipv6(ct.Structure): _fields_ = [ - ("pid", ct.c_ulong), + ("pid", ct.c_uint), ("ip", ct.c_ulonglong), ("saddr", (ct.c_ulonglong * 2)), ("daddr", (ct.c_ulonglong * 2)), diff --git a/tools/tcplife.py b/tools/tcplife.py index 1f4454cc0198..ac32fbd4ffc6 100755 --- a/tools/tcplife.py +++ b/tools/tcplife.py @@ -78,9 +78,9 @@ struct ipv4_data_t { // XXX: switch some to u32's when supported u64 ts_us; - u64 pid; - u64 saddr; - u64 daddr; + u32 pid; + u32 saddr; + u32 daddr; u64 ports; u64 rx_b; u64 tx_b; @@ -91,7 +91,7 @@ struct ipv6_data_t { u64 ts_us; - u64 pid; + u32 pid; unsigned __int128 saddr; unsigned __int128 daddr; u64 ports; @@ -195,8 +195,10 @@ u16 family = sk->__sk_common.skc_family; if (family == AF_INET) { - struct ipv4_data_t data4 = {.span_us = delta_us, - .rx_b = rx_b, .tx_b = tx_b}; + struct ipv4_data_t data4 = {}; + data4.span_us = delta_us; + data4.rx_b = rx_b; + data4.tx_b = tx_b; data4.ts_us = bpf_ktime_get_ns() / 1000; data4.saddr = sk->__sk_common.skc_rcv_saddr; data4.daddr = sk->__sk_common.skc_daddr; @@ -316,11 +318,13 @@ tx_b = tp->bytes_acked; if (args->family == AF_INET) { - struct ipv4_data_t data4 = {.span_us = delta_us, - .rx_b = rx_b, .tx_b = tx_b}; + struct ipv4_data_t data4 = {}; + data4.span_us = delta_us; + data4.rx_b = rx_b; + data4.tx_b = tx_b; data4.ts_us = bpf_ktime_get_ns() / 1000; - bpf_probe_read(&data4.saddr, sizeof(u32), args->saddr); - bpf_probe_read(&data4.daddr, sizeof(u32), args->daddr); + __builtin_memcpy(&data4.saddr, args->saddr, sizeof(data4.saddr)); + __builtin_memcpy(&data4.daddr, args->daddr, sizeof(data4.daddr)); // a workaround until data4 compiles with separate lport/dport data4.ports = dport + ((0ULL + lport) << 32); data4.pid = pid; @@ -336,8 +340,8 @@ struct ipv6_data_t data6 = {.span_us = delta_us, .rx_b = rx_b, .tx_b = tx_b}; data6.ts_us = bpf_ktime_get_ns() / 1000; - bpf_probe_read(&data6.saddr, sizeof(data6.saddr), args->saddr_v6); - bpf_probe_read(&data6.daddr, sizeof(data6.daddr), args->saddr_v6); + __builtin_memcpy(&data6.saddr, args->saddr_v6, sizeof(data6.saddr)); + __builtin_memcpy(&data6.daddr, args->daddr_v6, sizeof(data6.daddr)); // a workaround until data6 compiles with separate lport/dport data6.ports = dport + ((0ULL + lport) << 32); data6.pid = pid; @@ -390,9 +394,9 @@ class Data_ipv4(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), - ("saddr", ct.c_ulonglong), - ("daddr", ct.c_ulonglong), + ("pid", ct.c_uint), + ("saddr", ct.c_uint), + ("daddr", ct.c_uint), ("ports", ct.c_ulonglong), ("rx_b", ct.c_ulonglong), ("tx_b", ct.c_ulonglong), @@ -403,7 +407,7 @@ class Data_ipv4(ct.Structure): class Data_ipv6(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("saddr", (ct.c_ulonglong * 2)), ("daddr", (ct.c_ulonglong * 2)), ("ports", ct.c_ulonglong), diff --git a/tools/tcpretrans.py b/tools/tcpretrans.py index a49877c93787..187ffcf0d421 100755 --- a/tools/tcpretrans.py +++ b/tools/tcpretrans.py @@ -54,24 +54,24 @@ // separate data structs for ipv4 and ipv6 struct ipv4_data_t { // XXX: switch some to u32's when supported - u64 pid; + u32 pid; u64 ip; - u64 saddr; - u64 daddr; - u64 lport; - u64 dport; + u32 saddr; + u32 daddr; + u16 lport; + u16 dport; u64 state; u64 type; }; BPF_PERF_OUTPUT(ipv4_events); struct ipv6_data_t { - u64 pid; + u32 pid; u64 ip; unsigned __int128 saddr; unsigned __int128 daddr; - u64 lport; - u64 dport; + u16 lport; + u16 dport; u64 state; u64 type; }; @@ -142,7 +142,10 @@ flow_key.dport = ntohs(dport);""", 'trace' : """ - struct ipv4_data_t data4 = {.pid = pid, .ip = 4, .type = type}; + struct ipv4_data_t data4 = {}; + data4.pid = pid; + data4.ip = 4; + data4.type = type; data4.saddr = skp->__sk_common.skc_rcv_saddr; data4.daddr = skp->__sk_common.skc_daddr; // lport is host order @@ -197,24 +200,24 @@ # event data class Data_ipv4(ct.Structure): _fields_ = [ - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("ip", ct.c_ulonglong), - ("saddr", ct.c_ulonglong), - ("daddr", ct.c_ulonglong), - ("lport", ct.c_ulonglong), - ("dport", ct.c_ulonglong), + ("saddr", ct.c_uint), + ("daddr", ct.c_uint), + ("lport", ct.c_ushort), + ("dport", ct.c_ushort), ("state", ct.c_ulonglong), ("type", ct.c_ulonglong) ] class Data_ipv6(ct.Structure): _fields_ = [ - ("pid", ct.c_ulonglong), + ("pid", ct.c_uint), ("ip", ct.c_ulonglong), ("saddr", (ct.c_ulonglong * 2)), ("daddr", (ct.c_ulonglong * 2)), - ("lport", ct.c_ulonglong), - ("dport", ct.c_ulonglong), + ("lport", ct.c_ushort), + ("dport", ct.c_ushort), ("state", ct.c_ulonglong), ("type", ct.c_ulonglong) ] diff --git a/tools/tcpstates.py b/tools/tcpstates.py index e0e05bf436b4..531631e734b0 100755 --- a/tools/tcpstates.py +++ b/tools/tcpstates.py @@ -68,8 +68,8 @@ struct ipv4_data_t { u64 ts_us; u64 skaddr; - u64 saddr; - u64 daddr; + u32 saddr; + u32 daddr; u64 span_us; u32 pid; u32 ports; @@ -129,8 +129,8 @@ .oldstate = args->oldstate, .newstate = args->newstate}; data4.skaddr = (u64)args->skaddr; data4.ts_us = bpf_ktime_get_ns() / 1000; - bpf_probe_read(&data4.saddr, sizeof(u32), args->saddr); - bpf_probe_read(&data4.daddr, sizeof(u32), args->daddr); + __builtin_memcpy(&data4.saddr, args->saddr, sizeof(data4.saddr)); + __builtin_memcpy(&data4.daddr, args->daddr, sizeof(data4.daddr)); // a workaround until data4 compiles with separate lport/dport data4.ports = dport + ((0ULL + lport) << 32); data4.pid = pid; @@ -144,8 +144,8 @@ .oldstate = args->oldstate, .newstate = args->newstate}; data6.skaddr = (u64)args->skaddr; data6.ts_us = bpf_ktime_get_ns() / 1000; - bpf_probe_read(&data6.saddr, sizeof(data6.saddr), args->saddr_v6); - bpf_probe_read(&data6.daddr, sizeof(data6.daddr), args->saddr_v6); + __builtin_memcpy(&data6.saddr, args->saddr_v6, sizeof(data6.saddr)); + __builtin_memcpy(&data6.daddr, args->daddr_v6, sizeof(data6.daddr)); // a workaround until data6 compiles with separate lport/dport data6.ports = dport + ((0ULL + lport) << 32); data6.pid = pid; @@ -191,8 +191,8 @@ class Data_ipv4(ct.Structure): _fields_ = [ ("ts_us", ct.c_ulonglong), ("skaddr", ct.c_ulonglong), - ("saddr", ct.c_ulonglong), - ("daddr", ct.c_ulonglong), + ("saddr", ct.c_uint), + ("daddr", ct.c_uint), ("span_us", ct.c_ulonglong), ("pid", ct.c_uint), ("ports", ct.c_uint),