17abd0fb2Slogwang /* 27abd0fb2Slogwang * Copyright (C) 2017 THL A29 Limited, a Tencent company. 37abd0fb2Slogwang * All rights reserved. 47abd0fb2Slogwang * 57abd0fb2Slogwang * Redistribution and use in source and binary forms, with or without 67abd0fb2Slogwang * modification, are permitted provided that the following conditions are met: 77abd0fb2Slogwang * 87abd0fb2Slogwang * 1. Redistributions of source code must retain the above copyright notice, this 97abd0fb2Slogwang * list of conditions and the following disclaimer. 107abd0fb2Slogwang * 2. Redistributions in binary form must reproduce the above copyright notice, 117abd0fb2Slogwang * this list of conditions and the following disclaimer in the documentation 127abd0fb2Slogwang * and/or other materials provided with the distribution. 137abd0fb2Slogwang * 147abd0fb2Slogwang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 157abd0fb2Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 167abd0fb2Slogwang * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 177abd0fb2Slogwang * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 187abd0fb2Slogwang * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 197abd0fb2Slogwang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 207abd0fb2Slogwang * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 217abd0fb2Slogwang * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 227abd0fb2Slogwang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 237abd0fb2Slogwang * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 247abd0fb2Slogwang * 257abd0fb2Slogwang */ 267abd0fb2Slogwang 277abd0fb2Slogwang #ifndef _FF_MSG_H_ 287abd0fb2Slogwang #define _FF_MSG_H_ 297abd0fb2Slogwang 307abd0fb2Slogwang #include <rte_memory.h> 317abd0fb2Slogwang 327abd0fb2Slogwang #define FF_MSG_RING_IN "ff_msg_ring_in_" 337abd0fb2Slogwang #define FF_MSG_RING_OUT "ff_msg_ring_out_" 347abd0fb2Slogwang #define FF_MSG_POOL "ff_msg_pool" 357abd0fb2Slogwang 36df6ad731Slogwang /* MSG TYPE: sysctl, ioctl, etc.. */ 377abd0fb2Slogwang enum FF_MSG_TYPE { 387abd0fb2Slogwang FF_UNKNOWN = 0, 397abd0fb2Slogwang FF_SYSCTL, 40df6ad731Slogwang FF_IOCTL, 41144c6bcdSlogwang FF_ROUTE, 42e7741141SAndy FF_TOP, 433b2bd0f6Slogwang FF_NGCTL, 44127dd473Swhl739 FF_IPFW_CTL, 45*03df98deSfengbojiang FF_TRAFFIC, 467abd0fb2Slogwang }; 477abd0fb2Slogwang 487abd0fb2Slogwang struct ff_sysctl_args { 497abd0fb2Slogwang int *name; 507abd0fb2Slogwang unsigned namelen; 517abd0fb2Slogwang void *old; 527abd0fb2Slogwang size_t *oldlenp; 537abd0fb2Slogwang void *new; 547abd0fb2Slogwang size_t newlen; 557abd0fb2Slogwang }; 567abd0fb2Slogwang 57df6ad731Slogwang struct ff_ioctl_args { 58df6ad731Slogwang unsigned long cmd; 59df6ad731Slogwang void *data; 60df6ad731Slogwang }; 61df6ad731Slogwang 62144c6bcdSlogwang struct ff_route_args { 63144c6bcdSlogwang int fib; 64144c6bcdSlogwang unsigned len; 65144c6bcdSlogwang unsigned maxlen; 66144c6bcdSlogwang void *data; 67144c6bcdSlogwang }; 68144c6bcdSlogwang 69e7741141SAndy struct ff_top_args { 70e7741141SAndy unsigned long loops; 71e7741141SAndy unsigned long idle_tsc; 72e7741141SAndy unsigned long work_tsc; 73e7741141SAndy unsigned long sys_tsc; 74e7741141SAndy unsigned long usr_tsc; 75e7741141SAndy }; 76e7741141SAndy 773b2bd0f6Slogwang struct ff_ngctl_args { 783b2bd0f6Slogwang int cmd; 793b2bd0f6Slogwang int ret; 803b2bd0f6Slogwang void *data; 813b2bd0f6Slogwang }; 823b2bd0f6Slogwang 83127dd473Swhl739 enum FF_IPFW_CMD { 84127dd473Swhl739 FF_IPFW_GET, 85127dd473Swhl739 FF_IPFW_SET, 86127dd473Swhl739 }; 87127dd473Swhl739 88127dd473Swhl739 struct ff_ipfw_args { 89127dd473Swhl739 int cmd; 90127dd473Swhl739 int level; 91127dd473Swhl739 int optname; 92127dd473Swhl739 void *optval; 93127dd473Swhl739 socklen_t *optlen; 94127dd473Swhl739 }; 95127dd473Swhl739 96*03df98deSfengbojiang struct ff_traffic_args { 97*03df98deSfengbojiang uint64_t rx_packets; 98*03df98deSfengbojiang uint64_t rx_bytes; 99*03df98deSfengbojiang uint64_t tx_packets; 100*03df98deSfengbojiang uint64_t tx_bytes; 101*03df98deSfengbojiang }; 102*03df98deSfengbojiang 1037abd0fb2Slogwang #define MAX_MSG_BUF_SIZE 10240 1047abd0fb2Slogwang 1057abd0fb2Slogwang /* structure of ipc msg */ 1067abd0fb2Slogwang struct ff_msg { 1077abd0fb2Slogwang enum FF_MSG_TYPE msg_type; 1087abd0fb2Slogwang /* Result of msg processing */ 1097abd0fb2Slogwang int result; 1107abd0fb2Slogwang /* Length of segment buffer. */ 1111eaf0ac3Slogwang size_t buf_len; 1127abd0fb2Slogwang /* Address of segment buffer. */ 1137abd0fb2Slogwang char *buf_addr; 1147abd0fb2Slogwang 1157abd0fb2Slogwang union { 1167abd0fb2Slogwang struct ff_sysctl_args sysctl; 117df6ad731Slogwang struct ff_ioctl_args ioctl; 118144c6bcdSlogwang struct ff_route_args route; 119e7741141SAndy struct ff_top_args top; 1203b2bd0f6Slogwang struct ff_ngctl_args ngctl; 121127dd473Swhl739 struct ff_ipfw_args ipfw; 122*03df98deSfengbojiang struct ff_traffic_args traffic; 1237abd0fb2Slogwang }; 1247abd0fb2Slogwang } __attribute__((packed)) __rte_cache_aligned; 1257abd0fb2Slogwang 1267abd0fb2Slogwang #endif 127