1 /* 2 * Copyright (C) 2017 THL A29 Limited, a Tencent company. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 18 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * 25 */ 26 27 #ifndef _FF_MSG_H_ 28 #define _FF_MSG_H_ 29 30 #include <rte_memory.h> 31 32 #define FF_MSG_RING_IN "ff_msg_ring_in_" 33 #define FF_MSG_RING_OUT "ff_msg_ring_out_" 34 #define FF_MSG_POOL "ff_msg_pool" 35 36 /* MSG TYPE: sysctl, ioctl, etc.. */ 37 enum FF_MSG_TYPE { 38 FF_UNKNOWN = 0, 39 FF_SYSCTL, 40 FF_IOCTL, 41 FF_ROUTE, 42 }; 43 44 struct ff_sysctl_args { 45 int *name; 46 unsigned namelen; 47 void *old; 48 size_t *oldlenp; 49 void *new; 50 size_t newlen; 51 }; 52 53 struct ff_ioctl_args { 54 unsigned long cmd; 55 void *data; 56 }; 57 58 struct ff_route_args { 59 int fib; 60 unsigned len; 61 unsigned maxlen; 62 void *data; 63 }; 64 65 #define MAX_MSG_BUF_SIZE 10240 66 67 /* structure of ipc msg */ 68 struct ff_msg { 69 enum FF_MSG_TYPE msg_type; 70 /* Result of msg processing */ 71 int result; 72 /* Length of segment buffer. */ 73 uint16_t buf_len; 74 /* Address of segment buffer. */ 75 char *buf_addr; 76 77 union { 78 struct ff_sysctl_args sysctl; 79 struct ff_ioctl_args ioctl; 80 struct ff_route_args route; 81 }; 82 } __attribute__((packed)) __rte_cache_aligned; 83 84 #endif 85