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