#pragma once #include #include #include #include struct vdev_main; enum vd_type { /* 数据型设备 */ VD_TYPE_DATA = 0, /* 资源池型 */ VD_TYPE_POOL = 1, /* 最大值 */ VD_TYPE_MAX }; struct vdev_stat_info { unsigned int nr_rxstream; unsigned int nr_txstream; /* RX: from service to app */ uint64_t rx_on_line[MR_SID_MAX]; uint64_t rx_deliver[MR_SID_MAX]; uint64_t rx_missed[MR_SID_MAX]; uint64_t rx_total_len[MR_SID_MAX]; /* TX: from app to service */ uint64_t tx_on_line[MR_SID_MAX]; uint64_t tx_deliver[MR_SID_MAX]; uint64_t tx_missed[MR_SID_MAX]; uint64_t tx_total_len[MR_SID_MAX]; /* FTX: fast tunnel from app to serivce */ uint64_t ftx_on_line[MR_SID_MAX]; uint64_t ftx_deliver[MR_SID_MAX]; uint64_t ftx_missed[MR_SID_MAX]; uint64_t ftx_total_len[MR_SID_MAX]; }; /* 虚拟设备信息 */ struct vdev { /* 虚拟设备名称 */ char symbol[MR_SYMBOL_MAX]; /* 虚拟设备编号 */ port_id_t port_id; /* 虚拟设备类型 */ enum vd_type vd_type; /* 虚拟设备MAC地址 */ struct rte_ether_addr ether_addr; /* MTU */ unsigned int mtu; /* 虚拟设备IP地址 */ struct in_addr in_addr; /* 虚拟设备子网掩码 */ struct in_addr in_mask; /* 虚拟设备网关 */ struct in_addr in_gateway; /* 是否为隐藏设备(系统自用设备,对用户不展示)*/ unsigned int is_hidden; /* 是否启用 */ unsigned int enable; }; /* 虚拟设备句柄,应用使用 */ struct vdev_instance { /* 对应的虚设备信息 */ struct vdev * vdev; /* 队列数 */ unsigned int nr_rxstream; unsigned int nr_txstream; /* VNODE CONS/PROD */ struct vnode_cons * vnode_rx_cons; struct vnode_prod * vnode_tx_prod; struct vnode_prod * vnode_ftx_prod; struct vnode_prod * vnode_ltx_prod; /* 内存池:临时使用 */ struct rte_mempool * direct_pool; struct rte_mempool * indirect_pool; /* 统计信息暂存,用于统计速度 */ struct vdev_stat_info stat_info_last; TAILQ_ENTRY(vdev_instance) next; };