#pragma once #include #include #include #include struct vdev_main; enum vd_type { /* 数据型设备 */ VD_TYPE_DATA = 0, /* 资源池型 */ VD_TYPE_POOL = 1, /* 最大值 */ VD_TYPE_MAX }; enum link_status { LINK_DOWN = 0, LINK_UP }; enum vdev_in_use { VDEV_NOT_IN_USE = 0, VDEV_IN_USE }; 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]; /* LTX: ctrl tunnel from app to service */ uint64_t ltx_on_line[MR_SID_MAX]; uint64_t ltx_deliver[MR_SID_MAX]; uint64_t ltx_missed[MR_SID_MAX]; uint64_t ltx_total_len[MR_SID_MAX]; #if 0 /* NOTIFY */ uint64_t notify_state_waiting[MR_SID_MAX]; uint64_t notify_state_running[MR_SID_MAX]; uint64_t notify_state_ready[MR_SID_MAX]; #endif /* Batch Size */ uint64_t batch_size_total[MR_SID_MAX]; uint64_t batch_size_count[MR_SID_MAX]; /* Queue Len */ float rx_q_len_max[MR_SID_MAX]; float rx_q_len_avg_max[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 enable; /* 网卡状态 */ uint8_t link_status; /* Device usage status */ uint8_t in_use; /* representor config */ struct { unsigned int enable; unsigned int redirect_local_arp; unsigned int redirect_local_rarp; unsigned int redirect_local_lldp; unsigned int redirect_local_ipv4; unsigned int redirect_local_ipv6; } representor_config; }; /* 虚拟设备句柄,应用使用 */ 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; /* CONS NOTIFY DESCS */ struct vnode_cons_notify * vnode_rx_cons_notify; /* 内存池:临时使用 */ struct rte_mempool * direct_pool; struct rte_mempool * indirect_pool; /* 统计信息暂存,用于统计速度 */ struct vdev_stat_info stat_info_last; TAILQ_ENTRY(vdev_instance) next; };