xref: /f-stack/lib/ff_config.h (revision c605f595)
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         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 
92         /* sleep x microseconds when no pkts incomming */
93         unsigned idle_sleep;
94 
95         /* list of proc-lcore */
96         uint16_t *proc_lcore;
97 
98         int nb_ports;
99         uint16_t max_portid;
100         uint16_t *portid_list;
101         // MAP(portid => struct ff_port_cfg*)
102         struct ff_port_cfg *port_cfgs;
103     } dpdk;
104 
105     struct {
106         int enable;
107         char *method;
108         char *tcp_port;
109         char *udp_port;
110     } kni;
111 
112     struct {
113         int level;
114         const char *dir;
115     } log;
116 
117     struct {
118         struct ff_freebsd_cfg *boot;
119         struct ff_freebsd_cfg *sysctl;
120         long physmem;
121         int hz;
122         int fd_reserve;
123     } freebsd;
124 };
125 
126 extern struct ff_config ff_global_cfg;
127 
128 int ff_load_config(int argc, char * const argv[]);
129 
130 #ifdef __cplusplus
131 }
132 #endif
133 
134 #endif /* ifndef __FSTACK_CONFIG_H */
135