#ifndef _PACKET_IO_H #define _PACKET_IO_H #ifdef __cplusplus extern "C" { #endif #include /****************************************************************************** * Packet IO API for gtest ******************************************************************************/ struct sids { sid_t elems[MR_SID_LIST_MAXLEN]; int num; }; struct route_ctx { char data[64]; int len; }; struct metadata { uint64_t session_id; uint32_t rehash_index; char *raw_data; // refer to current packet data int raw_len; uint16_t l7offset; uint16_t link_id; int direction; // 1: E2I; 0: I2E int is_ctrl_pkt; int is_decrypted; struct sids sids; struct route_ctx route_ctx; }; int mbuff_get_metadata(marsio_buff_t *rx_buff, struct metadata *meta); int mbuff_set_metadata(marsio_buff_t *tx_buff, struct metadata *meta); void vlan_encapsulate(marsio_buff_t *mbuff, int vlan_id, int replace_orig_vlan_header); struct mr_instance *packet_io_get_mr_instance(struct packet_io *handle); /****************************************************************************** * Packet IO API for global ******************************************************************************/ struct packet_io *packet_io_create(const char *profile, int thread_num, cpu_set_t *coremask); void packet_io_destory(struct packet_io *handle); /****************************************************************************** * Packet IO API for thread ******************************************************************************/ // return 0 for success // return -1 for error int packet_io_init(struct packet_io *handle, struct thread_ctx *thread_ctx); void packet_io_wait(struct packet_io *handle, struct thread_ctx *thread_ctx, int timeout_ms); // return n_packet_recved int packet_io_polling_nf(struct packet_io *handle, struct thread_ctx *thread_ctx); int packet_io_polling_endpoint_l3(struct packet_io *handle, struct thread_ctx *thread_ctx); int packet_io_polling_endpoint_l2(struct packet_io *handle, struct thread_ctx *thread_ctx); #ifdef __cplusplus } #endif #endif