/*************************************************************************** wancfg.h - description ------------------- begin : Thu Feb 26 2004 copyright : (C) 2004 by David Rokhvarg email : davidr@sangoma.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* WANCFG Structure diagram. * Notes: * 1. All LIP interfaces belonging to * the same HW interface will have a redunant copy * of the 'profile'. For example, each DLCI in Frame Relay * will have the same copy of 'global' FR configuration. * And, each interface will have it's own configuration: * CIR, and so on. * 2. Each LIP interface in turn, may be 'used by' as STACK * and the same logic apply recursively. * ------------------------------- |conf_file_reader(CFR)| | |--------------------- | Hardware Interfaces LIP Interfaces | | -------------------- -------------- |link_def_t* link_defs | | | --------------------------- |objects_list* main_obj_list |-------------->|list_element_chan_def| | |------------------------------ | ---------------------- | | | | | |chan_def_t data | | | | -------------------------- | |void* next_objects_list |------>|list_element_chan_def| | | |-------------------------| | |---------------------- | | | |(DLCI 16) | | | |chan_def_t data | | | | | | | |void* next_objects_list | | | -------------------------- | | | --------------------------- | --------------------------- |------>|list_element_chan_def| | |-->|list_element_chan_def| | ---------------------- | |---------------------- | | | |(DLCI 17) | |chan_def_t data | |chan_def_t data | | | | | |void* next_objects_list | |void* next_objects_list | |-------------------------| |-------------------------| */ #ifndef WANCFG_H #define WANCFG_H #include "cpp_string.h" //class for strings handling. had to do it because //C++ 'string' is NOT istalled on all systems. #if defined(__LINUX__) //need by some compilers #include #endif //C includes: #include #include #include #include #include //have to do it to avoid conflict with 'string' typedef in 'string.h' //and to use 'cpp_string'. #define string cpp_string //set this to 1 to run in 'BSD' mode #define BSD_DEBG 0 /* BSD interface names rules: 1. must end with a digit 2. no digits allowed in the middle of the name */ //#include #if defined(__LINUX__) # include # include # include # include # include # include # include #else # include # include # include # include # include # include # include # include # include #endif #define MAX_PATH_LENGTH 8192 #define NO 1 #define YES 2 #if defined(__LINUX__) # if !defined(strlcpy) # define strlcpy(d,s,l) strcpy((d),(s)) # endif #elif defined(__FreeBSD__) # if !defined(strlcpy) # define strlcpy(d,s,l) strcpy((d),(s)) # endif #endif //end of settings for the 'adapter_type' ////////////////////////////////////////////////////////////////////////// #define MAX_LEN_OF_ACTIVE_CHANNELS_STRING 100 typedef struct chan_def /* Logical Channel definition */ { char name[WAN_IFNAME_SZ+1]; /* interface name for this channel */ char* addr; /* -> media address */ char* conf; /* -> configuration data */ char* conf_profile; /* -> protocol profile data */ char usedby; /* used by WANPIPE or API */ char* label; /* -> user defined label/comment */ char* virtual_addr; /* -> X.25 virtual addr */ char* real_addr; /* -> X.25 real addr */ wanif_conf_t *chanconf; /* channel configuration structure */ char chan_start_script; char chan_stop_script; char active_channels_string[MAX_LEN_OF_ACTIVE_CHANNELS_STRING]; char active_hwec_channels_string[MAX_LEN_OF_ACTIVE_CHANNELS_STRING]; // char hwec_flag;//WANOPT_YES/WANOPT_NO } chan_def_t; typedef struct link_def /* WAN Link definition */ { char name[WAN_DRVNAME_SZ+1]; /* link device name */ int sub_config_id; /* configuration ID for internal use only */ char* conf; /* -> configuration data */ char* descr; /* -> description */ wandev_conf_t* linkconf; /* link configuration structure */ char start_script; char stop_script; unsigned int card_version; //S514 has many versions: S514-1/2/3/...7 unsigned int card_sub_version;//A104 can be "Shark" char active_channels_string[MAX_LEN_OF_ACTIVE_CHANNELS_STRING]; char firmware_file_path[MAX_PATH_LENGTH]; } link_def_t; //Flag used around variabales used ONLY for debugging. //Set to zero in "release" version to avoid 'unused variable' message //from the compiler. //#define DBG_FLAG 1 #define DBG_FLAG 0 #if DBG_FLAG #define Debug(dbg_flag, message) if(dbg_flag){printf message;} #define FUNC_DBG() printf("%s(), Line: %d\n", __FUNCTION__, __LINE__) #else #define Debug(dbg_flag, message) #define FUNC_DBG() #endif #define MENUINSTR_EXIT "------------------------------------------ \ Use arrows to navigate through the options. \ Press to select highlighted opt. \ Press to exit Wanpipe configuration. \ Press to go back, for help." #define MENUINSTR_BACK "------------------------------------------ \ Use arrows to navigate through the options. \ Press to select highlighted opt. \ Press to return to previous menu. \ Press to go back, for help." #define WANCFG_PROGRAM_NAME "WANPIPE Configuration Utility" #define WANCFG_EXECUTABLE_NAME "wancfg" #define INVALID_PROTOCOL "Invalid Protocol!!" #define INVALID_CARD_TYPE 0 #define NOT_SET 100 //can be used for storage as small as 1 byte. #define NOT_SET_STR "Not Set" #define NO_OPER_MODE YES+1 //defines for clarifying the source code #define IN //value passed to a function #define OUT //function sets value on return //The '/tmp' directory is ALWAYS writable, this important when running off CD-ROM //because the current directory on CD is NOT writable. #define LXDIALOG_OUTPUT_FILE_NAME "/tmp/lxdialog_output" //SELECTION can be a button number or a selected menu number. #define SELECTION_0 0 #define SELECTION_1 1 #define SELECTION_2 2 //delimeter for functions with variable length parameter list #define END_OF_PARAMS_LIST "END_OF_PARAMS_LIST" #define MAX_NUMBER_OF_WANPIPES 64 #define MAX_NUMBER_OF_NET_INTERFACES_PER_WANPIPE 512 #define WANPIPE_TOKEN "wanpipe" //Operation Mode (Used by): #define OP_MODE_WANPIPE " \"WANPIPE\" " //1 #define OP_MODE_API " \"API\" " //2 #define OP_MODE_BRIDGE " \"BRIDGE\" " //3 #define OP_MODE_BRIDGE_NODE " \"BRIDGE_NODE\" " //4 #define OP_MODE_SWITCH " \"SWITCH\" " //5 #define OP_MODE_STACK " \"STACK\" " //6 #define OP_MODE_ANNEXG " \"ANNEXG\" " //7 #define OP_MODE_VoIP " \"TDM_VOICE\" " //8 #define OP_MODE_PPPoE " \"PPPoE\" " //9 #define OP_MODE_TTY " \"TTY\" " //10 #define OP_MODE_TDM_API " \"TDM_API\" " //11 #define OP_MODE_NETGRAPH " \"NETGRAPH\" " //12 #define OP_MODE_TDMV_API " \"TDM_VOICE_API\" " //13 #define PPPoE TTY+10 //a valid Operation Mode for ADSL card. //(but not defined in wanpipe_cfg.h !) #define QUOTED_1 " \"1\" " #define QUOTED_2 " \"2\" " #define QUOTED_3 " \"3\" " #define QUOTED_4 " \"4\" " #define QUOTED_5 " \"5\" " #define QUOTED_6 " \"6\" " #define QUOTED_7 " \"7\" " #define QUOTED_8 " \"8\" " #define QUOTED_9 " \"9\" " #define QUOTED_10 " \"10\" " #define QUOTED_11 " \"11\" " #define QUOTED_12 " \"12\" " #define QUOTED_13 " \"13\" " //////////////////////////////////////////////////// //Frame Relay definitions #define MAX_DLCI_NUMBER 100 #define MIN_CIR 1 #define MAX_CIR 512 #define MIN_BC 1 #define MAX_BC 512 #define MIN_BE 0 #define MAX_BE 512 #define MANUAL_DLCI 1 #define AUTO_DLCI 2 //////////////////////////////////////////////////// //LIP ATM definitions #define LIP_ATM_MTU_MRU 212 //4 cells: 4*53=212 //////////////////////////////////////////////////// //CHDLC definintions //#include - can not include!! //because of conflicting type: 'api_rx_hdr_t' wich //is also defined in 'sdla_fr.h' //because of it copying some definintions here: #define MIN_Tx_KPALV_TIMER 0 /* minimum transmit keepalive timer */ #define MAX_Tx_KPALV_TIMER 60 /* maximum transmit keepalive timer - in seconds */ #define DEFAULT_Tx_KPALV_TIMER 5 /* default transmit keepalive timer - in seconds */ //#define MAX_Tx_KPALV_TIMER 60000 /* maximum transmit keepalive timer - in milliseconds */ //#define DEFAULT_Tx_KPALV_TIMER 10000 /* default transmit keepalive timer - in milliseconds */ #if 0 #define MIN_Rx_KPALV_TIMER 10 /* minimum receive keepalive timer */ #define MAX_Rx_KPALV_TIMER 60000 /* maximum receive keepalive timer */ #define DEFAULT_Rx_KPALV_TIMER 10000 /* default receive keepalive timer */ #endif #define MIN_KPALV_ERR_TOL 1 /* min kpalv error tolerance count */ #define MAX_KPALV_ERR_TOL 20 /* max kpalv error tolerance count */ #define DEFAULT_KPALV_ERR_TOL 3 /* default value */ //////////////////////////////////////////////////// //structure for reading and writing "interface" file //in '/etc/wanpipe/interface'. #define IF_CONFIG_BUF_LEN 100 typedef struct _if_config{ char device[WAN_IFNAME_SZ+1];//wp10adsl char ipaddr[IF_CONFIG_BUF_LEN]; char netmask[IF_CONFIG_BUF_LEN];//255.255.255.0 char point_to_point_ipaddr[IF_CONFIG_BUF_LEN]; char on_boot;//yes/no char gateway[IF_CONFIG_BUF_LEN]; }if_config_t; //////////////////////////////////////////////////// //global functions in main.cpp: char * get_protocol_string(int protocol); #define NO_PROTOCOL_NEEDED WANCONFIG_X25-1 #define PROTOCOL_NOT_SET 0 //the TDM_VOICE and TDM_VOICE_API is actually an Operation Mode (like API...) //but there is a need to display and configure it as a Protocol. //no such 'config_id' in wanpipe_cfg.h', so have to define my own enum NOT_REAL_PROTOCOLS{ PROTOCOL_TDM_VOICE = 60, PROTOCOL_IP, PROTOCOL_ETHERNET, PROTOCOL_TDM_VOICE_API }; #define ADSL_IP_STR "ADSL (IP)" #define ADSL_ETHERNET_STR "ADSL (Ethernet)" int check_file_exist(char * file_name, FILE ** file); char * get_card_type_string(int card_type, int card_version); void set_default_t3_configuration(sdla_fe_cfg_t* fe_cfg); void set_default_e3_configuration(sdla_fe_cfg_t* fe_cfg); void set_default_t1_configuration(sdla_fe_cfg_t* fe_cfg); void set_default_adsl_configuration(wan_adsl_conf_t* adsl_cfg); int get_config_id_from_profile(char* config_id); int is_protocol_valid_for_AFT(int protocol); int is_protocol_valid_for_S518_ADSL(int protocol); int adjust_number_of_logical_channels_in_list( int config_id, IN void* list, IN void* info, IN unsigned int new_number_of_logical_channels); typedef struct{ char* name_of_parent_layer; char auto_dlci; }fr_config_info_t; //////////////////////////////////////////////////////////////////////////////// char check_wanpipe_start_script_exist(char* wanpipe_name); char check_wanpipe_stop_script_exist(char* wanpipe_name); int create_wanpipe_start_script(char* wanpipe_name); int create_wanpipe_stop_script(char* wanpipe_name); void remove_wanpipe_start_script(char* wanpipe_name); void remove_wanpipe_stop_script(char* wanpipe_name); int edit_wanpipe_start_script(char* wanpipe_name); int edit_wanpipe_stop_script(char* wanpipe_name); int is_protocol_valid_for_S514(int protocol, char card_version, int comm_port); //////////////////////////////////////////////////////////////////////////////// char check_net_interface_start_script_exist(char* wanpipe_name, char* if_name); char check_net_interface_stop_script_exist(char* wanpipe_name, char* if_name); int create_new_net_interface_start_script(char* wanpipe_name, char* if_name); int create_new_net_interface_stop_script(char* wanpipe_name, char* if_name); void remove_net_interface_start_script(char* wanpipe_name, char* if_name); void remove_net_interface_stop_script(char* wanpipe_name, char* if_name); int edit_net_interface_start_script(char* wanpipe_name, char* if_name); int edit_net_interface_stop_script(char* wanpipe_name, char* if_name); int is_console_size_valid(); //////////////////////////////////////////////////////////////////////////////// char* remove_spaces_in_int_string(char* input); int yes_no_question( OUT int* selection_index, IN char * lxdialog_path, IN int protocol, IN char* format, ...); int get_wanpipe_number_from_conf_file_name(char* conf_file_name); void str_tolower(char * str); void str_toupper(char * str); int write_string_to_file(char * full_file_path, char* string); int append_string_to_file(char * full_file_path, char* string); int get_used_by_integer_value(char* used_by_str); char* get_used_by_string(int used_by); char* replace_new_line_with_zero_term(char* str); char* replace_new_line_with_space(char* str); char* get_S514_card_version_string(char card_version); void tokenize_string(char* input_buff, char* delimeter_str, char* output_buff, int buff_length); char* replace_char_with_other_char_in_str(char* str, char old_char, char new_char); char* get_date_and_time(); unsigned int parse_active_channel(char* val, unsigned char media_type); unsigned int get_active_channels(int channel_flag, int start_channel, int stop_channel, unsigned char media_type); int check_channels(int channel_flag, unsigned int start_channel, unsigned int stop_channel, unsigned char media_type); char* validate_ipv4_address_string(char* str); char* validate_authentication_string(char* str, int max_length); char* replace_numeric_with_char(char* str); /////////////////////////////////////////////////////////////////////// //errors display void err_printf(char* format, ...); //macro to display a fatal error and to exit the program #define ERR_DBG_OUT(_x_) \ { printf("%s: Error in File: %s, Function: %s(), Line: %d. Text:\n", \ prognamed, __FILE__, __FUNCTION__, __LINE__); \ printf _x_; \ exit(1); \ } /////////////////////////////////////////////////////////////////////// #define ADSL_ENCAPSULATION_DECODE(encapsulation) \ (encapsulation == RFC_MODE_BRIDGED_ETH_LLC) ? "Bridged Eth LLC over ATM (PPPoE)" : \ (encapsulation == RFC_MODE_BRIDGED_ETH_VC) ? "Bridged Eth VC over ATM" : \ (encapsulation == RFC_MODE_ROUTED_IP_LLC) ? "Classical IP LLC over ATM" : \ (encapsulation == RFC_MODE_ROUTED_IP_VC) ? "Routed IP VC over ATM" : \ (encapsulation == RFC_MODE_RFC1577_ENCAP) ? "RFC_MODE_RFC1577_ENCAP" : \ (encapsulation == RFC_MODE_PPP_LLC) ? "PPP (LLC) over ATM" : \ (encapsulation == RFC_MODE_PPP_VC) ? "PPP (VC) over ATM (PPPoA)" : "Unkonwn" #define ADSL_DECODE_STANDARD(standard) \ (standard == WANOPT_ADSL_T1_413) ? "T1_413" : \ (standard == WANOPT_ADSL_G_LITE) ? "G_LITE" : \ (standard == WANOPT_ADSL_G_DMT) ? "G_DMT" : \ (standard == WANOPT_ADSL_ALCATEL_1_4) ? "ALCATEL_1_4" : \ (standard == WANOPT_ADSL_MULTIMODE) ? "MULTIMODE" : \ (standard == WANOPT_ADSL_ADI) ? "ADI" : \ (standard == WANOPT_ADSL_ALCATEL) ? "ALCATEL" : \ (standard == WANOPT_ADSL_T1_413_AUTO) ? "T1_413_AUTO" : "Unknown" #define ADSL_DECODE_TRELLIS(trellis) \ (trellis == WANOPT_ADSL_TRELLIS_DISABLE) ? "Disable" : \ (trellis == WANOPT_ADSL_TRELLIS_ENABLE) ? "Enable" : \ (trellis == WANOPT_ADSL_TRELLIS_LITE_ONLY_DISABLE) ? "Lite only disable" : "Unknown" #define ADSL_DECODE_GAIN(gain) \ (gain == WANOPT_ADSL_0DB_CODING_GAIN) ? "0db" : \ (gain == WANOPT_ADSL_1DB_CODING_GAIN) ? "1db" : \ (gain == WANOPT_ADSL_2DB_CODING_GAIN) ? "2db" : \ (gain == WANOPT_ADSL_3DB_CODING_GAIN) ? "3db" : \ (gain == WANOPT_ADSL_4DB_CODING_GAIN) ? "4db" : \ (gain == WANOPT_ADSL_5DB_CODING_GAIN) ? "5db" : \ (gain == WANOPT_ADSL_6DB_CODING_GAIN) ? "6db" : \ (gain == WANOPT_ADSL_7DB_CODING_GAIN) ? "7db" : \ (gain == WANOPT_ADSL_AUTO_CODING_GAIN) ? "Auto coding (Default)" : "Unknown" #define ADSL_DECODE_RX_BIN_ADJUST(rxbin) \ (rxbin == WANOPT_ADSL_RX_BIN_ENABLE) ? "Enable" : \ (rxbin == WANOPT_ADSL_RX_BIN_DISABLE) ? "Disable (Default)" : "Unknown" #define ADSL_DECODE_FRAMING_STRUCT(framing) \ (framing == WANOPT_ADSL_FRAMING_TYPE_0) ? "Type 0" : \ (framing == WANOPT_ADSL_FRAMING_TYPE_1) ? "Type 1" : \ (framing == WANOPT_ADSL_FRAMING_TYPE_2) ? "Type 2" : \ (framing == WANOPT_ADSL_FRAMING_TYPE_3) ? "Type 3 (Default)" : "Unknown" #define ADSL_DECODE_EXPANDED_EXCHANGE(exchange) \ (exchange == WANOPT_ADSL_EXPANDED_EXCHANGE) ? "Expanded (Default)" : \ (exchange == WANOPT_ADSL_SHORT_EXCHANGE) ? "Short" : "Unknown" #define ADSL_DECODE_CLOCK_TYPE(clock_type) \ (clock_type == WANOPT_ADSL_CLOCK_OSCILLATOR) ? "Oscilator" : \ (clock_type == WANOPT_ADSL_CLOCK_CRYSTAL) ? "Crystal (Default)" : "Unknown" /////////////////////////////////////////////////////////////////////// #define LEN_OF_DBG_BUFF 4096 #define MAX_ADDR_STR_LEN 100 #define MAX_USEDBY_STR_LEN 100 #define TIME_SLOT_GROUP_STR "Timeslot Group" #define TIME_SLOT_GROUPS_STR "Timeslot Groups" #define INVALID_HELP_TOPIC_STR "Invalid Help topic was selected!!!" //global variables in main.cpp extern const char * wanpipe_cfg_dir; extern char* invalid_help_str; extern char* fr_cir_help_str; extern char* option_not_implemented_yet_help_str; extern char* no_configuration_onptions_available_help_str; extern char* interfaces_cfg_dir; extern int global_hw_ec_max_num; //taken from wanconfig.c: extern char prognamed[20]; extern char progname_sp[]; extern char def_conf_file[]; extern char def_adsl_file[]; extern char tmp_adsl_file[]; extern char router_dir[]; extern char banner[]; extern char *krnl_log_file; extern char *verbose_log; //menu_list_all_wanpipes.cpp, //make sure initialize it each time "new conf_file_reader()" is called extern void* global_conf_file_reader_ptr; //when writing conf file, TDMV_SPAN, TDMV_DCHAN and all other //Voice related stuff should be written only if at least one interface //is actually configured for VOICE extern char is_there_a_voice_if; //LIP ATM flag - if there is at least one such interface extern char is_there_a_lip_atm_if; extern int global_card_type; extern int global_card_version; #endif//WANCFG_H