Skip to content
Snippets Groups Projects
Commit 7c9e7957 authored by NGUYEN Do Duc Anh's avatar NGUYEN Do Duc Anh
Browse files

optimize code

parent 2a01730a
No related branches found
No related tags found
No related merge requests found
......@@ -78,10 +78,6 @@ static inline __u16 tcp_checksum(struct iphdr *ip, struct tcphdr *tcp, void *dat
csum += htons(tcp_len);
// bpf_trace_printk("csum1: %lx", csum);
// 3. Manual unrolling (safer than loops)
__u16 *ptr = (__u16 *)tcp;
__u16 words = tcp_len / 2;
csum += sum16(tcp, tcp_len, data_end);
// bpf_trace_printk("csum2: %lx", csum);
......@@ -152,75 +148,12 @@ int inter_op_ebpf(struct xdp_md *ctx)
__u8 *data_bytes = (__u8 *)data;
int shift_data_length = sizeof(*eth) + sizeof(struct iphdr);
if (option_length == 8)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 12)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 16)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 20)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 24)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 28)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
}
else if (option_length == 32)
{
for (int i = shift_data_length - 1; i >= 0; i--)
{
if ((void *)(data_bytes + i + option_length + 1) > data_end)
for (int i = shift_data_length - 1; i >= 0; i--) {
char *ptr = data_bytes + option_length;
if ((void *)ptr + i + 1 > data_end)
return XDP_PASS;
data_bytes[i + option_length] = data_bytes[i];
}
ptr[i] = data_bytes[i];
}
int ret = bpf_xdp_adjust_head(ctx, option_length); // Cut option length bytes at the head
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment