numam-dpdk/examples/pipeline/obj.h
Venkata Suresh Kumar P e2b8dc5256 port: add file descriptor SWX port
Add the file descriptor input/output port type for the SWX pipeline.
File descriptor port type provides interface with the kernel network
stack. Example file descriptor port is TAP device.

Signed-off-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com>
Signed-off-by: Churchill Khangar <churchill.khangar@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
2021-03-23 19:50:44 +01:00

171 lines
2.7 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
* Copyright(c) 2020 Intel Corporation
*/
#ifndef _INCLUDE_OBJ_H_
#define _INCLUDE_OBJ_H_
#include <stdint.h>
#include <sys/queue.h>
#include <rte_mempool.h>
#include <rte_swx_pipeline.h>
#include <rte_swx_ctl.h>
#ifndef NAME_SIZE
#define NAME_SIZE 64
#endif
/*
* obj
*/
struct obj;
struct obj *
obj_init(void);
/*
* mempool
*/
struct mempool_params {
uint32_t buffer_size;
uint32_t pool_size;
uint32_t cache_size;
uint32_t cpu_id;
};
struct mempool {
TAILQ_ENTRY(mempool) node;
char name[NAME_SIZE];
struct rte_mempool *m;
uint32_t buffer_size;
};
struct mempool *
mempool_create(struct obj *obj,
const char *name,
struct mempool_params *params);
struct mempool *
mempool_find(struct obj *obj,
const char *name);
/*
* link
*/
#ifndef LINK_RXQ_RSS_MAX
#define LINK_RXQ_RSS_MAX 16
#endif
struct link_params_rss {
uint32_t queue_id[LINK_RXQ_RSS_MAX];
uint32_t n_queues;
};
struct link_params {
const char *dev_name;
uint16_t port_id; /**< Valid only when *dev_name* is NULL. */
struct {
uint32_t n_queues;
uint32_t queue_size;
const char *mempool_name;
struct link_params_rss *rss;
} rx;
struct {
uint32_t n_queues;
uint32_t queue_size;
} tx;
int promiscuous;
};
struct link {
TAILQ_ENTRY(link) node;
char name[NAME_SIZE];
char dev_name[NAME_SIZE];
uint16_t port_id;
uint32_t n_rxq;
uint32_t n_txq;
};
struct link *
link_create(struct obj *obj,
const char *name,
struct link_params *params);
int
link_is_up(struct obj *obj, const char *name);
struct link *
link_find(struct obj *obj, const char *name);
struct link *
link_next(struct obj *obj, struct link *link);
/*
* ring
*/
struct ring_params {
uint32_t size;
uint32_t numa_node;
};
struct ring {
TAILQ_ENTRY(ring) node;
char name[NAME_SIZE];
};
struct ring *
ring_create(struct obj *obj,
const char *name,
struct ring_params *params);
struct ring *
ring_find(struct obj *obj, const char *name);
/*
* tap
*/
struct tap {
TAILQ_ENTRY(tap) node;
char name[NAME_SIZE];
int fd;
};
struct tap *
tap_find(struct obj *obj, const char *name);
struct tap *
tap_next(struct obj *obj, struct tap *tap);
struct tap *
tap_create(struct obj *obj, const char *name);
/*
* pipeline
*/
struct pipeline {
TAILQ_ENTRY(pipeline) node;
char name[NAME_SIZE];
struct rte_swx_pipeline *p;
struct rte_swx_ctl_pipeline *ctl;
uint32_t timer_period_ms;
int enabled;
uint32_t thread_id;
uint32_t cpu_id;
};
struct pipeline *
pipeline_create(struct obj *obj,
const char *name,
int numa_node);
struct pipeline *
pipeline_find(struct obj *obj, const char *name);
#endif /* _INCLUDE_OBJ_H_ */