xref: /f-stack/lib/ff_msg.h (revision 03df98de)
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