mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
AF_XDP-interaction: Code cleanup, remove local BTF code
The local BTF code in af_xdp_user.c was only used for debugging the BTF structures while developing and testing the lib_xsk_extend.c code. If is confusing for other reading the code, so simply remove thisi, as the lib_xsk_extend.c should hide these details fpr API users. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
@@ -418,6 +418,7 @@ static int print_meta_info_time(uint8_t *pkt)
|
||||
time_now = gettime();
|
||||
diff = time_now - rx_ktime;
|
||||
|
||||
if (debug_meta)
|
||||
printf("meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
||||
rx_ktime, time_now, diff);
|
||||
|
||||
@@ -445,6 +446,7 @@ static int print_meta_info_time_faster(uint8_t *pkt)
|
||||
time_now = gettime();
|
||||
diff = time_now - rx_ktime;
|
||||
|
||||
if (debug_meta)
|
||||
printf("meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
||||
rx_ktime, time_now, diff);
|
||||
|
||||
@@ -730,83 +732,6 @@ static void exit_application(int signal)
|
||||
global_exit = true;
|
||||
}
|
||||
|
||||
int btf_walk_struct_members(struct btf *btf_obj, __s32 btf_id)
|
||||
{
|
||||
const struct btf_member *m;
|
||||
const struct btf_type *btype;
|
||||
unsigned short vlen;
|
||||
__u32 kind;
|
||||
int i;
|
||||
|
||||
btype = btf__type_by_id(btf_obj, btf_id);
|
||||
|
||||
kind = btf_kind(btype);
|
||||
if (kind != BTF_KIND_STRUCT) {
|
||||
fprintf(stderr, "ERROR: %s() BTF must be BTF_KIND_STRUCT",
|
||||
__func__);
|
||||
return -1;
|
||||
}
|
||||
/* BTF_KIND_STRUCT and BTF_KIND_UNION are followed
|
||||
* by multiple "struct btf_member". The exact number
|
||||
* of btf_member is stored in the vlen (of the info in
|
||||
* "struct btf_type").
|
||||
*/
|
||||
m = btf_members(btype);
|
||||
vlen = BTF_INFO_VLEN(btype->info);
|
||||
|
||||
printf("XXX kind:%d members:%d\n", kind, vlen);
|
||||
|
||||
for (i = 0; i < vlen; i++, m++) {
|
||||
__s64 sz = btf__resolve_size(btf_obj, m->type);
|
||||
|
||||
printf("XXX [%d] member type:%d bit-offset:%u name_off:%u sz:%lld\n",
|
||||
i, m->type, m->offset, m->name_off, sz);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
__s32 btf_find_struct(struct btf *btf, const char *name, __s64 *size)
|
||||
{
|
||||
__s32 btf_id = btf__find_by_name_kind(btf, name, BTF_KIND_STRUCT);
|
||||
__s64 sz = btf__resolve_size(btf, btf_id);
|
||||
|
||||
if (debug_meta)
|
||||
printf("XXX bpf_id:%d struct name:%s size:%lld\n",
|
||||
btf_id, name, sz);
|
||||
*size = sz;
|
||||
btf_walk_struct_members(btf, btf_id);
|
||||
|
||||
return btf_id;
|
||||
}
|
||||
|
||||
int btf_info_via_bpf_object(struct bpf_object *bpf_obj)
|
||||
{
|
||||
struct btf *btf = bpf_object__btf(bpf_obj);
|
||||
__s64 size;
|
||||
int err;
|
||||
|
||||
struct xsk_btf_info *xdp_hint_rx_time = NULL;
|
||||
|
||||
static const char *name1 = "xdp_hints_mark";
|
||||
static const char *name2 = "xdp_hints_rx_time";
|
||||
|
||||
btf_find_struct(btf, name1, &size);
|
||||
btf_find_struct(btf, name2, &size);
|
||||
|
||||
err = xsk_btf__init_xdp_hint(btf, name2, &xdp_hint_rx_time);
|
||||
if (err) {
|
||||
fprintf(stderr, "WARN(%d): Cannot xsk_btf__init_xdp_hint\n", err);
|
||||
return err;
|
||||
}
|
||||
if (!xsk_btf__has_field("rx_ktime", xdp_hint_rx_time)) {
|
||||
fprintf(stderr, "WARN: %s doesn't contain member rx_ktime\n",
|
||||
name2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret, err;
|
||||
@@ -865,9 +790,6 @@ int main(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
if (debug_meta) {
|
||||
btf_info_via_bpf_object(bpf_obj);
|
||||
}
|
||||
err = init_btf_info_via_bpf_object(bpf_obj);
|
||||
if (err) {
|
||||
fprintf(stderr, "ERROR(%d): Invalid BTF info: errno:%s\n",
|
||||
|
Reference in New Issue
Block a user