xref: /f-stack/lib/ff_config.h (revision 2bfe3f2e)
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 __FSTACK_CONFIG_H
28 #define __FSTACK_CONFIG_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 // dpdk argc, argv, max argc: 4, member of dpdk_config
35 #define DPDK_CONFIG_NUM 4
36 #define DPDK_CONFIG_MAXLEN 64
37 #define DPDK_MAX_LCORE 128
38 
39 extern int dpdk_argc;
40 extern char *dpdk_argv[DPDK_CONFIG_NUM + 1];
41 
42 struct ff_hw_features {
43     uint8_t rx_csum;
44     uint8_t rx_lro;
45     uint8_t tx_csum_ip;
46     uint8_t tx_csum_l4;
47     uint8_t tx_tso;
48 };
49 
50 struct ff_port_cfg {
51     char *name;
52     uint8_t port_id;
53     uint8_t mac[6];
54     struct ff_hw_features hw_features;
55     char *addr;
56     char *netmask;
57     char *broadcast;
58     char *gateway;
59     char *pcap;
60 
61     int nb_lcores;
62     uint16_t lcore_list[DPDK_MAX_LCORE];
63 };
64 
65 struct ff_freebsd_cfg {
66     char *name;
67     char *str;
68     void *value;
69     size_t vlen;
70     struct ff_freebsd_cfg *next;
71 };
72 
73 struct ff_config {
74     char *filename;
75     struct {
76         char *proc_type;
77         /* mask of enabled lcores */
78         char *lcore_mask;
79         /* mask of current proc on all lcores */
80         char *proc_mask;
81 
82         int nb_channel;
83         int memory;
84         int no_huge;
85         int nb_procs;
86         int proc_id;
87         int promiscuous;
88         int numa_on;
89         int tso;
90         int vlan_strip;
91         /* list of proc-lcore */
92         uint16_t *proc_lcore;
93 
94         int nb_ports;
95         uint16_t *portid_list;
96         uint16_t max_portid;
97         // MAP(portid => struct ff_port_cfg*)
98         struct ff_port_cfg *port_cfgs;
99     } dpdk;
100 
101     struct {
102         int enable;
103         char *method;
104         char *tcp_port;
105         char *udp_port;
106     } kni;
107 
108     struct {
109         int level;
110         const char *dir;
111     } log;
112 
113     struct {
114         struct ff_freebsd_cfg *boot;
115         struct ff_freebsd_cfg *sysctl;
116         long physmem;
117         int hz;
118         int fd_reserve;
119     } freebsd;
120 };
121 
122 extern struct ff_config ff_global_cfg;
123 
124 int ff_load_config(int argc, char * const argv[]);
125 
126 #ifdef __cplusplus
127 }
128 #endif
129 
130 #endif /* ifndef __FSTACK_CONFIG_H */
131