structrte_distributor_single*rte_distributor_create_single(constchar*name,unsignedintsocket_id,unsignedintnum_workers)
Function to create a new distributor instance
Reserves the memory needed for the distributor operation and initializes the distributor to work with the
configured number of workers.
Parametersname The name to be given to the distributor instance.
socket_id The NUMA node on which the memory is to be allocated
num_workers The maximum number of workers that will request packets from this distributor
Returns
The newly created distributor instance
intrte_distributor_process_single(structrte_distributor_single*d,structrte_mbuf**mbufs,unsignedintnum_mbufs)
Process a set of packets by distributing them among workers that request packets. The distributor will
ensure that no two packets that have the same flow id, or tag, in the mbuf will be processed at the same
time.
The user is advocated to set tag for each mbuf before calling this function. If user doesn't set the tag,
the tag value can be various values depending on driver implementation and configuration.
This is not multi-thread safe and should only be called on a single lcore.
Parametersd The distributor instance to be used
mbufs The mbufs to be distributed
num_mbufs The number of mbufs in the mbufs array
Returns
The number of mbufs processed.
intrte_distributor_returned_pkts_single(structrte_distributor_single*d,structrte_mbuf**mbufs,unsignedintmax_mbufs)
Get a set of mbufs that have been returned to the distributor by workers
This should only be called on the same lcore as rte_distributor_process()Parametersd The distributor instance to be used
mbufs The mbufs pointer array to be filled in
max_mbufs The size of the mbufs array
Returns
The number of mbufs returned in the mbufs array.
intrte_distributor_flush_single(structrte_distributor_single*d)
Flush the distributor component, so that there are no in-flight or backlogged packets awaiting processing
This should only be called on the same lcore as rte_distributor_process()Parametersd The distributor instance to be used
Returns
The number of queued/in-flight packets that were completed by this call.
voidrte_distributor_clear_returns_single(structrte_distributor_single*d)
Clears the array of returned packets used as the source for the rte_distributor_returned_pkts() API call.
This should only be called on the same lcore as rte_distributor_process()Parametersd The distributor instance to be used
structrte_mbuf*rte_distributor_get_pkt_single(structrte_distributor_single*d,unsignedintworker_id,structrte_mbuf*oldpkt)
API called by a worker to get a new packet to process. Any previous packet given to the worker is assumed
to have completed processing, and may be optionally returned to the distributor via the oldpkt parameter.
Parametersd The distributor instance to be used
worker_id The worker instance number to use - must be less that num_workers passed at distributor
creation time.
oldpkt The previous packet, if any, being processed by the worker
Returns
A new packet to be processed by the worker thread.
intrte_distributor_return_pkt_single(structrte_distributor_single*d,unsignedintworker_id,structrte_mbuf*mbuf)
API called by a worker to return a completed packet without requesting a new packet, for example, because
a worker thread is shutting down
Parametersd The distributor instance to be used
worker_id The worker instance number to use - must be less that num_workers passed at distributor
creation time.
mbuf The previous packet being processed by the worker
voidrte_distributor_request_pkt_single(structrte_distributor_single*d,unsignedintworker_id,structrte_mbuf*oldpkt)
API called by a worker to request a new packet to process. Any previous packet given to the worker is
assumed to have completed processing, and may be optionally returned to the distributor via the oldpkt
parameter. Unlike rte_distributor_get_pkt(), this function does not wait for a new packet to be provided
by the distributor.
NOTE: after calling this function, rte_distributor_poll_pkt() should be used to poll for the packet
requested. The rte_distributor_get_pkt() API should not be used to try and retrieve the new packet.
Parametersd The distributor instance to be used
worker_id The worker instance number to use - must be less that num_workers passed at distributor
creation time.
oldpkt The previous packet, if any, being processed by the worker
structrte_mbuf*rte_distributor_poll_pkt_single(structrte_distributor_single*d,unsignedintworker_id)
API called by a worker to check for a new packet that was previously requested by a call to
rte_distributor_request_pkt(). It does not wait for the new packet to be available, but returns NULL if
the request has not yet been fulfilled by the distributor.
Parametersd The distributor instance to be used
worker_id The worker instance number to use - must be less that num_workers passed at distributor
creation time.
Returns
A new packet to be processed by the worker thread, or NULL if no packet is yet available.