in bpf/accesslog/l24/write_l3.c [39:79]
int ip_queue_xmit_ret(struct pt_regs * ctx){
__u64 id = bpf_get_current_pid_tgid();
// getting skb
struct sock_data_args_t *data_args = bpf_map_lookup_elem(&socket_data_args, &id);
if (data_args == NULL) {
return 0;
}
// getting all l2-3 detail
struct skb_transmit_detail *detail = bpf_map_lookup_elem(&sk_buff_transmit_detail_map, &data_args->buffer);
if (detail == NULL) {
return 0;
}
data_args->l3_duration += bpf_ktime_get_ns() - detail->l3_enter_time;
if (detail->l3_output_time > 0 && detail->l3_local_time > 0) {
data_args->l3_local_duration += detail->l3_output_time - detail->l3_local_time;
}
if (detail->l3_finish_time > 0 && detail->l3_output_time > 0) {
data_args->l3_output_duration += detail->l3_finish_time - detail->l3_output_time;
}
data_args->total_resolve_mac_count = detail->total_resolve_neigh_count;
data_args->total_resolve_mac_time = detail->total_resolve_neigh_time;
data_args->total_net_filter_count = detail->total_nf_count;
data_args->total_net_filter_time = detail->total_nf_time;
if (detail->l2_enter_time > 0 && detail->l2_exit_time > 0) {
data_args->l2_duration = detail->l2_exit_time - detail->l2_enter_time;
data_args->l2_enter_queue_count++;
}
data_args->ifindex = _(detail->ifindex);
if (detail->l2_enter_time > 0) {
data_args->l2_enter_queue_package_count++;
}
if (detail->l2_start_xmit_time > 0 && detail->l2_enter_time > 0) {
data_args->l2_ready_send_duration += detail->l2_start_xmit_time - detail->l2_enter_time;
}
if (detail->l2_finish_xmit_time > 0 && detail->l2_start_xmit_time > 0) {
data_args->l2_send_duration += detail->l2_finish_xmit_time - detail->l2_start_xmit_time;
}
return 0;
}