DPDK: Data Plane Development Kit

18.02.0-rc0
rte_kni.h File Reference
#include <rte_pci.h>
#include <rte_memory.h>
#include <rte_mempool.h>
#include <exec-env/rte_kni_common.h>

Go to the source code of this file.

Data Structures

struct  rte_kni_ops
struct  rte_kni_conf

Functions

void rte_kni_init (unsigned int max_kni_ifaces)
struct rte_kni * rte_kni_alloc (struct rte_mempool *pktmbuf_pool, const struct rte_kni_conf *conf, struct rte_kni_ops *ops)
int rte_kni_release (struct rte_kni *kni)
int rte_kni_handle_request (struct rte_kni *kni)
unsigned rte_kni_rx_burst (struct rte_kni *kni, struct rte_mbuf **mbufs, unsigned num)
unsigned rte_kni_tx_burst (struct rte_kni *kni, struct rte_mbuf **mbufs, unsigned num)
struct rte_kni * rte_kni_get (const char *name)
const char * rte_kni_get_name (const struct rte_kni *kni)
int rte_kni_register_handlers (struct rte_kni *kni, struct rte_kni_ops *ops)
int rte_kni_unregister_handlers (struct rte_kni *kni)
void rte_kni_close (void)

Detailed Description

RTE KNI

The KNI library provides the ability to create and destroy kernel NIC interfaces that may be used by the RTE application to receive/transmit packets from/to Linux kernel net interfaces.

This library provides two APIs to burst receive packets from KNI interfaces, and burst transmit packets to KNI interfaces.

Definition in file rte_kni.h.

Function Documentation

void rte_kni_init ( unsigned int  max_kni_ifaces)

Initialize and preallocate KNI subsystem

This function is to be executed on the MASTER lcore only, after EAL initialization and before any KNI interface is attempted to be allocated

Parameters
max_kni_ifacesThe maximum number of KNI interfaces that can coexist concurrently
Examples:
examples/ip_pipeline/init.c, and examples/kni/main.c.
struct rte_kni* rte_kni_alloc ( struct rte_mempool pktmbuf_pool,
const struct rte_kni_conf conf,
struct rte_kni_ops ops 
)
read

Allocate KNI interface according to the port id, mbuf size, mbuf pool, configurations and callbacks for kernel requests.The KNI interface created in the kernel space is the net interface the traditional Linux application talking to.

The rte_kni_alloc shall not be called before rte_kni_init() has been called. rte_kni_alloc is thread safe.

The mempool should have capacity of more than "2 x KNI_FIFO_COUNT_MAX" elements for each KNI interface allocated.

Parameters
pktmbuf_poolThe mempool for allocating mbufs for packets.
confThe pointer to the configurations of the KNI device.
opsThe pointer to the callbacks for the KNI kernel requests.
Returns
  • The pointer to the context of a KNI interface.
  • NULL indicate error.
Examples:
examples/ip_pipeline/init.c, and examples/kni/main.c.
int rte_kni_release ( struct rte_kni *  kni)

Release KNI interface according to the context. It will also release the paired KNI interface in kernel space. All processing on the specific KNI context need to be stopped before calling this interface.

rte_kni_release is thread safe.

Parameters
kniThe pointer to the context of an existent KNI interface.
Returns
  • 0 indicates success.
  • negative value indicates failure.
Examples:
examples/kni/main.c.
int rte_kni_handle_request ( struct rte_kni *  kni)

It is used to handle the request mbufs sent from kernel space. Then analyzes it and calls the specific actions for the specific requests. Finally constructs the response mbuf and puts it back to the resp_q.

Parameters
kniThe pointer to the context of an existent KNI interface.
Returns
  • 0
  • negative value indicates failure.
Examples:
examples/ip_pipeline/pipeline/pipeline_master_be.c, and examples/kni/main.c.
unsigned rte_kni_rx_burst ( struct rte_kni *  kni,
struct rte_mbuf **  mbufs,
unsigned  num 
)

Retrieve a burst of packets from a KNI interface. The retrieved packets are stored in rte_mbuf structures whose pointers are supplied in the array of mbufs, and the maximum number is indicated by num. It handles allocating the mbufs for KNI interface alloc queue.

Parameters
kniThe KNI interface context.
mbufsThe array to store the pointers of mbufs.
numThe maximum number per burst.
Returns
The actual number of packets retrieved.
Examples:
examples/kni/main.c.
unsigned rte_kni_tx_burst ( struct rte_kni *  kni,
struct rte_mbuf **  mbufs,
unsigned  num 
)

Send a burst of packets to a KNI interface. The packets to be sent out are stored in rte_mbuf structures whose pointers are supplied in the array of mbufs, and the maximum number is indicated by num. It handles the freeing of the mbufs in the free queue of KNI interface.

Parameters
kniThe KNI interface context.
mbufsThe array to store the pointers of mbufs.
numThe maximum number per burst.
Returns
The actual number of packets sent.
Examples:
examples/kni/main.c.
struct rte_kni* rte_kni_get ( const char *  name)
read

Get the KNI context of its name.

Parameters
namepointer to the KNI device name.
Returns
On success: Pointer to KNI interface. On failure: NULL.
const char* rte_kni_get_name ( const struct rte_kni *  kni)

Get the name given to a KNI device

Parameters
kniThe KNI instance to query
Returns
The pointer to the KNI name
int rte_kni_register_handlers ( struct rte_kni *  kni,
struct rte_kni_ops ops 
)

Register KNI request handling for a specified port,and it can be called by master process or slave process.

Parameters
knipointer to struct rte_kni.
opspointer to struct rte_kni_ops.
Returns
On success: 0 On failure: -1
int rte_kni_unregister_handlers ( struct rte_kni *  kni)

Unregister KNI request handling for a specified port.

Parameters
knipointer to struct rte_kni.
Returns
On success: 0 On failure: -1
void rte_kni_close ( void  )

Close KNI device.