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