Data Accelerator Offload
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Functions | Variables
dao_virtio_netdev.h File Reference
#include <dao_virtio.h>
#include <dao_util.h>
#include <spec/virtio_net.h>

Go to the source code of this file.

Data Structures

struct  dao_virtio_netdev_link_info
 
struct  dao_virtio_netdev_conf
 
struct  dao_virtio_netdev
 
struct  dao_virtio_net_hdr
 
struct  dao_virtio_netdev_cbs
 

Macros

#define DAO_VIRTIO_NETDEV_EXTBUF   DAO_BIT_ULL(0)
 
#define DAO_VIRTIO_NETDEV_MEM_SZ   8192
 

Typedefs

typedef uint16_t(* dao_virtio_net_deq_fn_t) (void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
 
typedef uint16_t(* dao_virtio_net_enq_fn_t) (void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
 
typedef int(* dao_net_desc_manage_fn_t) (uint16_t devid, uint16_t qp_count)
 
typedef uint16_t(* dao_virtio_net_deq_ext_fn_t) (void *q, void **vbufs, uint16_t nb_bufs)
 
typedef uint16_t(* dao_virtio_net_enq_ext_fn_t) (void *q, void **vbufs, uint16_t nb_bufs)
 
typedef int(* dao_virtio_netdev_rss_cb_t) (uint16_t devid, struct virtio_net_ctrl_rss *rss)
 
typedef int(* dao_virtio_netdev_status_cb_t) (uint16_t devid, uint8_t status)
 
typedef int(* dao_virtio_netdev_promisc_cb_t) (uint16_t devid, uint8_t enable)
 
typedef int(* dao_virtio_netdev_allmulti_cb_t) (uint16_t devid, uint8_t enable)
 
typedef int(* dao_virtio_netdev_mac_set_cb_t) (uint16_t devid, uint8_t *mac)
 
typedef int(* dao_virtio_netdev_mac_add_cb_t) (uint16_t devid, struct virtio_net_ctrl_mac *mac_tbl, uint8_t type)
 
typedef int(* dao_virtio_netdev_mq_cfg_t) (uint16_t devid, bool qmap_set)
 
typedef int(* dao_virtio_netdev_vlan_t) (uint16_t devid, uint16_t vlan_tci)
 

Functions

int dao_virtio_netdev_init (uint16_t devid, struct dao_virtio_netdev_conf *conf)
 
int dao_virtio_netdev_fini (uint16_t devid)
 
void dao_virtio_netdev_cb_register (struct dao_virtio_netdev_cbs *cbs)
 
void dao_virtio_netdev_cb_unregister (void)
 
int dao_virtio_netdev_queue_count (uint16_t devid)
 
uint64_t dao_virtio_netdev_feature_bits_get (uint16_t devid)
 
int dao_virtio_netdev_queue_count_max (uint16_t pem_devid, uint16_t devid)
 
int dao_virtio_netdev_link_sts_update (uint16_t devid, struct dao_virtio_netdev_link_info *info)
 
uint8_t dao_virtio_netdev_hdrlen_get (uint16_t devid)
 
static __rte_always_inline int dao_virtio_net_desc_manage (uint16_t devid, uint16_t qp_count)
 
static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst (uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
 
static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst (uint16_t devid, uint16_t qid, struct rte_mbuf **mbufs, uint16_t nb_mbufs)
 
static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst_ext (uint16_t devid, uint16_t qid, void **vbufs, uint16_t nb_bufs)
 
static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst_ext (uint16_t devid, uint16_t qid, void **vbufs, uint16_t nb_bufs)
 

Variables

struct dao_virtio_netdev dao_virtio_netdevs []
 
dao_virtio_net_deq_fn_t dao_virtio_net_deq_fns []
 
dao_virtio_net_enq_fn_t dao_virtio_net_enq_fns []
 
dao_net_desc_manage_fn_t dao_net_desc_manage_fns []
 
dao_virtio_net_deq_ext_fn_t dao_virtio_net_deq_ext_fns []
 
dao_virtio_net_enq_ext_fn_t dao_virtio_net_enq_ext_fns []
 

Detailed Description

DAO virtio net library

Definition in file dao_virtio_netdev.h.

Macro Definition Documentation

◆ DAO_VIRTIO_NETDEV_EXTBUF

#define DAO_VIRTIO_NETDEV_EXTBUF   DAO_BIT_ULL(0)

Config flags

Definition at line 45 of file dao_virtio_netdev.h.

◆ DAO_VIRTIO_NETDEV_MEM_SZ

#define DAO_VIRTIO_NETDEV_MEM_SZ   8192

Table to find hash report based on packet type

Definition at line 90 of file dao_virtio_netdev.h.

Typedef Documentation

◆ dao_virtio_net_deq_fn_t

typedef uint16_t(* dao_virtio_net_deq_fn_t) (void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)

Dequeue function

Definition at line 107 of file dao_virtio_netdev.h.

◆ dao_virtio_net_enq_fn_t

typedef uint16_t(* dao_virtio_net_enq_fn_t) (void *q, struct rte_mbuf **mbufs, uint16_t nb_mbufs)

Enqueue function

Definition at line 109 of file dao_virtio_netdev.h.

◆ dao_net_desc_manage_fn_t

typedef int(* dao_net_desc_manage_fn_t) (uint16_t devid, uint16_t qp_count)

Management function

Definition at line 111 of file dao_virtio_netdev.h.

◆ dao_virtio_net_deq_ext_fn_t

typedef uint16_t(* dao_virtio_net_deq_ext_fn_t) (void *q, void **vbufs, uint16_t nb_bufs)

Dequeue external buf function

Definition at line 121 of file dao_virtio_netdev.h.

◆ dao_virtio_net_enq_ext_fn_t

typedef uint16_t(* dao_virtio_net_enq_ext_fn_t) (void *q, void **vbufs, uint16_t nb_bufs)

Enqueue external buf function

Definition at line 123 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_rss_cb_t

typedef int(* dao_virtio_netdev_rss_cb_t) (uint16_t devid, struct virtio_net_ctrl_rss *rss)

Device status callback

Definition at line 130 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_status_cb_t

typedef int(* dao_virtio_netdev_status_cb_t) (uint16_t devid, uint8_t status)

RSS setup callback

Definition at line 132 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_promisc_cb_t

typedef int(* dao_virtio_netdev_promisc_cb_t) (uint16_t devid, uint8_t enable)

Promisc mode callback

Definition at line 134 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_allmulti_cb_t

typedef int(* dao_virtio_netdev_allmulti_cb_t) (uint16_t devid, uint8_t enable)

All multi callback

Definition at line 136 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_mac_set_cb_t

typedef int(* dao_virtio_netdev_mac_set_cb_t) (uint16_t devid, uint8_t *mac)

Mac set callback

Definition at line 138 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_mac_add_cb_t

typedef int(* dao_virtio_netdev_mac_add_cb_t) (uint16_t devid, struct virtio_net_ctrl_mac *mac_tbl, uint8_t type)

Mac filter callback

Definition at line 140 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_mq_cfg_t

typedef int(* dao_virtio_netdev_mq_cfg_t) (uint16_t devid, bool qmap_set)

Multi queue configure callback

Definition at line 143 of file dao_virtio_netdev.h.

◆ dao_virtio_netdev_vlan_t

typedef int(* dao_virtio_netdev_vlan_t) (uint16_t devid, uint16_t vlan_tci)

VLAN filter add callback

Definition at line 145 of file dao_virtio_netdev.h.

Function Documentation

◆ dao_virtio_netdev_init()

int dao_virtio_netdev_init ( uint16_t  devid,
struct dao_virtio_netdev_conf conf 
)

Virtio net device initialize.

Parameters
devidVirtio net device ID
confVirtio net device config.
Returns
Zero on success.

◆ dao_virtio_netdev_fini()

int dao_virtio_netdev_fini ( uint16_t  devid)

Virtio net device cleanup.

Parameters
devidVirtio net device ID
Returns
Zero on success.

◆ dao_virtio_netdev_cb_register()

void dao_virtio_netdev_cb_register ( struct dao_virtio_netdev_cbs cbs)

Virtio net device callback register

Parameters
cbsApplication callbacks for virtio net devices

◆ dao_virtio_netdev_cb_unregister()

void dao_virtio_netdev_cb_unregister ( void  )

Virtio net device callback unregister

◆ dao_virtio_netdev_queue_count()

int dao_virtio_netdev_queue_count ( uint16_t  devid)

Get net device queue count.

Parameters
devidVirtio net device ID.
Returns
Number of virtio queues configured on success. Negative on failure.

◆ dao_virtio_netdev_feature_bits_get()

uint64_t dao_virtio_netdev_feature_bits_get ( uint16_t  devid)

Get net device feature bits.

Parameters
devidVirtio net device ID.
Returns
Configured feature bits on success. Zero on failure.

◆ dao_virtio_netdev_queue_count_max()

int dao_virtio_netdev_queue_count_max ( uint16_t  pem_devid,
uint16_t  devid 
)

Get net device queue count max.

API can be called before initializing virtio device.

Parameters
pem_devidPEM device ID.
devidVirtio net device ID.
Returns
Max support virtio queue count on this device on success. Negative on failure.

◆ dao_virtio_netdev_link_sts_update()

int dao_virtio_netdev_link_sts_update ( uint16_t  devid,
struct dao_virtio_netdev_link_info info 
)

Update link status of netdev.

Parameters
devidVirtio net device ID.
infoVirtio net device link info.
Returns
Zero on success. Negative on failure.

◆ dao_virtio_netdev_hdrlen_get()

uint8_t dao_virtio_netdev_hdrlen_get ( uint16_t  devid)

Get virtio net device header length.

Parameters
devidVirtio net device ID.
Returns
Configured virtio net header size on success. Zero on failure.

◆ dao_virtio_net_desc_manage()

static __rte_always_inline int dao_virtio_net_desc_manage ( uint16_t  devid,
uint16_t  qp_count 
)
static

Fetch virtio netdev descriptors and acknowledge completions.

To be called from service core as frequently as possible to shadow descriptors between Host and Octeon memory.

Parameters
devidVirtio net device ID.
qp_countNumber of queue pairs to manage.
Returns
Zero on success.

Definition at line 285 of file dao_virtio_netdev.h.

◆ dao_virtio_net_dequeue_burst()

static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst ( uint16_t  devid,
uint16_t  qid,
struct rte_mbuf **  mbufs,
uint16_t  nb_mbufs 
)
static

Virtio netdev receive from Host

Parameters
devidVirtio net device ID.
qidVirtio queue id in range of { 1, 3, 5, ... N + 1} as they are host Tx queue id's.
mbufsArray to store mbuf pointers of received pkts.
nb_mbufsSize of mbuf array.
Returns
Number of mbufs received from host.

Definition at line 309 of file dao_virtio_netdev.h.

◆ dao_virtio_net_enqueue_burst()

static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst ( uint16_t  devid,
uint16_t  qid,
struct rte_mbuf **  mbufs,
uint16_t  nb_mbufs 
)
static

Virtio netdev send to Host

Parameters
devidVirtio net device ID.
qidVirtio queue id in range of { 0, 2, 4, ... N } as they are host Rx queue id's.
mbufsArray of mbuf pointers of pkts to send to host.
nb_mbufsNumber of pkts to send.
Returns
Number of mbufs sent to host.

Definition at line 339 of file dao_virtio_netdev.h.

◆ dao_virtio_net_dequeue_burst_ext()

static __rte_always_inline uint16_t dao_virtio_net_dequeue_burst_ext ( uint16_t  devid,
uint16_t  qid,
void **  vbufs,
uint16_t  nb_bufs 
)
static

Virtio netdev receive raw buffers from Host

Parameters
devidVirtio net device ID.
qidVirtio queue id in range of { 1, 3, 5, ... N + 1} as they are host Tx queue id's.
vbufsArray to store buffer pointers of received packets.
nb_bufsSize of buffer array.
Returns
Number of buffers received from host.

Definition at line 369 of file dao_virtio_netdev.h.

◆ dao_virtio_net_enqueue_burst_ext()

static __rte_always_inline uint16_t dao_virtio_net_enqueue_burst_ext ( uint16_t  devid,
uint16_t  qid,
void **  vbufs,
uint16_t  nb_bufs 
)
static

Virtio netdev send raw buffers to Host

Parameters
devidVirtio net device ID.
qidVirtio queue id in range of { 0, 2, 4, ... N } as they are host Rx queue id's.
vbufsArray of buffer pointers to send to host.
nb_bufsNumber of buffers to send.
Returns
Number of buffers sent to host.

Definition at line 398 of file dao_virtio_netdev.h.

Variable Documentation

◆ dao_virtio_netdevs

struct dao_virtio_netdev dao_virtio_netdevs[]
extern

Virtio net devices

◆ dao_virtio_net_deq_fns

dao_virtio_net_deq_fn_t dao_virtio_net_deq_fns[]
extern

Array of dequeue functions

◆ dao_virtio_net_enq_fns

dao_virtio_net_enq_fn_t dao_virtio_net_enq_fns[]
extern

Array of enqueue functions

◆ dao_net_desc_manage_fns

dao_net_desc_manage_fn_t dao_net_desc_manage_fns[]
extern

Array of management functions

◆ dao_virtio_net_deq_ext_fns

dao_virtio_net_deq_ext_fn_t dao_virtio_net_deq_ext_fns[]
extern

Array of dequeue external buf functions

◆ dao_virtio_net_enq_ext_fns

dao_virtio_net_enq_ext_fn_t dao_virtio_net_enq_ext_fns[]
extern

Array of enqueue external buf functions