176404edcSAsim Jamshed #ifndef __CONFIG_H_
276404edcSAsim Jamshed #define __CONFIG_H_
38a941c7eSAsim Jamshed /*----------------------------------------------------------------------------*/
476404edcSAsim Jamshed #include <sys/queue.h>
576404edcSAsim Jamshed #include <stdint.h>
676404edcSAsim Jamshed #include <net/if.h>
776404edcSAsim Jamshed 
876404edcSAsim Jamshed #include "io_module.h"
976404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
1076404edcSAsim Jamshed #define WORD_LEN 20
1176404edcSAsim Jamshed #define STR_LEN  200
1276404edcSAsim Jamshed #define MOS_APP_ARGC 20
1376404edcSAsim Jamshed #define MAX_APP_BLOCK 10
1476404edcSAsim Jamshed #define MAX_MOS_BLOCK 1
1576404edcSAsim Jamshed #define MAX_ARP_ENTRY 128
1676404edcSAsim Jamshed #define MAX_ETH_ENTRY MAX_DEVICES
1776404edcSAsim Jamshed #define MAX_FORWARD_ENTRY MAX_ETH_ENTRY
1876404edcSAsim Jamshed #define MAX_ROUTE_ENTRY 128
1976404edcSAsim Jamshed #define ETH_ALEN 6
2076404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
2176404edcSAsim Jamshed #define APP_BLOCK_NAME    	"application"
2276404edcSAsim Jamshed #define MOS_BLOCK_NAME    	"mos"
2376404edcSAsim Jamshed #define NETDEV_BLOCK_NAME 	"netdev"
2476404edcSAsim Jamshed #define ARP_BLOCK_NAME    	"arp_table"
2576404edcSAsim Jamshed #define ROUTE_BLOCK_NAME  	"route_table"
2676404edcSAsim Jamshed #define FORWARD_BLOCK_NAME 	"nic_forward_table"
2776404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
2876404edcSAsim Jamshed struct conf_block;
2976404edcSAsim Jamshed extern int8_t end_app_exists;
3076404edcSAsim Jamshed extern int8_t mon_app_exists;
3176404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
3276404edcSAsim Jamshed typedef void (*FEED)(struct conf_block *blk, char *line, int len);
3376404edcSAsim Jamshed typedef void (*ADDCHILD)(struct conf_block *blk, struct conf_block *child);
3476404edcSAsim Jamshed typedef int  (*ISVALID)(struct conf_block *blk);
3576404edcSAsim Jamshed typedef void (*PRINT)(struct conf_block *blk);
3676404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
3776404edcSAsim Jamshed struct conf_block {
3876404edcSAsim Jamshed 	char *name;
3976404edcSAsim Jamshed 	char *buf;
4076404edcSAsim Jamshed 	int len;
4176404edcSAsim Jamshed 
4276404edcSAsim Jamshed 	FEED feed;
4376404edcSAsim Jamshed 	ADDCHILD addchild;
4476404edcSAsim Jamshed 	ISVALID isvalid;
4576404edcSAsim Jamshed 	PRINT print;
4676404edcSAsim Jamshed 
4776404edcSAsim Jamshed 	void *conf;
4876404edcSAsim Jamshed 
4976404edcSAsim Jamshed 	TAILQ_HEAD(, conf_block) *list;
5076404edcSAsim Jamshed 
5176404edcSAsim Jamshed 	TAILQ_ENTRY(conf_block) link;
5276404edcSAsim Jamshed };
5376404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
5476404edcSAsim Jamshed struct netdev_entry {
5576404edcSAsim Jamshed 	char dev_name[WORD_LEN];
5676404edcSAsim Jamshed 	int ifindex;
5776404edcSAsim Jamshed 	int stat_print;
5876404edcSAsim Jamshed 	unsigned char haddr[ETH_ALEN];
5976404edcSAsim Jamshed 	uint32_t netmask;
6076404edcSAsim Jamshed 	uint32_t ip_addr;
6176404edcSAsim Jamshed 	uint64_t cpu_mask;
6276404edcSAsim Jamshed 
6376404edcSAsim Jamshed 	struct ifreq ifr;
6476404edcSAsim Jamshed 
6576404edcSAsim Jamshed 	uint32_t gateway;
6676404edcSAsim Jamshed 
6776404edcSAsim Jamshed 	TAILQ_ENTRY(netdev_entry) link;
6876404edcSAsim Jamshed };
6976404edcSAsim Jamshed struct netdev_conf {
7076404edcSAsim Jamshed 	int num;
7176404edcSAsim Jamshed 	struct netdev_entry *ent[MAX_ETH_ENTRY];
7276404edcSAsim Jamshed 
7376404edcSAsim Jamshed 	TAILQ_HEAD(, netdev_entry) list;
7476404edcSAsim Jamshed };
7576404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
7676404edcSAsim Jamshed struct _arp_entry {
7776404edcSAsim Jamshed 	uint32_t ip;
7876404edcSAsim Jamshed 	int8_t prefix;
7976404edcSAsim Jamshed 	uint32_t mask;
8076404edcSAsim Jamshed 	uint32_t masked_ip;
8176404edcSAsim Jamshed 	uint8_t haddr[ETH_ALEN];
8276404edcSAsim Jamshed 
8376404edcSAsim Jamshed 	TAILQ_ENTRY(_arp_entry) link;
8476404edcSAsim Jamshed };
8576404edcSAsim Jamshed struct arp_conf {
8676404edcSAsim Jamshed 	int num;
8776404edcSAsim Jamshed 	struct _arp_entry *ent[MAX_ARP_ENTRY];
8876404edcSAsim Jamshed 
8976404edcSAsim Jamshed 	TAILQ_HEAD(, _arp_entry) list;
9076404edcSAsim Jamshed };
9176404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
9276404edcSAsim Jamshed struct route_entry {
9376404edcSAsim Jamshed 	uint32_t ip;
9476404edcSAsim Jamshed 	int prefix;
9576404edcSAsim Jamshed 	uint32_t mask;
9676404edcSAsim Jamshed 	uint32_t masked_ip;
9776404edcSAsim Jamshed 	int nif;
9876404edcSAsim Jamshed 	char dev_name[WORD_LEN];
9976404edcSAsim Jamshed 
10076404edcSAsim Jamshed 	TAILQ_ENTRY(route_entry) link;
10176404edcSAsim Jamshed };
10276404edcSAsim Jamshed struct route_conf {
10376404edcSAsim Jamshed 	int num;
10476404edcSAsim Jamshed 	struct route_entry *ent[MAX_ROUTE_ENTRY];
10576404edcSAsim Jamshed 	TAILQ_HEAD(, route_entry) list;
10676404edcSAsim Jamshed };
10776404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
10876404edcSAsim Jamshed struct nic_forward_entry {
10976404edcSAsim Jamshed 	char nif_in[WORD_LEN];
11076404edcSAsim Jamshed 	char nif_out[WORD_LEN];
11176404edcSAsim Jamshed 
11276404edcSAsim Jamshed 	TAILQ_ENTRY(nic_forward_entry) link;
11376404edcSAsim Jamshed };
11476404edcSAsim Jamshed struct nic_forward_conf {
11576404edcSAsim Jamshed 	int num;
11676404edcSAsim Jamshed 	struct nic_forward_entry *ent[MAX_FORWARD_ENTRY];
11776404edcSAsim Jamshed 	int nic_fwd_table[MAX_FORWARD_ENTRY];
11876404edcSAsim Jamshed 	TAILQ_HEAD(, nic_forward_entry) list;
11976404edcSAsim Jamshed };
12076404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
12176404edcSAsim Jamshed struct app_conf {
12276404edcSAsim Jamshed 	char type[WORD_LEN];
12376404edcSAsim Jamshed 	char run[STR_LEN];
12476404edcSAsim Jamshed 	uint64_t cpu_mask;
12576404edcSAsim Jamshed 	int ip_forward;
12676404edcSAsim Jamshed 
12776404edcSAsim Jamshed 	int app_argc;
12876404edcSAsim Jamshed 	char *app_argv[MOS_APP_ARGC];
12976404edcSAsim Jamshed };
13076404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
13176404edcSAsim Jamshed struct mos_conf {
13276404edcSAsim Jamshed 	int num_cores;
13376404edcSAsim Jamshed 	int nb_mem_channels;
13476404edcSAsim Jamshed 	int max_concurrency;
13576404edcSAsim Jamshed 	int no_ring_buffers;
13676404edcSAsim Jamshed 	int rmem_size;
13776404edcSAsim Jamshed 	int wmem_size;
13876404edcSAsim Jamshed 	int tcp_tw_interval;
13976404edcSAsim Jamshed 	int tcp_timeout;
14076404edcSAsim Jamshed 	int multiprocess;
14176404edcSAsim Jamshed 	int multiprocess_curr_core;
14276404edcSAsim Jamshed 	int multiprocess_is_master;
14376404edcSAsim Jamshed 	char mos_log[STR_LEN];
14476404edcSAsim Jamshed 	char stat_print[STR_LEN];
14576404edcSAsim Jamshed 	char port[STR_LEN];
14676404edcSAsim Jamshed 	uint64_t cpu_mask;
14776404edcSAsim Jamshed 	int forward;
14876404edcSAsim Jamshed 
14976404edcSAsim Jamshed 	struct netdev_conf *netdev_table;
15076404edcSAsim Jamshed 	struct arp_conf *arp_table;
15176404edcSAsim Jamshed 	struct route_conf *route_table;
15276404edcSAsim Jamshed 	struct nic_forward_conf *nic_forward_table;
15376404edcSAsim Jamshed 
15476404edcSAsim Jamshed 	struct conf_block *netdev;
15576404edcSAsim Jamshed 	struct conf_block *arp;
15676404edcSAsim Jamshed 	struct conf_block *route;
15776404edcSAsim Jamshed 	struct conf_block *nic_forward;
15876404edcSAsim Jamshed };
15976404edcSAsim Jamshed /*----------------------------------------------------------------------------*/
16076404edcSAsim Jamshed TAILQ_HEAD(, conf_block) g_free_blkh;
16176404edcSAsim Jamshed struct config {
16276404edcSAsim Jamshed 	TAILQ_HEAD(, conf_block) app_blkh;
16376404edcSAsim Jamshed 	TAILQ_HEAD(, conf_block) mos_blkh;
16476404edcSAsim Jamshed 
16576404edcSAsim Jamshed 	struct mos_conf *mos;
16676404edcSAsim Jamshed } g_config;
16776404edcSAsim Jamshed 
16876404edcSAsim Jamshed int num_cpus;
16976404edcSAsim Jamshed int num_queues;
17076404edcSAsim Jamshed int num_devices;
17176404edcSAsim Jamshed //struct ps_device devices[MAX_DEVICES];
17276404edcSAsim Jamshed 
17376404edcSAsim Jamshed int num_devices_attached;
17476404edcSAsim Jamshed int devices_attached[MAX_DEVICES];
1758a941c7eSAsim Jamshed /*----------------------------------------------------------------------------*/
17676404edcSAsim Jamshed int
17776404edcSAsim Jamshed LoadConfigurationUpperHalf(const char *fname);
17876404edcSAsim Jamshed 
17976404edcSAsim Jamshed void
18076404edcSAsim Jamshed LoadConfigurationLowerHalf(void);
18176404edcSAsim Jamshed 
18276404edcSAsim Jamshed /* set configurations from the setted
18376404edcSAsim Jamshed    interface information */
18476404edcSAsim Jamshed int
18576404edcSAsim Jamshed SetInterfaceInfo();
18676404edcSAsim Jamshed 
18776404edcSAsim Jamshed /* set configurations from the files */
18876404edcSAsim Jamshed int
18976404edcSAsim Jamshed SetRoutingTable();
19076404edcSAsim Jamshed 
19176404edcSAsim Jamshed int
19276404edcSAsim Jamshed LoadARPTable();
19376404edcSAsim Jamshed 
19476404edcSAsim Jamshed /* print setted configuration */
19576404edcSAsim Jamshed void
19676404edcSAsim Jamshed PrintConf(struct config *conf);
19776404edcSAsim Jamshed 
19876404edcSAsim Jamshed /* set socket modes */
19976404edcSAsim Jamshed int
20076404edcSAsim Jamshed SetSocketMode(int8_t socket_mode);
20176404edcSAsim Jamshed 
20276404edcSAsim Jamshed void
20376404edcSAsim Jamshed ParseMACAddress(unsigned char *haddr, char *haddr_str);
20476404edcSAsim Jamshed 
20576404edcSAsim Jamshed int
20676404edcSAsim Jamshed ParseIPAddress(uint32_t *ip_addr, char *ip_str);
20776404edcSAsim Jamshed 
2088a941c7eSAsim Jamshed void
2098a941c7eSAsim Jamshed FreeConfigResources();
210c6a5549bSAsim Jamshed 
211c6a5549bSAsim Jamshed int
212c6a5549bSAsim Jamshed mystrtol(const char *nptr, int base);
213*b88bd7d2SAsim Jamshed 
214*b88bd7d2SAsim Jamshed /* retrive device-specific endian type */
215*b88bd7d2SAsim Jamshed int
216*b88bd7d2SAsim Jamshed FetchEndianType();
2178a941c7eSAsim Jamshed /*----------------------------------------------------------------------------*/
21876404edcSAsim Jamshed #endif /* __CONFIG_H_ */
219