xref: /f-stack/lib/ff_msg.h (revision 6194fcd2)
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,
41d7140ab7Sfengbojiang(姜凤波)     FF_IOCTL6,
42144c6bcdSlogwang     FF_ROUTE,
43e7741141SAndy     FF_TOP,
443b2bd0f6Slogwang     FF_NGCTL,
45127dd473Swhl739     FF_IPFW_CTL,
4603df98deSfengbojiang     FF_TRAFFIC,
47*6194fcd2Sfengbojiang(姜凤波) 
48*6194fcd2Sfengbojiang(姜凤波)     /*
49*6194fcd2Sfengbojiang(姜凤波)      * to add other msg type before FF_MAX
50*6194fcd2Sfengbojiang(姜凤波)      */
51*6194fcd2Sfengbojiang(姜凤波)     FF_MAX,
527abd0fb2Slogwang };
537abd0fb2Slogwang 
547abd0fb2Slogwang struct ff_sysctl_args {
557abd0fb2Slogwang     int *name;
567abd0fb2Slogwang     unsigned namelen;
577abd0fb2Slogwang     void *old;
587abd0fb2Slogwang     size_t *oldlenp;
597abd0fb2Slogwang     void *new;
607abd0fb2Slogwang     size_t newlen;
617abd0fb2Slogwang };
627abd0fb2Slogwang 
63df6ad731Slogwang struct ff_ioctl_args {
64df6ad731Slogwang     unsigned long cmd;
65df6ad731Slogwang     void *data;
66df6ad731Slogwang };
67df6ad731Slogwang 
68144c6bcdSlogwang struct ff_route_args {
69144c6bcdSlogwang     int fib;
70144c6bcdSlogwang     unsigned len;
71144c6bcdSlogwang     unsigned maxlen;
72144c6bcdSlogwang     void *data;
73144c6bcdSlogwang };
74144c6bcdSlogwang 
75e7741141SAndy struct ff_top_args {
76e7741141SAndy     unsigned long loops;
77e7741141SAndy     unsigned long idle_tsc;
78e7741141SAndy     unsigned long work_tsc;
79e7741141SAndy     unsigned long sys_tsc;
80e7741141SAndy     unsigned long usr_tsc;
81e7741141SAndy };
82e7741141SAndy 
833b2bd0f6Slogwang struct ff_ngctl_args {
843b2bd0f6Slogwang     int cmd;
853b2bd0f6Slogwang     int ret;
863b2bd0f6Slogwang     void *data;
873b2bd0f6Slogwang };
883b2bd0f6Slogwang 
89127dd473Swhl739 enum FF_IPFW_CMD {
90127dd473Swhl739     FF_IPFW_GET,
91127dd473Swhl739     FF_IPFW_SET,
92127dd473Swhl739 };
93127dd473Swhl739 
94127dd473Swhl739 struct ff_ipfw_args {
95127dd473Swhl739     int cmd;
96127dd473Swhl739     int level;
97127dd473Swhl739     int optname;
98127dd473Swhl739     void *optval;
99127dd473Swhl739     socklen_t *optlen;
100127dd473Swhl739 };
101127dd473Swhl739 
10203df98deSfengbojiang struct ff_traffic_args {
10303df98deSfengbojiang     uint64_t rx_packets;
10403df98deSfengbojiang     uint64_t rx_bytes;
10503df98deSfengbojiang     uint64_t tx_packets;
10603df98deSfengbojiang     uint64_t tx_bytes;
10703df98deSfengbojiang };
10803df98deSfengbojiang 
1097abd0fb2Slogwang #define MAX_MSG_BUF_SIZE 10240
1107abd0fb2Slogwang 
1117abd0fb2Slogwang /* structure of ipc msg */
1127abd0fb2Slogwang struct ff_msg {
1137abd0fb2Slogwang     enum FF_MSG_TYPE msg_type;
1147abd0fb2Slogwang     /* Result of msg processing */
1157abd0fb2Slogwang     int result;
1167abd0fb2Slogwang     /* Length of segment buffer. */
1171eaf0ac3Slogwang     size_t buf_len;
1187abd0fb2Slogwang     /* Address of segment buffer. */
1197abd0fb2Slogwang     char *buf_addr;
1207abd0fb2Slogwang 
1217abd0fb2Slogwang     union {
1227abd0fb2Slogwang         struct ff_sysctl_args sysctl;
123df6ad731Slogwang         struct ff_ioctl_args ioctl;
124144c6bcdSlogwang         struct ff_route_args route;
125e7741141SAndy         struct ff_top_args top;
1263b2bd0f6Slogwang         struct ff_ngctl_args ngctl;
127127dd473Swhl739         struct ff_ipfw_args ipfw;
12803df98deSfengbojiang         struct ff_traffic_args traffic;
1297abd0fb2Slogwang     };
1307abd0fb2Slogwang } __attribute__((packed)) __rte_cache_aligned;
1317abd0fb2Slogwang 
1327abd0fb2Slogwang #endif
133