mirror of
https://github.com/xdp-project/bpf-examples.git
synced 2024-05-06 15:54:53 +00:00
AF_XDP-interaction: Add param to adjust TX-cyclic interval
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
This commit is contained in:
@@ -300,6 +300,9 @@ static const struct option_wrapper long_options[] = {
|
||||
{{"tx-smac", required_argument, NULL, 'H' },
|
||||
"Src MAC addr of TX frame in aa:bb:cc:dd:ee:ff format", "aa:bb:cc:dd:ee:ff"},
|
||||
|
||||
{{"interval", required_argument, NULL, 'i' },
|
||||
"Periodic TX-cyclic interval wakeup period in usec", "<usec>"},
|
||||
|
||||
{{0, 0, NULL, 0 }, NULL, false}
|
||||
};
|
||||
|
||||
@@ -1138,7 +1141,7 @@ static void rx_avail_packets(struct xsk_container *xsks)
|
||||
}
|
||||
|
||||
/* Default interval in usec */
|
||||
#define DEFAULT_INTERVAL 1000000
|
||||
#define DEFAULT_INTERVAL 1000000
|
||||
|
||||
#define USEC_PER_SEC 1000000
|
||||
#define NSEC_PER_SEC 1000000000
|
||||
@@ -1210,7 +1213,7 @@ static void tx_cyclic_and_rx_process(struct config *cfg,
|
||||
struct xdp_desc tx_pkts[batch_nr];
|
||||
int tx_nr;
|
||||
|
||||
int period = DEFAULT_INTERVAL; // TODO: Add to cfg
|
||||
int period = cfg->interval;
|
||||
int timermode = TIMER_ABSTIME;
|
||||
int clock = CLOCK_MONOTONIC;
|
||||
|
||||
@@ -1286,7 +1289,7 @@ static void tx_cyclic_and_rx_process(struct config *cfg,
|
||||
printf("TX pkts:%d event:%lu"
|
||||
" inaccurate wakeup(nanosec) curr:%ld"
|
||||
"(min:%ld max:%ld avg:%ld avg2adj:%ld)"
|
||||
" variance(n-1):%ld interval:%ld\n",
|
||||
" variance(n-1):%ld interval-ns:%ld\n",
|
||||
n, stat.events, stat.curr,
|
||||
stat.min, stat.max, avg, avg2adj,
|
||||
stat.curr - stat.prev,
|
||||
@@ -1444,6 +1447,7 @@ int main(int argc, char **argv)
|
||||
.xsk_if_queue = -1,
|
||||
.opt_tx_dmac = default_tx_dmac,
|
||||
.opt_tx_smac = default_tx_smac,
|
||||
.interval = DEFAULT_INTERVAL,
|
||||
};
|
||||
pthread_t stats_poll_thread;
|
||||
struct xsk_umem_info *umem;
|
||||
|
@@ -30,6 +30,7 @@ struct config {
|
||||
bool opt_busy_poll;
|
||||
struct ether_addr opt_tx_smac;
|
||||
struct ether_addr opt_tx_dmac;
|
||||
__u64 interval;
|
||||
};
|
||||
|
||||
/* Defined in common_params.o */
|
||||
|
@@ -97,7 +97,7 @@ void parse_cmdline_args(int argc, char **argv,
|
||||
}
|
||||
|
||||
/* Parse commands line args */
|
||||
while ((opt = getopt_long(argc, argv, "hd:r:L:R:BASNFUMQ:G:H:czqp:t",
|
||||
while ((opt = getopt_long(argc, argv, "hd:r:L:R:BASNFUMQ:G:H:czqp:ti:",
|
||||
long_options, &longindex)) != -1) {
|
||||
switch (opt) {
|
||||
case 'd':
|
||||
@@ -219,6 +219,9 @@ void parse_cmdline_args(int argc, char **argv,
|
||||
dest = (char *)&cfg->dest_mac;
|
||||
strncpy(dest, optarg, sizeof(cfg->dest_mac));
|
||||
break;
|
||||
case 'i':
|
||||
cfg->interval = atoi(optarg);
|
||||
break;
|
||||
case 'c':
|
||||
cfg->xsk_bind_flags &= ~XDP_ZEROCOPY; /* Clear flag */
|
||||
cfg->xsk_bind_flags |= XDP_COPY; /* Set flag */
|
||||
|
Reference in New Issue
Block a user