当我想从bpf map中获取值时,输入的key类型是const char*
,它无法获取map值;但当key类型为 时char name[192]
,可以得到正确的值。以上两种钥匙类型有什么区别?为什么会发生这种情况?
这是 ebpf 代码:
struct {
__uint(type, BPF_MAP_TYPE_HASH_OF_MAPS);
__uint(key_size, CLUSTER_NAME_MAX_LEN);
__uint(value_size, sizeof(__u32));
__uint(max_entries, MAP_SIZE_OF_CLUSTER);
__uint(map_flags, BPF_F_NO_PREALLOC);
__array(values, struct inner_of_maglev);
}outer_of_maglev SEC(".maps"); // CLUSTER_NAME_MAX_LEN equal 192
static inline void *loadbalance(struct cluster_endpoints *eps, const char* name,ctx_buff_t *ctx)
{
if (!eps || eps->ep_num == 0)
return NULL;
__u32 *res1;
__u32 *res2;
char c_name[192] = "outbound|5000||helloworld.default.svc.cluster.local";
res1 = (__u32 *)bpf_map_lookup_elem(&outer_of_maglev,name);
res2 = (__u32 *)bpf_map_lookup_elem(&outer_of_maglev,c_name);
if (res1) {
BPF_LOG(INFO, CLUSTER, "loadbalance_maglev test res %u\n",res);
}
return NULL;
}
如上面的语句,res1为NULL,res2不为NULL,这是map的正确值。另外,变量名的内容与c_name相同;