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_IOCTL6, 42 FF_ROUTE, 43 FF_TOP, 44 FF_NGCTL, 45 FF_IPFW_CTL, 46 FF_TRAFFIC, 47 FF_KNICTL, 48 49 /* 50 * to add other msg type before FF_MSG_NUM 51 */ 52 FF_MSG_NUM, 53 }; 54 55 struct ff_sysctl_args { 56 int *name; 57 unsigned namelen; 58 void *old; 59 size_t *oldlenp; 60 void *new; 61 size_t newlen; 62 }; 63 64 struct ff_ioctl_args { 65 unsigned long cmd; 66 void *data; 67 }; 68 69 struct ff_route_args { 70 int fib; 71 unsigned len; 72 unsigned maxlen; 73 void *data; 74 }; 75 76 struct ff_top_args { 77 unsigned long loops; 78 unsigned long idle_tsc; 79 unsigned long work_tsc; 80 unsigned long sys_tsc; 81 unsigned long usr_tsc; 82 }; 83 84 struct ff_ngctl_args { 85 int cmd; 86 int ret; 87 void *data; 88 }; 89 90 enum FF_IPFW_CMD { 91 FF_IPFW_GET, 92 FF_IPFW_SET, 93 }; 94 95 struct ff_ipfw_args { 96 int cmd; 97 int level; 98 int optname; 99 void *optval; 100 socklen_t *optlen; 101 }; 102 103 struct ff_traffic_args { 104 uint64_t rx_packets; 105 uint64_t rx_bytes; 106 uint64_t tx_packets; 107 uint64_t tx_bytes; 108 }; 109 110 enum FF_KNICTL_CMD { 111 FF_KNICTL_CMD_GET, 112 FF_KNICTL_CMD_SET, 113 FF_KNICTL_CMD_UNKNOWN, 114 }; 115 116 enum FF_KNICTL_ACTION { 117 FF_KNICTL_ACTION_DEFAULT, 118 FF_KNICTL_ACTION_ALL_TO_KNI, 119 FF_KNICTL_ACTION_ALL_TO_FF, 120 FF_KNICTL_ACTION_MAX 121 }; 122 123 struct ff_knictl_args { 124 int kni_cmd; 125 int kni_action; 126 }; 127 128 129 #define MAX_MSG_BUF_SIZE 10240 130 131 /* structure of ipc msg */ 132 struct ff_msg { 133 enum FF_MSG_TYPE msg_type; 134 /* Result of msg processing */ 135 int result; 136 /* Length of segment buffer. */ 137 size_t buf_len; 138 /* Address of segment buffer. */ 139 char *buf_addr; 140 char *original_buf; 141 size_t original_buf_len; 142 143 union { 144 struct ff_sysctl_args sysctl; 145 struct ff_ioctl_args ioctl; 146 struct ff_route_args route; 147 struct ff_top_args top; 148 struct ff_ngctl_args ngctl; 149 struct ff_ipfw_args ipfw; 150 struct ff_traffic_args traffic; 151 struct ff_knictl_args knictl; 152 }; 153 } __attribute__((packed)) __rte_cache_aligned; 154 155 #endif 156