staticint bpf_test_sockopt(void *ctx, conststruct sock *sk, int expected)
{ int tmp, new = SK_BPF_CB_TX_TIMESTAMPING; int opt = SK_BPF_CB_FLAGS; int level = SOL_SOCKET;
if (bpf_setsockopt(ctx, level, opt, &new, sizeof(new)) != expected) return 1;
staticbool bpf_test_access_load_hdr_opt(struct bpf_sock_ops *skops)
{
u8 opt[3] = {0}; int load_flags = 0; int ret;
ret = bpf_load_hdr_opt(skops, opt, sizeof(opt), load_flags); if (ret != -EOPNOTSUPP) returntrue;
returnfalse;
}
staticbool bpf_test_access_cb_flags_set(struct bpf_sock_ops *skops)
{ int ret;
ret = bpf_sock_ops_cb_flags_set(skops, 0); if (ret != -EOPNOTSUPP) returntrue;
returnfalse;
}
/* In the timestamping callbacks, we're not allowed to call the following * BPF CALLs for the safety concern. Return false if expected.
*/ staticbool bpf_test_access_bpf_calls(struct bpf_sock_ops *skops, conststruct sock *sk)
{ if (bpf_test_access_sockopt(skops, sk)) returntrue;
if (bpf_test_access_load_hdr_opt(skops)) returntrue;
if (bpf_test_access_cb_flags_set(skops)) returntrue;
/* Since it's the last one, remove from the map after latency check */ if (skops->op == BPF_SOCK_OPS_TSTAMP_ACK_CB)
bpf_map_delete_elem(&time_map, &key);
sk = (struct sock *)bpf_skc_to_tcp_sock(bpf_sk); if (!sk) return 1;
switch (skops->op) { case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
nr_active += !bpf_test_sockopt(skops, sk, 0); break; case BPF_SOCK_OPS_TSTAMP_SENDMSG_CB: if (bpf_test_delay(skops, sk))
nr_snd += 1; break; case BPF_SOCK_OPS_TSTAMP_SCHED_CB: if (bpf_test_delay(skops, sk))
nr_sched += 1; break; case BPF_SOCK_OPS_TSTAMP_SND_SW_CB: if (bpf_test_delay(skops, sk))
nr_txsw += 1; break; case BPF_SOCK_OPS_TSTAMP_ACK_CB: if (bpf_test_delay(skops, sk))
nr_ack += 1; break;
}
return 1;
}
char _license[] SEC("license") = "GPL";
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.13Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.