mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
AF_XDP-interaction: Print XSK queue_id packet was RXed on
Now that program process all queues it is relevant to know what queue_id received the packet. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
@@ -471,7 +471,8 @@ static inline void csum_replace2(__sum16 *sum, __be16 old, __be16 new)
|
|||||||
* time a packet with a new BTF-ID is seen.
|
* time a packet with a new BTF-ID is seen.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int print_meta_info_time(uint8_t *pkt, struct xdp_hints_rx_time *meta)
|
static int print_meta_info_time(uint8_t *pkt, struct xdp_hints_rx_time *meta,
|
||||||
|
__u32 qid)
|
||||||
{
|
{
|
||||||
__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 */
|
||||||
@@ -493,14 +494,14 @@ static int print_meta_info_time(uint8_t *pkt, struct xdp_hints_rx_time *meta)
|
|||||||
diff = time_now - rx_ktime;
|
diff = time_now - rx_ktime;
|
||||||
|
|
||||||
if (debug_meta)
|
if (debug_meta)
|
||||||
printf("meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
printf("Q[%u] meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
||||||
rx_ktime, time_now, diff);
|
qid, rx_ktime, time_now, diff);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Demo API xsk_btf__read_field() that use string for BTF lookup */
|
/* Demo API xsk_btf__read_field() that use string for BTF lookup */
|
||||||
static int print_meta_info_time_api2(uint8_t *pkt)
|
static int print_meta_info_time_api2(uint8_t *pkt, __u32 qid)
|
||||||
{
|
{
|
||||||
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();
|
||||||
@@ -526,13 +527,14 @@ static int print_meta_info_time_api2(uint8_t *pkt)
|
|||||||
diff = time_now - rx_ktime;
|
diff = time_now - rx_ktime;
|
||||||
|
|
||||||
if (debug_meta)
|
if (debug_meta)
|
||||||
printf("meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
printf("Q[%u] meta-time rx_ktime:%llu time_now:%llu diff:%llu ns\n",
|
||||||
rx_ktime, time_now, diff);
|
qid, rx_ktime, time_now, diff);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_meta_info_mark(uint8_t *pkt, struct xdp_hints_mark *meta)
|
static void print_meta_info_mark(uint8_t *pkt, struct xdp_hints_mark *meta,
|
||||||
|
__u32 qid)
|
||||||
{
|
{
|
||||||
struct xsk_btf_info *xbi = meta->xbi;
|
struct xsk_btf_info *xbi = meta->xbi;
|
||||||
__u32 mark = 0;
|
__u32 mark = 0;
|
||||||
@@ -540,12 +542,13 @@ static void print_meta_info_mark(uint8_t *pkt, struct xdp_hints_mark *meta)
|
|||||||
/* The 'mark' value is not updated in case of errors */
|
/* The 'mark' value is not updated in case of errors */
|
||||||
XSK_BTF_READ_INTO(mark, &meta->mark, xbi, pkt);
|
XSK_BTF_READ_INTO(mark, &meta->mark, xbi, pkt);
|
||||||
if (debug_meta)
|
if (debug_meta)
|
||||||
printf("meta-mark mark:%u\n", mark);
|
printf("Q[%u] meta-mark mark:%u\n", qid, mark);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void print_meta_info_via_btf( uint8_t *pkt)
|
static void print_meta_info_via_btf(uint8_t *pkt, struct xsk_socket_info *xsk)
|
||||||
{
|
{
|
||||||
__u32 btf_id = xsk_umem__btf_id(pkt);
|
__u32 btf_id = xsk_umem__btf_id(pkt);
|
||||||
|
__u32 qid = xsk->queue_id;
|
||||||
|
|
||||||
if (btf_id == 0) {
|
if (btf_id == 0) {
|
||||||
if (debug_meta)
|
if (debug_meta)
|
||||||
@@ -554,10 +557,10 @@ static void print_meta_info_via_btf( uint8_t *pkt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (btf_id == xdp_hints_rx_time.btf_type_id) {
|
if (btf_id == xdp_hints_rx_time.btf_type_id) {
|
||||||
print_meta_info_time(pkt, &xdp_hints_rx_time);
|
print_meta_info_time(pkt, &xdp_hints_rx_time, qid);
|
||||||
|
|
||||||
} else if (btf_id == xdp_hints_mark.btf_type_id) {
|
} else if (btf_id == xdp_hints_mark.btf_type_id) {
|
||||||
print_meta_info_mark(pkt, &xdp_hints_mark);
|
print_meta_info_mark(pkt, &xdp_hints_mark, qid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -594,7 +597,7 @@ static bool process_packet(struct xsk_socket_info *xsk,
|
|||||||
{
|
{
|
||||||
uint8_t *pkt = xsk_umem__get_data(xsk->umem->buffer, addr);
|
uint8_t *pkt = xsk_umem__get_data(xsk->umem->buffer, addr);
|
||||||
|
|
||||||
print_meta_info_via_btf(pkt);
|
print_meta_info_via_btf(pkt, xsk);
|
||||||
|
|
||||||
//if (debug)
|
//if (debug)
|
||||||
// printf("XXX addr:0x%lX pkt_ptr:0x%p\n", addr, pkt);
|
// printf("XXX addr:0x%lX pkt_ptr:0x%p\n", addr, pkt);
|
||||||
|
Reference in New Issue
Block a user