AF_XDP-interaction: Trying to use xsk_btf__read

This doesn't work with packet test.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
Jesper Dangaard Brouer
2021-11-03 19:21:16 +01:00
parent 8bb3d3ce3d
commit 3488e02d00
2 changed files with 37 additions and 11 deletions

View File

@@ -346,10 +346,11 @@ int init_btf_info_via_bpf_object(struct bpf_object *bpf_obj)
if ((err = init_xdp_hints(btf, &xdp_meta_with_mark))) if ((err = init_xdp_hints(btf, &xdp_meta_with_mark)))
return err; return err;
/* Check member with "rx_time" exist */ /* Check member with "rx_ktime" exist */
if (!xsk_btf__has_field("rx_time", xdp_meta_with_time.xbi)) { if (!xsk_btf__has_field("rx_ktime", xdp_meta_with_time.xbi)) {
return -EBADSLT; return -EBADSLT;
} }
return 0;
} }
struct meta_info { struct meta_info {
@@ -377,14 +378,32 @@ static void print_meta_info(uint8_t *pkt, uint32_t len)
} }
static void print_meta_info_via_btf(uint8_t *pkt) static void print_meta_info_time(uint8_t *pkt)
{
struct xsk_btf_info *xbi = xdp_meta_with_time.xbi;
__u64 rx_ktime;
int err;
err = xsk_btf__read(&rx_ktime, sizeof(rx_ktime),
"rx_ktime", xbi, pkt);
if (err) {
printf("DEBUG-meta-time ERROR(%d) no rx_ktime?! sz:%d\n", err, sizeof(rx_ktime));
return;
}
printf("DEBUG-meta-time rx_ktime:%llu\n", rx_ktime);
}
static void print_meta_info_via_btf( uint8_t *pkt)
{ {
struct meta_info *meta = (void *)(pkt - sizeof(*meta)); struct meta_info *meta = (void *)(pkt - sizeof(*meta));
__u32 btf_id = xsk_umem__btf_id(pkt); __u32 btf_id = xsk_umem__btf_id(pkt);
if (btf_id == xsk_btf__btf_type_id(xdp_meta_with_time.xbi)) { __u32 meta_time = xsk_btf__btf_type_id(xdp_meta_with_time.xbi);
printf("DEBUG-meta btf_id:%d rx_time:%llu\n", // __u32 meta_mark = xsk_btf__btf_type_id(xdp_meta_with_mark.xbi);
meta->btf_id, meta->rx_ktime);
if (btf_id == meta_time) {
print_meta_info_time(pkt);
} }
} }
@@ -732,7 +751,7 @@ int btf_info_via_bpf_object(struct bpf_object *bpf_obj)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int ret; int ret, err;
int xsks_map_fd; int xsks_map_fd;
void *packet_buffer; void *packet_buffer;
uint64_t packet_buffer_size; uint64_t packet_buffer_size;
@@ -788,10 +807,15 @@ int main(int argc, char **argv)
} }
} }
if (0) { if (1) {
btf_info_via_bpf_object(bpf_obj); btf_info_via_bpf_object(bpf_obj);
} }
init_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",
err, strerror(errno));
return EXIT_FAILURE;
}
/* Allow unlimited locking of memory, so all memory needed for packet /* Allow unlimited locking of memory, so all memory needed for packet
* buffers can be locked. * buffers can be locked.

View File

@@ -203,8 +203,10 @@ int xsk_btf__read(void **dest, size_t size, const char *field, struct xsk_btf_in
hashmap__add(&(xbi->map), field, entry); hashmap__add(&(xbi->map), field, entry);
} }
if (entry->size != size) if (entry->size != size) {
return -EINVAL; printf("XXX entry->size(%ld) != size (%ld)\n", entry->size, size);
return -EFAULT;
}
// XXX should we cache size for main xdp_hints struct? // XXX should we cache size for main xdp_hints struct?
*dest = (void *)((char *)addr - xbi->type->size + entry->offset); *dest = (void *)((char *)addr - xbi->type->size + entry->offset);