mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
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:
@@ -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.
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user