xref: /f-stack/lib/ff_config.h (revision 15eec4e8)
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: 16, member of dpdk_config
35 #define DPDK_CONFIG_NUM 16
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         /* specify base virtual address to map. */
83         char *base_virtaddr;
84 
85         int nb_channel;
86         int memory;
87         int no_huge;
88         int nb_procs;
89         int proc_id;
90         int promiscuous;
91         int numa_on;
92         int tso;
93         int vlan_strip;
94 
95         /* sleep x microseconds when no pkts incomming */
96         unsigned idle_sleep;
97 
98         /* list of proc-lcore */
99         uint16_t *proc_lcore;
100 
101         int nb_ports;
102         uint16_t max_portid;
103         uint16_t *portid_list;
104         // MAP(portid => struct ff_port_cfg*)
105         struct ff_port_cfg *port_cfgs;
106     } dpdk;
107 
108     struct {
109         int enable;
110         char *method;
111         char *tcp_port;
112         char *udp_port;
113     } kni;
114 
115     struct {
116         int level;
117         const char *dir;
118     } log;
119 
120     struct {
121         struct ff_freebsd_cfg *boot;
122         struct ff_freebsd_cfg *sysctl;
123         long physmem;
124         int hz;
125         int fd_reserve;
126     } freebsd;
127 };
128 
129 extern struct ff_config ff_global_cfg;
130 
131 int ff_load_config(int argc, char * const argv[]);
132 
133 #ifdef __cplusplus
134 }
135 #endif
136 
137 #endif /* ifndef __FSTACK_CONFIG_H */
138