#pragma once #include #include #include struct ctrl_msg_error { uint16_t errcode; uint8_t strerr[MR_STRING_MAX]; }; struct ctrl_msg_app_reg_request { struct ctrl_msg_header msg_header; uint8_t symbol[MR_SYMBOL_MAX]; uint8_t mntfile[MR_STRING_MAX]; pid_t pid; } __rte_packed; struct ctrl_msg_app_reg_response { struct ctrl_msg_header msg_header; struct ctrl_msg_error msg_err; uint8_t symbol[MR_SYMBOL_MAX]; } __rte_packed; struct ctrl_msg_vdev_open_request { struct ctrl_msg_header msg_header; uint8_t devsym[MR_SYMBOL_MAX]; uint8_t nr_rxstream; uint8_t nr_txstream; } __rte_packed; struct ctrl_msg_vdev_open_response { struct ctrl_msg_header msg_header; struct ctrl_msg_error msg_err; uint8_t devsym[MR_SYMBOL_MAX]; uint8_t nr_rxstream; uint8_t nr_txstream; uintptr_t ptr_vdi; } __rte_packed; #define CTRLMSG_TOPIC_APP_REGISTER "app/register" #define CTRLMSG_TOPIC_APP_UNREGISTER "app/unregister" #define CTRLMSG_TOPIC_VDEV_OPEN "vdev/open" static inline void ctrl_msg_header_construct(struct ctrl_msg_header * header, unsigned int len, unsigned int type, const char * topic) { header->msg_len = len; header->msg_type = type; strncpy((char *)header->msg_topic, topic, sizeof(header->msg_topic)); } static inline void ctrl_msg_error_construct(struct ctrl_msg_error * error, uint16_t errcode, const char * fmt, ...) { error->errcode = errcode; va_list ap; va_start(ap, fmt); vsnprintf((char *)&error->strerr, sizeof(error->strerr), fmt, ap); va_end(ap); }