xref: /f-stack/lib/ff_config.h (revision 5c84990d)
1a9643ea8Slogwang /*
22317ada5Sfengbojiang  * Copyright (C) 2017-2021 THL A29 Limited, a Tencent company.
3a9643ea8Slogwang  * All rights reserved.
4a9643ea8Slogwang  *
5a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
6a9643ea8Slogwang  * modification, are permitted provided that the following conditions are met:
7a9643ea8Slogwang  *
8a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright notice, this
9a9643ea8Slogwang  *   list of conditions and the following disclaimer.
10a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright notice,
11a9643ea8Slogwang  *   this list of conditions and the following disclaimer in the documentation
12a9643ea8Slogwang  *   and/or other materials provided with the distribution.
13a9643ea8Slogwang  *
14a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16a9643ea8Slogwang  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17a9643ea8Slogwang  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18a9643ea8Slogwang  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19a9643ea8Slogwang  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20a9643ea8Slogwang  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21a9643ea8Slogwang  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22a9643ea8Slogwang  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23a9643ea8Slogwang  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24a9643ea8Slogwang  *
25a9643ea8Slogwang  */
26a9643ea8Slogwang 
27a9643ea8Slogwang #ifndef __FSTACK_CONFIG_H
28a9643ea8Slogwang #define __FSTACK_CONFIG_H
29a9643ea8Slogwang 
307f4229eaSlogwang #ifdef __cplusplus
317f4229eaSlogwang extern "C" {
327f4229eaSlogwang #endif
337f4229eaSlogwang 
34c506e436Sfengbojiang // dpdk argc, argv, max argc: 16, member of dpdk_config
35c506e436Sfengbojiang #define DPDK_CONFIG_NUM 16
36a3bbaff5Sfengbojiang #define DPDK_CONFIG_MAXLEN 256
3780a6164cSYuYang #define DPDK_MAX_LCORE 128
38819aafb6Sjinhao2 #define PCAP_SNAP_MINLEN 94
39819aafb6Sjinhao2 #define PCAP_SAVE_MINLEN (2<<22)
40a9643ea8Slogwang 
41a9643ea8Slogwang extern int dpdk_argc;
42a9643ea8Slogwang extern char *dpdk_argv[DPDK_CONFIG_NUM + 1];
43a9643ea8Slogwang 
4459bb71f6Sfengbojiang(姜凤波) #define MAX_PKT_BURST 32
4559bb71f6Sfengbojiang(姜凤波) #define BURST_TX_DRAIN_US 100 /* TX drain every ~100us */
4659bb71f6Sfengbojiang(姜凤波) 
47503a15e0Sfengbojiang #define VIP_MAX_NUM 64
48503a15e0Sfengbojiang 
49213fa7b3Slogwang struct ff_hw_features {
50213fa7b3Slogwang     uint8_t rx_csum;
51213fa7b3Slogwang     uint8_t rx_lro;
52213fa7b3Slogwang     uint8_t tx_csum_ip;
53213fa7b3Slogwang     uint8_t tx_csum_l4;
54213fa7b3Slogwang     uint8_t tx_tso;
55213fa7b3Slogwang };
56213fa7b3Slogwang 
57a9643ea8Slogwang struct ff_port_cfg {
58a9643ea8Slogwang     char *name;
59*5c84990dSIbtisam Tariq     char *ifname;
60a9643ea8Slogwang     uint8_t port_id;
61a9643ea8Slogwang     uint8_t mac[6];
62213fa7b3Slogwang     struct ff_hw_features hw_features;
63a9643ea8Slogwang     char *addr;
64a9643ea8Slogwang     char *netmask;
65a9643ea8Slogwang     char *broadcast;
66a9643ea8Slogwang     char *gateway;
67a25f323cSzengyi1001 
68503a15e0Sfengbojiang     char *vip_ifname;
69503a15e0Sfengbojiang     char *vip_addr_str;
70503a15e0Sfengbojiang     char **vip_addr_array;
71503a15e0Sfengbojiang     uint32_t nb_vip;
72503a15e0Sfengbojiang 
73a25f323cSzengyi1001 #ifdef INET6
74a25f323cSzengyi1001         char *addr6_str;
75a25f323cSzengyi1001         char *gateway6_str;
76a25f323cSzengyi1001         uint8_t prefix_len;
77503a15e0Sfengbojiang 
78503a15e0Sfengbojiang         char *vip_addr6_str;
79503a15e0Sfengbojiang         char **vip_addr6_array;
80503a15e0Sfengbojiang         uint32_t nb_vip6;
81503a15e0Sfengbojiang         uint8_t vip_prefix_len;
82a25f323cSzengyi1001 #endif
83a25f323cSzengyi1001 
8480a6164cSYuYang     int nb_lcores;
85c0f66684Sfengbojiang(姜凤波)     int nb_slaves;
8680a6164cSYuYang     uint16_t lcore_list[DPDK_MAX_LCORE];
87c0f66684Sfengbojiang(姜凤波)     uint16_t *slave_portid_list;
88a9643ea8Slogwang };
89a9643ea8Slogwang 
90a3bbaff5Sfengbojiang struct ff_vdev_cfg {
91a3bbaff5Sfengbojiang     char *name;
92a3bbaff5Sfengbojiang     char *iface;
93a3bbaff5Sfengbojiang     char *path;
94a3bbaff5Sfengbojiang     char *mac;
95a3bbaff5Sfengbojiang     uint8_t vdev_id;
96a3bbaff5Sfengbojiang     uint8_t nb_queues;
97a3bbaff5Sfengbojiang     uint8_t nb_cq;
98a3bbaff5Sfengbojiang     uint16_t queue_size;
99a3bbaff5Sfengbojiang };
100a3bbaff5Sfengbojiang 
101c0f66684Sfengbojiang(姜凤波) struct ff_bond_cfg {
102c0f66684Sfengbojiang(姜凤波)     char *name;
103c0f66684Sfengbojiang(姜凤波)     char *slave;
104c0f66684Sfengbojiang(姜凤波)     char *primary;
105c0f66684Sfengbojiang(姜凤波)     char *bond_mac;
106c0f66684Sfengbojiang(姜凤波)     char *xmit_policy;
107c0f66684Sfengbojiang(姜凤波)     uint8_t bond_id;
108c0f66684Sfengbojiang(姜凤波)     uint8_t mode;
109c0f66684Sfengbojiang(姜凤波)     uint8_t socket_id;
110c0f66684Sfengbojiang(姜凤波)     uint8_t lsc_poll_period_ms;
111c0f66684Sfengbojiang(姜凤波)     uint16_t up_delay;
112c0f66684Sfengbojiang(姜凤波)     uint16_t down_delay;
113c0f66684Sfengbojiang(姜凤波) };
114a3bbaff5Sfengbojiang 
115a9643ea8Slogwang struct ff_freebsd_cfg {
116a9643ea8Slogwang     char *name;
117a9643ea8Slogwang     char *str;
118a9643ea8Slogwang     void *value;
119a9643ea8Slogwang     size_t vlen;
120a9643ea8Slogwang     struct ff_freebsd_cfg *next;
121a9643ea8Slogwang };
122a9643ea8Slogwang 
123a9643ea8Slogwang struct ff_config {
124a02c88d6Slogwang     char *filename;
125a9643ea8Slogwang     struct {
126a02c88d6Slogwang         char *proc_type;
127a9643ea8Slogwang         /* mask of enabled lcores */
128a9643ea8Slogwang         char *lcore_mask;
129a9643ea8Slogwang         /* mask of current proc on all lcores */
130a9643ea8Slogwang         char *proc_mask;
13180a6164cSYuYang 
13279f0ade3Sfengbojiang         /* specify base virtual address to map. */
13379f0ade3Sfengbojiang         char *base_virtaddr;
13479f0ade3Sfengbojiang 
135838bd0faSzhangxiang10         /* allow processes that do not want to co-operate to have different memory regions */
136838bd0faSzhangxiang10         char *file_prefix;
137838bd0faSzhangxiang10 
138838bd0faSzhangxiang10         /* load an external driver */
139838bd0faSzhangxiang10         char *pci_whitelist;
140838bd0faSzhangxiang10 
141a9643ea8Slogwang         int nb_channel;
142a9643ea8Slogwang         int memory;
143a9643ea8Slogwang         int no_huge;
144a9643ea8Slogwang         int nb_procs;
145a9643ea8Slogwang         int proc_id;
146a9643ea8Slogwang         int promiscuous;
147a3bbaff5Sfengbojiang         int nb_vdev;
148c0f66684Sfengbojiang(姜凤波)         int nb_bond;
149a9643ea8Slogwang         int numa_on;
150213fa7b3Slogwang         int tso;
1513a3642c7SJayath Sathyanarayana         int tx_csum_offoad_skip;
15264abcf71Slogwang         int vlan_strip;
153f41205e9Sfengbojiang         int symmetric_rss;
154c506e436Sfengbojiang 
155c506e436Sfengbojiang         /* sleep x microseconds when no pkts incomming */
156c506e436Sfengbojiang         unsigned idle_sleep;
157c506e436Sfengbojiang 
15859bb71f6Sfengbojiang(姜凤波)         /* TX burst queue drain nodelay dalay time */
15959bb71f6Sfengbojiang(姜凤波)         unsigned pkt_tx_delay;
16059bb71f6Sfengbojiang(姜凤波) 
161a02c88d6Slogwang         /* list of proc-lcore */
162a02c88d6Slogwang         uint16_t *proc_lcore;
16380a6164cSYuYang 
16480a6164cSYuYang         int nb_ports;
16580a6164cSYuYang         uint16_t max_portid;
166c506e436Sfengbojiang         uint16_t *portid_list;
16780a6164cSYuYang         // MAP(portid => struct ff_port_cfg*)
168a9643ea8Slogwang         struct ff_port_cfg *port_cfgs;
169a3bbaff5Sfengbojiang         struct ff_vdev_cfg *vdev_cfgs;
170c0f66684Sfengbojiang(姜凤波)         struct ff_bond_cfg *bond_cfgs;
171a9643ea8Slogwang     } dpdk;
172a9643ea8Slogwang 
173a9643ea8Slogwang     struct {
174a9643ea8Slogwang         int enable;
17547507c15Spengtian         char *kni_action;
176a9643ea8Slogwang         char *method;
177a9643ea8Slogwang         char *tcp_port;
178a9643ea8Slogwang         char *udp_port;
179a9643ea8Slogwang     } kni;
180a9643ea8Slogwang 
181a9643ea8Slogwang     struct {
182a9643ea8Slogwang         int level;
183a9643ea8Slogwang         const char *dir;
184a9643ea8Slogwang     } log;
185a9643ea8Slogwang 
186a9643ea8Slogwang     struct {
187a9643ea8Slogwang         struct ff_freebsd_cfg *boot;
188a9643ea8Slogwang         struct ff_freebsd_cfg *sysctl;
189a9643ea8Slogwang         long physmem;
190a9643ea8Slogwang         int hz;
191a02c88d6Slogwang         int fd_reserve;
192ef5ab859S10077240         int mem_size;
193a9643ea8Slogwang     } freebsd;
194819aafb6Sjinhao2 
195819aafb6Sjinhao2     struct {
196819aafb6Sjinhao2         uint16_t enable;
197819aafb6Sjinhao2         uint16_t snap_len;
198819aafb6Sjinhao2         uint32_t save_len;
199819aafb6Sjinhao2         char*	 save_path;
200819aafb6Sjinhao2     } pcap;
201a9643ea8Slogwang };
202a9643ea8Slogwang 
203a9643ea8Slogwang extern struct ff_config ff_global_cfg;
204a9643ea8Slogwang 
205a02c88d6Slogwang int ff_load_config(int argc, char * const argv[]);
206a9643ea8Slogwang 
2077f4229eaSlogwang #ifdef __cplusplus
2087f4229eaSlogwang }
2097f4229eaSlogwang #endif
2107f4229eaSlogwang 
211a9643ea8Slogwang #endif /* ifndef __FSTACK_CONFIG_H */
212