int ip_queue_xmit_ret()

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;
}