Data Accelerator Offload
Loading...
Searching...
No Matches
Macros | Typedefs | Functions
dao_port_group.h File Reference
#include <errno.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stddef.h>
#include <signal.h>
#include <assert.h>
#include <rte_common.h>
#include <rte_compat.h>
#include <rte_debug.h>

Go to the source code of this file.

Macros

#define DAO_PORT_GROUP_MAX   8
 
#define DAO_PORT_GROUP_NAMELEN   64
 
#define DAO_PORT_INVALID_VALUE   ((dao_port_t)(~0))
 
#define DAO_PORT_GROUP_FOREACH_PORT(epg, port, index)
 

Typedefs

typedef uint32_t dao_port_group_t
 
typedef uint64_t dao_port_t
 

Functions

int dao_port_group_create (const char *group_name, uint32_t max_num_ports, dao_port_group_t *epg)
 
int dao_port_group_get_by_name (const char *group_name, dao_port_group_t *epg)
 
int dao_port_group_port_add (dao_port_group_t epg, dao_port_t port, int32_t *returned_index)
 
int dao_port_group_port_get (dao_port_group_t epg, int32_t returned_index, dao_port_t *port)
 
int32_t dao_port_group_port_get_next (dao_port_group_t epg, dao_port_t *port, int32_t index)
 
int dao_port_group_port_get_num (dao_port_group_t epg, uint32_t *num_ports)
 
int dao_port_group_port_delete (dao_port_group_t epg, int32_t returned_index)
 
int dao_port_group_destroy (dao_port_group_t epg)
 

Detailed Description

DAO Port group

Definition in file dao_port_group.h.

Macro Definition Documentation

◆ DAO_PORT_GROUP_MAX

#define DAO_PORT_GROUP_MAX   8

Default number of port_groups which are supported

Definition at line 31 of file dao_port_group.h.

◆ DAO_PORT_GROUP_NAMELEN

#define DAO_PORT_GROUP_NAMELEN   64

Max Length of port_group name Initializer for dao_port_group_t

Definition at line 33 of file dao_port_group.h.

◆ DAO_PORT_INVALID_VALUE

#define DAO_PORT_INVALID_VALUE   ((dao_port_t)(~0))

Initializer value for dao_port_t

Definition at line 35 of file dao_port_group.h.

◆ DAO_PORT_GROUP_FOREACH_PORT

#define DAO_PORT_GROUP_FOREACH_PORT (   epg,
  port,
  index 
)
Value:
for (index = dao_port_group_port_get_next(epg, &port, -1); \
(index > -1) && (port != DAO_PORT_INVALID_VALUE); \
index = dao_port_group_port_get_next(epg, &port, index))
int32_t dao_port_group_port_get_next(dao_port_group_t epg, dao_port_t *port, int32_t index)
#define DAO_PORT_INVALID_VALUE

Loop for all ports in a dao_port_group_t

Recommended to be used in control path

Parameters
epg(dao_port_group_t)
port(dao_port_t ) value set by application at index iter
index(int32_t). Array Index where port is saved. Caller can use index to call dao_port_group_delete_port(epg, index)

Definition at line 194 of file dao_port_group.h.

Typedef Documentation

◆ dao_port_group_t

typedef uint32_t dao_port_group_t

dao port_group object holding list of dao_port_t

Definition at line 37 of file dao_port_group.h.

◆ dao_port_t

typedef uint64_t dao_port_t

Application level identifier to represent port

Definition at line 38 of file dao_port_group.h.

Function Documentation

◆ dao_port_group_create()

int dao_port_group_create ( const char *  group_name,
uint32_t  max_num_ports,
dao_port_group_t epg 
)

Port group library

Port group library allows applications to keep track of homogeneous ports (or ethdevs) created in the system and facilitates iterating over these ports in slow path seamlessly.

Typically, in a given system varieties of ports are probed like Ethernet PMD devices, LINUX TUN/TAP devices, virtio devices, DMA devices etc. Application, for instance, can create "dao_port_group_t" object (

See also
dao_port_group_create()) and add all LINUX tap devices to this newly created "dao_port_group_t" object (dao_port_group_port_add()) and iterate over these TAP devices via slow path macro (DAO_PORT_GROUP_FOREACH_PORT).

Application can create (DAO_PORT_GROUP_MAX) number of "dao_port_group_t" objects in the system. Create port_group object

Parameters
group_nameName of the port_group name
max_num_portsMaximum number of "dao_port_t" objects that application would like to add
[out]epgPointer to newly created "dao_port_group_t" object. Valid if return is 0.
Returns
0: Success <0: Failure

◆ dao_port_group_get_by_name()

int dao_port_group_get_by_name ( const char *  group_name,
dao_port_group_t epg 
)

Get already created port_group object by its name

Parameters
group_nameName of the group with which port_group was created
[out]epgPointer to "dao_port_group_t" object. Valid if return is 0.
Returns
0: Success <0: Failure

◆ dao_port_group_port_add()

int dao_port_group_port_add ( dao_port_group_t  epg,
dao_port_t  port,
int32_t *  returned_index 
)

Add "dao_port_t" to port_group object

Parameters
epg"dao_port_group_t" object.
port"dao_port_t" to be added to port_group object
[out]returned_indexPointer to returned index at which library stores provided port. Can be used by caller for port iteration.
See also
dao_port_group_port_get()
dao_port_group_next_active_port_get()
Returns
0: Success <0: Failure

◆ dao_port_group_port_get()

int dao_port_group_port_get ( dao_port_group_t  epg,
int32_t  returned_index,
dao_port_t port 
)

Get "dao_port_t" from port_group object using returned_index retrieved from dao_port_group_port_add()

Parameters
epg"dao_port_group_t" object.
returned_indexReturned index retrieved from dao_port_group_port_add()
[out]portPointer to dao_port_t. Valid if function returns 0
Returns
0: Success <0: Failure

◆ dao_port_group_port_get_next()

int32_t dao_port_group_port_get_next ( dao_port_group_t  epg,
dao_port_t port,
int32_t  index 
)

Get first "dao_port_t" from a port_group whose returned_index (

See also
dao_port_group_port_add() is greater than "index" parameter. This function helps to iterate over a port_group. -1 is valid value for "index" parameter
Parameters
epg"dao_port_group_t" object.
portPointer to "dao_port_t". Valid if function returns 0
index-1 or Returned index from dao_port_group_port_get_next() or dao_port_group_port_add()
Returns
>=0: Success. Returns index where returned "port" is saved <0: Failure

◆ dao_port_group_port_get_num()

int dao_port_group_port_get_num ( dao_port_group_t  epg,
uint32_t *  num_ports 
)

Get number of "dao_port_t" saved in a port_group.

Parameters
epg"dao_port_group_t" object.
[out]num_portsPointer to num_ports saved by API. Valid if function returns 0
Returns
0: Success <0: Failure

◆ dao_port_group_port_delete()

int dao_port_group_port_delete ( dao_port_group_t  epg,
int32_t  returned_index 
)

Delete already created "dao_port_t" from a port_group

Parameters
epg"dao_port_group_t" object.
returned_indexIndex either retrieved by dao_port_group_port_add() or dao_port_group_port_get_next_port()
Returns
0: Success <0: Failure

◆ dao_port_group_destroy()

int dao_port_group_destroy ( dao_port_group_t  epg)

Destroy port_group object

Parameters
epg"dao_port_group_t" object.
Returns
0: Success <0: Failure