我正在使用 XDP 并尝试修改ctx->data
. 假设对于这个例子,我想将所有数据包字节设置为 x+3(x 是数据包中的一个字节)。那可能吗?我尝试了以下代码并从验证者那里得到错误:
int xdp_start(struct xdp_md* ctx)
{
void* data = (void*)(long)ctx->data;
void* data_end = (void*)(long)ctx->data_end;
uint32_t length = data_end - data;
void* temp_data = data;
size_t i = 0;
#pragma unroll
for(i=0; i < length; i++)
{
if ((__u8*)temp_data > (__u8*)data_end)
break;
*(__u8*)temp_data += (__u8)2;
temp_data++;
}
return XDP_PASS;
}
它因“禁止 pkt_end 上的指针运算”而失败</p>
我还将 for 循环更改为:
for (i=0; i < length && i < 1500; i++)
为了满足验证者并确保这不是无限循环,有办法不这样做吗?
另外,我尝试将所有数据包字节设置为一个常数:
*(__u8*)temp_data = 2;
验证器失败了:
不支持调用内置函数“memset”。
我什么时候打电话给 memset?
综上所述,我想将数据包上的每个字节更改为另一个字节,这可能吗?如果是的话,我会很高兴知道如何。