可以在ebpf prog中使用memcpy或memset吗?

问题描述 投票:0回答:1

我已经关注了 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 ebpf
1个回答
0
投票

对于 clang/llvm,您可以使用

__builtin_memcpy
进行复制:

 __builtin_memcpy(&ip4_str, &temp, ret);
© www.soinside.com 2019 - 2024. All rights reserved.