3200 lines
105 KiB
C++
3200 lines
105 KiB
C++
/***************************************************************************
|
|
conf_file_writer.cpp - description
|
|
-------------------
|
|
begin : Fri Apr 2 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "conf_file_writer.h"
|
|
|
|
#if defined(ZAPTEL_PARSER)
|
|
#include "wanrouter_rc_file_reader.h"
|
|
#endif
|
|
|
|
void print_look_up_t_table(look_up_t* table);
|
|
void print_key_word_t_table(key_word_t* table);
|
|
|
|
extern key_word_t common_conftab[];
|
|
extern look_up_t config_id_str[];
|
|
extern key_word_t fr_conftab[];
|
|
extern key_word_t sppp_conftab[];
|
|
extern key_word_t lapb_annexg_conftab[];
|
|
extern key_word_t chdlc_conftab[];
|
|
extern key_word_t chan_conftab[];
|
|
extern key_word_t adsl_conftab[];
|
|
|
|
#define DBG_CONF_FILE_WRITER 1
|
|
|
|
enum {
|
|
FORM_INTERFACES_SECTION,
|
|
FORM_PROFILE_SECTION
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
//Tables for converting integer values to string values
|
|
//NOTE: each integer value in a table MUST BE UNIQUE.
|
|
look_up_t card_type_table[] =
|
|
{
|
|
{ WANOPT_S50X, (void*)"S50X" },
|
|
{ WANOPT_S51X, (void*)"S51X" },
|
|
{ WANOPT_ADSL, (void*)"S518" },
|
|
{ WANOPT_AFT, (void*)"AFT" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t yes_no_options_table[] =
|
|
{
|
|
{ WANOPT_YES, (void*)"YES" },
|
|
{ WANOPT_NO, (void*)"NO" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t physical_medium_options_table[] =
|
|
{
|
|
{ WAN_MEDIA_NONE, (void*)"None" },
|
|
{ WAN_MEDIA_T1, (void*)"T1" },
|
|
{ WAN_MEDIA_E1, (void*)"E1" },
|
|
{ WAN_MEDIA_56K, (void*)"56K" },
|
|
{ WAN_MEDIA_DS3, (void*)"DS3" },
|
|
{ WAN_MEDIA_E3, (void*)"E3" },
|
|
{ WAN_MEDIA_FXOFXS, (void*)"FXO/FXS"},
|
|
{ WAN_MEDIA_BRI, (void*)"BRI" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t te1_line_code_options_table[] =
|
|
{
|
|
{ WAN_LCODE_AMI, (void*)"AMI" },
|
|
{ WAN_LCODE_B8ZS, (void*)"B8ZS" },
|
|
{ WAN_LCODE_HDB3, (void*)"HDB3" },
|
|
{ WAN_LCODE_B3ZS, (void*)"B3ZS" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t te1_clock_mode_options_table[] =
|
|
{
|
|
{ WAN_NORMAL_CLK, (void*)"NORMAL" },
|
|
{ WAN_MASTER_CLK, (void*)"MASTER" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t te1_frame_options_table[] =
|
|
{
|
|
{ WAN_FR_D4, (void*)"D4" },
|
|
{ WAN_FR_ESF, (void*)"ESF" },
|
|
{ WAN_FR_NCRC4, (void*)"NCRC4" },
|
|
{ WAN_FR_CRC4, (void*)"CRC4" },
|
|
{ WAN_FR_UNFRAMED, (void*)"UNFRAMED" },
|
|
{ WAN_FR_E3_G751, (void*)"G.751" },
|
|
{ WAN_FR_E3_G832, (void*)"G.832" },
|
|
{ WAN_FR_DS3_Cbit, (void*)"C-BIT" },
|
|
{ WAN_FR_DS3_M13, (void*)"M13" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t t1_line_build_out_options_table[] =
|
|
{
|
|
{ WAN_T1_LBO_0_DB, (void*)"0DB" },
|
|
{ WAN_T1_LBO_75_DB, (void*)"7.5DB" },
|
|
{ WAN_T1_LBO_15_DB, (void*)"15DB" },
|
|
{ WAN_T1_LBO_225_DB, (void*)"22.5DB" },
|
|
{ WAN_T1_0_110, (void*)"0-110FT" },
|
|
{ WAN_T1_110_220, (void*)"110-220FT" },
|
|
{ WAN_T1_220_330, (void*)"220-330FT" },
|
|
{ WAN_T1_330_440, (void*)"330-440FT" },
|
|
{ WAN_T1_440_550, (void*)"440-550FT" },
|
|
{ WAN_T1_550_660, (void*)"550-660FT" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t e1_line_build_out_options_table[] =
|
|
{
|
|
{ WAN_E1_120, (void*)"120OH" },
|
|
{ WAN_E1_75, (void*)"75OH" },
|
|
{ 1, (void*)"120OH" },//for "zaptel" parsing only
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t e1_sig_mode_options_table[] =
|
|
{
|
|
{ WAN_TE1_SIG_CCS, (void*)"CCS" },
|
|
{ WAN_TE1_SIG_CAS, (void*)"CAS" },
|
|
{ 0, (void*)"CCS" },//for "zaptel" parsing only
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t serial_interface_type_options_table[] =
|
|
{
|
|
{ WANOPT_RS232, (void*)"RS232" },
|
|
{ WANOPT_V35, (void*)"V35" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t serial_clock_type_options_table[] =
|
|
{
|
|
{ WANOPT_EXTERNAL, (void*)"EXTERNAL" },
|
|
{ WANOPT_INTERNAL, (void*)"INTERNAL" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t frame_relay_in_channel_signalling_options_table[] =
|
|
{
|
|
/*----- Frame relay in-channel signalling */
|
|
{ WANOPT_FR_AUTO_SIG, (void*)"AUTO" },
|
|
{ WANOPT_FR_ANSI, (void*)"ANSI" },
|
|
{ WANOPT_FR_Q933, (void*)"Q933" },
|
|
{ WANOPT_FR_LMI, (void*)"LMI" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t frame_relay_station_type_options_table[] =
|
|
{
|
|
{ WANOPT_CPE, (void*)"CPE" },
|
|
{ WANOPT_NODE, (void*)"NODE" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t lapb_station_type_options_table[] =
|
|
{
|
|
{ WANOPT_DTE, (void*)"DTE" },
|
|
{ WANOPT_DCE, (void*)"DCE" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t commport_type_options_table[] =
|
|
{
|
|
{ WANOPT_PRI, (void*)"PRI" },
|
|
{ WANOPT_SEC, (void*)"SEC" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t ppp_ip_mode_options_table[] =
|
|
{
|
|
/*----- PPP IP Mode Options -----------*/
|
|
{ WANOPT_PPP_STATIC, (void*)"STATIC" },
|
|
{ WANOPT_PPP_HOST, (void*)"HOST" },
|
|
{ WANOPT_PPP_PEER, (void*)"PEER" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t connection_type_options_table[] =
|
|
{
|
|
/*----- Connection options ------------*/
|
|
{ WANOPT_PERMANENT, (void*)"PERMANENT" },
|
|
{ WANOPT_SWITCHED, (void*)"SWITCHED" },
|
|
{ WANOPT_ONDEMAND, (void*)"ONDEMAND" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t data_encoding_options_table[] =
|
|
{
|
|
/*----- Data encoding -----------------*/
|
|
{ WANOPT_NRZ, (void*)"NRZ" },
|
|
{ WANOPT_NRZI, (void*)"NRZI" },
|
|
{ WANOPT_FM0, (void*)"FM0" },
|
|
{ WANOPT_FM1, (void*)"FM1" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t line_idle_options_table[] =
|
|
{
|
|
/*----- Idle Line ----------------------*/
|
|
{ WANOPT_IDLE_FLAG, (void*)"FLAG" },
|
|
{ WANOPT_IDLE_MARK, (void*)"MARK" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t protocol_options_table[] =
|
|
{
|
|
{ WANCONFIG_MPPP, (void*)"MP_PPP" },
|
|
{ WANCONFIG_MPCHDLC, (void*)"MP_CHDLC" },
|
|
{ WANCONFIG_MFR, (void*)"MP_FR" },
|
|
//{ WANCONFIG_TTY, (void*)"TTY" },
|
|
{ WANCONFIG_TTY, (void*)"NONE" },//must be saved as none!!!
|
|
//{ WANOPT_NO, (void*)"RAW" },
|
|
{ WANOPT_NO, (void*)"NONE" },
|
|
{ WANCONFIG_HDLC, (void*)"HDLC" },
|
|
{ WANCONFIG_EDUKIT, (void*)"EDUKIT" },
|
|
{ WANCONFIG_PPP, (void*)"PPP" },
|
|
{ WANCONFIG_CHDLC, (void*)"CHDLC" },
|
|
{ WANCONFIG_LIP_ATM, (void*)"MP_ATM" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t te3_rdevice_type_options_table[] =
|
|
{
|
|
{WAN_TE3_RDEVICE_NONE, (void*)"None" },
|
|
{WAN_TE3_RDEVICE_ADTRAN, (void*)"ADTRAN" },
|
|
{WAN_TE3_RDEVICE_DIGITALLINK, (void*)"DIGITAL-LINK"},
|
|
{WAN_TE3_RDEVICE_KENTROX, (void*)"KENTROX"},
|
|
{WAN_TE3_RDEVICE_LARSCOM, (void*)"LARSCOM"},
|
|
{WAN_TE3_RDEVICE_VERILINK, (void*)"VERILINK"},
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_encapsulation_options_table[] =
|
|
{
|
|
{ RFC_MODE_BRIDGED_ETH_LLC, (void*)"ETH_LLC_OA" },
|
|
{ RFC_MODE_BRIDGED_ETH_VC, (void*)"ETH_VC_OA" },
|
|
{ RFC_MODE_ROUTED_IP_LLC, (void*)"IP_LLC_OA" },
|
|
{ RFC_MODE_ROUTED_IP_VC, (void*)"IP_VC_OA" },
|
|
{ RFC_MODE_PPP_LLC, (void*)"PPP_LLC_OA" },
|
|
{ RFC_MODE_PPP_VC, (void*)"PPP_VC_OA" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_standard_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_T1_413, (void*)"ADSL_T1_413" },
|
|
{ WANOPT_ADSL_G_LITE, (void*)"ADSL_G_LITE" },
|
|
{ WANOPT_ADSL_G_DMT, (void*)"ADSL_G_DMT" },
|
|
{ WANOPT_ADSL_ALCATEL_1_4, (void*)"ADSL_ALCATEL_1_4" },
|
|
{ WANOPT_ADSL_ALCATEL, (void*)"ADSL_ALCATEL" },
|
|
{ WANOPT_ADSL_MULTIMODE, (void*)"ADSL_MULTIMODE" },
|
|
{ WANOPT_ADSL_T1_413_AUTO, (void*)"ADSL_T1_413_AUTO" },
|
|
{ WANOPT_ADSL_ADI, (void*)"ADI" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_trellis_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_TRELLIS_ENABLE, (void*)"ADSL_TRELLIS_ENABLE" },
|
|
{ WANOPT_ADSL_TRELLIS_DISABLE, (void*)"ADSL_TRELLIS_DISABLE" },
|
|
{ WANOPT_ADSL_TRELLIS_LITE_ONLY_DISABLE,(void*)"ADSL_TRELLIS_LITE_ONLY_DISABLE"},
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_coding_gain_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_0DB_CODING_GAIN, (void*)"ADSL_0DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_1DB_CODING_GAIN, (void*)"ADSL_1DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_2DB_CODING_GAIN, (void*)"ADSL_2DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_3DB_CODING_GAIN, (void*)"ADSL_3DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_4DB_CODING_GAIN, (void*)"ADSL_4DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_5DB_CODING_GAIN, (void*)"ADSL_5DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_6DB_CODING_GAIN, (void*)"ADSL_6DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_7DB_CODING_GAIN, (void*)"ADSL_7DB_CODING_GAIN" },
|
|
{ WANOPT_ADSL_AUTO_CODING_GAIN, (void*)"ADSL_AUTO_CODING_GAIN" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_bin_adjust_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_RX_BIN_DISABLE, (void*)"ADSL_RX_BIN_DISABLE" },
|
|
{ WANOPT_ADSL_RX_BIN_ENABLE, (void*)"ADSL_RX_BIN_ENABLE" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_framing_struct_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_FRAMING_TYPE_0, (void*)"ADSL_FRAMING_TYPE_0" },
|
|
{ WANOPT_ADSL_FRAMING_TYPE_1, (void*)"ADSL_FRAMING_TYPE_1" },
|
|
{ WANOPT_ADSL_FRAMING_TYPE_2, (void*)"ADSL_FRAMING_TYPE_2" },
|
|
{ WANOPT_ADSL_FRAMING_TYPE_3, (void*)"ADSL_FRAMING_TYPE_3" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_exchange_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_EXPANDED_EXCHANGE, (void*)"ADSL_EXPANDED_EXCHANGE" },
|
|
{ WANOPT_ADSL_SHORT_EXCHANGE, (void*)"ADSL_SHORT_EXCHANGE" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t adsl_clock_type_options_table[] =
|
|
{
|
|
{ WANOPT_ADSL_CLOCK_CRYSTAL, (void*)"ADSL_CLOCK_CRYSTAL" },
|
|
{ WANOPT_ADSL_CLOCK_OSCILLATOR, (void*)"ADSL_CLOCK_OSCILLATOR" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
look_up_t tdmv_law_options_table[] =
|
|
{
|
|
{ WAN_TDMV_ALAW, (void*)"ALAW" },
|
|
{ WAN_TDMV_MULAW,(void*)"MULAW" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
conf_file_writer::conf_file_writer(IN conf_file_reader* cfr)
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("conf_file_writer::conf_file_writer()\n"));
|
|
this->cfr = cfr;
|
|
#if defined(ZAPTEL_PARSER)
|
|
this->list_element_sangoma_card_ptr = NULL;
|
|
#endif
|
|
}
|
|
|
|
#if defined(ZAPTEL_PARSER)
|
|
conf_file_writer::conf_file_writer(IN list_element_sangoma_card* list_element_sangoma_card_ptr)
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("conf_file_writer::conf_file_writer()\n"));
|
|
this->list_element_sangoma_card_ptr = list_element_sangoma_card_ptr;
|
|
this->cfr = NULL;
|
|
}
|
|
#endif
|
|
|
|
conf_file_writer::~conf_file_writer()
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("conf_file_writer::~conf_file_writer()\n"));
|
|
}
|
|
|
|
int conf_file_writer::write()
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("conf_file_writer::write()\n"));
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
string top_comment_str;
|
|
string devices_section_str;
|
|
string interfaces_section_str;
|
|
string wanpipe_section_str;
|
|
string wp_interface;
|
|
|
|
|
|
objects_list * main_obj_list = cfr->main_obj_list;
|
|
|
|
//Top comment string. Contains name of the Wan Device, time of creation etc.
|
|
top_comment_str = "";
|
|
|
|
//[devices] section string
|
|
devices_section_str = "";
|
|
|
|
//[interfaces] section string
|
|
interfaces_section_str = "";
|
|
|
|
//[wanpipe??] section string
|
|
wanpipe_section_str = "";
|
|
|
|
//per-interface string. call for each interface. on return add to the 'main_conf_str'.
|
|
wp_interface = "";
|
|
|
|
//form full path to the conf file we want to write
|
|
full_file_path = wanpipe_cfg_dir;
|
|
|
|
full_file_path += cfr->link_defs->name;
|
|
full_file_path += ".conf";
|
|
|
|
///////////////////////////////////////////////////////
|
|
if(form_top_comment_str(top_comment_str) == NO){
|
|
return NO;
|
|
}
|
|
//the comment should be 'written', all the rest should be 'appended' to file.
|
|
if(write_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)top_comment_str.c_str()) == NO){
|
|
return NO;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////
|
|
if(form_devices_section_str(devices_section_str) == NO){
|
|
return NO;
|
|
}
|
|
|
|
if(append_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)devices_section_str.c_str()) == NO){
|
|
return NO;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,"\n[interfaces]\n");
|
|
interfaces_section_str = tmp_buff;
|
|
|
|
traverse_interfaces(interfaces_section_str, main_obj_list,
|
|
FORM_INTERFACES_SECTION, NULL);
|
|
|
|
if(append_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)interfaces_section_str.c_str()) == NO){
|
|
return NO;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//i.g.: [wanpipe1]
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,"\n[%s]\n", cfr->link_defs->name);
|
|
wanpipe_section_str = tmp_buff;
|
|
|
|
if(form_wanpipe_section_str(wanpipe_section_str) == NO){
|
|
return NO;
|
|
}
|
|
|
|
if(append_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)wanpipe_section_str.c_str()) == NO){
|
|
return NO;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////
|
|
//[profile]. i.g.: [fr.fr2]
|
|
interfaces_section_str = "";
|
|
traverse_interfaces(interfaces_section_str, main_obj_list,
|
|
FORM_PROFILE_SECTION, NULL);
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_top_comment_str(string& top_comment_str)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
str_toupper(cfr->link_defs->name);
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"#================================================\n\
|
|
# %s Configuration File\n\
|
|
#================================================\n\
|
|
#\n\
|
|
# Date: %s\
|
|
#\n\
|
|
# Note: This file was generated automatically\n\
|
|
# by /usr/sbin/%s program.\n\
|
|
#\n\
|
|
# If you want to edit this file, it is\n\
|
|
# recommended that you use wancfg program\n\
|
|
# to do so.\n\
|
|
#================================================\n\
|
|
# Sangoma Technologies Inc.\n\
|
|
#================================================\n",
|
|
cfr->link_defs->name,
|
|
get_date_and_time(),
|
|
WANCFG_EXECUTABLE_NAME
|
|
);
|
|
|
|
str_tolower(cfr->link_defs->name);
|
|
|
|
top_comment_str = tmp_buff;
|
|
|
|
return YES;
|
|
}
|
|
|
|
//[devices]
|
|
//wanpipe2 = WAN_FR, Comment
|
|
int conf_file_writer::form_devices_section_str(string& devices_section_str)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
int config_id = cfr->link_defs->linkconf->config_id;
|
|
int card_version = cfr->link_defs->card_version;
|
|
|
|
//check that 'config_id' is in the table.
|
|
if(get_keyword_from_look_up_t_table(config_id_str, config_id) == NULL){
|
|
ERR_DBG_OUT(("Invalid 'config_id' (%d) passed for saving to file!!\n",
|
|
config_id));
|
|
return NO;
|
|
}
|
|
|
|
switch(config_id)
|
|
{
|
|
case WANCONFIG_HDLC: //for 'HDLC streaming' on S514
|
|
//even for 'HDLC streaming' it should be WANCONFIG_MPROT !
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_MPROT),
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case WANCONFIG_MPROT: //for all "LIP" layer protocols on S514
|
|
case WANCONFIG_EDUKIT://for EduKit on S514
|
|
case WANCONFIG_ADSL:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, config_id),
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case WANCONFIG_AFT:
|
|
|
|
switch(card_version)
|
|
{
|
|
case A300_ADPTR_U_1TE3://WAN_MEDIA_DS3
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_TE3),
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case A101_ADPTR_1TE1:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT), //for A101/2
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case A104_ADPTR_4TE1:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_TE1),//for A104
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case AFT_ADPTR_56K:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_56K),//for A056
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case A200_ADPTR_ANALOG:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_ANALOG),//for AFT Analog card
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case AFT_ADPTR_ISDN:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_ISDN_BRI),//for AFT BRI card
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
case AFT_ADPTR_2SERIAL_V35X21:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"\n\
|
|
[devices]\n\
|
|
%s = %s, %s\n",
|
|
cfr->link_defs->name,
|
|
get_keyword_from_look_up_t_table(config_id_str, WANCONFIG_AFT_SERIAL),//for AFT Serial card
|
|
(cfr->link_defs->descr == NULL ? "Comment" : cfr->link_defs->descr)
|
|
);
|
|
break;
|
|
|
|
default:
|
|
ERR_DBG_OUT(("Unsupported 'card_version' (%d) passed for saving to file!!\n",
|
|
card_version));
|
|
return NO;
|
|
}//switch()
|
|
break;
|
|
|
|
default:
|
|
ERR_DBG_OUT(("Unsupported 'config_id' (%d) passed for saving to file!!\n",
|
|
config_id));
|
|
return NO;
|
|
}
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("devices_section_str: %s\n", tmp_buff));
|
|
devices_section_str += tmp_buff;
|
|
return YES;
|
|
}
|
|
|
|
char* conf_file_writer::get_keyword_from_key_word_t_table(IN key_word_t* table,
|
|
IN int offset_in_structure)
|
|
{
|
|
char* keyword;
|
|
key_word_t* orig_table_ptr = table;
|
|
|
|
Debug(0, ("get_keyword_from_key_word_t_table()\n"));
|
|
|
|
keyword = table->keyword;
|
|
while(keyword != NULL && table->offset != (unsigned int)offset_in_structure){
|
|
//Debug(DBG_CONF_FILE_WRITER, ("keyword: %s\n", table->keyword));
|
|
Debug(0, ("keyword: %s\n", table->keyword));
|
|
table++;
|
|
keyword = table->keyword;
|
|
}
|
|
|
|
if(keyword == NULL){
|
|
printf("get_keyword_from_key_word_t_table(): failed to find value at offset: %d\n",
|
|
offset_in_structure);
|
|
print_key_word_t_table(orig_table_ptr);
|
|
exit(1);
|
|
}
|
|
|
|
return keyword;
|
|
}
|
|
|
|
void print_key_word_t_table(key_word_t* table)
|
|
{
|
|
char* keyword;
|
|
|
|
printf("\nPrinting the searched table:\n");
|
|
|
|
keyword = table->keyword;
|
|
while(keyword != NULL){
|
|
printf("keyword: %s at offset: %d\n", table->keyword, table->offset);
|
|
table++;
|
|
keyword = table->keyword;
|
|
}
|
|
printf("End of table.\n\n");
|
|
}
|
|
|
|
char* conf_file_writer::get_keyword_from_look_up_t_table(IN look_up_t* table,
|
|
IN int search_value)
|
|
{
|
|
char* keyword;
|
|
look_up_t* orig_table_ptr = table;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("get_keyword_from_look_up_t_table()\n"));
|
|
|
|
keyword = (char*)table->ptr;
|
|
while(keyword != NULL && table->val != (unsigned int)search_value){
|
|
//Debug(DBG_CONF_FILE_WRITER, ("keyword: %s\n", keyword));
|
|
Debug(0, ("keyword: %s\n", keyword));
|
|
table++;
|
|
keyword = (char*)table->ptr;
|
|
}
|
|
|
|
if(keyword == NULL){
|
|
printf("Failed to find value in one of the following:\n");
|
|
print_look_up_t_table(orig_table_ptr);
|
|
ERR_DBG_OUT(("Failed to find value: 0x%X.\n", search_value));
|
|
exit(1);
|
|
}
|
|
return keyword;
|
|
}
|
|
|
|
void print_look_up_t_table(look_up_t* table)
|
|
{
|
|
char* keyword;
|
|
|
|
printf("\nPrinting the searched table:\n");
|
|
|
|
keyword = (char*)table->ptr;
|
|
while(keyword != NULL){
|
|
printf("%s\t-->%d\n", keyword, table->val);
|
|
table++;
|
|
keyword = (char*)table->ptr;
|
|
}
|
|
printf("End of table.\n\n");
|
|
}
|
|
|
|
int conf_file_writer::traverse_interfaces(string& interfaces_section_str,
|
|
objects_list * obj_list,
|
|
IN int task_type,
|
|
IN list_element_chan_def* parent_list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
chan_def_t* chandef;
|
|
wanif_conf_t* chanconf;
|
|
int config_id;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("traverse_interfaces()\n"));
|
|
|
|
if(obj_list == NULL){
|
|
ERR_DBG_OUT(("traverse_interfaces(): obj_list == NULL!!\n"));
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "traverse_interfaces(): obj_list == NULL!!\n");
|
|
return NO;
|
|
}
|
|
|
|
list_element_chan_def* list_el_chan_def = (list_element_chan_def*)obj_list->get_first();
|
|
|
|
while(list_el_chan_def != NULL){
|
|
chandef = &list_el_chan_def->data;
|
|
chanconf = chandef->chanconf;
|
|
config_id = chanconf->config_id;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("device name->: %s\n",chandef->name ));
|
|
|
|
switch(task_type)
|
|
{
|
|
case FORM_INTERFACES_SECTION:
|
|
//has to use 'pre-traversing'
|
|
Debug(DBG_CONF_FILE_WRITER, ("calling form_interface_str():line:%d\n", __LINE__));
|
|
if(form_interface_str(interfaces_section_str, list_el_chan_def, parent_list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if(list_el_chan_def->next_objects_list != NULL){
|
|
//recursive call
|
|
traverse_interfaces(interfaces_section_str,
|
|
(objects_list*)list_el_chan_def->next_objects_list,
|
|
task_type,
|
|
list_el_chan_def
|
|
);
|
|
}
|
|
|
|
switch(task_type)
|
|
{
|
|
case FORM_PROFILE_SECTION:
|
|
//has to use 'post-traversing'
|
|
if(chandef->usedby == STACK){
|
|
|
|
//write profile for the level above this one
|
|
Debug(DBG_CONF_FILE_WRITER, ("calling form_profile_str():line:%d\n", __LINE__));
|
|
if(form_profile_str(interfaces_section_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
}
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("calling form_per_interface_str():line:%d\n", __LINE__));
|
|
if(form_per_interface_str(interfaces_section_str, list_el_chan_def, 0) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
}//case()
|
|
|
|
if(append_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)interfaces_section_str.c_str()) == NO){
|
|
return NO;
|
|
}
|
|
|
|
interfaces_section_str = "";
|
|
|
|
list_el_chan_def = (list_element_chan_def*)obj_list->get_next_element(list_el_chan_def);
|
|
}//while()
|
|
|
|
return YES;
|
|
}
|
|
|
|
//wp2fr16 = wanpipe2, 16, WANPIPE, Comment
|
|
int conf_file_writer::form_interface_str(string& interfaces_section_str,
|
|
list_element_chan_def* list_el_chan_def,
|
|
IN list_element_chan_def* parent_list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
chan_def_t* chandef = &list_el_chan_def->data;
|
|
wanif_conf_t* chanconf = chandef->chanconf;
|
|
int config_id = chanconf->config_id;
|
|
link_def_t* link_def = cfr->link_defs;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_interface_str(): name: %s\n", chandef->name));
|
|
Debug(DBG_CONF_FILE_WRITER, ("config_id: %d (%s)\n", config_id, get_protocol_string(config_id)));
|
|
Debug(DBG_CONF_FILE_WRITER, ("chandef->usedby: %s\n", get_used_by_string(chandef->usedby)));
|
|
|
|
//w3g1 = wanpipe3,
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
"%s = %s,",
|
|
chandef->name,
|
|
link_def->name);
|
|
interfaces_section_str += tmp_buff;
|
|
|
|
switch(config_id)
|
|
{
|
|
case WANCONFIG_ADSL:
|
|
case WANCONFIG_HDLC:
|
|
case WANCONFIG_EDUKIT:
|
|
case PROTOCOL_TDM_VOICE:
|
|
case PROTOCOL_TDM_VOICE_API:
|
|
case WANCONFIG_AFT: //if TTY, config_id is set to 'WANCONFIG_AFT'
|
|
//because 'PROTOCOL' is expected (by the driver) to be set to 'NONE'
|
|
//wp1edu = wanpipe1, , WANPIPE, Comment
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
" , %s, %s\n",
|
|
get_used_by_string(chandef->usedby),
|
|
(chandef->label == NULL ? "Comment" : chandef->label));
|
|
break;
|
|
|
|
case WANCONFIG_MFR:
|
|
if(parent_list_el_chan_def == NULL){
|
|
ERR_DBG_OUT(("Interface %s does NOT have a 'parent' STACK interface!!\n",
|
|
chandef->name));
|
|
return NO;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
//" %s, %s, %s, %s.%s%s\n",
|
|
" %s, %s, %s, %s.%s\n",
|
|
((atoi(chandef->addr) == 1) ? "auto" : chandef->addr),
|
|
get_used_by_string(chandef->usedby),
|
|
get_aft_lip_layer_protocol(config_id),
|
|
parent_list_el_chan_def->data.name,
|
|
get_aft_lip_layer_protocol(config_id));
|
|
break;
|
|
|
|
case WANCONFIG_LAPB:
|
|
if(parent_list_el_chan_def == NULL){
|
|
ERR_DBG_OUT(("Interface %s does NOT have a 'parent' STACK interface!!\n",
|
|
chandef->name));
|
|
return NO;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
" %s, %s, %s, %s.%s\n",
|
|
chandef->addr,
|
|
get_used_by_string(chandef->usedby),
|
|
get_aft_lip_layer_protocol(config_id),
|
|
parent_list_el_chan_def->data.name,
|
|
get_aft_lip_layer_protocol(config_id));
|
|
break;
|
|
|
|
case WANCONFIG_TTY:
|
|
if(parent_list_el_chan_def == NULL){
|
|
ERR_DBG_OUT(("Interface %s does NOT have a 'parent' STACK interface!!\n",
|
|
chandef->name));
|
|
return NO;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
//" %s, %s, %s, %s.%s%s\n",
|
|
" %s, %s, %s, %s.%s\n",
|
|
chandef->chanconf->addr,
|
|
get_used_by_string(chandef->usedby),
|
|
get_aft_lip_layer_protocol(config_id),
|
|
parent_list_el_chan_def->data.name,
|
|
get_aft_lip_layer_protocol(config_id));
|
|
break;
|
|
|
|
default:
|
|
if(parent_list_el_chan_def == NULL){
|
|
ERR_DBG_OUT(("Interface %s does NOT have a 'parent' STACK interface!!\n",
|
|
chandef->name));
|
|
return NO;
|
|
}
|
|
//for all others there the 'addr' is not used at all
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH,
|
|
//" , %s, %s, %s.%s%s\n",
|
|
" , %s, %s, %s.%s\n",
|
|
get_used_by_string(chandef->usedby),
|
|
get_aft_lip_layer_protocol(config_id),
|
|
parent_list_el_chan_def->data.name,
|
|
get_aft_lip_layer_protocol(config_id));
|
|
}
|
|
|
|
interfaces_section_str += tmp_buff;
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_wanpipe_section_str(string& wanpipe_section_str)
|
|
{
|
|
string tmp_string;
|
|
|
|
tmp_string = "";
|
|
if(form_wanpipe_card_location_str(tmp_string) == NO){
|
|
return NO;
|
|
}else{
|
|
wanpipe_section_str += tmp_string;
|
|
}
|
|
|
|
tmp_string = "";
|
|
switch(cfr->link_defs->linkconf->card_type)
|
|
{
|
|
case WANOPT_S51X:
|
|
|
|
switch(cfr->link_defs->card_version)
|
|
{
|
|
case S5144_ADPTR_1_CPU_T1E1:
|
|
case S5145_ADPTR_1_CPU_56K:
|
|
if(form_fe_card_cfg_str(tmp_string, &cfr->link_defs->linkconf->fe_cfg) == NO){
|
|
return NO;
|
|
}else{
|
|
wanpipe_section_str += tmp_string;
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WANOPT_AFT:
|
|
if(form_fe_card_cfg_str(tmp_string, &cfr->link_defs->linkconf->fe_cfg) == NO){
|
|
return NO;
|
|
}else{
|
|
wanpipe_section_str += tmp_string;
|
|
}
|
|
break;
|
|
|
|
case WANOPT_ADSL:
|
|
//FIXME: write ADSL global cfg
|
|
if(form_adsl_global_cfg_str(tmp_string) == NO){
|
|
return NO;
|
|
}else{
|
|
wanpipe_section_str += tmp_string;
|
|
}
|
|
break;
|
|
}
|
|
|
|
tmp_string = "";
|
|
if(form_wanpipe_card_miscellaneous_options_str(tmp_string) == NO){
|
|
return NO;
|
|
}else{
|
|
wanpipe_section_str += tmp_string;
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_adsl_global_cfg_str(string& tmp_string)
|
|
{
|
|
wan_adsl_conf_t* adsl_cfg = &cfr->link_defs->linkconf->u.adsl;
|
|
char* keyword;
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
string adsl_global_cfg;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_adsl_global_cfg_str()\n"));
|
|
|
|
adsl_global_cfg = "";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//first non-advanced configuration. insert new line before it.
|
|
adsl_global_cfg += "\n";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, EncapMode));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'EncapMode'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'EncapMode': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_encapsulation_options_table,
|
|
adsl_cfg->EncapMode));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, atm_autocfg));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'atm_autocfg'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'atm_autocfg': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
adsl_cfg->atm_autocfg));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, Vci));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'Vci'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'Vci': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->Vci);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, Vpi));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'Vpi'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'Vpi': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->Vpi);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, atm_watchdog));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'atm_watchdog'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'atm_watchdog': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
adsl_cfg->atm_watchdog));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//advanced options
|
|
adsl_global_cfg += "\n";
|
|
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, Verbose));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'Verbose'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'Verbose': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", adsl_cfg->Verbose);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, RxBufferCount));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'RxBufferCount'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'RxBufferCount': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->RxBufferCount);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, TxBufferCount));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'TxBufferCount'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'TxBufferCount': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->TxBufferCount);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, Standard));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'Standard'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'Standard': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_standard_options_table,
|
|
adsl_cfg->Standard));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, Trellis));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'Trellis'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'Trellis': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_trellis_options_table,
|
|
adsl_cfg->Trellis));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, TxPowerAtten));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'TxPowerAtten'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'TxPowerAtten': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->TxPowerAtten);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, CodingGain));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'CodingGain'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'CodingGain': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_coding_gain_options_table,
|
|
adsl_cfg->CodingGain));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, MaxBitsPerBin));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'MaxBitsPerBin'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'MaxBitsPerBin': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%X\n", adsl_cfg->MaxBitsPerBin);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, TxStartBin));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'TxStartBin'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'TxStartBin': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%X\n", adsl_cfg->TxStartBin);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, TxEndBin));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'TxEndBin'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'TxEndBin': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%X\n", adsl_cfg->TxEndBin);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, RxStartBin));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'RxStartBin'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'RxStartBin': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%X\n", adsl_cfg->RxStartBin);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, RxEndBin));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'RxEndBin'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'RxEndBin': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%X\n", adsl_cfg->RxEndBin);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, RxBinAdjust));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'RxBinAdjust'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'RxBinAdjust': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_bin_adjust_options_table,
|
|
adsl_cfg->RxBinAdjust));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, FramingStruct));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'FramingStruct'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'FramingStruct': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_framing_struct_options_table,
|
|
adsl_cfg->FramingStruct));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, ExpandedExchange));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'ExpandedExchange'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'ExpandedExchange': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_exchange_options_table,
|
|
adsl_cfg->ExpandedExchange));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, ClockType));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'ClockType'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'ClockType': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n",
|
|
get_keyword_from_look_up_t_table( adsl_clock_type_options_table,
|
|
adsl_cfg->ClockType));
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(adsl_conftab, offsetof(wan_adsl_conf_t, MaxDownRate));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'MaxDownRate'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'MaxDownRate': %s\n", keyword));
|
|
adsl_global_cfg += keyword;
|
|
adsl_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u\n", adsl_cfg->MaxDownRate);
|
|
adsl_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
adsl_global_cfg += "\n";
|
|
tmp_string += adsl_global_cfg;
|
|
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
CARD_TYPE = S51X
|
|
S514CPU = A
|
|
AUTO_PCISLOT = NO
|
|
PCISLOT = 5
|
|
PCIBUS = 0
|
|
*/
|
|
int conf_file_writer::form_wanpipe_card_location_str(string& wp_card_location_string)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
link_def_t * link_def;
|
|
wandev_conf_t *linkconf;
|
|
|
|
link_def = cfr->link_defs;
|
|
linkconf = cfr->link_defs->linkconf;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_wanpipe_card_location_str()\n"));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "CARD_TYPE = %s\n",
|
|
get_keyword_from_look_up_t_table( card_type_table, cfr->link_defs->linkconf->card_type));
|
|
wp_card_location_string = tmp_buff;
|
|
|
|
switch(cfr->link_defs->linkconf->card_type)
|
|
{
|
|
case WANOPT_S50X:
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "CommPort \t= %s\n",
|
|
get_keyword_from_look_up_t_table( commport_type_options_table,
|
|
linkconf->comm_port));
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "IOPORT\t\t= 0x%X\n", linkconf->ioport);
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "IRQ\t\t= %d\n", linkconf->irq);
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
if(linkconf->maddr != 0){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "MemAddr \t= 0x%lX\n", linkconf->maddr);
|
|
wp_card_location_string += tmp_buff;
|
|
}else{
|
|
//it is auto - do not write anything
|
|
}
|
|
break;
|
|
|
|
case WANOPT_S51X:
|
|
case WANOPT_AFT:
|
|
case WANOPT_ADSL:
|
|
|
|
if(cfr->link_defs->linkconf->card_type != WANOPT_ADSL){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "S514CPU \t= %s\n",
|
|
cfr->link_defs->linkconf->S514_CPU_no);
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "CommPort \t= %s\n",
|
|
get_keyword_from_look_up_t_table( commport_type_options_table,
|
|
cfr->link_defs->linkconf->comm_port));
|
|
wp_card_location_string += tmp_buff;
|
|
}
|
|
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "AUTO_PCISLOT \t= %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
cfr->link_defs->linkconf->auto_hw_detect));
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "PCISLOT \t= %d\n",
|
|
cfr->link_defs->linkconf->PCI_slot_no);
|
|
wp_card_location_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "PCIBUS \t= %d\n",
|
|
cfr->link_defs->linkconf->pci_bus_no);
|
|
wp_card_location_string += tmp_buff;
|
|
break;
|
|
|
|
default:
|
|
ERR_DBG_OUT(("Unsupported 'card_type' (%d) passed for saving to file!!\n",
|
|
cfr->link_defs->linkconf->card_type));
|
|
return NO;
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
//if t1/e1 card
|
|
MEDIA = T1
|
|
LCODE = B8ZS
|
|
FRAME = ESF
|
|
TE_CLOCK = NORMAL
|
|
ACTIVE_CH = ALL
|
|
LBO = 0DB
|
|
*/
|
|
//write stuff needed for cards with an integrated dsu/csu
|
|
int conf_file_writer::form_fe_card_cfg_str(string& te1_cfg_string, sdla_fe_cfg_t* fe_cfg)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
sdla_te_cfg_t* te_cfg = &fe_cfg->cfg.te_cfg;
|
|
sdla_te3_cfg_t* te3_cfg= &fe_cfg->cfg.te3_cfg;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("%s()\n", __FUNCTION__));
|
|
Debug(DBG_CONF_FILE_WRITER, ("fe_cfg->media: 0x%x\n", fe_cfg->media));
|
|
|
|
switch(fe_cfg->media)
|
|
{
|
|
case WAN_MEDIA_T1:
|
|
case WAN_MEDIA_E1:
|
|
case WAN_MEDIA_DS3:
|
|
case WAN_MEDIA_E3:
|
|
case WAN_MEDIA_56K:
|
|
case WAN_MEDIA_FXOFXS:
|
|
case WAN_MEDIA_BRI:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_MEDIA = %s\n",
|
|
get_keyword_from_look_up_t_table( physical_medium_options_table,
|
|
fe_cfg->media));
|
|
te1_cfg_string = tmp_buff;
|
|
break;
|
|
case WAN_MEDIA_SERIAL:
|
|
;//do nothing
|
|
break;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
switch(fe_cfg->media)
|
|
{
|
|
case WAN_MEDIA_T1:
|
|
case WAN_MEDIA_E1:
|
|
case WAN_MEDIA_DS3:
|
|
case WAN_MEDIA_E3:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_LCODE = %s\n",
|
|
get_keyword_from_look_up_t_table( te1_line_code_options_table,
|
|
fe_cfg->lcode));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_FRAME = %s\n",
|
|
get_keyword_from_look_up_t_table( te1_frame_options_table,
|
|
fe_cfg->frame));
|
|
te1_cfg_string += tmp_buff;
|
|
break;
|
|
case WAN_MEDIA_SERIAL:
|
|
;//do nothing
|
|
break;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
switch(fe_cfg->media)
|
|
{
|
|
case WAN_MEDIA_T1:
|
|
case WAN_MEDIA_E1:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_LINE = %d\n", fe_cfg->line_no);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE_CLOCK = %s\n",
|
|
get_keyword_from_look_up_t_table( te1_clock_mode_options_table,
|
|
te_cfg->te_clock));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE_REF_CLOCK = %d\n",
|
|
te_cfg->te_ref_clock);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
#if defined(ZAPTEL_PARSER)
|
|
if(list_element_sangoma_card_ptr != NULL){
|
|
;//do nothing here, when parsing zaptel.conf
|
|
}else{
|
|
#endif
|
|
if(cfr != NULL && cfr->link_defs->linkconf->card_type != WANOPT_AFT){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "ACTIVE_CH = %s\n",
|
|
cfr->link_defs->active_channels_string);
|
|
te1_cfg_string += tmp_buff;
|
|
}
|
|
#if defined(ZAPTEL_PARSER)
|
|
}
|
|
#endif
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE_HIGHIMPEDANCE = %s\n",
|
|
(te_cfg->high_impedance_mode == WANOPT_YES ? "YES" : "NO"));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE_RX_SLEVEL = %i\n", te_cfg->rx_slevel);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
break;
|
|
|
|
case WAN_MEDIA_BRI:
|
|
case WAN_MEDIA_SERIAL:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_LINE = %d\n", fe_cfg->line_no);
|
|
te1_cfg_string += tmp_buff;
|
|
break;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
switch(fe_cfg->media)
|
|
{
|
|
case WAN_MEDIA_T1:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "LBO = %s\n",
|
|
get_keyword_from_look_up_t_table( t1_line_build_out_options_table,
|
|
te_cfg->lbo));
|
|
te1_cfg_string += tmp_buff;
|
|
break;
|
|
|
|
case WAN_MEDIA_E1:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "LBO = %s\n",
|
|
get_keyword_from_look_up_t_table( e1_line_build_out_options_table,
|
|
te_cfg->lbo));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE_SIG_MODE = %s\n",
|
|
get_keyword_from_look_up_t_table( e1_sig_mode_options_table,
|
|
te_cfg->sig_mode));
|
|
te1_cfg_string += tmp_buff;
|
|
break;
|
|
|
|
case WAN_MEDIA_DS3:
|
|
case WAN_MEDIA_E3:
|
|
/*
|
|
TE3_FRACTIONAL = NO # NO/YES+RDEVICE
|
|
TE3_RDEVICE = KENTROX # ADTRAN/DIGITAL-LINK/KENTROX/LARSCOM/VERILINK
|
|
TE3_FCS = 16 # 16(default) / 32
|
|
TE3_RXEQ = NO # NO (default) / YES
|
|
TE3_TAOS = NO # NO (default) / YES
|
|
TE3_LBMODE = NO # NO (default) / YES
|
|
TE3_TXLBO = NO # NO (default) / YES
|
|
*/
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("te3_cfg->clock: %d\n", te3_cfg->clock));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_CLOCK = %s\n",
|
|
get_keyword_from_look_up_t_table( te1_clock_mode_options_table,
|
|
te3_cfg->clock));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_FRACTIONAL = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
te3_cfg->fractional));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): 1\n"));
|
|
|
|
if(te3_cfg->fractional == WANOPT_YES){
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): 2\n"));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_RDEVICE = %s\n",
|
|
get_keyword_from_look_up_t_table( te3_rdevice_type_options_table,
|
|
te3_cfg->rdevice_type));
|
|
|
|
te1_cfg_string += tmp_buff;
|
|
}
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): 3\n"));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_FCS = %d\n",
|
|
te3_cfg->fcs);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): te3_cfg->liu_cfg.rx_equal: %d\n",
|
|
te3_cfg->liu_cfg.rx_equal));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_RXEQ = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
te3_cfg->liu_cfg.rx_equal));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): 4\n"));
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): te3_cfg->liu_cfg.taos: %d\n",
|
|
te3_cfg->liu_cfg.taos));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_TAOS = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
te3_cfg->liu_cfg.taos));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): te3_cfg->liu_cfg.lb_mode: %d\n",
|
|
te3_cfg->liu_cfg.lb_mode));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_LBMODE = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
te3_cfg->liu_cfg.lb_mode));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_fe_card_cfg_str(): te3_cfg->liu_cfg.tx_lbo: %d\n",
|
|
te3_cfg->liu_cfg.rx_equal));
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TE3_TXLBO = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
te3_cfg->liu_cfg.tx_lbo));
|
|
te1_cfg_string += tmp_buff;
|
|
break;
|
|
}
|
|
|
|
switch(fe_cfg->media)
|
|
{
|
|
case WAN_MEDIA_FXOFXS:
|
|
// { "TDMV_LAW", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, tdmv_law), DTYPE_UINT },
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_LAW = %s\n",
|
|
get_keyword_from_look_up_t_table( tdmv_law_options_table,
|
|
fe_cfg->tdmv_law));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
//for backwards compatibility with older files, check TDMV_OPERMODE was read
|
|
//or initiaized when card type was selected
|
|
if(fe_cfg->cfg.remora.opermode_name[0] != 0){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_OPERMODE = %s\n",
|
|
fe_cfg->cfg.remora.opermode_name);
|
|
te1_cfg_string += tmp_buff;
|
|
}
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "RM_BATTTHRESH = %d\n",
|
|
fe_cfg->cfg.remora.battthresh);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "RM_BATTDEBOUNCE = %d\n",
|
|
fe_cfg->cfg.remora.battdebounce);
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_NETWORK_SYNC = %s\n",
|
|
fe_cfg->network_sync == WANOPT_YES ? "YES" : "NO");
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
break;
|
|
|
|
case WAN_MEDIA_BRI:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_LAW = %s\n",
|
|
get_keyword_from_look_up_t_table( tdmv_law_options_table,
|
|
fe_cfg->tdmv_law));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "RM_BRI_CLOCK_MASTER = %s\n",
|
|
(fe_cfg->cfg.bri.clock_mode == WANOPT_YES ? "YES":"NO"));
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_NETWORK_SYNC = %s\n",
|
|
fe_cfg->network_sync == WANOPT_YES ? "YES" : "NO");
|
|
te1_cfg_string += tmp_buff;
|
|
|
|
break;
|
|
|
|
case WAN_MEDIA_SERIAL:
|
|
;//do nothing
|
|
break;
|
|
|
|
default:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "FE_TXTRISTATE = %s\n",
|
|
(fe_cfg->tx_tristate_mode == WANOPT_YES ? "YES" : "NO"));
|
|
te1_cfg_string += tmp_buff;
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
Firmware = /etc/wanpipe/firmware/fr514.sfm
|
|
Interface = V35
|
|
Clocking = Internal
|
|
BaudRate = 1540000
|
|
MTU = 1500
|
|
UDPPORT = 9000
|
|
TTL = 255
|
|
IGNORE_FRONT_END = NO
|
|
*/
|
|
int conf_file_writer::form_wanpipe_card_miscellaneous_options_str(string& misc_opt_string)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
wan_xilinx_conf_t *wan_xilinx_conf;
|
|
wan_tdmv_conf_t *tdmv_conf;
|
|
wandev_conf_t *linkconf;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_wanpipe_card_miscellaneous_options_str()\n"));
|
|
|
|
wan_xilinx_conf = &cfr->link_defs->linkconf->u.aft;
|
|
tdmv_conf = &cfr->link_defs->linkconf->tdmv_conf;
|
|
linkconf = cfr->link_defs->linkconf;
|
|
|
|
switch(cfr->link_defs->linkconf->card_type)
|
|
{
|
|
case WANOPT_S51X:
|
|
case WANOPT_S50X:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "Firmware = %s\n",
|
|
cfr->link_defs->firmware_file_path);
|
|
misc_opt_string = tmp_buff;
|
|
break;
|
|
|
|
case WANOPT_AFT:
|
|
if(is_there_a_lip_atm_if == YES){
|
|
wan_xilinx_conf->data_mux_map = 0x01234567;
|
|
}
|
|
|
|
if(wan_xilinx_conf->data_mux_map){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "DATA_MUX_MAP = 0x%08X\n",
|
|
wan_xilinx_conf->data_mux_map);
|
|
misc_opt_string = tmp_buff;
|
|
}
|
|
break;
|
|
|
|
case WANOPT_ADSL:
|
|
//no firmware file needed
|
|
break;
|
|
}
|
|
|
|
if(cfr->link_defs->linkconf->card_type != WANOPT_ADSL &&
|
|
cfr->link_defs->linkconf->card_type != WANOPT_AFT){
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, electrical_interface),
|
|
serial_interface_type_options_table,
|
|
cfr->link_defs->linkconf->electrical_interface);
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, clocking),
|
|
serial_clock_type_options_table,
|
|
cfr->link_defs->linkconf->clocking);
|
|
|
|
if(cfr->link_defs->linkconf->clocking == WANOPT_INTERNAL &&
|
|
cfr->link_defs->linkconf->bps == 0){
|
|
//zero baud rate not allowed with internal clock, set to default.
|
|
cfr->link_defs->linkconf->bps = 9600;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "BaudRate = %d\n", cfr->link_defs->linkconf->bps);
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
|
|
if(is_there_a_lip_atm_if == YES){
|
|
cfr->link_defs->linkconf->mtu = LIP_ATM_MTU_MRU;
|
|
}
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "MTU = %d\n",
|
|
cfr->link_defs->linkconf->mtu);
|
|
misc_opt_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "UDPPORT = %d\n",
|
|
cfr->link_defs->linkconf->udp_port);
|
|
misc_opt_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TTL\t = %d\n",
|
|
cfr->link_defs->linkconf->ttl);
|
|
misc_opt_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "IGNORE_FRONT_END = %s\n",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
cfr->link_defs->linkconf->ignore_front_end_status));
|
|
misc_opt_string += tmp_buff;
|
|
|
|
if(cfr->link_defs->linkconf->card_type != WANOPT_ADSL &&
|
|
cfr->link_defs->linkconf->card_type != WANOPT_S50X &&
|
|
cfr->link_defs->linkconf->card_type != WANOPT_S51X &&
|
|
cfr->link_defs->card_version != A200_ADPTR_ANALOG &&
|
|
cfr->link_defs->card_version != AFT_ADPTR_ISDN &&
|
|
is_there_a_voice_if == YES){
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_SPAN\t= %u\n",
|
|
tdmv_conf->span_no);
|
|
misc_opt_string += tmp_buff;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_DCHAN\t= %u\n",
|
|
tdmv_conf->dchan);
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
|
|
if(cfr->link_defs->linkconf->card_type == WANOPT_AFT &&
|
|
cfr->link_defs->card_version == A200_ADPTR_ANALOG){
|
|
//if(is_there_a_voice_if == YES){
|
|
//the analog card is AWAYS in some "SPAN" !!!
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_SPAN\t= %u\n",
|
|
tdmv_conf->span_no);
|
|
misc_opt_string += tmp_buff;
|
|
//}
|
|
}
|
|
|
|
|
|
if(cfr->link_defs->linkconf->card_type == WANOPT_AFT &&
|
|
cfr->link_defs->card_version == AFT_ADPTR_ISDN){
|
|
if(is_there_a_voice_if == YES){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_SPAN\t= %u\n",
|
|
tdmv_conf->span_no);
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
}
|
|
|
|
if(cfr->link_defs->linkconf->card_type == WANOPT_AFT &&
|
|
(cfr->link_defs->card_version == A104_ADPTR_4TE1 ||
|
|
cfr->link_defs->card_version == A101_ADPTR_1TE1 ||
|
|
cfr->link_defs->card_version == A200_ADPTR_ANALOG ||
|
|
cfr->link_defs->card_version == AFT_ADPTR_ISDN ||
|
|
cfr->link_defs->card_version == AFT_ADPTR_2SERIAL_V35X21)){
|
|
/*
|
|
//moved to per-interface section
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_HWEC\t= %s\n",
|
|
get_keyword_from_look_up_t_table(yes_no_options_table,
|
|
wan_xilinx_conf->tdmv_hwec));
|
|
misc_opt_string += tmp_buff;
|
|
|
|
//not used anymore, "ACTIVE_CH" for the group is used instead
|
|
if(wan_xilinx_conf->tdmv_hwec == WANOPT_YES){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_HWEC_MAP\t= %s\n",
|
|
cfr->link_defs->active_channels_string);
|
|
//wan_xilinx_conf->tdmv_hwec_map);
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
*/
|
|
}
|
|
|
|
if(cfr->link_defs->card_version != AFT_ADPTR_2SERIAL_V35X21){
|
|
if(cfr->link_defs->linkconf->card_type == WANOPT_AFT){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_HW_DTMF\t= %s\n",
|
|
get_keyword_from_look_up_t_table(yes_no_options_table,
|
|
tdmv_conf->hw_dtmf));
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
}
|
|
|
|
if(cfr->link_defs->card_version == AFT_ADPTR_2SERIAL_V35X21){
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, connection),
|
|
connection_type_options_table,
|
|
cfr->link_defs->linkconf->connection);
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, line_coding),
|
|
data_encoding_options_table,
|
|
cfr->link_defs->linkconf->line_coding);
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, line_idle),
|
|
line_idle_options_table,
|
|
cfr->link_defs->linkconf->line_idle);
|
|
|
|
misc_opt_string += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, clocking),
|
|
serial_clock_type_options_table,
|
|
cfr->link_defs->linkconf->clocking);
|
|
|
|
if( cfr->link_defs->linkconf->clocking == WANOPT_INTERNAL &&
|
|
cfr->link_defs->linkconf->bps == 0){
|
|
//zero baud rate not allowed with internal clock, set to default.
|
|
cfr->link_defs->linkconf->bps = 9600;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "BaudRate = %d\n", cfr->link_defs->linkconf->bps);
|
|
misc_opt_string += tmp_buff;
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
char* conf_file_writer::form_keyword_and_value_str( key_word_t* conftab,
|
|
int offset_in_structure,
|
|
look_up_t* table,
|
|
int search_value)
|
|
{
|
|
string tmp_str;
|
|
|
|
tmp_str = "";
|
|
|
|
tmp_str += get_keyword_from_key_word_t_table( conftab, offset_in_structure);
|
|
tmp_str += "\t= ";
|
|
|
|
tmp_str += get_keyword_from_look_up_t_table( table, search_value);
|
|
tmp_str += "\n";
|
|
|
|
return (char*)tmp_str.c_str();
|
|
}
|
|
|
|
/*
|
|
//For Frame Relay - global cfg
|
|
NUMBER_OF_DLCI = 2
|
|
Station = CPE
|
|
Signalling = ANSI
|
|
T391 = 10
|
|
T392 = 16
|
|
N391 = 6
|
|
N392 = 3
|
|
N393 = 4
|
|
FR_ISSUE_FS = YES
|
|
*/
|
|
int conf_file_writer::form_frame_relay_global_configuration_string( wan_fr_conf_t* fr_cfg,
|
|
string& fr_global_cfg)
|
|
{
|
|
char* keyword;
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_frame_relay_global_configuration_string()\n"));
|
|
|
|
fr_global_cfg = "";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, dlci_num));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'dlci_num'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'dlci_num': %s\n", keyword));
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->dlci_num); //cfr->obj_list->get_size());
|
|
fr_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_look_up_t_table( frame_relay_station_type_options_table,
|
|
fr_cfg->station);
|
|
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find value keyword for 'station' (0x%x)!\n",fr_cfg->station));
|
|
return NO;
|
|
}
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "Station\t\t= %s\n", keyword);
|
|
fr_global_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, signalling));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'signalling'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'signalling': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t= ";
|
|
|
|
keyword = get_keyword_from_look_up_t_table( frame_relay_in_channel_signalling_options_table,
|
|
fr_cfg->signalling);
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find value keyword for 'fr_cfg->signalling' (0x%x)!\n",
|
|
fr_cfg->signalling));
|
|
return NO;
|
|
}
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\n";
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, t391));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'T391'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'T391': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->t391);
|
|
fr_global_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, t392));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'T392'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'T392': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->t392);
|
|
fr_global_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, n391));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'N391'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'N391': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->n391);
|
|
fr_global_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, n392));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'N392'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'N392': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->n392);
|
|
fr_global_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, n393));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'N393'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'N393': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", fr_cfg->n393);
|
|
fr_global_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(fr_conftab,
|
|
offsetof(wan_fr_conf_t, issue_fs_on_startup));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'issue_fs_on_startup'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'issue_fs_on_startup': %s\n", keyword));
|
|
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\t= ";
|
|
|
|
keyword = get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
fr_cfg->issue_fs_on_startup);
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find value keyword for 'fr_cfg->issue_fs_on_startup' (0x%x)!\n",
|
|
fr_cfg->issue_fs_on_startup));
|
|
return NO;
|
|
}
|
|
fr_global_cfg += keyword;
|
|
fr_global_cfg += "\n";
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_ppp_global_configuration_string(wan_sppp_if_conf_t* ppp_cfg,
|
|
string& global_protocol_cfg)
|
|
{
|
|
global_protocol_cfg = "";
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("ppp_cfg->dynamic_ip: %d\n", ppp_cfg->dynamic_ip));
|
|
|
|
global_protocol_cfg += form_keyword_and_value_str(
|
|
sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, dynamic_ip),
|
|
ppp_ip_mode_options_table,
|
|
ppp_cfg->dynamic_ip
|
|
);
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("global_protocol_cfg': %s\n", global_protocol_cfg.c_str()));
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_chdlc_global_configuration_string(wan_sppp_if_conf_t *chdlc_cfg,
|
|
string& global_protocol_cfg)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
global_protocol_cfg = "";
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("%s()\n", __FUNCTION__));
|
|
|
|
global_protocol_cfg += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, sppp_keepalive_timer));
|
|
global_protocol_cfg += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", chdlc_cfg->sppp_keepalive_timer);
|
|
global_protocol_cfg += tmp_buff;
|
|
|
|
global_protocol_cfg += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, keepalive_err_margin));
|
|
global_protocol_cfg += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", chdlc_cfg->keepalive_err_margin);
|
|
global_protocol_cfg += tmp_buff;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("global_protocol_cfg': %s\n", global_protocol_cfg.c_str()));
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
Receive_Only = NO
|
|
Connection = Permanent
|
|
LineCoding = NRZ
|
|
LineIdle = Flag
|
|
*/
|
|
/*
|
|
old version
|
|
int conf_file_writer::form_chdlc_global_configuration_string( wan_chdlc_conf_t* chdlc_cfg,
|
|
string& global_protocol_cfg)
|
|
{
|
|
global_protocol_cfg = "";
|
|
|
|
global_protocol_cfg += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, receive_only),
|
|
yes_no_options_table,
|
|
cfr->link_defs->linkconf->receive_only);
|
|
|
|
global_protocol_cfg += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, connection),
|
|
connection_type_options_table,
|
|
cfr->link_defs->linkconf->connection);
|
|
|
|
global_protocol_cfg += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, line_coding),
|
|
data_encoding_options_table,
|
|
cfr->link_defs->linkconf->line_coding);
|
|
|
|
global_protocol_cfg += form_keyword_and_value_str( common_conftab,
|
|
offsetof(wandev_conf_t, line_idle),
|
|
line_idle_options_table,
|
|
cfr->link_defs->linkconf->line_idle);
|
|
|
|
return YES;
|
|
}
|
|
*/
|
|
|
|
int conf_file_writer::form_lapb_global_configuration_string(wan_lapb_if_conf_t *lapb_cfg,
|
|
string& global_protocol_cfg)
|
|
{
|
|
char* keyword;
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
global_protocol_cfg = "";
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
global_protocol_cfg += form_keyword_and_value_str(
|
|
lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, station),
|
|
lapb_station_type_options_table,
|
|
lapb_cfg->station
|
|
);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, t1));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 't1'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 't1': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->t1);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, t2));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 't2'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 't2': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->t2);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, n2));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'n2'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'n2': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->n2);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, t3));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 't3'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 't3': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->t3);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, t4));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 't4'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 't4': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->t4);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, mode));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'mode'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'mode': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->mode);
|
|
global_protocol_cfg += tmp_buff;
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//window
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, window));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'window'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'window': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->window);
|
|
global_protocol_cfg += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//mtu
|
|
keyword = get_keyword_from_key_word_t_table(lapb_annexg_conftab,
|
|
offsetof(wan_lapb_if_conf_t, mtu));
|
|
if(keyword == NULL){
|
|
ERR_DBG_OUT(("failed to find keyword for 'mtu'!\n"));
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("keyword for 'mtu': %s\n", keyword));
|
|
|
|
global_protocol_cfg += keyword;
|
|
global_protocol_cfg += "\t= ";
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", lapb_cfg->mtu);
|
|
global_protocol_cfg += tmp_buff;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("global_protocol_cfg': %s\n", global_protocol_cfg.c_str()));
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_aft_global_configuration_string( wan_xilinx_conf_t* xilinx_conf,
|
|
string& global_protocol_cfg)
|
|
{
|
|
//nothing has to be done.
|
|
|
|
global_protocol_cfg = "";
|
|
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_per_interface_str( string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def,
|
|
int lip_layer_flag)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
string tmp_str;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_per_interface_str()\n"));
|
|
|
|
chan_def_t* chandef = &list_el_chan_def->data;
|
|
wanif_conf_t* chanconf = chandef->chanconf;
|
|
int config_id = chanconf->config_id;
|
|
int interface_type;
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "\n[%s]\n", chandef->name);
|
|
/*
|
|
//this is very useful for debugging:
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "\n[%s]:config_id: %d, usedby: %s\n",
|
|
chandef->name,
|
|
config_id,
|
|
get_used_by_string(chandef->usedby));
|
|
*/
|
|
wp_interface += tmp_buff;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("config_id: %d (%s)\n", config_id,
|
|
get_protocol_string(config_id)));
|
|
|
|
/*
|
|
if(chandef->usedby == STACK){
|
|
interface_type = WANCONFIG_AFT;
|
|
}else{
|
|
interface_type = config_id;
|
|
}
|
|
*/
|
|
|
|
// interface_type = config_id;
|
|
//
|
|
/*
|
|
if(chandef->usedby == STACK){
|
|
if(config_id == protocol){
|
|
interface_type = WANCONFIG_AFT;
|
|
}else{
|
|
interface_type = config_id;
|
|
}
|
|
}else{
|
|
*/
|
|
interface_type = config_id;
|
|
//}
|
|
|
|
if(interface_type == PROTOCOL_TDM_VOICE || interface_type == PROTOCOL_TDM_VOICE_API){
|
|
interface_type = WANCONFIG_HDLC;
|
|
}
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("interface_type: %d\n", interface_type));
|
|
|
|
switch(interface_type)//(config_id)
|
|
{
|
|
case WANCONFIG_MFR:
|
|
if(form_frame_relay_per_interface_str(tmp_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case WANCONFIG_LIP_ATM:
|
|
if(form_atm_per_interface_str(tmp_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case WANCONFIG_TTY:
|
|
case WANCONFIG_EDUKIT:
|
|
//empty interface string, so don't do anything
|
|
break;
|
|
|
|
case WANCONFIG_MPPP:
|
|
case WANCONFIG_LAPB:
|
|
/* everything done in the profile section. do nothing here.*/
|
|
break;
|
|
|
|
case WANCONFIG_MPCHDLC:
|
|
/* everything done in the profile section. do nothing here.*/
|
|
/*
|
|
if(form_chdlc_per_interface_str(tmp_str, list_el_chan_def, chanconf) == NO){
|
|
return NO;
|
|
}
|
|
*/
|
|
break;
|
|
|
|
case WANCONFIG_ADSL:
|
|
//depending on Encapsulation ( and sub_config_id )
|
|
if( cfr->link_defs->sub_config_id == WANCONFIG_MPPP){
|
|
if(form_ppp_per_interface_str(tmp_str, chanconf) == NO){
|
|
return NO;
|
|
}
|
|
}
|
|
|
|
if(form_hardware_interface_str(tmp_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case WANCONFIG_HDLC:
|
|
//used for runnin HDLC Streamin on S-cards
|
|
case WANCONFIG_AFT:
|
|
if(form_hardware_interface_str(tmp_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
ERR_DBG_OUT(("Unsupported 'interface_type' (%d) passed for saving to file!!\n",
|
|
interface_type));
|
|
return NO;
|
|
}
|
|
/*
|
|
if(interface_type == WANCONFIG_HDLC || interface_type == WANCONFIG_AFT){
|
|
if(form_hardware_interface_str(tmp_str, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
}
|
|
*/
|
|
wp_interface += tmp_str;
|
|
|
|
if(chandef->usedby != STACK){
|
|
form_common_per_interface_str( wp_interface, list_el_chan_def);
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
[wp2fr16]
|
|
CIR = 64
|
|
BC = 64
|
|
BE = 0
|
|
INARP = YES
|
|
INARPINTERVAL = 10
|
|
INARP_RX = YES
|
|
*/
|
|
int conf_file_writer::form_frame_relay_per_interface_str( string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, cir));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->cir);
|
|
wp_interface += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, bc));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->bc);
|
|
wp_interface += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, be));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->be);
|
|
wp_interface += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, inarp),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->inarp);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, inarp_interval));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->inarp_interval);
|
|
wp_interface += tmp_buff;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, inarp_rx),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->inarp_rx);
|
|
return YES;
|
|
}
|
|
|
|
int conf_file_writer::form_atm_per_interface_str( string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
wan_atm_conf_if_t *atm_if_cfg = (wan_atm_conf_if_t*)&list_el_chan_def->data.chanconf->u;
|
|
|
|
wp_interface += "VPI";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->vpi);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "VCI";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->vci);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "ENCAPMODE";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n", get_keyword_from_look_up_t_table(
|
|
adsl_encapsulation_options_table,
|
|
|
|
atm_if_cfg->encap_mode));
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "\n";
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += "OAM_LOOPBACK";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n", get_keyword_from_look_up_t_table(
|
|
yes_no_options_table,
|
|
atm_if_cfg->atm_oam_loopback));
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "OAM_LOOPBACK_INT";
|
|
wp_interface += "= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->atm_oam_loopback_intr);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "\n";
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += "OAM_CC_CHECK";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n", get_keyword_from_look_up_t_table(
|
|
yes_no_options_table,
|
|
atm_if_cfg->atm_oam_continuity));
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "OAM_CC_CHECK_INT";
|
|
wp_interface += "= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->atm_oam_continuity_intr);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "\n";
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += "ATMARP";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s\n", get_keyword_from_look_up_t_table(
|
|
yes_no_options_table,
|
|
atm_if_cfg->atm_arp));
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "ATMARP_INT";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->atm_arp_intr);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += "\n";
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += "MTU";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", atm_if_cfg->mtu);
|
|
wp_interface += tmp_buff;
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
MULTICAST = NO
|
|
IPX = YES
|
|
NETWORK = 0xABCDEFAB
|
|
TRUE_ENCODING_TYPE = NO
|
|
DYN_INTR_CFG = NO
|
|
*/
|
|
int conf_file_writer::form_common_per_interface_str( string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//ipx
|
|
if(list_el_chan_def->data.chanconf->config_id == WANCONFIG_MFR ||
|
|
list_el_chan_def->data.chanconf->config_id == WANCONFIG_MPPP){
|
|
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, enable_IPX),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->enable_IPX);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
if(list_el_chan_def->data.chanconf->enable_IPX == WANOPT_YES){
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, network_number));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%08X\n", list_el_chan_def->data.chanconf->network_number);
|
|
wp_interface += tmp_buff;
|
|
}
|
|
}
|
|
|
|
switch(list_el_chan_def->data.usedby)
|
|
{
|
|
case WANPIPE:
|
|
case BRIDGE_NODE:
|
|
//multicast
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, mc),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->mc);
|
|
|
|
|
|
//DYN_INTR_CFG
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, if_down),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->if_down);
|
|
|
|
//TRUE_ENCODING_TYPE
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, true_if_encoding),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->true_if_encoding);
|
|
|
|
//GATEWAY
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, gateway),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->gateway);
|
|
break;
|
|
}
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
PAP = YES
|
|
CHAP = NO
|
|
USERID = my_userid
|
|
PASSWD = my_password
|
|
SYSNAME = my_system_name
|
|
*/
|
|
int conf_file_writer::form_ppp_per_interface_str( string& wp_interface,
|
|
wanif_conf_t* chanconf)
|
|
{
|
|
char authenticate = NO;
|
|
|
|
if(chanconf->u.ppp.pap == WANOPT_YES){
|
|
authenticate = YES;
|
|
}
|
|
|
|
if(chanconf->u.ppp.chap == WANOPT_YES){
|
|
authenticate = YES;
|
|
}
|
|
|
|
wp_interface += form_keyword_and_value_str( sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, pap),
|
|
yes_no_options_table,
|
|
chanconf->u.ppp.pap);
|
|
|
|
wp_interface += form_keyword_and_value_str( sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, chap),
|
|
yes_no_options_table,
|
|
chanconf->u.ppp.chap);
|
|
|
|
if(authenticate == YES){
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, userid));
|
|
wp_interface += "\t= ";
|
|
wp_interface += (char*)chanconf->u.ppp.userid;
|
|
wp_interface += "\n";
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, passwd));
|
|
wp_interface += "\t= ";
|
|
wp_interface += (char*)chanconf->u.ppp.passwd;
|
|
wp_interface += "\n";
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, sysname));
|
|
wp_interface += "\t= ";
|
|
wp_interface += (char*)chanconf->u.ppp.sysname;
|
|
wp_interface += "\n";
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
/*
|
|
IGNORE_DCD = NO
|
|
IGNORE_CTS = NO
|
|
IGNORE_KEEPALIVE = NO
|
|
HDLC_STREAMING = NO
|
|
KEEPALIVE_TX_TIMER = 10000
|
|
KEEPALIVE_RX_TIMER = 11000
|
|
KEEPALIVE_ERR_MARGIN = 5
|
|
SLARP_TIMER = 0
|
|
===========================
|
|
IGNORE_DCD = NO
|
|
IGNORE_CTS = NO
|
|
IGNORE_KEEPALIVE = NO
|
|
HDLC_STREAMING = NO
|
|
KEEPALIVE_TX_TIMER = 10000
|
|
KEEPALIVE_RX_TIMER = 11000
|
|
KEEPALIVE_ERR_MARGIN = 5
|
|
SLARP_TIMER = 1000
|
|
*/
|
|
/*
|
|
Note: PPP and CHDLC using common structures
|
|
*/
|
|
int conf_file_writer::form_chdlc_per_interface_str(string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def,
|
|
wanif_conf_t* chanconf)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, ignore_keepalive),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->ignore_keepalive);
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, sppp_keepalive_timer));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", chanconf->u.ppp.sppp_keepalive_timer);
|
|
wp_interface += tmp_buff;
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(sppp_conftab,
|
|
offsetof(wan_sppp_if_conf_t, keepalive_err_margin));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", chanconf->u.ppp.keepalive_err_margin);
|
|
wp_interface += tmp_buff;
|
|
|
|
return YES;
|
|
}
|
|
|
|
#if 0
|
|
int conf_file_writer::form_chdlc_per_interface_str(string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
/*
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, ignore_dcd),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->ignore_dcd);
|
|
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, ignore_cts),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->ignore_cts);
|
|
*/
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, ignore_keepalive),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->ignore_keepalive);
|
|
/*
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//must be always NO
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, hdlc_streaming),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->hdlc_streaming);
|
|
*/
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, keepalive_tx_tmr));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->keepalive_tx_tmr);
|
|
wp_interface += tmp_buff;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, keepalive_rx_tmr));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->keepalive_rx_tmr);
|
|
wp_interface += tmp_buff;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, keepalive_err_margin));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->keepalive_err_margin);
|
|
wp_interface += tmp_buff;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, slarp_timer));
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%d\n", list_el_chan_def->data.chanconf->slarp_timer);
|
|
wp_interface += tmp_buff;
|
|
|
|
return YES;
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
ACTIVE_CH = 1-4
|
|
PROTOCOL = MP_FR
|
|
IGNORE_DCD = NO
|
|
IGNORE_CTS = NO
|
|
HDLC_STREAMING = YES
|
|
*/
|
|
int conf_file_writer::form_hardware_interface_str(string& wp_interface,
|
|
list_element_chan_def* list_el_chan_def)
|
|
{
|
|
//conf_file_reader* tmp_cfr = (conf_file_reader*)list_el_chan_def->conf_file_reader;
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
chan_def_t* chandef = &list_el_chan_def->data;
|
|
|
|
if(list_el_chan_def->data.chanconf->protocol == WANCONFIG_LIP_ATM){
|
|
wp_interface += "PROTOCOL",
|
|
wp_interface += "\t= ";
|
|
wp_interface += get_keyword_from_look_up_t_table( protocol_options_table,
|
|
list_el_chan_def->data.chanconf->protocol);
|
|
wp_interface += "\n";
|
|
|
|
}
|
|
|
|
if(cfr->link_defs->linkconf->card_type != WANOPT_ADSL &&
|
|
chandef->usedby != TDM_VOICE &&
|
|
chandef->usedby != TDM_API &&
|
|
chandef->usedby != TDM_VOICE_API){
|
|
|
|
wp_interface += form_keyword_and_value_str( chan_conftab,
|
|
offsetof(wanif_conf_t, hdlc_streaming),
|
|
yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->hdlc_streaming);
|
|
}
|
|
|
|
//AFT only options:
|
|
if(cfr->link_defs->linkconf->card_type != WANOPT_S51X &&
|
|
cfr->link_defs->linkconf->card_type != WANOPT_S50X &&
|
|
cfr->link_defs->linkconf->card_type != WANOPT_ADSL ){
|
|
|
|
wp_interface += get_keyword_from_key_word_t_table(chan_conftab,
|
|
offsetof(wanif_conf_t, active_ch));
|
|
wp_interface += "\t= ";
|
|
wp_interface += list_el_chan_def->data.active_channels_string;
|
|
wp_interface += "\n";
|
|
|
|
if(chandef->usedby != TDM_VOICE && chandef->usedby != TDM_API && chandef->usedby != TDM_VOICE_API){
|
|
|
|
if(list_el_chan_def->data.chanconf->hdlc_streaming == WANOPT_NO){
|
|
wp_interface += "IDLE_FLAG",
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "0x%02X", list_el_chan_def->data.chanconf->u.aft.idle_flag);
|
|
wp_interface += tmp_buff;
|
|
wp_interface += "\n";
|
|
}
|
|
|
|
if(list_el_chan_def->data.chanconf->protocol == WANCONFIG_LIP_ATM){
|
|
list_el_chan_def->data.chanconf->u.aft.mtu = LIP_ATM_MTU_MRU;
|
|
list_el_chan_def->data.chanconf->u.aft.mru = LIP_ATM_MTU_MRU;
|
|
}
|
|
|
|
if (list_el_chan_def->data.chanconf->u.aft.mtu != 1500) {
|
|
wp_interface += "MTU";
|
|
wp_interface += "\t\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u", list_el_chan_def->data.chanconf->u.aft.mtu);
|
|
wp_interface += tmp_buff;
|
|
wp_interface += "\n";
|
|
}
|
|
|
|
if (list_el_chan_def->data.chanconf->u.aft.mru != 1500) {
|
|
wp_interface += "MRU";
|
|
wp_interface += "\t\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%u", list_el_chan_def->data.chanconf->u.aft.mru);
|
|
wp_interface += tmp_buff;
|
|
wp_interface += "\n";
|
|
}
|
|
|
|
if( cfr->link_defs->card_version != A200_ADPTR_ANALOG &&
|
|
cfr->link_defs->card_version != AFT_ADPTR_2SERIAL_V35X21){
|
|
wp_interface += "DATA_MUX";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s",
|
|
get_keyword_from_look_up_t_table(yes_no_options_table,
|
|
list_el_chan_def->data.chanconf->u.aft.data_mux));
|
|
wp_interface += tmp_buff;
|
|
wp_interface += "\n";
|
|
}
|
|
}
|
|
|
|
if(chandef->usedby == TDM_VOICE || chandef->usedby == TDM_VOICE_API){
|
|
|
|
wp_interface += "TDMV_ECHO_OFF";
|
|
wp_interface += "\t= ";
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "%s",
|
|
get_keyword_from_look_up_t_table( yes_no_options_table,
|
|
chandef->chanconf->tdmv.tdmv_echo_off));
|
|
wp_interface += tmp_buff;
|
|
wp_interface += "\n";
|
|
}
|
|
|
|
if(cfr->link_defs->card_version != AFT_ADPTR_2SERIAL_V35X21){
|
|
//YATE is running in API mode, and may need HWEC, make it possible.
|
|
if( chandef->usedby == TDM_VOICE || chandef->usedby == TDM_API ||
|
|
chandef->usedby == API || chandef->usedby == TDM_VOICE_API){
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_HWEC\t= %s\n",
|
|
get_keyword_from_look_up_t_table(yes_no_options_table,
|
|
chandef->chanconf->hwec.enable)); //chandef->chanconf->xoff_char));
|
|
wp_interface += tmp_buff;
|
|
/*
|
|
if(chandef->hwec_flag == WANOPT_YES){
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "TDMV_HWEC_MAP\t= %s\n",
|
|
chandef->active_hwec_channels_string);
|
|
wp_interface += tmp_buff;
|
|
}
|
|
*/
|
|
}
|
|
}
|
|
}else{
|
|
/*
|
|
//HDLC streamin runs on CHDLC firmware
|
|
if(form_chdlc_per_interface_str(wp_interface, list_el_chan_def) == NO){
|
|
return NO;
|
|
}
|
|
*/
|
|
}
|
|
|
|
return YES;
|
|
}
|
|
|
|
char* conf_file_writer::get_aft_lip_layer_protocol(int protocol)
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("get_aft_lip_layer_protocol(): protocol: %d\n",
|
|
protocol));
|
|
|
|
switch(protocol)
|
|
{
|
|
case WANCONFIG_MFR:
|
|
return "fr";
|
|
|
|
case WANCONFIG_TTY:
|
|
return "tty";
|
|
|
|
case WANCONFIG_MPPP:
|
|
return "ppp";
|
|
|
|
case WANCONFIG_MPCHDLC:
|
|
return "chdlc";
|
|
|
|
case WANCONFIG_LAPB:
|
|
return "lip_lapb";
|
|
|
|
case WANCONFIG_LIP_ATM:
|
|
return "lip_atm";
|
|
|
|
default:
|
|
ERR_DBG_OUT(("Unsupported LIP protocol (%d) !\n", protocol));
|
|
return "unknown";
|
|
}
|
|
}
|
|
|
|
int conf_file_writer::form_profile_str(string& profile_str,
|
|
list_element_chan_def* parent_list_el_chan_def)
|
|
{
|
|
char tmp_buff[MAX_PATH_LENGTH];
|
|
string global_protocol_cfg = "";
|
|
string tmp_str = "";
|
|
|
|
wan_fr_conf_t* fr_cfg;
|
|
wan_sppp_if_conf_t *ppp_cfg, *chdlc_cfg;
|
|
//wan_chdlc_conf_t* chdlc_cfg;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("form_profile_str(): name: %s\n",
|
|
parent_list_el_chan_def->data.name));
|
|
|
|
//this function should be called only for 'STACK' interfaces
|
|
objects_list* obj_list = (objects_list*)parent_list_el_chan_def->next_objects_list;
|
|
if(obj_list == NULL){
|
|
ERR_DBG_OUT(("Invalid 'obj_list' pointer in 'STACK'!!\n"));
|
|
return NO;
|
|
}
|
|
|
|
//profile is the same for all interfaces, so just use the 1-st one
|
|
list_element_chan_def* child_list_el_chan_def = (list_element_chan_def*)obj_list->get_first();
|
|
if(child_list_el_chan_def == NULL){
|
|
ERR_DBG_OUT(("Invalid 'child_list_el_chan_def' pointer in 'STACK'!!\n"));
|
|
return NO;
|
|
}
|
|
|
|
chan_def_t* chandef = &child_list_el_chan_def->data;
|
|
wanif_conf_t* chanconf = chandef->chanconf;
|
|
int config_id = chanconf->config_id;
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("config_id: %d (%s)\n", config_id,
|
|
get_protocol_string(config_id)));
|
|
|
|
//FIXME: is used at all??
|
|
//for TTY the '.conf' file is inconsistent again!! because 'PROTOCOL=NONE'
|
|
//instead of for example, 'MP_TTY'. So, config_id stays set to 'WANCONFIG_AFT' or
|
|
//'WANCONFIG_ADSL'. And this is invalid.
|
|
if(config_id == WANCONFIG_AFT || config_id == WANCONFIG_ADSL){
|
|
config_id = WANCONFIG_TTY;
|
|
}
|
|
|
|
snprintf(tmp_buff, MAX_PATH_LENGTH, "\n[%s.%s]\n",
|
|
parent_list_el_chan_def->data.name ,
|
|
get_aft_lip_layer_protocol(config_id));
|
|
profile_str += tmp_buff;
|
|
|
|
|
|
//the only protocol which has consistent '.conf' file is MFR.
|
|
//all others are 'special cases'.
|
|
switch(config_id)
|
|
{
|
|
case WANCONFIG_MFR:
|
|
fr_cfg = &chanconf->u.fr;
|
|
if(form_frame_relay_global_configuration_string( fr_cfg, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case WANCONFIG_TTY:
|
|
//case WANCONFIG_AFT: //for TTY the '.conf' file is inconsistent again!! because 'PROTOCOL=NONE'
|
|
//instead of for example, 'MP_TTY'. So config_id stays set to 'WANCONFIG_AFT'.
|
|
// all protocol configuration is in 'interface' section
|
|
// NO protocol global configuration -> profile is empty -> don't have to do anything here
|
|
/*
|
|
if(form_frame_relay_global_configuration_string( fr_cfg, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
*/
|
|
break;
|
|
|
|
case WANCONFIG_MPPP:
|
|
ppp_cfg = &chanconf->u.ppp;
|
|
if(form_ppp_global_configuration_string(ppp_cfg, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
if(form_ppp_per_interface_str(tmp_str, chanconf) == NO){
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("%s(): %d\n", __FUNCTION__, __LINE__));
|
|
global_protocol_cfg += tmp_str;
|
|
break;
|
|
|
|
case WANCONFIG_LAPB:
|
|
//configuration is in 'profile' only, no per-interface cfg
|
|
if(form_lapb_global_configuration_string(&chanconf->u.lapb, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
break;
|
|
|
|
case WANCONFIG_MPCHDLC:
|
|
//chdlc_cfg = &tmp_cfr->link_defs->linkconf->u.chdlc;
|
|
// all protocol configuration is in 'interface' section
|
|
// NO protocol global configuration -> profile is empty -> don't have to do anything here
|
|
/*
|
|
if(form_chdlc_global_configuration_string(chdlc_cfg, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
*/
|
|
chdlc_cfg = &chanconf->u.ppp;
|
|
if(form_chdlc_global_configuration_string(chdlc_cfg, global_protocol_cfg) == NO){
|
|
return NO;
|
|
}
|
|
Debug(DBG_CONF_FILE_WRITER, ("%s(): %d\n", __FUNCTION__, __LINE__));
|
|
global_protocol_cfg += tmp_str;
|
|
break;
|
|
|
|
case WANCONFIG_LIP_ATM:
|
|
;//do nothing - profile is empty
|
|
break;
|
|
|
|
default:
|
|
//profile_str += "unsupprted profile!";
|
|
ERR_DBG_OUT(("Invalid config_id %d (%s) for Profile Section!\n",
|
|
config_id, get_protocol_string(config_id)));
|
|
return NO;
|
|
}//switch()
|
|
|
|
profile_str += global_protocol_cfg;
|
|
|
|
return YES;
|
|
}
|
|
|
|
#if defined(ZAPTEL_PARSER)
|
|
int conf_file_writer::write_wanpipe_zap_file(int wanpipe_number)
|
|
{
|
|
Debug(DBG_CONF_FILE_WRITER, ("%s()\n", __FUNCTION__));
|
|
string card_str;
|
|
|
|
if(list_element_sangoma_card_ptr == NULL){
|
|
ERR_DBG_OUT(("%s(): Invalid 'list_element_sangoma_card_ptr'!\n", __FUNCTION__));
|
|
return 1;
|
|
}
|
|
|
|
//form full path to the conf file we want to write to
|
|
full_file_path.sprintf("%swanpipe%d.conf", wanpipe_cfg_dir, wanpipe_number);
|
|
|
|
if(list_element_sangoma_card_ptr->card_version == A200_ADPTR_ANALOG){
|
|
card_str.sprintf(
|
|
"#================================================\n\
|
|
# WANPIPE%d Configuration File\n\
|
|
#================================================\n\
|
|
#\n\
|
|
# Date: %s\
|
|
#\n\
|
|
# Note: This file was generated automatically\n\
|
|
# by /usr/sbin/%s program.\n\
|
|
#\n\
|
|
# If you want to edit this file, it is\n\
|
|
# recommended that you use wancfg program\n\
|
|
# to do so.\n\
|
|
#================================================\n\
|
|
# Sangoma Technologies Inc.\n\
|
|
#================================================\n\
|
|
\n\
|
|
[devices]\n\
|
|
wanpipe%d = WAN_AFT_ANALOG, Comment\n\
|
|
\n\
|
|
[interfaces]\n\
|
|
w%dg1 = wanpipe%d, , TDM_VOICE, Comment\n\
|
|
\n\
|
|
[wanpipe%d]\n\
|
|
CARD_TYPE = AFT\n\
|
|
S514CPU = A\n\
|
|
CommPort = PRI\n\
|
|
AUTO_PCISLOT = NO\n\
|
|
PCIBUS = %d\n\
|
|
PCISLOT = %d\n\
|
|
FE_MEDIA = FXO/FXS\n\
|
|
TDMV_LAW = %s\n\
|
|
TDMV_OPERMODE = FCC\n\
|
|
MTU = 1500\n\
|
|
UDPPORT = 9000\n\
|
|
TTL = 255\n\
|
|
IGNORE_FRONT_END = NO\n\
|
|
TDMV_SPAN = %d\n\
|
|
\n\
|
|
[w%dg1]\n\
|
|
ACTIVE_CH = ALL\n\
|
|
TDMV_ECHO_OFF = NO\n",
|
|
|
|
wanpipe_number,
|
|
get_date_and_time(),
|
|
WANCFG_EXECUTABLE_NAME,
|
|
|
|
wanpipe_number,
|
|
wanpipe_number,
|
|
wanpipe_number,
|
|
wanpipe_number,
|
|
|
|
list_element_sangoma_card_ptr->pci_bus_no,
|
|
list_element_sangoma_card_ptr->PCI_slot_no,
|
|
|
|
(list_element_sangoma_card_ptr->fe_cfg.tdmv_law == ZT_LAW_MULAW ? "MULAW" : "ALAW"),
|
|
list_element_sangoma_card_ptr->get_spanno(),
|
|
|
|
wanpipe_number
|
|
);
|
|
}else if(list_element_sangoma_card_ptr->card_version == A101_ADPTR_1TE1 ||
|
|
list_element_sangoma_card_ptr->card_version == A104_ADPTR_4TE1){
|
|
string te1_cfg_string;
|
|
|
|
if(form_fe_card_cfg_str(te1_cfg_string, &list_element_sangoma_card_ptr->fe_cfg) == NO){
|
|
ERR_DBG_OUT(("%s(): Invalid data in 'front end' configuration structure!\n", __FUNCTION__));
|
|
return 1;
|
|
}
|
|
|
|
Debug(DBG_CONF_FILE_WRITER, ("te1_cfg_string:\n %s \n", te1_cfg_string.c_str()));
|
|
|
|
card_str.sprintf(
|
|
"#================================================\n\
|
|
# WANPIPE%d Configuration File\n\
|
|
#================================================\n\
|
|
#\n\
|
|
# Date: %s\
|
|
#\n\
|
|
# Note: This file was generated automatically\n\
|
|
# by /usr/sbin/%s program.\n\
|
|
#\n\
|
|
# If you want to edit this file, it is\n\
|
|
# recommended that you use wancfg program\n\
|
|
# to do so.\n\
|
|
#================================================\n\
|
|
# Sangoma Technologies Inc.\n\
|
|
#================================================\n\
|
|
\n\
|
|
[devices]\n\
|
|
wanpipe%d = %s, Comment\n\
|
|
\n\
|
|
[interfaces]\n\
|
|
w%dg1 = wanpipe%d, , TDM_VOICE, Comment\n\
|
|
\n\
|
|
[wanpipe%d]\n\
|
|
CARD_TYPE = AFT\n\
|
|
S514CPU = %c\n\
|
|
CommPort = PRI\n\
|
|
AUTO_PCISLOT = NO\n\
|
|
PCIBUS = %d\n\
|
|
PCISLOT = %d\n\
|
|
%s\
|
|
MTU = 1500\n\
|
|
UDPPORT = 9000\n\
|
|
TTL = 255\n\
|
|
IGNORE_FRONT_END = NO\n\
|
|
TDMV_SPAN = %d\n\
|
|
TDMV_DCHAN = %d\n\
|
|
\n\
|
|
[w%dg1]\n\
|
|
ACTIVE_CH = ALL\n\
|
|
TDMV_ECHO_OFF = NO\n\
|
|
TDMV_HWEC = %s\n",
|
|
|
|
wanpipe_number,
|
|
get_date_and_time(),
|
|
WANCFG_EXECUTABLE_NAME,
|
|
|
|
wanpipe_number,
|
|
(list_element_sangoma_card_ptr->card_version == A101_ADPTR_1TE1 ? "WAN_AFT" : "WAN_AFT_TE1"),
|
|
wanpipe_number,
|
|
wanpipe_number,
|
|
wanpipe_number,
|
|
|
|
(list_element_sangoma_card_ptr->card_version == A104_ADPTR_4TE1 ?
|
|
'A' : list_element_sangoma_card_ptr->S514_CPU_no),
|
|
|
|
list_element_sangoma_card_ptr->pci_bus_no,
|
|
list_element_sangoma_card_ptr->PCI_slot_no,
|
|
|
|
te1_cfg_string.c_str(),
|
|
|
|
list_element_sangoma_card_ptr->get_spanno(),
|
|
list_element_sangoma_card_ptr->get_dchan(),
|
|
|
|
wanpipe_number,
|
|
|
|
(list_element_sangoma_card_ptr->card_sub_version == A104D ? "YES" : "NO")
|
|
);
|
|
|
|
}else{
|
|
ERR_DBG_OUT(("Invalid 'card_version' (%d) passed for saving to file!!\n",
|
|
list_element_sangoma_card_ptr->card_version));
|
|
return 1;
|
|
}//if()
|
|
|
|
//the comment should be 'written', all the rest should be 'appended' to file.
|
|
if(write_string_to_file((char*)full_file_path.c_str(),
|
|
(char*)card_str.c_str()) == NO){
|
|
return 1;
|
|
}
|
|
|
|
printf("Writing: '%s'\n", (char*)full_file_path.c_str());
|
|
list_element_sangoma_card_ptr->print_card_summary();
|
|
printf("\n");
|
|
|
|
add_to_wanrouter_start_sequence(wanpipe_number);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int conf_file_writer::add_to_wanrouter_start_sequence(int wanpipe_number)
|
|
{
|
|
wanrouter_rc_file_reader *wanrouter_rc_fr = new wanrouter_rc_file_reader(wanpipe_number);
|
|
|
|
if(wanrouter_rc_fr->search_and_update_boot_start_device_setting() == NO){
|
|
//this wanpipe is NOT in sequence yet
|
|
return wanrouter_rc_fr->update_wanrouter_rc_file();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#endif
|
|
|