我已经关注了 ebpf prog,但是当用 clang 编译时,它报告
error: A call to built-in function 'memset' is not supported
为 ip4_str[m++] = temp[j];
。在ebpf prog中,我们不能使用字符副本吗?
char ip4_str[sizeof("255.255.255.255")];
u8 iparr[4];
iparr[0] = (ip >> 24) & 0xFF;
iparr[1] = (ip >> 16) & 0xFF;
iparr[2] = (ip >> 8) & 0xFF;
iparr[3] = (ip >> 0) & 0xFF;
int ip_l = 0;
int m = 0;
for (int i = 0; i < 4; i++) {
u8 r = iparr[i];
char temp[4];
int ret = convert(r, temp);
ip_l += ret;
int j = 0;
// __builtin_memcpy(ip4_str, temp, ret);
while (j < ret) {
ip4_str[m++] = temp[j];
j++;
}
if (i < 3) {
ip4_str[m++] = '.';
ip_l++;
}
}
ip4_str[m++] = '\0';
对于 clang/llvm,您可以使用
__builtin_memcpy
进行复制:
__builtin_memcpy(&ip4_str, &temp, ret);