mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
AF_XDP-interaction: Explain xsk_btf__read_field in user code
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
@@ -399,7 +399,8 @@ static void print_meta_info_mark(uint8_t *pkt, struct xdp_hints_mark *meta)
|
|||||||
printf("meta-mark mark:%u\n", mark);
|
printf("meta-mark mark:%u\n", mark);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_meta_info_time(uint8_t *pkt)
|
/* Demo API xsk_btf__read_field() that use string for BTF lookup */
|
||||||
|
static int print_meta_info_time_api2(uint8_t *pkt)
|
||||||
{
|
{
|
||||||
struct xsk_btf_info *xbi = xdp_hints_rx_time.xbi;
|
struct xsk_btf_info *xbi = xdp_hints_rx_time.xbi;
|
||||||
__u64 time_now; // = gettime();
|
__u64 time_now; // = gettime();
|
||||||
@@ -408,7 +409,10 @@ static int print_meta_info_time(uint8_t *pkt)
|
|||||||
__u64 diff;
|
__u64 diff;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Notice how rx_ktime_ptr becomes a pointer into struct memory */
|
/* This API cache string lookup (in hashmap), which cause an
|
||||||
|
* allocation first time this is called. Something to consider
|
||||||
|
* for real-time use-cases.
|
||||||
|
*/
|
||||||
err = xsk_btf__read_field((void **)&rx_ktime_ptr, sizeof(*rx_ktime_ptr),
|
err = xsk_btf__read_field((void **)&rx_ktime_ptr, sizeof(*rx_ktime_ptr),
|
||||||
"rx_ktime", xbi, pkt);
|
"rx_ktime", xbi, pkt);
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -428,7 +432,7 @@ static int print_meta_info_time(uint8_t *pkt)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_meta_info_time_faster(uint8_t *pkt, struct xdp_hints_rx_time *meta)
|
static int print_meta_info_time(uint8_t *pkt, struct xdp_hints_rx_time *meta)
|
||||||
{
|
{
|
||||||
__u64 time_now; // = gettime();
|
__u64 time_now; // = gettime();
|
||||||
__u64 *rx_ktime_ptr; /* Points directly to member memory */
|
__u64 *rx_ktime_ptr; /* Points directly to member memory */
|
||||||
@@ -436,13 +440,14 @@ static int print_meta_info_time_faster(uint8_t *pkt, struct xdp_hints_rx_time *m
|
|||||||
__u64 diff;
|
__u64 diff;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
/* Use API that doesn't involve allocations to access BTF struct member */
|
/* API doesn't involve allocations to access BTF struct member */
|
||||||
err = xsk_btf__read((void **)&rx_ktime_ptr, sizeof(*rx_ktime_ptr),
|
err = xsk_btf__read((void **)&rx_ktime_ptr, sizeof(*rx_ktime_ptr),
|
||||||
&meta->rx_ktime, meta->xbi, pkt);
|
&meta->rx_ktime, meta->xbi, pkt);
|
||||||
if (err) {
|
if (err) {
|
||||||
fprintf(stderr, "ERROR(%d) no rx_ktime?!\n", err);
|
fprintf(stderr, "ERROR(%d) no rx_ktime?!\n", err);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
/* Notice how rx_ktime_ptr becomes a pointer into struct memory */
|
||||||
rx_ktime = *rx_ktime_ptr;
|
rx_ktime = *rx_ktime_ptr;
|
||||||
|
|
||||||
time_now = gettime();
|
time_now = gettime();
|
||||||
|
|||||||
Reference in New Issue
Block a user