1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright 2018-2019 Cisco Systems, Inc. All rights reserved. 3 */ 4 5 #ifndef _MEMIF_SOCKET_H_ 6 #define _MEMIF_SOCKET_H_ 7 8 #include <sys/queue.h> 9 10 /** 11 * Remove device from socket device list. If no device is left on the socket, 12 * remove the socket as well. 13 * 14 * @param dev 15 * memif device 16 */ 17 void memif_socket_remove_device(struct rte_eth_dev *dev); 18 19 /** 20 * Enqueue disconnect message to control channel message queue. 21 * 22 * @param cc 23 * control channel 24 * @param reason 25 * const string stating disconnect reason (96 characters) 26 * @param err_code 27 * error code 28 */ 29 void memif_msg_enq_disconnect(struct memif_control_channel *cc, const char *reason, 30 int err_code); 31 32 /** 33 * Initialize memif socket for specified device. If socket doesn't exist, create socket. 34 * 35 * @param dev 36 * memif device 37 * @param socket_filename 38 * socket filename 39 * @return 40 * - On success, zero. 41 * - On failure, a negative value. 42 */ 43 int memif_socket_init(struct rte_eth_dev *dev, const char *socket_filename); 44 45 /** 46 * Disconnect memif device. Close control channel and shared memory. 47 * 48 * @param dev 49 * memif device 50 */ 51 void memif_disconnect(struct rte_eth_dev *dev); 52 53 /** 54 * If device is properly configured, enable connection establishment. 55 * 56 * @param dev 57 * memif device 58 * @return 59 * - On success, zero. 60 * - On failure, a negative value. 61 */ 62 int memif_connect_master(struct rte_eth_dev *dev); 63 64 /** 65 * If device is properly configured, send connection request. 66 * 67 * @param dev 68 * memif device 69 * @return 70 * - On success, zero. 71 * - On failure, a negative value. 72 */ 73 int memif_connect_slave(struct rte_eth_dev *dev); 74 75 struct memif_socket_dev_list_elt { 76 TAILQ_ENTRY(memif_socket_dev_list_elt) next; 77 struct rte_eth_dev *dev; /**< pointer to device internals */ 78 char dev_name[RTE_ETH_NAME_MAX_LEN]; 79 }; 80 81 #define MEMIF_SOCKET_HASH_NAME "memif-sh" 82 #define MEMIF_SOCKET_KEY_LEN 256 83 84 struct memif_socket { 85 struct rte_intr_handle intr_handle; /**< interrupt handle */ 86 char filename[MEMIF_SOCKET_KEY_LEN]; /**< socket filename */ 87 88 TAILQ_HEAD(, memif_socket_dev_list_elt) dev_queue; 89 /**< Queue of devices using this socket */ 90 uint8_t listener; /**< if not zero socket is listener */ 91 }; 92 93 /* Control message queue. */ 94 struct memif_msg_queue_elt { 95 memif_msg_t msg; /**< control message */ 96 TAILQ_ENTRY(memif_msg_queue_elt) next; 97 int fd; /**< fd to be sent to peer */ 98 }; 99 100 struct memif_control_channel { 101 struct rte_intr_handle intr_handle; /**< interrupt handle */ 102 TAILQ_HEAD(, memif_msg_queue_elt) msg_queue; /**< control message queue */ 103 struct memif_socket *socket; /**< pointer to socket */ 104 struct rte_eth_dev *dev; /**< pointer to device */ 105 }; 106 107 #endif /* MEMIF_SOCKET_H */ 108