- uint16_t port_id;
- int offload_found = 0;
- int offset;
- int flag;
-
- static const struct rte_mbuf_dynfield desc_offs = {
- .name = RTE_MBUF_DYNFIELD_TIMESTAMP_NAME,
- .size = sizeof(uint64_t),
- .align = __alignof__(uint64_t),
- };
- static const struct rte_mbuf_dynflag desc_flag = {
- .name = RTE_MBUF_DYNFLAG_TX_TIMESTAMP_NAME,
- };
-
- RTE_ETH_FOREACH_DEV(port_id) {
- struct rte_eth_dev_info dev_info = { 0 };
- int ret;
-
- ret = rte_eth_dev_info_get(port_id, &dev_info);
- if (ret == 0 && dev_info.tx_offload_capa &
- DEV_TX_OFFLOAD_SEND_ON_TIMESTAMP) {
- offload_found = 1;
- break;
- }
- }
- if (!offload_found) {
- printf("No device supporting Tx timestamp scheduling found, "
- "dynamic flag and field not registered\n");
- return;
- }
- offset = rte_mbuf_dynfield_register(&desc_offs);
- if (offset < 0 && rte_errno != EEXIST)
- printf("Dynamic timestamp field registration error: %d",
- rte_errno);
- flag = rte_mbuf_dynflag_register(&desc_flag);
- if (flag < 0 && rte_errno != EEXIST)
- printf("Dynamic timestamp flag registration error: %d",
- rte_errno);