2665 lines
96 KiB
C++
2665 lines
96 KiB
C++
/***************************************************************************
|
||
conf_file_reader.cpp - description
|
||
-------------------
|
||
begin : Thu Mar 4 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 "list_element_chan_def.h"
|
||
#include "conf_file_reader.h"
|
||
#include "text_box_help.h"
|
||
#include "wancfg.h"
|
||
|
||
#define DBG_CONF_FILE_READER 1
|
||
#define DBG_CONF_FILE_READER_AFT 1
|
||
|
||
#define smemof(TYPE, MEMBER) offsetof(TYPE,MEMBER),(sizeof(((TYPE *)0)->MEMBER))
|
||
|
||
static void SIZEOFASSERT (key_word_t* dtab, unsigned int type_size)
|
||
{
|
||
if (dtab->size != type_size) {
|
||
fprintf(stderr,"\n==========CRITICAL ERROR============\n\n");
|
||
fprintf(stderr,"Size Mismatch: Type Size %i != %i\n",dtab->size, type_size);
|
||
fprintf(stderr,"======================================\n\n");
|
||
fprintf(stderr,"Plese email /var/log/wanrouter file to Sangoma Support\n");
|
||
fprintf(stderr,"Email to techdesk@sangoma.com\n");
|
||
fprintf(stderr,"======================================\n\n");
|
||
}
|
||
}
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
/****** Global Data *********************************************************/
|
||
|
||
/*
|
||
* Configuration structure description tables.
|
||
* WARNING: These tables MUST be kept in sync with corresponding data
|
||
* structures defined in linux/wanrouter.h
|
||
*/
|
||
key_word_t common_conftab[] = /* Common configuration parameters */
|
||
{
|
||
{ "IOPORT", smemof(wandev_conf_t, ioport), DTYPE_UINT },
|
||
{ "MEMADDR", smemof(wandev_conf_t, maddr), DTYPE_UINT },
|
||
{ "MEMSIZE", smemof(wandev_conf_t, msize), DTYPE_UINT },
|
||
{ "IRQ", smemof(wandev_conf_t, irq), DTYPE_UINT },
|
||
{ "DMA", smemof(wandev_conf_t, dma), DTYPE_UINT },
|
||
{ "CARD_TYPE", smemof(wandev_conf_t, card_type), DTYPE_UINT },
|
||
{ "S514CPU", smemof(wandev_conf_t, S514_CPU_no), DTYPE_STR },
|
||
{ "PCISLOT", smemof(wandev_conf_t, PCI_slot_no), DTYPE_UINT },
|
||
{ "PCIBUS", smemof(wandev_conf_t, pci_bus_no), DTYPE_UINT },
|
||
{ "AUTO_PCISLOT",smemof(wandev_conf_t, auto_hw_detect), DTYPE_UCHAR },
|
||
{ "AUTO_DETECT",smemof(wandev_conf_t, auto_hw_detect), DTYPE_UCHAR },
|
||
{ "COMMPORT", smemof(wandev_conf_t, comm_port), DTYPE_UINT },
|
||
|
||
/* Front-End parameters */
|
||
{ "FE_MEDIA", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, media), DTYPE_UCHAR },
|
||
{ "FE_LCODE", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, lcode), DTYPE_UCHAR },
|
||
{ "FE_FRAME", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, frame), DTYPE_UCHAR },
|
||
{ "FE_LINE", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, line_no), DTYPE_UINT },
|
||
{ "FE_TXTRISTATE", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, tx_tristate_mode), DTYPE_UCHAR },
|
||
|
||
/* Front-End parameters (old style) */
|
||
{ "MEDIA", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, media), DTYPE_UCHAR },
|
||
{ "LCODE", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, lcode), DTYPE_UCHAR },
|
||
{ "FRAME", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, frame), DTYPE_UCHAR },
|
||
/* T1/E1 Front-End parameters */
|
||
{ "TE_LBO", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, lbo), DTYPE_UCHAR },
|
||
{ "TE_CLOCK",offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, te_clock),
|
||
DTYPE_UCHAR },
|
||
{ "TE_ACTIVE_CH",offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, active_ch),
|
||
DTYPE_UINT },
|
||
{ "TE_HIGHIMPEDANCE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, high_impedance_mode), DTYPE_UCHAR },
|
||
{ "TE_RX_SLEVEL", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, rx_slevel), DTYPE_INT },
|
||
|
||
{ "TE_REF_CLOCK",offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, te_ref_clock),
|
||
DTYPE_UCHAR },
|
||
{ "TE_SIG_MODE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, sig_mode), DTYPE_UINT },
|
||
/* T1/E1 Front-End parameters (old style) */
|
||
{ "LBO", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, lbo), DTYPE_UCHAR },
|
||
{ "ACTIVE_CH", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, active_ch), DTYPE_UINT },
|
||
{ "HIGHIMPEDANCE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te_cfg_t, high_impedance_mode), DTYPE_UCHAR },
|
||
/* T3/E3 Front-End parameters */
|
||
{ "TE3_FRACTIONAL",offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te3_cfg_t, fractional), DTYPE_UCHAR },
|
||
{ "TE3_RDEVICE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te3_cfg_t, rdevice_type), DTYPE_UCHAR },
|
||
{ "TE3_FCS", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te3_cfg_t, fcs), DTYPE_UINT },
|
||
|
||
{ "TE3_RXEQ", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + offsetof(sdla_te3_cfg_t, liu_cfg) + smemof(sdla_te3_liu_cfg_t, rx_equal), DTYPE_UINT },
|
||
|
||
{ "TE3_TAOS", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + offsetof(sdla_te3_cfg_t, liu_cfg) + smemof(sdla_te3_liu_cfg_t, taos), DTYPE_UINT },
|
||
|
||
{ "TE3_LBMODE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + offsetof(sdla_te3_cfg_t, liu_cfg) + smemof(sdla_te3_liu_cfg_t, lb_mode), DTYPE_UINT },
|
||
|
||
{ "TE3_TXLBO", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + offsetof(sdla_te3_cfg_t, liu_cfg) + smemof(sdla_te3_liu_cfg_t, tx_lbo), DTYPE_UINT },
|
||
|
||
{ "TE3_CLOCK", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_te3_cfg_t, clock), DTYPE_UCHAR },
|
||
|
||
{ "TDMV_LAW", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, tdmv_law), DTYPE_UINT },
|
||
|
||
{ "TDMV_OPERMODE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_remora_cfg_t, opermode_name), DTYPE_STR },
|
||
{ "RM_BATTTHRESH", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_remora_cfg_t, battthresh), DTYPE_UINT },
|
||
{ "RM_BATTDEBOUNCE", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_remora_cfg_t, battdebounce), DTYPE_UINT },
|
||
|
||
// { "RM_NETWORK_SYNC", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_remora_cfg_t, network_sync), DTYPE_UINT },
|
||
{ "RM_NETWORK_SYNC", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, network_sync), DTYPE_UINT },
|
||
{ "FE_NETWORK_SYNC", offsetof(wandev_conf_t, fe_cfg)+smemof(sdla_fe_cfg_t, network_sync), DTYPE_UINT },
|
||
|
||
{ "RM_BRI_CLOCK_MASTER", offsetof(wandev_conf_t, fe_cfg)+offsetof(sdla_fe_cfg_t, cfg) + smemof(sdla_bri_cfg_t, clock_mode), DTYPE_UCHAR },
|
||
|
||
/* TDMV parameters */
|
||
{ "TDMV_SPAN", offsetof(wandev_conf_t, tdmv_conf)+smemof(wan_tdmv_conf_t, span_no), DTYPE_UINT},
|
||
{ "TDMV_DCHAN", offsetof(wandev_conf_t, tdmv_conf)+smemof(wan_tdmv_conf_t, dchan), DTYPE_UINT},
|
||
{ "TDMV_HW_DTMF", offsetof(wandev_conf_t, tdmv_conf)+smemof(wan_tdmv_conf_t, hw_dtmf), DTYPE_UCHAR},
|
||
|
||
|
||
{ "BAUDRATE", smemof(wandev_conf_t, bps), DTYPE_UINT },
|
||
{ "MTU", smemof(wandev_conf_t, mtu), DTYPE_UINT },
|
||
{ "UDPPORT", smemof(wandev_conf_t, udp_port), DTYPE_UINT },
|
||
{ "TTL", smemof(wandev_conf_t, ttl), DTYPE_UCHAR },
|
||
{ "INTERFACE", smemof(wandev_conf_t, electrical_interface), DTYPE_UCHAR },
|
||
{ "CLOCKING", smemof(wandev_conf_t, clocking), DTYPE_UCHAR },
|
||
{ "LINECODING", smemof(wandev_conf_t, line_coding), DTYPE_UCHAR },
|
||
{ "CONNECTION", smemof(wandev_conf_t, connection), DTYPE_UCHAR },
|
||
{ "LINEIDLE", smemof(wandev_conf_t, line_idle), DTYPE_UCHAR },
|
||
{ "OPTION1", smemof(wandev_conf_t, hw_opt[0]), DTYPE_UINT },
|
||
{ "OPTION2", smemof(wandev_conf_t, hw_opt[1]), DTYPE_UINT },
|
||
{ "OPTION3", smemof(wandev_conf_t, hw_opt[2]), DTYPE_UINT },
|
||
{ "OPTION4", smemof(wandev_conf_t, hw_opt[3]), DTYPE_UINT },
|
||
{ "FIRMWARE", smemof(wandev_conf_t, data_size), DTYPE_FILENAME },
|
||
{ "RXMODE", smemof(wandev_conf_t, read_mode), DTYPE_CHAR },
|
||
{ "RECEIVE_ONLY", smemof(wandev_conf_t, receive_only), DTYPE_UCHAR},
|
||
{ "BACKUP", smemof(wandev_conf_t, backup), DTYPE_UCHAR},
|
||
{ "TTY", smemof(wandev_conf_t, tty), DTYPE_UCHAR},
|
||
{ "TTY_MAJOR", smemof(wandev_conf_t, tty_major), DTYPE_UINT},
|
||
{ "TTY_MINOR", smemof(wandev_conf_t, tty_minor), DTYPE_UINT},
|
||
{ "TTY_MODE", smemof(wandev_conf_t, tty_mode), DTYPE_UINT},
|
||
{ "IGNORE_FRONT_END", smemof(wandev_conf_t, ignore_front_end_status), DTYPE_UCHAR},
|
||
|
||
|
||
{ "MAX_RX_QUEUE", smemof(wandev_conf_t, max_rx_queue), DTYPE_UINT},
|
||
{ "LMI_TRACE_QUEUE", smemof(wandev_conf_t, max_rx_queue), DTYPE_UINT},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
/*
|
||
key_word_t ppp_conftab[] = // PPP-specific configuration (on Firmware PPP)
|
||
{
|
||
{ "RESTARTTIMER", smemof(wan_ppp_conf_t, restart_tmr), DTYPE_UINT },
|
||
{ "AUTHRESTART", smemof(wan_ppp_conf_t, auth_rsrt_tmr), DTYPE_UINT },
|
||
{ "AUTHWAIT", smemof(wan_ppp_conf_t, auth_wait_tmr), DTYPE_UINT },
|
||
|
||
{ "DTRDROPTIMER", smemof(wan_ppp_conf_t, dtr_drop_tmr), DTYPE_UINT },
|
||
{ "CONNECTTIMEOUT", smemof(wan_ppp_conf_t, connect_tmout), DTYPE_UINT },
|
||
{ "CONFIGURERETRY", smemof(wan_ppp_conf_t, conf_retry), DTYPE_UINT },
|
||
{ "TERMINATERETRY", smemof(wan_ppp_conf_t, term_retry), DTYPE_UINT },
|
||
{ "MAXCONFREJECT", smemof(wan_ppp_conf_t, fail_retry), DTYPE_UINT },
|
||
{ "AUTHRETRY", smemof(wan_ppp_conf_t, auth_retry), DTYPE_UINT },
|
||
{ "AUTHENTICATOR", smemof(wan_ppp_conf_t, authenticator), DTYPE_UCHAR},
|
||
{ "IP_MODE", smemof(wan_ppp_conf_t, ip_mode), DTYPE_UCHAR},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
*/
|
||
|
||
#if 0
|
||
key_word_t synch_ppp_conftab[] = /* PPP-on LIP layer configuration */
|
||
{
|
||
{ "IP_MODE", smemof(wan_sppp_if_conf_t, dynamic_ip), DTYPE_UCHAR},
|
||
{ "IP_MODE", smemof(wan_sppp_if_conf_t, dynamic_ip), DTYPE_UCHAR},
|
||
{ "PAP", smemof(wan_sppp_if_conf_t, pap), DTYPE_UCHAR},
|
||
{ "CHAP", smemof(wan_sppp_if_conf_t, chap), DTYPE_UCHAR},
|
||
{ "USERID", smemof(wan_sppp_if_conf_t, userid), DTYPE_STR},
|
||
{ "PASSWD", smemof(wan_sppp_if_conf_t, passwd), DTYPE_STR},
|
||
{ "SYSNAME", smemof(wan_sppp_if_conf_t, sysname), DTYPE_STR},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
#endif
|
||
|
||
key_word_t sppp_conftab[] = /* PPP-CHDLC (in LIP layer!!!) specific configuration */
|
||
{
|
||
{ "IP_MODE", smemof(wan_sppp_if_conf_t, dynamic_ip), DTYPE_UCHAR},
|
||
|
||
{ "AUTH_TIMER", smemof(wan_sppp_if_conf_t, pp_auth_timer), DTYPE_UINT},
|
||
{ "KEEPALIVE_TIMER",smemof(wan_sppp_if_conf_t, sppp_keepalive_timer), DTYPE_UINT},
|
||
{ "PPP_TIMER", smemof(wan_sppp_if_conf_t, pp_timer), DTYPE_UINT},
|
||
|
||
{ "PAP", smemof(wan_sppp_if_conf_t, pap), DTYPE_UCHAR},
|
||
{ "CHAP", smemof(wan_sppp_if_conf_t, chap), DTYPE_UCHAR},
|
||
{ "CHAP", smemof(wan_sppp_if_conf_t, chap), DTYPE_UCHAR},
|
||
|
||
{ "USERID", smemof(wan_sppp_if_conf_t, userid), DTYPE_STR},
|
||
{ "PASSWD", smemof(wan_sppp_if_conf_t, passwd), DTYPE_STR},
|
||
{ "SYSNAME", smemof(wan_sppp_if_conf_t, sysname), DTYPE_STR},
|
||
|
||
{ "KEEPALIVE_ERROR_MARGIN", smemof(wan_sppp_if_conf_t, keepalive_err_margin), DTYPE_UINT },
|
||
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
#if 0
|
||
//not used by MP_CHDLC!! - it is all in 'wanif_conf_t'
|
||
key_word_t chdlc_conftab[] = /* Cisco HDLC-specific configuration - in FIRMWARE!!*/
|
||
{
|
||
{ "IGNORE_DCD", smemof(wan_chdlc_conf_t, ignore_dcd), DTYPE_UCHAR},
|
||
{ "IGNORE_CTS", smemof(wan_chdlc_conf_t, ignore_cts), DTYPE_UCHAR},
|
||
{ "IGNORE_KEEPALIVE", smemof(wan_chdlc_conf_t, ignore_keepalive), DTYPE_UCHAR},
|
||
{ "HDLC_STREAMING", smemof(wan_chdlc_conf_t, hdlc_streaming), DTYPE_UCHAR},
|
||
{ "KEEPALIVE_TX_TIMER", smemof(wan_chdlc_conf_t, keepalive_tx_tmr), DTYPE_UINT },
|
||
{ "KEEPALIVE_RX_TIMER", smemof(wan_chdlc_conf_t, keepalive_rx_tmr), DTYPE_UINT },
|
||
{ "KEEPALIVE_ERR_MARGIN", smemof(wan_chdlc_conf_t, keepalive_err_margin), DTYPE_UINT },
|
||
{ "SLARP_TIMER", smemof(wan_chdlc_conf_t, slarp_timer), DTYPE_UINT },
|
||
{ "FAST_ISR", smemof(wan_chdlc_conf_t,fast_isr), DTYPE_UCHAR },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
#endif
|
||
|
||
key_word_t fr_conftab[] = /* Frame relay-specific configuration */
|
||
{
|
||
{ "SIGNALLING", smemof(wan_fr_conf_t, signalling), DTYPE_UINT },
|
||
{ "T391", smemof(wan_fr_conf_t, t391), DTYPE_UINT },
|
||
{ "T392", smemof(wan_fr_conf_t, t392), DTYPE_UINT },
|
||
{ "N391", smemof(wan_fr_conf_t, n391), DTYPE_UINT },
|
||
{ "N392", smemof(wan_fr_conf_t, n392), DTYPE_UINT },
|
||
{ "N393", smemof(wan_fr_conf_t, n393), DTYPE_UINT },
|
||
{ "FR_ISSUE_FS", smemof(wan_fr_conf_t, issue_fs_on_startup),DTYPE_UCHAR },
|
||
{ "NUMBER_OF_DLCI", smemof(wan_fr_conf_t, dlci_num), DTYPE_UINT },
|
||
{ "STATION", smemof(wan_fr_conf_t, station), DTYPE_UCHAR },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t xilinx_conftab[] = /* Xilinx specific configuration */
|
||
{
|
||
{ "MRU", smemof(wan_xilinx_conf_t, mru), DTYPE_USHORT },
|
||
{ "DMA_PER_CH", smemof(wan_xilinx_conf_t, dma_per_ch), DTYPE_USHORT },
|
||
{ "RBS", smemof(wan_xilinx_conf_t, rbs), DTYPE_UCHAR },
|
||
{ "DATA_MUX_MAP", smemof(wan_xilinx_conf_t, data_mux_map), DTYPE_UINT },
|
||
{ "RX_CRC_BYTES", smemof(wan_xilinx_conf_t, rx_crc_bytes), DTYPE_UINT},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t edukit_conftab[] =
|
||
{
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t bitstrm_conftab[] = /* Bitstreaming specific configuration */
|
||
{
|
||
/* Bit strm options */
|
||
{ "SYNC_OPTIONS", smemof(wan_bitstrm_conf_t, sync_options), DTYPE_UINT },
|
||
{ "RX_SYNC_CHAR", smemof(wan_bitstrm_conf_t, rx_sync_char), DTYPE_UCHAR},
|
||
{ "MONOSYNC_TX_TIME_FILL_CHAR", smemof(wan_bitstrm_conf_t, monosync_tx_time_fill_char), DTYPE_UCHAR},
|
||
{ "MAX_LENGTH_TX_DATA_BLOCK", smemof(wan_bitstrm_conf_t,max_length_tx_data_block), DTYPE_UINT},
|
||
{ "RX_COMPLETE_LENGTH", smemof(wan_bitstrm_conf_t,rx_complete_length), DTYPE_UINT},
|
||
{ "RX_COMPLETE_TIMER", smemof(wan_bitstrm_conf_t,rx_complete_timer), DTYPE_UINT},
|
||
{ "RBS_CH_MAP", smemof(wan_bitstrm_conf_t,rbs_map), DTYPE_UINT},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t atm_conftab[] =
|
||
{
|
||
{"ATM_SYNC_MODE", smemof(wan_atm_conf_t,atm_sync_mode), DTYPE_USHORT },
|
||
{"ATM_SYNC_DATA", smemof(wan_atm_conf_t,atm_sync_data), DTYPE_USHORT },
|
||
{"ATM_SYNC_OFFSET", smemof(wan_atm_conf_t,atm_sync_offset), DTYPE_USHORT },
|
||
{"ATM_HUNT_TIMER", smemof(wan_atm_conf_t,atm_hunt_timer), DTYPE_USHORT },
|
||
{"ATM_CELL_CFG", smemof(wan_atm_conf_t,atm_cell_cfg), DTYPE_UCHAR },
|
||
{"ATM_CELL_PT", smemof(wan_atm_conf_t,atm_cell_pt), DTYPE_UCHAR },
|
||
{"ATM_CELL_CLP", smemof(wan_atm_conf_t,atm_cell_clp), DTYPE_UCHAR },
|
||
{"ATM_CELL_PAYLOAD", smemof(wan_atm_conf_t,atm_cell_payload), DTYPE_UCHAR },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t atm_if_conftab[] =
|
||
{
|
||
{"ENCAPMODE", smemof(wan_atm_conf_if_t, encap_mode), DTYPE_UCHAR },
|
||
{"VCI", smemof(wan_atm_conf_if_t, vci), DTYPE_USHORT },
|
||
{"VPI", smemof(wan_atm_conf_if_t, vpi), DTYPE_USHORT },
|
||
|
||
{"OAM_LOOPBACK", smemof(wan_atm_conf_if_t,atm_oam_loopback), DTYPE_UCHAR },
|
||
{"OAM_LOOPBACK_INT", smemof(wan_atm_conf_if_t,atm_oam_loopback_intr), DTYPE_UCHAR },
|
||
{"OAM_CC_CHECK", smemof(wan_atm_conf_if_t,atm_oam_continuity), DTYPE_UCHAR },
|
||
{"OAM_CC_CHECK_INT", smemof(wan_atm_conf_if_t,atm_oam_continuity_intr), DTYPE_UCHAR },
|
||
{"ATMARP", smemof(wan_atm_conf_if_t,atm_arp), DTYPE_UCHAR },
|
||
{"ATMARP_INT", smemof(wan_atm_conf_if_t,atm_arp_intr), DTYPE_UCHAR },
|
||
{"MTU", smemof(wan_atm_conf_if_t,mtu), DTYPE_USHORT },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t xilinx_if_conftab[] =
|
||
{
|
||
{ "SIGNALLING", smemof(wan_xilinx_conf_if_t, signalling), DTYPE_UINT },
|
||
{ "STATION", smemof(wan_xilinx_conf_if_t, station), DTYPE_UCHAR },
|
||
{ "SEVEN_BIT_HDLC", smemof(wan_xilinx_conf_if_t, seven_bit_hdlc), DTYPE_CHAR },
|
||
{ "MRU", smemof(wan_xilinx_conf_if_t, mru), DTYPE_UINT },
|
||
{ "MTU", smemof(wan_xilinx_conf_if_t, mtu), DTYPE_UINT },
|
||
{ "IDLE_FLAG", smemof(wan_xilinx_conf_if_t, idle_flag), DTYPE_UCHAR},
|
||
{ "DATA_MUX", smemof(wan_xilinx_conf_if_t, data_mux), DTYPE_UCHAR},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t bitstrm_if_conftab[] =
|
||
{
|
||
{"MAX_TX_QUEUE", smemof(wan_bitstrm_conf_if_t,max_tx_queue_size), DTYPE_UINT },
|
||
{"MAX_TX_UP_SIZE", smemof(wan_bitstrm_conf_if_t,max_tx_up_size), DTYPE_UINT },
|
||
{"SEVEN_BIT_HDLC", smemof(wan_bitstrm_conf_if_t,seven_bit_hdlc), DTYPE_CHAR },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t adsl_conftab[] =
|
||
{
|
||
{"ENCAPMODE", smemof(wan_adsl_conf_t,EncapMode), DTYPE_UCHAR },
|
||
/*Backward compatibility*/
|
||
{"RFC1483MODE", smemof(wan_adsl_conf_t,EncapMode), DTYPE_UCHAR },
|
||
{"RFC2364MODE", smemof(wan_adsl_conf_t,EncapMode), DTYPE_UCHAR },
|
||
|
||
{"VCI", smemof(wan_adsl_conf_t,Vci), DTYPE_USHORT },
|
||
/*Backward compatibility*/
|
||
{"RFC1483VCI", smemof(wan_adsl_conf_t,Vci), DTYPE_USHORT },
|
||
{"RFC2364VCI", smemof(wan_adsl_conf_t,Vci), DTYPE_USHORT },
|
||
|
||
{"VPI", smemof(wan_adsl_conf_t,Vpi), DTYPE_USHORT },
|
||
/*Backward compatibility*/
|
||
{"RFC1483VPI", smemof(wan_adsl_conf_t,Vpi), DTYPE_USHORT },
|
||
{"RFC2364VPI", smemof(wan_adsl_conf_t,Vpi), DTYPE_USHORT },
|
||
|
||
{"VERBOSE", smemof(wan_adsl_conf_t,Verbose), DTYPE_UCHAR },
|
||
/*Backward compatibility*/
|
||
{"DSL_INTERFACE", smemof(wan_adsl_conf_t,Verbose), DTYPE_UCHAR },
|
||
|
||
{"RXBUFFERCOUNT", smemof(wan_adsl_conf_t,RxBufferCount), DTYPE_USHORT },
|
||
{"TXBUFFERCOUNT", smemof(wan_adsl_conf_t,TxBufferCount), DTYPE_USHORT },
|
||
|
||
{"ADSLSTANDARD", smemof(wan_adsl_conf_t,Standard), DTYPE_USHORT },
|
||
{"ADSLTRELLIS", smemof(wan_adsl_conf_t,Trellis), DTYPE_USHORT },
|
||
{"ADSLTXPOWERATTEN", smemof(wan_adsl_conf_t,TxPowerAtten), DTYPE_USHORT },
|
||
{"ADSLCODINGGAIN", smemof(wan_adsl_conf_t,CodingGain), DTYPE_USHORT },
|
||
{"ADSLMAXBITSPERBIN", smemof(wan_adsl_conf_t,MaxBitsPerBin), DTYPE_USHORT },
|
||
{"ADSLTXSTARTBIN", smemof(wan_adsl_conf_t,TxStartBin), DTYPE_USHORT },
|
||
{"ADSLTXENDBIN", smemof(wan_adsl_conf_t,TxEndBin), DTYPE_USHORT },
|
||
{"ADSLRXSTARTBIN", smemof(wan_adsl_conf_t,RxStartBin), DTYPE_USHORT },
|
||
{"ADSLRXENDBIN", smemof(wan_adsl_conf_t,RxEndBin), DTYPE_USHORT },
|
||
{"ADSLRXBINADJUST", smemof(wan_adsl_conf_t,RxBinAdjust), DTYPE_USHORT },
|
||
{"ADSLFRAMINGSTRUCT", smemof(wan_adsl_conf_t,FramingStruct), DTYPE_USHORT },
|
||
{"ADSLEXPANDEDEXCHANGE", smemof(wan_adsl_conf_t,ExpandedExchange), DTYPE_USHORT },
|
||
{"ADSLCLOCKTYPE", smemof(wan_adsl_conf_t,ClockType), DTYPE_USHORT },
|
||
{"ADSLMAXDOWNRATE", smemof(wan_adsl_conf_t,MaxDownRate), DTYPE_USHORT },
|
||
|
||
/*Backward compatibility*/
|
||
{"GTISTANDARD", smemof(wan_adsl_conf_t,Standard), DTYPE_USHORT },
|
||
{"GTITRELLIS", smemof(wan_adsl_conf_t,Trellis), DTYPE_USHORT },
|
||
{"GTITXPOWERATTEN", smemof(wan_adsl_conf_t,TxPowerAtten), DTYPE_USHORT },
|
||
{"GTICODINGGAIN", smemof(wan_adsl_conf_t,CodingGain), DTYPE_USHORT },
|
||
{"GTIMAXBITSPERBIN", smemof(wan_adsl_conf_t,MaxBitsPerBin), DTYPE_USHORT },
|
||
{"GTITXSTARTBIN", smemof(wan_adsl_conf_t,TxStartBin), DTYPE_USHORT },
|
||
{"GTITXENDBIN", smemof(wan_adsl_conf_t,TxEndBin), DTYPE_USHORT },
|
||
{"GTIRXSTARTBIN", smemof(wan_adsl_conf_t,RxStartBin), DTYPE_USHORT },
|
||
{"GTIRXENDBIN", smemof(wan_adsl_conf_t,RxEndBin), DTYPE_USHORT },
|
||
{"GTIRXBINADJUST", smemof(wan_adsl_conf_t,RxBinAdjust), DTYPE_USHORT },
|
||
{"GTIFRAMINGSTRUCT", smemof(wan_adsl_conf_t,FramingStruct), DTYPE_USHORT },
|
||
{"GTIEXPANDEDEXCHANGE", smemof(wan_adsl_conf_t,ExpandedExchange), DTYPE_USHORT },
|
||
{"GTICLOCKTYPE", smemof(wan_adsl_conf_t,ClockType), DTYPE_USHORT },
|
||
{"GTIMAXDOWNRATE", smemof(wan_adsl_conf_t,MaxDownRate), DTYPE_USHORT },
|
||
|
||
{"ATM_AUTOCFG", smemof(wan_adsl_conf_t,atm_autocfg), DTYPE_UCHAR },
|
||
{"ADSL_WATCHDOG", smemof(wan_adsl_conf_t,atm_watchdog), DTYPE_UCHAR },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t bscstrm_conftab[]=
|
||
{
|
||
{"BSCSTRM_ADAPTER_FR" , smemof(wan_bscstrm_conf_t,adapter_frequency),DTYPE_UINT},
|
||
{"BSCSTRM_MTU", smemof(wan_bscstrm_conf_t,max_data_length),DTYPE_USHORT},
|
||
{"BSCSTRM_EBCDIC" , smemof(wan_bscstrm_conf_t,EBCDIC_encoding),DTYPE_USHORT},
|
||
{"BSCSTRM_RB_BLOCK_TYPE", smemof(wan_bscstrm_conf_t,Rx_block_type),DTYPE_USHORT},
|
||
{"BSCSTRM_NO_CONSEC_PAD_EOB", smemof(wan_bscstrm_conf_t,no_consec_PADs_EOB), DTYPE_USHORT},
|
||
{"BSCSTRM_NO_ADD_LEAD_TX_SYN_CHARS", smemof(wan_bscstrm_conf_t,no_add_lead_Tx_SYN_chars),DTYPE_USHORT},
|
||
{"BSCSTRM_NO_BITS_PER_CHAR", smemof(wan_bscstrm_conf_t,no_bits_per_char),DTYPE_USHORT},
|
||
{"BSCSTRM_PARITY", smemof(wan_bscstrm_conf_t,parity),DTYPE_USHORT},
|
||
{"BSCSTRM_MISC_CONFIG_OPTIONS", smemof(wan_bscstrm_conf_t,misc_config_options),DTYPE_USHORT},
|
||
{"BSCSTRM_STATISTICS_OPTIONS", smemof(wan_bscstrm_conf_t,statistics_options), DTYPE_USHORT},
|
||
{"BSCSTRM_MODEM_CONFIG_OPTIONS", smemof(wan_bscstrm_conf_t,modem_config_options), DTYPE_USHORT},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
|
||
key_word_t ss7_conftab[] =
|
||
{
|
||
{"LINE_CONFIG_OPTIONS", smemof(wan_ss7_conf_t,line_cfg_opt), DTYPE_UINT },
|
||
{"MODEM_CONFIG_OPTIONS",smemof(wan_ss7_conf_t,modem_cfg_opt), DTYPE_UINT },
|
||
{"MODEM_STATUS_TIMER", smemof(wan_ss7_conf_t,modem_status_timer), DTYPE_UINT },
|
||
{"API_OPTIONS", smemof(wan_ss7_conf_t,api_options), DTYPE_UINT },
|
||
{"PROTOCOL_OPTIONS", smemof(wan_ss7_conf_t,protocol_options), DTYPE_UINT },
|
||
{"PROTOCOL_SPECIFICATION", smemof(wan_ss7_conf_t,protocol_specification), DTYPE_UINT },
|
||
{"STATS_HISTORY_OPTIONS", smemof(wan_ss7_conf_t,stats_history_options), DTYPE_UINT },
|
||
{"MAX_LENGTH_MSU_SIF", smemof(wan_ss7_conf_t,max_length_msu_sif), DTYPE_UINT },
|
||
{"MAX_UNACKED_TX_MSUS", smemof(wan_ss7_conf_t,max_unacked_tx_msus), DTYPE_UINT },
|
||
{"LINK_INACTIVITY_TIMER", smemof(wan_ss7_conf_t,link_inactivity_timer), DTYPE_UINT },
|
||
{"T1_TIMER", smemof(wan_ss7_conf_t,t1_timer), DTYPE_UINT },
|
||
{"T2_TIMER", smemof(wan_ss7_conf_t,t2_timer), DTYPE_UINT },
|
||
{"T3_TIMER", smemof(wan_ss7_conf_t,t3_timer), DTYPE_UINT },
|
||
{"T4_TIMER_EMERGENCY", smemof(wan_ss7_conf_t,t4_timer_emergency), DTYPE_UINT },
|
||
{"T4_TIMER_NORMAL", smemof(wan_ss7_conf_t,t4_timer_normal), DTYPE_UINT },
|
||
{"T5_TIMER", smemof(wan_ss7_conf_t,t5_timer), DTYPE_UINT },
|
||
{"T6_TIMER", smemof(wan_ss7_conf_t,t6_timer), DTYPE_UINT },
|
||
{"T7_TIMER", smemof(wan_ss7_conf_t,t7_timer), DTYPE_UINT },
|
||
{"T8_TIMER", smemof(wan_ss7_conf_t,t8_timer), DTYPE_UINT },
|
||
{"N1", smemof(wan_ss7_conf_t,n1), DTYPE_UINT },
|
||
{"N2", smemof(wan_ss7_conf_t,n2), DTYPE_UINT },
|
||
{"TIN", smemof(wan_ss7_conf_t,tin), DTYPE_UINT },
|
||
{"TIE", smemof(wan_ss7_conf_t,tie), DTYPE_UINT },
|
||
{"SUERM_ERROR_THRESHOLD", smemof(wan_ss7_conf_t,suerm_error_threshold), DTYPE_UINT},
|
||
{"SUERM_NUMBER_OCTETS", smemof(wan_ss7_conf_t,suerm_number_octets), DTYPE_UINT},
|
||
{"SUERM_NUMBER_SUS", smemof(wan_ss7_conf_t,suerm_number_sus), DTYPE_UINT},
|
||
{"SIE_INTERVAL_TIMER", smemof(wan_ss7_conf_t,sie_interval_timer), DTYPE_UINT},
|
||
{"SIO_INTERVAL_TIMER", smemof(wan_ss7_conf_t,sio_interval_timer), DTYPE_UINT},
|
||
{"SIOS_INTERVAL_TIMER", smemof(wan_ss7_conf_t,sios_interval_timer), DTYPE_UINT},
|
||
{"FISU_INTERVAL_TIMER", smemof(wan_ss7_conf_t,fisu_interval_timer), DTYPE_UINT},
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t x25_conftab[] = /* X.25-specific configuration */
|
||
{
|
||
{ "LOWESTPVC", smemof(wan_x25_conf_t, lo_pvc), DTYPE_UINT },
|
||
{ "HIGHESTPVC", smemof(wan_x25_conf_t, hi_pvc), DTYPE_UINT },
|
||
{ "LOWESTSVC", smemof(wan_x25_conf_t, lo_svc), DTYPE_UINT },
|
||
{ "HIGHESTSVC", smemof(wan_x25_conf_t, hi_svc), DTYPE_UINT },
|
||
{ "HDLCWINDOW", smemof(wan_x25_conf_t, hdlc_window), DTYPE_UINT },
|
||
{ "PACKETWINDOW", smemof(wan_x25_conf_t, pkt_window), DTYPE_UINT },
|
||
{ "CCITTCOMPAT", smemof(wan_x25_conf_t, ccitt_compat), DTYPE_UINT },
|
||
{ "X25CONFIG", smemof(wan_x25_conf_t, x25_conf_opt), DTYPE_UINT },
|
||
{ "LAPB_HDLC_ONLY", smemof(wan_x25_conf_t, LAPB_hdlc_only), DTYPE_UCHAR },
|
||
{ "CALL_SETUP_LOG", smemof(wan_x25_conf_t, logging), DTYPE_UCHAR },
|
||
{ "OOB_ON_MODEM", smemof(wan_x25_conf_t, oob_on_modem), DTYPE_UCHAR},
|
||
{ "T1", smemof(wan_x25_conf_t, t1), DTYPE_UINT },
|
||
{ "T2", smemof(wan_x25_conf_t, t2), DTYPE_UINT },
|
||
{ "T4", smemof(wan_x25_conf_t, t4), DTYPE_UINT },
|
||
{ "N2", smemof(wan_x25_conf_t, n2), DTYPE_UINT },
|
||
{ "T10_T20", smemof(wan_x25_conf_t, t10_t20), DTYPE_UINT },
|
||
{ "T11_T21", smemof(wan_x25_conf_t, t11_t21), DTYPE_UINT },
|
||
{ "T12_T22", smemof(wan_x25_conf_t, t12_t22), DTYPE_UINT },
|
||
{ "T13_T23", smemof(wan_x25_conf_t, t13_t23), DTYPE_UINT },
|
||
{ "T16_T26", smemof(wan_x25_conf_t, t16_t26), DTYPE_UINT },
|
||
{ "T28", smemof(wan_x25_conf_t, t28), DTYPE_UINT },
|
||
{ "R10_R20", smemof(wan_x25_conf_t, r10_r20), DTYPE_UINT },
|
||
{ "R12_R22", smemof(wan_x25_conf_t, r12_r22), DTYPE_UINT },
|
||
{ "R13_R23", smemof(wan_x25_conf_t, r13_r23), DTYPE_UINT },
|
||
{ "STATION_ADDR", smemof(wan_x25_conf_t, local_station_address), DTYPE_UCHAR},
|
||
{ "DEF_PKT_SIZE", smemof(wan_x25_conf_t, defPktSize), DTYPE_UINT },
|
||
{ "MAX_PKT_SIZE", smemof(wan_x25_conf_t, pktMTU), DTYPE_UINT },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t lapb_annexg_conftab[] =
|
||
{
|
||
//LAPB STUFF
|
||
{ "T1", smemof(wan_lapb_if_conf_t, t1), DTYPE_UINT },
|
||
{ "T2", smemof(wan_lapb_if_conf_t, t2), DTYPE_UINT },
|
||
{ "T3", smemof(wan_lapb_if_conf_t, t3), DTYPE_UINT },
|
||
{ "T4", smemof(wan_lapb_if_conf_t, t4), DTYPE_UINT },
|
||
{ "N2", smemof(wan_lapb_if_conf_t, n2), DTYPE_UINT },
|
||
{ "LAPB_MODE", smemof(wan_lapb_if_conf_t, mode), DTYPE_UINT },
|
||
{ "LAPB_WINDOW", smemof(wan_lapb_if_conf_t, window), DTYPE_UINT },
|
||
|
||
{ "LABEL", smemof(wan_lapb_if_conf_t,label), DTYPE_STR},
|
||
{ "VIRTUAL_ADDR", smemof(wan_lapb_if_conf_t,virtual_addr), DTYPE_STR},
|
||
{ "REAL_ADDR", smemof(wan_lapb_if_conf_t,real_addr), DTYPE_STR},
|
||
|
||
{ "MAX_PKT_SIZE", smemof(wan_lapb_if_conf_t,mtu), DTYPE_UINT},
|
||
|
||
{ "STATION" , smemof(wan_lapb_if_conf_t, station), DTYPE_UCHAR },
|
||
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
|
||
key_word_t x25_annexg_conftab[] =
|
||
{
|
||
//X25 STUFF
|
||
{ "PACKETWINDOW", smemof(wan_x25_if_conf_t, packet_window), DTYPE_USHORT },
|
||
{ "CCITTCOMPAT", smemof(wan_x25_if_conf_t, CCITT_compatibility), DTYPE_USHORT },
|
||
{ "T10_T20", smemof(wan_x25_if_conf_t, T10_T20), DTYPE_USHORT },
|
||
{ "T11_T21", smemof(wan_x25_if_conf_t, T11_T21), DTYPE_USHORT },
|
||
{ "T12_T22", smemof(wan_x25_if_conf_t, T12_T22), DTYPE_USHORT },
|
||
{ "T13_T23", smemof(wan_x25_if_conf_t, T13_T23), DTYPE_USHORT },
|
||
{ "T16_T26", smemof(wan_x25_if_conf_t, T16_T26), DTYPE_USHORT },
|
||
{ "T28", smemof(wan_x25_if_conf_t, T28), DTYPE_USHORT },
|
||
{ "R10_R20", smemof(wan_x25_if_conf_t, R10_R20), DTYPE_USHORT },
|
||
{ "R12_R22", smemof(wan_x25_if_conf_t, R12_R22), DTYPE_USHORT },
|
||
{ "R13_R23", smemof(wan_x25_if_conf_t, R13_R23), DTYPE_USHORT },
|
||
|
||
{ "X25_API_OPTIONS", smemof(wan_x25_if_conf_t, X25_API_options), DTYPE_USHORT },
|
||
{ "X25_PROTOCOL_OPTIONS", smemof(wan_x25_if_conf_t, X25_protocol_options), DTYPE_USHORT },
|
||
{ "X25_RESPONSE_OPTIONS", smemof(wan_x25_if_conf_t, X25_response_options), DTYPE_USHORT },
|
||
{ "X25_STATISTICS_OPTIONS", smemof(wan_x25_if_conf_t, X25_statistics_options), DTYPE_USHORT },
|
||
|
||
{ "GEN_FACILITY_1", smemof(wan_x25_if_conf_t, genl_facilities_supported_1), DTYPE_USHORT },
|
||
{ "GEN_FACILITY_2", smemof(wan_x25_if_conf_t, genl_facilities_supported_2), DTYPE_USHORT },
|
||
{ "CCITT_FACILITY", smemof(wan_x25_if_conf_t, CCITT_facilities_supported), DTYPE_USHORT },
|
||
{ "NON_X25_FACILITY", smemof(wan_x25_if_conf_t,non_X25_facilities_supported),DTYPE_USHORT },
|
||
|
||
{ "DFLT_PKT_SIZE", smemof(wan_x25_if_conf_t,default_packet_size), DTYPE_USHORT },
|
||
{ "MAX_PKT_SIZE", smemof(wan_x25_if_conf_t,maximum_packet_size), DTYPE_USHORT },
|
||
|
||
{ "LOWESTSVC", smemof(wan_x25_if_conf_t,lowest_two_way_channel), DTYPE_USHORT },
|
||
{ "HIGHESTSVC", smemof(wan_x25_if_conf_t,highest_two_way_channel), DTYPE_USHORT},
|
||
|
||
{ "LOWESTPVC", smemof(wan_x25_if_conf_t,lowest_PVC), DTYPE_USHORT },
|
||
{ "HIGHESTPVC", smemof(wan_x25_if_conf_t,highest_PVC), DTYPE_USHORT},
|
||
|
||
{ "X25_MODE", smemof(wan_x25_if_conf_t, mode), DTYPE_UCHAR},
|
||
{ "CALL_BACKOFF", smemof(wan_x25_if_conf_t, call_backoff_timeout), DTYPE_UINT },
|
||
{ "CALL_LOGGING", smemof(wan_x25_if_conf_t, call_logging), DTYPE_UCHAR },
|
||
|
||
{ "X25_CALL_STRING", smemof(wan_x25_if_conf_t, call_string), DTYPE_STR},
|
||
{ "X25_ACCEPT_DST_ADDR", smemof(wan_x25_if_conf_t, accept_called), DTYPE_STR},
|
||
{ "X25_ACCEPT_SRC_ADDR", smemof(wan_x25_if_conf_t, accept_calling), DTYPE_STR},
|
||
{ "X25_ACCEPT_FCL_DATA", smemof(wan_x25_if_conf_t, accept_facil), DTYPE_STR},
|
||
{ "X25_ACCEPT_USR_DATA", smemof(wan_x25_if_conf_t, accept_udata), DTYPE_STR},
|
||
|
||
{ "LABEL", smemof(wan_x25_if_conf_t,label), DTYPE_STR},
|
||
{ "VIRTUAL_ADDR", smemof(wan_x25_if_conf_t,virtual_addr), DTYPE_STR},
|
||
{ "REAL_ADDR", smemof(wan_x25_if_conf_t,real_addr), DTYPE_STR},
|
||
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t dsp_annexg_conftab[] =
|
||
{
|
||
//DSP_20 DSP STUFF
|
||
{ "PAD", smemof(wan_dsp_if_conf_t, pad_type), DTYPE_UCHAR },
|
||
{ "T1_DSP", smemof(wan_dsp_if_conf_t, T1), DTYPE_UINT },
|
||
{ "T2_DSP", smemof(wan_dsp_if_conf_t, T2), DTYPE_UINT },
|
||
{ "T3_DSP", smemof(wan_dsp_if_conf_t, T3), DTYPE_UINT },
|
||
{ "DSP_AUTO_CE", smemof(wan_dsp_if_conf_t, auto_ce), DTYPE_UCHAR },
|
||
{ "DSP_AUTO_CALL_REQ",smemof(wan_dsp_if_conf_t, auto_call_req), DTYPE_UCHAR },
|
||
{ "DSP_AUTO_ACK", smemof(wan_dsp_if_conf_t, auto_ack), DTYPE_UCHAR },
|
||
{ "DSP_MTU", smemof(wan_dsp_if_conf_t, dsp_mtu), DTYPE_USHORT },
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
key_word_t chan_conftab[] = /* Channel configuration parameters */
|
||
{
|
||
{ "IDLETIMEOUT", smemof(wanif_conf_t, idle_timeout), DTYPE_UINT },
|
||
{ "HOLDTIMEOUT", smemof(wanif_conf_t, hold_timeout), DTYPE_UINT },
|
||
{ "X25_SRC_ADDR", smemof(wanif_conf_t, x25_src_addr), DTYPE_STR},
|
||
{ "X25_ACCEPT_DST_ADDR", smemof(wanif_conf_t, accept_dest_addr), DTYPE_STR},
|
||
{ "X25_ACCEPT_SRC_ADDR", smemof(wanif_conf_t, accept_src_addr), DTYPE_STR},
|
||
{ "X25_ACCEPT_USR_DATA", smemof(wanif_conf_t, accept_usr_data), DTYPE_STR},
|
||
{ "CIR", smemof(wanif_conf_t, cir), DTYPE_UINT },
|
||
{ "BC", smemof(wanif_conf_t, bc), DTYPE_UINT },
|
||
{ "BE", smemof(wanif_conf_t, be), DTYPE_UINT },
|
||
{ "MULTICAST", smemof(wanif_conf_t, mc), DTYPE_UCHAR},
|
||
{ "IPX", smemof(wanif_conf_t, enable_IPX), DTYPE_UCHAR},
|
||
{ "NETWORK", smemof(wanif_conf_t, network_number), DTYPE_UINT},
|
||
|
||
// { "PAP", smemof(wanif_conf_t, pap), DTYPE_UCHAR},
|
||
// { "CHAP", smemof(wanif_conf_t, chap), DTYPE_UCHAR},
|
||
// { "USERID", smemof(wanif_conf_t, userid), DTYPE_STR},
|
||
// { "PASSWD", smemof(wanif_conf_t, passwd), DTYPE_STR},
|
||
// { "SYSNAME", smemof(wanif_conf_t, sysname), DTYPE_STR},
|
||
//PPP profile kept in "wanif_conf_t.u.ppp"
|
||
// { "IP_MODE", offsetof(wanif_conf_t, u) + smemof(wan_sppp_if_conf_t, dynamic_ip), DTYPE_UINT},
|
||
|
||
{ "INARP", smemof(wanif_conf_t, inarp), DTYPE_UCHAR},
|
||
{ "INARPINTERVAL", smemof(wanif_conf_t, inarp_interval), DTYPE_UINT },
|
||
{ "INARP_RX", smemof(wanif_conf_t, inarp_rx), DTYPE_UCHAR},
|
||
{ "IGNORE_DCD", smemof(wanif_conf_t, ignore_dcd), DTYPE_UCHAR},
|
||
{ "IGNORE_CTS", smemof(wanif_conf_t, ignore_cts), DTYPE_UCHAR},
|
||
{ "IGNORE_KEEPALIVE", smemof(wanif_conf_t, ignore_keepalive), DTYPE_UCHAR},
|
||
{ "HDLC_STREAMING", smemof(wanif_conf_t, hdlc_streaming), DTYPE_UCHAR},
|
||
//{ "KEEPALIVE_TX_TIMER", smemof(wanif_conf_t, keepalive_tx_tmr), DTYPE_UINT },
|
||
//{ "KEEPALIVE_RX_TIMER", smemof(wanif_conf_t, keepalive_rx_tmr), DTYPE_UINT },
|
||
//{ "KEEPALIVE_ERR_MARGIN", smemof(wanif_conf_t, keepalive_err_margin), DTYPE_UINT },
|
||
//{ "SLARP_TIMER", smemof(wanif_conf_t, slarp_timer), DTYPE_UINT },
|
||
{ "TTL", smemof(wanif_conf_t, ttl), DTYPE_UCHAR },
|
||
|
||
{ "STATION" , smemof(wanif_conf_t, station), DTYPE_UCHAR },
|
||
{ "DYN_INTR_CFG", smemof(wanif_conf_t, if_down), DTYPE_UCHAR },
|
||
{ "GATEWAY", smemof(wanif_conf_t, gateway), DTYPE_UCHAR },
|
||
{ "TRUE_ENCODING_TYPE", smemof(wanif_conf_t,true_if_encoding), DTYPE_UCHAR },
|
||
|
||
/* ASYNC Options */
|
||
{ "ASYNC_MODE", smemof(wanif_conf_t, async_mode), DTYPE_UCHAR},
|
||
{ "ASY_DATA_TRANSPARENT", smemof(wanif_conf_t, asy_data_trans), DTYPE_UCHAR},
|
||
{ "RTS_HS_FOR_RECEIVE", smemof(wanif_conf_t, rts_hs_for_receive), DTYPE_UCHAR},
|
||
{ "XON_XOFF_HS_FOR_RECEIVE", smemof(wanif_conf_t, xon_xoff_hs_for_receive), DTYPE_UCHAR},
|
||
{ "XON_XOFF_HS_FOR_TRANSMIT",smemof(wanif_conf_t, xon_xoff_hs_for_transmit), DTYPE_UCHAR},
|
||
{ "DCD_HS_FOR_TRANSMIT", smemof(wanif_conf_t, dcd_hs_for_transmit), DTYPE_UCHAR},
|
||
{ "CTS_HS_FOR_TRANSMIT", smemof(wanif_conf_t, cts_hs_for_transmit), DTYPE_UCHAR},
|
||
{ "TX_BITS_PER_CHAR", smemof(wanif_conf_t, tx_bits_per_char), DTYPE_UINT },
|
||
{ "RX_BITS_PER_CHAR", smemof(wanif_conf_t, rx_bits_per_char), DTYPE_UINT },
|
||
{ "STOP_BITS", smemof(wanif_conf_t, stop_bits), DTYPE_UINT },
|
||
{ "PARITY", smemof(wanif_conf_t, parity), DTYPE_UCHAR },
|
||
{ "BREAK_TIMER", smemof(wanif_conf_t, break_timer), DTYPE_UINT },
|
||
{ "INTER_CHAR_TIMER", smemof(wanif_conf_t, inter_char_timer), DTYPE_UINT },
|
||
{ "RX_COMPLETE_LENGTH", smemof(wanif_conf_t, rx_complete_length), DTYPE_UINT },
|
||
{ "XON_CHAR", smemof(wanif_conf_t, xon_char), DTYPE_UINT },
|
||
{ "XOFF_CHAR", smemof(wanif_conf_t, xoff_char), DTYPE_UINT },
|
||
//{ "MPPP_PROT", smemof(wanif_conf_t, protocol), DTYPE_UCHAR},
|
||
{ "PROTOCOL", smemof(wanif_conf_t, protocol), DTYPE_UCHAR}, //note!! it is read, ignored and
|
||
//NOT written for everything but
|
||
//LIP ATM!
|
||
|
||
{ "ACTIVE_CH", smemof(wanif_conf_t, active_ch), DTYPE_UINT},
|
||
{ "SW_DEV_NAME", smemof(wanif_conf_t, sw_dev_name), DTYPE_STR},
|
||
|
||
{ "DLCI_TRACE_QUEUE", smemof(wanif_conf_t, max_trace_queue), DTYPE_UINT},
|
||
{ "MAX_TRACE_QUEUE", smemof(wanif_conf_t, max_trace_queue), DTYPE_UINT},
|
||
|
||
{ "TDMV_ECHO_OFF", offsetof(wanif_conf_t, tdmv)+smemof(wan_tdmv_if_conf_t, tdmv_echo_off), DTYPE_UCHAR},
|
||
{ "TDMV_CODEC", offsetof(wanif_conf_t, tdmv)+smemof(wan_tdmv_if_conf_t, tdmv_codec), DTYPE_UCHAR},
|
||
{ "TDMV_HWEC", offsetof(wanif_conf_t, hwec)+smemof(wan_hwec_if_conf_t, enable), DTYPE_UCHAR},
|
||
|
||
{ NULL, 0, 0 }
|
||
};
|
||
|
||
look_up_t conf_def_tables[] =
|
||
{
|
||
{ WANCONFIG_FR, fr_conftab },
|
||
{ WANCONFIG_X25, x25_conftab },
|
||
{ WANCONFIG_ADCCP, x25_conftab },
|
||
{ WANCONFIG_MPCHDLC, sppp_conftab},//chdlc_conftab },
|
||
{ WANCONFIG_MPPP, sppp_conftab},//chdlc_conftab },
|
||
{ WANCONFIG_MFR, fr_conftab },
|
||
{ WANCONFIG_SS7, ss7_conftab },
|
||
{ WANCONFIG_ADSL, adsl_conftab },
|
||
{ WANCONFIG_BSCSTRM, bscstrm_conftab },
|
||
//{ WANCONFIG_ATM, atm_conftab },
|
||
//{ WANCONFIG_LIP_ATM, atm_conftab },//not used
|
||
//{ WANCONFIG_MLINK_PPP, chdlc_conftab },
|
||
{ WANCONFIG_AFT, xilinx_conftab },
|
||
{ WANCONFIG_EDUKIT, edukit_conftab },
|
||
{ WANCONFIG_AFT_TE3, xilinx_conftab },
|
||
{ WANCONFIG_BITSTRM, bitstrm_conftab },
|
||
{ WANCONFIG_LAPB, lapb_annexg_conftab},
|
||
{ 0, NULL }
|
||
};
|
||
|
||
look_up_t conf_if_def_tables[] =
|
||
{
|
||
{ WANCONFIG_ATM, atm_if_conftab },
|
||
{ WANCONFIG_LIP_ATM, atm_if_conftab },
|
||
{ WANCONFIG_BITSTRM, bitstrm_if_conftab },
|
||
{ WANCONFIG_AFT, xilinx_if_conftab },
|
||
{ WANCONFIG_AFT_TE3, xilinx_if_conftab },
|
||
{ WANCONFIG_AFT_GSM, xilinx_if_conftab },
|
||
{ 0, NULL }
|
||
};
|
||
|
||
look_up_t conf_annexg_def_tables[] =
|
||
{
|
||
{ ANNEXG_LAPB, lapb_annexg_conftab },
|
||
{ ANNEXG_X25, x25_annexg_conftab },
|
||
{ ANNEXG_DSP, dsp_annexg_conftab },
|
||
{ 0, NULL }
|
||
};
|
||
|
||
look_up_t config_id_str[] =
|
||
{
|
||
{ WANCONFIG_PPP, (void*)"WAN_PPP" },
|
||
{ WANCONFIG_FR, (void*)"WAN_FR" },
|
||
{ WANCONFIG_LIP_ATM, (void*)"WAN_LIP_ATM" },
|
||
{ WANCONFIG_X25, (void*)"WAN_X25" },
|
||
{ WANCONFIG_CHDLC, (void*)"WAN_CHDLC" },
|
||
{ WANCONFIG_BSC, (void*)"WAN_BSC" },
|
||
{ WANCONFIG_HDLC, (void*)"WAN_HDLC" },
|
||
{ WANCONFIG_MPROT, (void*)"WAN_MULTPROT" },
|
||
{ WANCONFIG_MPPP, (void*)"WAN_MULTPPP" },
|
||
{ WANCONFIG_BITSTRM, (void*)"WAN_BITSTRM" },
|
||
{ WANCONFIG_EDUKIT, (void*)"WAN_EDU_KIT" },
|
||
{ WANCONFIG_SS7, (void*)"WAN_SS7" },
|
||
{ WANCONFIG_BSCSTRM, (void*)"WAN_BSCSTRM" },
|
||
{ WANCONFIG_ADSL, (void*)"WAN_ADSL" },
|
||
{ WANCONFIG_ADSL, (void*)"WAN_ETH" },
|
||
{ WANCONFIG_SDLC, (void*)"WAN_SDLC" },
|
||
{ WANCONFIG_ATM, (void*)"WAN_ATM" },
|
||
{ WANCONFIG_POS, (void*)"WAN_POS" },
|
||
{ WANCONFIG_AFT, (void*)"WAN_AFT" },
|
||
{ WANCONFIG_AFT_TE1, (void*)"WAN_AFT_TE1" },
|
||
{ WANCONFIG_AFT_56K, (void*)"WAN_AFT_56K" },
|
||
{ WANCONFIG_AFT_TE3, (void*)"WAN_AFT_TE3" },
|
||
{ WANCONFIG_AFT, (void*)"WAN_XILINX" },
|
||
{ WANCONFIG_MFR, (void*)"WAN_MFR" },
|
||
{ WANCONFIG_LAPB, (void*)"WAN_LAPB" },
|
||
{ WANCONFIG_DEBUG, (void*)"WAN_DEBUG" },
|
||
{ WANCONFIG_ADCCP, (void*)"WAN_ADCCP" },
|
||
{ WANCONFIG_MLINK_PPP, (void*)"WAN_MLINK_PPP" },
|
||
{ WANCONFIG_TTY, (void*)"WAN_TTY" }, //????
|
||
{ WANCONFIG_AFT_ANALOG, (void*)"WAN_AFT_ANALOG" },
|
||
{ WANCONFIG_AFT_GSM, (void*)"WAN_AFT_GSM" },
|
||
{ WANCONFIG_AFT_ISDN_BRI, (void*)"WAN_AFT_ISDN_BRI" },
|
||
{ WANCONFIG_AFT_SERIAL, (void*)"WAN_AFT_SERIAL" },
|
||
{ 0, NULL, }
|
||
};
|
||
|
||
|
||
/*
|
||
* Configuration options values and their symbolic names.
|
||
*/
|
||
look_up_t sym_table[] =
|
||
{
|
||
/*----- General -----------------------*/
|
||
{ WANOPT_OFF, (void*)"OFF" },
|
||
{ WANOPT_ON, (void*)"ON" },
|
||
{ WANOPT_NO, (void*)"NO" },
|
||
{ WANOPT_YES, (void*)"YES" },
|
||
/*----- Interface type ----------------*/
|
||
{ WANOPT_RS232, (void*)"RS232" },
|
||
{ WANOPT_V35, (void*)"V35" },
|
||
/*----- Data encoding -----------------*/
|
||
{ WANOPT_NRZ, (void*)"NRZ" },
|
||
{ WANOPT_NRZI, (void*)"NRZI" },
|
||
{ WANOPT_FM0, (void*)"FM0" },
|
||
{ WANOPT_FM1, (void*)"FM1" },
|
||
|
||
/*----- Idle Line ----------------------*/
|
||
{ WANOPT_IDLE_FLAG, (void*)"FLAG" },
|
||
{ WANOPT_IDLE_MARK, (void*)"MARK" },
|
||
|
||
/*----- Link type ---------------------*/
|
||
{ WANOPT_POINTTOPOINT, (void*)"POINTTOPOINT" },
|
||
{ WANOPT_MULTIDROP, (void*)"MULTIDROP" },
|
||
/*----- Clocking ----------------------*/
|
||
{ WANOPT_EXTERNAL, (void*)"EXTERNAL" },
|
||
{ WANOPT_INTERNAL, (void*)"INTERNAL" },
|
||
/*----- Station -----------------------*/
|
||
{ WANOPT_DTE, (void*)"DTE" },
|
||
{ WANOPT_DCE, (void*)"DCE" },
|
||
{ WANOPT_CPE, (void*)"CPE" },
|
||
{ WANOPT_NODE, (void*)"NODE" },
|
||
{ WANOPT_SECONDARY, (void*)"SECONDARY" },
|
||
{ WANOPT_PRIMARY, (void*)"PRIMARY" },
|
||
/*----- Connection options ------------*/
|
||
{ WANOPT_PERMANENT, (void*)"PERMANENT" },
|
||
{ WANOPT_SWITCHED, (void*)"SWITCHED" },
|
||
{ WANOPT_ONDEMAND, (void*)"ONDEMAND" },
|
||
/*----- Frame relay in-channel signalling */
|
||
{ WANOPT_FR_ANSI, (void*)"ANSI" },
|
||
{ WANOPT_FR_Q933, (void*)"Q933" },
|
||
{ WANOPT_FR_LMI, (void*)"LMI" },
|
||
/*----- PPP IP Mode Options -----------*/
|
||
{ WANOPT_PPP_STATIC, (void*)"STATIC" },
|
||
{ WANOPT_PPP_HOST, (void*)"HOST" },
|
||
{ WANOPT_PPP_PEER, (void*)"PEER" },
|
||
/*----- CHDLC Protocol Options --------*/
|
||
/* DF for now { WANOPT_CHDLC_NO_DCD, (void*)"IGNORE_DCD" },
|
||
{ WANOPT_CHDLC_NO_CTS, (void*)"IGNORE_CTS" },
|
||
{ WANOPT_CHDLC_NO_KEEP, (void*)"IGNORE_KEEPALIVE"},
|
||
*/
|
||
{ WANOPT_PRI, (void*)"PRI" },
|
||
{ WANOPT_SEC, (void*)"SEC" },
|
||
|
||
/*------Read Mode ---------------------*/
|
||
{ WANOPT_INTR, (void*)"INT" },
|
||
{ WANOPT_POLL, (void*)"POLL" },
|
||
/*------- Async Options ---------------*/
|
||
{ WANOPT_ONE, (void*)"ONE" },
|
||
{ WANOPT_TWO, (void*)"TWO" },
|
||
{ WANOPT_ONE_AND_HALF, (void*)"ONE_AND_HALF" },
|
||
{ WANOPT_NONE, (void*)"NONE" },
|
||
{ WANOPT_EVEN, (void*)"EVEN" },
|
||
{ WANOPT_ODD, (void*)"ODD" },
|
||
|
||
{ WANOPT_TTY_SYNC, (void*)"SYNC" },
|
||
{ WANOPT_TTY_ASYNC, (void*)"ASYNC" },
|
||
|
||
|
||
/* TE1 T1/E1 defines */
|
||
/*------TE Cofngiuration --------------*/
|
||
|
||
{ WAN_MEDIA_56K, (void*)"56K" },
|
||
{ WAN_MEDIA_T1, (void*)"T1" },
|
||
{ WAN_MEDIA_E1, (void*)"E1" },
|
||
{ WAN_MEDIA_DS3, (void*)"DS3" },
|
||
{ WAN_MEDIA_STS1, (void*)"STS-1" },
|
||
{ WAN_MEDIA_E3, (void*)"E3" },
|
||
{ WAN_MEDIA_FXOFXS, (void*)"FXO/FXS" },
|
||
{ WAN_MEDIA_GSM, (void*)"GSM" },
|
||
{ WAN_MEDIA_BRI, (void*)"BRI" },
|
||
|
||
{ WAN_LCODE_AMI, (void*)"AMI" },
|
||
{ WAN_LCODE_B8ZS, (void*)"B8ZS" },
|
||
{ WAN_LCODE_HDB3, (void*)"HDB3" },
|
||
{ WAN_LCODE_B3ZS, (void*)"B3ZS" },
|
||
|
||
{ 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" },
|
||
|
||
{ 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" },
|
||
{ WAN_E1_120, (void*)"120OH" },
|
||
{ WAN_E1_75, (void*)"75OH" },
|
||
{ WAN_NORMAL_CLK, (void*)"NORMAL" },
|
||
{ WAN_MASTER_CLK, (void*)"MASTER" },
|
||
{ WAN_TE1_SIG_CAS, (void*)"CAS" },
|
||
{ WAN_TE1_SIG_CCS, (void*)"CCS" },
|
||
|
||
|
||
/* T3/E3 configuration */
|
||
{ 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" },
|
||
{ WAN_TE3_LIU_LB_NORMAL, (void*)"LB_NORMAL" },
|
||
{ WAN_TE3_LIU_LB_ANALOG, (void*)"LB_ANALOG" },
|
||
{ WAN_TE3_LIU_LB_REMOTE, (void*)"LB_REMOTE" },
|
||
{ WAN_TE3_LIU_LB_DIGITAL, (void*)"LB_DIGITAL" },
|
||
|
||
/*
|
||
{ WANCONFIG_PPP, (void*)"MP_PPP" },
|
||
{ WANCONFIG_CHDLC, (void*)"MP_CHDLC" },
|
||
{ WANCONFIG_FR, (void*)"MP_FR" },
|
||
{ WANOPT_NO, (void*)"RAW" },
|
||
{ WANOPT_NO, (void*)"HDLC" },
|
||
{ WANCONFIG_PPP, (void*)"PPP" },
|
||
{ WANCONFIG_CHDLC, (void*)"CHDLC" },
|
||
*/
|
||
//David
|
||
{ WANCONFIG_TTY, (void*)"TTY" },
|
||
{ WANCONFIG_MPPP, (void*)"MP_PPP" },
|
||
{ WANCONFIG_MPCHDLC, (void*)"MP_CHDLC" },
|
||
{ WANCONFIG_MFR, (void*)"MP_FR" },
|
||
{ WANCONFIG_LAPB, (void*)"MP_LAPB" },
|
||
{ WANOPT_NO, (void*)"RAW" },
|
||
{ WANCONFIG_HDLC, (void*)"HDLC" },
|
||
{ WANCONFIG_PPP, (void*)"PPP" },
|
||
{ WANCONFIG_CHDLC, (void*)"CHDLC" },
|
||
{ WANCONFIG_EDUKIT, (void*)"EDUKIT" },
|
||
{ WANCONFIG_LIP_ATM, (void*)"MP_ATM" },
|
||
|
||
/*-------------SS7 options--------------*/
|
||
{ WANOPT_SS7_ANSI, (void*)"ANSI" },
|
||
{ WANOPT_SS7_ITU, (void*)"ITU" },
|
||
{ WANOPT_SS7_NTT, (void*)"NTT" },
|
||
|
||
{ WANOPT_S50X, (void*)"S50X" },
|
||
{ WANOPT_S51X, (void*)"S51X" },
|
||
{ WANOPT_ADSL, (void*)"ADSL" },
|
||
{ WANOPT_ADSL, (void*)"S518" },
|
||
{ WANOPT_AFT, (void*)"AFT" },
|
||
|
||
/*-------------ADSL options--------------*/
|
||
{ 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" },
|
||
|
||
/* Backward compatible */
|
||
{ RFC_MODE_BRIDGED_ETH_LLC, (void*)"BLLC_OA" },
|
||
{ RFC_MODE_ROUTED_IP_LLC, (void*)"CIP_OA" },
|
||
{ LAN_INTERFACE, (void*)"LAN" },
|
||
{ WAN_INTERFACE, (void*)"WAN" },
|
||
|
||
{ 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_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"},
|
||
|
||
{ 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" },
|
||
|
||
{ WANOPT_ADSL_RX_BIN_DISABLE, (void*)"ADSL_RX_BIN_DISABLE" },
|
||
{ WANOPT_ADSL_RX_BIN_ENABLE, (void*)"ADSL_RX_BIN_ENABLE" },
|
||
|
||
{ 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" },
|
||
|
||
{ WANOPT_ADSL_EXPANDED_EXCHANGE, (void*)"ADSL_EXPANDED_EXCHANGE" },
|
||
{ WANOPT_ADSL_SHORT_EXCHANGE, (void*)"ADSL_SHORT_EXCHANGE" },
|
||
|
||
{ WANOPT_ADSL_CLOCK_CRYSTAL, (void*)"ADSL_CLOCK_CRYSTAL" },
|
||
{ WANOPT_ADSL_CLOCK_OSCILLATOR, (void*)"ADSL_CLOCK_OSCILLATOR" },
|
||
|
||
{ IBM4680, (void*)"IBM4680" },
|
||
{ IBM4680, (void*)"IBM4680" },
|
||
{ NCR2126, (void*)"NCR2126" },
|
||
{ NCR2127, (void*)"NCR2127" },
|
||
{ NCR1255, (void*)"NCR1255" },
|
||
{ NCR7000, (void*)"NCR7000" },
|
||
{ ICL, (void*)"ICL" },
|
||
|
||
// DSP_20
|
||
/*------- DSP Options -----------------*/
|
||
{ WANOPT_DSP_HPAD, (void*)"HPAD" },
|
||
{ WANOPT_DSP_TPAD, (void*)"TPAD" },
|
||
|
||
{ WANOPT_AUTO, (void*)"AUTO" },
|
||
{ WANOPT_MANUAL,(void*)"MANUAL" },
|
||
|
||
{ WAN_TDMV_ALAW, (void*)"ALAW" },
|
||
{ WAN_TDMV_MULAW,(void*)"MULAW" },
|
||
|
||
/*----- End ---------------------------*/
|
||
{ 0, NULL },
|
||
};
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
/****** Global Function Prototypes *************************************************/
|
||
|
||
int tokenize (char* str, char **tokens);
|
||
char* str_strip (char* str, char* s);
|
||
char* strupcase (char* str);
|
||
void* lookup (int val, look_up_t* table);
|
||
int name2val (char* name, look_up_t* table);
|
||
|
||
unsigned int dec_to_uint (unsigned char* str, int len);
|
||
|
||
void read_adsl_vci_vpi_list(wan_adsl_vcivpi_t* vcivpi_list, unsigned short* vcivpi_num);
|
||
|
||
extern int close (int);
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
conf_file_reader::conf_file_reader(int wanpipe_number)
|
||
{
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::conf_file_reader(%d)\n",
|
||
wanpipe_number));
|
||
|
||
//wanpipe number will be needed in many cases
|
||
this->wanpipe_number = wanpipe_number;
|
||
|
||
snprintf(conf_file_full_path, MAX_PATH_LENGTH, "%swanpipe%d.conf",
|
||
wanpipe_cfg_dir, wanpipe_number);
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
verbose = 1; /* verbosity level */
|
||
link_defs = NULL;
|
||
conf_file_ptr = NULL;
|
||
}
|
||
|
||
int conf_file_reader::init()
|
||
{
|
||
wandev_conf_t* linkconf;
|
||
sdla_fe_cfg_t* fe_cfg;
|
||
sdla_te_cfg_t* te_cfg;
|
||
wan_xilinx_conf_t* wan_xilinx_conf;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::init(%d)\n", wanpipe_number));
|
||
|
||
main_obj_list = new objects_list();
|
||
if(main_obj_list == NULL){
|
||
ERR_DBG_OUT(("Memory allocation failed for 'main_obj_list'!!\n"));
|
||
return 1;
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
link_defs = (link_def_t*)malloc(sizeof(link_def_t));
|
||
if (link_defs == NULL) {
|
||
ERR_DBG_OUT(("Memory allocation failed for 'link_defs'!!\n"));
|
||
return 1;
|
||
}
|
||
memset(link_defs, 0, sizeof(link_def_t));
|
||
|
||
snprintf(link_defs->name, WAN_DRVNAME_SZ, "wanpipe%d", wanpipe_number);
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
link_defs->linkconf = (wandev_conf_t*)malloc(sizeof(wandev_conf_t));
|
||
if (link_defs->linkconf == NULL){
|
||
ERR_DBG_OUT(("Memory allocation failed for 'link_defs->linkconf'!!\n"));
|
||
}
|
||
memset(link_defs->linkconf, 0, sizeof(wandev_conf_t));
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
linkconf = link_defs->linkconf;
|
||
|
||
linkconf->card_type = NOT_SET;
|
||
linkconf->config_id = PROTOCOL_NOT_SET;
|
||
linkconf->magic = ROUTER_MAGIC;
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
linkconf->mtu = 1500;
|
||
linkconf->udp_port = 9000;
|
||
linkconf->ttl = 255;
|
||
linkconf->ignore_front_end_status = 0;
|
||
|
||
wan_xilinx_conf = &linkconf->u.aft;
|
||
//wan_xilinx_conf->tdmv_span_no = 0;
|
||
linkconf->tdmv_conf.dchan = 0;//by default NOT used or DISABLED
|
||
//OR
|
||
//the actual value will be read from conf file
|
||
/*
|
||
linkconf->tdmv_conf.dchan = 24;//when media type will be known,
|
||
//must be set to a default value: 24-T1, 16-E1
|
||
//OR
|
||
//the actual value will be read from conf file
|
||
*/
|
||
//at this point hardware type is not known, so initialize the firmware to most common.
|
||
//good for all except EduKit.
|
||
snprintf(link_defs->firmware_file_path, MAX_PATH_LENGTH, "%sfirmware/%s",
|
||
wanpipe_cfg_dir, "cdual514.sfm");
|
||
|
||
link_defs->start_script = NO;
|
||
link_defs->stop_script = NO;
|
||
/////////////////////////////////////////////////////////////
|
||
|
||
//PCI config
|
||
linkconf->S514_CPU_no[0] = 'A';
|
||
linkconf->comm_port = WANOPT_PRI;
|
||
linkconf->auto_hw_detect = WANOPT_YES;
|
||
//serial config
|
||
linkconf->electrical_interface = WANOPT_V35;
|
||
|
||
//front end config
|
||
fe_cfg = &linkconf->fe_cfg;
|
||
te_cfg = &fe_cfg->cfg.te_cfg;
|
||
set_default_t1_configuration(fe_cfg);
|
||
|
||
//this is only for S514, for AFT it *must* always be "ALL" - no option to change it
|
||
snprintf(link_defs->active_channels_string, MAX_LEN_OF_ACTIVE_CHANNELS_STRING, "ALL");
|
||
return 0;
|
||
}
|
||
|
||
conf_file_reader::~conf_file_reader()
|
||
{
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::~conf_file_reader()\n"));
|
||
|
||
if(main_obj_list != NULL){
|
||
delete main_obj_list;
|
||
}
|
||
|
||
if(link_defs != NULL){
|
||
if(link_defs->linkconf != NULL){
|
||
free(link_defs->linkconf);
|
||
}
|
||
free(link_defs);
|
||
}
|
||
|
||
if(conf_file_ptr != NULL){
|
||
fclose(conf_file_ptr);
|
||
}
|
||
}
|
||
|
||
int conf_file_reader::read_conf_file()
|
||
{
|
||
int err = 0;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_conf_file()\n"));
|
||
|
||
conf_file_ptr = fopen(conf_file_full_path, "r");
|
||
if (conf_file_ptr == NULL) {
|
||
ERR_DBG_OUT(("Failed to open file: %s!!\n", conf_file_full_path));
|
||
}
|
||
|
||
err = read_devices_section(conf_file_ptr);
|
||
if (err){
|
||
return err;
|
||
}
|
||
|
||
err = read_wanpipe_section(conf_file_ptr);
|
||
if (err){
|
||
return err;
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
sdla_fe_cfg_t* fe_cfg = &link_defs->linkconf->fe_cfg;
|
||
//sdla_te_cfg_t* te_cfg = &fe_cfg->cfg.te_cfg;
|
||
#if DBG_FLAG
|
||
sdla_te3_cfg_t* te3_cfg= &fe_cfg->cfg.te3_cfg;
|
||
#endif
|
||
|
||
switch(link_defs->card_version)
|
||
{
|
||
case AFT_ADPTR_2SERIAL_V35X21: /* AFT (shark) Serial card */
|
||
fe_cfg->media = WAN_MEDIA_SERIAL;
|
||
break;
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
Debug(DBG_CONF_FILE_READER, ("%s(): fe_cfg->media: 0x%x\n",__FUNCTION__,
|
||
fe_cfg->media));
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("%s(): fe_cfg->line_no: %d\n",__FUNCTION__,
|
||
fe_cfg->line_no));
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("%s(): te3_cfg->fcs: %d\n",__FUNCTION__,
|
||
te3_cfg->fcs));
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("%s(): te3_cfg->liu_cfg.rx_equal: %d\n",__FUNCTION__,
|
||
te3_cfg->liu_cfg.rx_equal));
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("%s(): te3_cfg->liu_cfg.taos: %d\n",__FUNCTION__,
|
||
te3_cfg->liu_cfg.taos));
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
//if S514X card, get the version (S514-1/2/3...7)
|
||
if(link_defs->linkconf->card_type == WANOPT_S51X){
|
||
|
||
if(get_pci_adapter_type_from_wanpipe_conf_file( conf_file_full_path,
|
||
&link_defs->card_version) == NO){
|
||
return ERR_CONFIG;
|
||
}else{
|
||
Debug(DBG_CONF_FILE_READER,
|
||
("conf_file_reader: S514 card_version 0x%04X\n", link_defs->card_version));
|
||
}
|
||
}
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
if(link_defs->linkconf->card_type == WANOPT_ADSL){
|
||
|
||
wandev_conf_t *linkconf = link_defs->linkconf;
|
||
wan_adsl_conf_t* adsl_cfg = &linkconf->u.adsl;
|
||
|
||
//change the 'sub_config_id' accordingly
|
||
switch(adsl_cfg->EncapMode)
|
||
{
|
||
case RFC_MODE_BRIDGED_ETH_LLC:
|
||
case RFC_MODE_BRIDGED_ETH_VC:
|
||
link_defs->sub_config_id = PROTOCOL_ETHERNET;
|
||
break;
|
||
|
||
case RFC_MODE_ROUTED_IP_LLC:
|
||
case RFC_MODE_ROUTED_IP_VC:
|
||
case RFC_MODE_RFC1577_ENCAP:
|
||
link_defs->sub_config_id = PROTOCOL_IP;
|
||
break;
|
||
|
||
case RFC_MODE_PPP_LLC:
|
||
case RFC_MODE_PPP_VC:
|
||
link_defs->sub_config_id = WANCONFIG_MPPP;
|
||
break;
|
||
}//switch(adsl_cfg->EncapMode)
|
||
}//if()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||
int current_line_number = 0;
|
||
err = read_interfaces_section(
|
||
conf_file_ptr, //FILE* file,
|
||
main_obj_list, //objects_list* parent_objects_list,
|
||
NULL, //char* parent_dev_name,
|
||
¤t_line_number//int* current_line_number
|
||
);
|
||
|
||
if (err){
|
||
return err;
|
||
}
|
||
|
||
|
||
return err;
|
||
}
|
||
|
||
/*============================================================================
|
||
*
|
||
*/
|
||
int conf_file_reader::read_devices_section(FILE* file)
|
||
{
|
||
int err = 0;
|
||
char* conf; /* -> section buffer */
|
||
char* key; /* -> current configuration record */
|
||
int len; /* record length */
|
||
char *token[MAX_TOKENS];
|
||
|
||
int toknum;
|
||
int config_id = 0;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_devices_section()\n"));
|
||
|
||
/* Read [devices] section */
|
||
conf = read_conf_section(file, "devices");
|
||
if (conf == NULL){
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
//Debug(DBG_CONF_FILE_READER, ("conf:%s\n", conf));
|
||
|
||
/* For the record in [devices] section create a link definition
|
||
* structure and link it to the list of link definitions.
|
||
*/
|
||
//Current wanpipe#.conf may have only *one* device in the [devices] section.
|
||
key = conf;
|
||
len = strlen(key) + 1;
|
||
|
||
toknum = tokenize(key, token);
|
||
if(toknum < 2){
|
||
ERR_DBG_OUT(("Invalid number of tokens (%d) in [devices] section!!\n", toknum));
|
||
err = ERR_CONFIG;
|
||
goto done;
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("token[1]:%s\n", token[1]));
|
||
|
||
strupcase(token[1]);
|
||
config_id = name2val(token[1], config_id_str);
|
||
if (!config_id) {
|
||
ERR_DBG_OUT((" * Device config_id %s is invalid!\n", token[1]));
|
||
err = ERR_CONFIG;
|
||
goto done;
|
||
}
|
||
//store the real config_id
|
||
link_defs->linkconf->config_id = config_id;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Original link_defs->linkconf->config_id: %d\n",
|
||
link_defs->linkconf->config_id));
|
||
|
||
switch(link_defs->linkconf->config_id)
|
||
{
|
||
case WANCONFIG_AFT_TE3:
|
||
//aways keep it as just AFT to allow to LIP configuration
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;
|
||
link_defs->card_version = A300_ADPTR_U_1TE3;
|
||
break;
|
||
|
||
case WANCONFIG_AFT: /* AFT Original Hardware Support */
|
||
link_defs->card_version = A101_ADPTR_1TE1;
|
||
break;
|
||
|
||
case WANCONFIG_AFT_TE1: /* AFT Quad Hardware Support */
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;
|
||
link_defs->card_version = A104_ADPTR_4TE1;
|
||
break;
|
||
|
||
case WANCONFIG_AFT_ANALOG: /* AFT (shark) analog card */
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;
|
||
link_defs->card_version = A200_ADPTR_ANALOG;
|
||
break;
|
||
|
||
case WANCONFIG_AFT_56K: /* AFT 56k DDS */
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;//WANCONFIG_AFT_56K;
|
||
link_defs->card_version = AFT_ADPTR_56K;
|
||
break;
|
||
|
||
case WANCONFIG_AFT_ISDN_BRI: /* AFT (shark) ISDN BRI card */
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;
|
||
link_defs->card_version = AFT_ADPTR_ISDN;
|
||
break;
|
||
|
||
case WANCONFIG_AFT_SERIAL: /* AFT (shark) Serial card */
|
||
link_defs->linkconf->config_id = WANCONFIG_AFT;
|
||
link_defs->card_version = AFT_ADPTR_2SERIAL_V35X21;//this will indicate "Serial" card, number of ports is not important.
|
||
break;
|
||
}
|
||
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Updated link_defs->linkconf->config_id: %d\n",
|
||
link_defs->linkconf->config_id));
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("token[0]:%s\n", token[0]));
|
||
//store the section name i.g. [wanpipe2]
|
||
strncpy(link_defs->name, token[0], WAN_DRVNAME_SZ);
|
||
|
||
//check the start/stop scripts exist for the wanpipe#
|
||
link_defs->start_script = check_wanpipe_start_script_exist(link_defs->name);
|
||
link_defs->stop_script = check_wanpipe_stop_script_exist(link_defs->name);
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("link_defs->start_script:%d\n", link_defs->start_script));
|
||
Debug(DBG_CONF_FILE_READER, ("link_defs->stop_script:%d\n", link_defs->stop_script));
|
||
|
||
//this is for the 'Comment'
|
||
if ((toknum > 2) && token[2]){
|
||
link_defs->descr = strdup(token[2]);
|
||
Debug(DBG_CONF_FILE_READER, ("Comment for the wanpipe:%s\n", link_defs->descr));
|
||
}
|
||
|
||
done:
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("read_devices_section() - End (err:%d)\n", err));
|
||
|
||
free(conf);
|
||
return err;
|
||
}
|
||
|
||
|
||
/*============================================================================
|
||
*
|
||
*/
|
||
int conf_file_reader::read_wanpipe_section(FILE* file)
|
||
{
|
||
int err = 0;
|
||
int len = 0;
|
||
key_word_t* conf_table = (key_word_t*)lookup(link_defs->linkconf->config_id, conf_def_tables);
|
||
char* conf_rec;
|
||
char *token[MAX_TOKENS];
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_wanpipe_section()\n"));
|
||
|
||
link_defs->conf = read_conf_section(file, link_defs->name);
|
||
if(link_defs->conf == NULL){
|
||
ERR_DBG_OUT(("Failed to read '%s' section!!\n", link_defs->name));
|
||
err = ERR_CONFIG;
|
||
}
|
||
|
||
/* Parse link configuration */
|
||
for (conf_rec = link_defs->conf; *conf_rec; conf_rec += len) {
|
||
|
||
int toknum;
|
||
|
||
len = strlen(conf_rec) + 1;
|
||
toknum = tokenize(conf_rec, token);
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("toknum: %d\n", toknum));
|
||
|
||
if(toknum < 2) {
|
||
ERR_DBG_OUT(("Invalid number of tokens (%d) in 'wanpipe' section!!\n", toknum));
|
||
return ERR_CONFIG;
|
||
}
|
||
Debug(DBG_CONF_FILE_READER, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER, ("token[1]: %s\n", token[1]));
|
||
|
||
/* Look up a keyword first in common, then in media-specific
|
||
* configuration definition tables.
|
||
*/
|
||
strupcase(token[0]);
|
||
//common key value
|
||
err = set_conf_param(token[0], token[1],
|
||
common_conftab, link_defs->linkconf, sizeof(wandev_conf_t),link_defs, NULL);
|
||
|
||
// 'config_id' specific
|
||
if ((err < 0) && (conf_table != NULL)){
|
||
err = set_conf_param(token[0], token[1],
|
||
conf_table, &link_defs->linkconf->u, sizeof(link_defs->linkconf->u), link_defs, NULL);
|
||
}
|
||
|
||
if(err < 0) {
|
||
ERR_DBG_OUT((" * Unknown parameter %s!\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
if (err){
|
||
ERR_DBG_OUT(("Error parsing configuration file!\n"));
|
||
return err;
|
||
}
|
||
}
|
||
|
||
return err;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Read configuration file section.
|
||
* Return a pointer to memory filled with key entries read from given
|
||
* section or NULL if section is not found. Each key is a zero-terminated
|
||
* ASCII string with no leading spaces and comments. The last key is
|
||
* followed by an empty string.
|
||
* Note: memory is allocated dynamically and must be released by the
|
||
* caller.
|
||
*/
|
||
char* conf_file_reader::read_conf_section (FILE* file, char* section)
|
||
{
|
||
char key[MAX_CFGLINE]; /* key buffer */
|
||
char* buf = NULL;
|
||
int found = 0, offs = 0, len, buf_len = 0;
|
||
int dbg_len = 0;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_conf_section ():%s\n", section));
|
||
|
||
rewind(file);
|
||
|
||
while ((len = read_conf_record(file, key, MAX_CFGLINE)) > 0) {
|
||
char* tmp;
|
||
|
||
dbg_len += len;
|
||
|
||
if (found) {
|
||
|
||
if (*key == '['){
|
||
break; /* end of section */
|
||
}
|
||
|
||
if (buf){
|
||
buf_len = offs+len+1;
|
||
tmp = (char*)realloc(buf, offs + len + 1);
|
||
}else{
|
||
tmp = (char*)malloc(len + 1);
|
||
buf_len = len+1;
|
||
}
|
||
|
||
if (tmp) {
|
||
buf = tmp;
|
||
strlcpy(&buf[offs], key, buf_len-offs);
|
||
offs += len;
|
||
buf[offs] = '\0';
|
||
}else{
|
||
/* allocation failed */
|
||
ERR_DBG_OUT(("Failed to allocate memory!\n"));
|
||
break;
|
||
}
|
||
|
||
}else if (*key == '[') {
|
||
//getting here on the 1-st pass
|
||
tmp = strchr(key, ']');
|
||
if (tmp != NULL) {
|
||
*tmp = '\0';
|
||
if (strcmp(&key[1], section) == 0) {
|
||
if (verbose){
|
||
printf(" ****** Reading section [%s]...\n", section);
|
||
found = 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if (verbose && !found){
|
||
//printf(" * section [%s] not found!\n", section);
|
||
}
|
||
}//while()
|
||
|
||
/*
|
||
char* dbg_ptr;
|
||
int counter=0;
|
||
Debug(DBG_CONF_FILE_READER, ("\nprinting [%s] section buffer:\n", section));
|
||
for(dbg_ptr=buf; counter++ < dbg_len; dbg_ptr++){
|
||
//Debug(DBG_CONF_FILE_READER, ("%c", *dbg_ptr));
|
||
if(isprint(*dbg_ptr) || isspace(*dbg_ptr)){
|
||
Debug(DBG_CONF_FILE_READER, ("%c", *dbg_ptr));
|
||
}
|
||
}
|
||
Debug(DBG_CONF_FILE_READER, ("\n\n"));
|
||
*/
|
||
|
||
//Debug(DBG_CONF_FILE_READER, ("returning buf: %p\n", buf));
|
||
|
||
return buf;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Read a single record from the configuration file.
|
||
* Read configuration file stripping comments and leading spaces until
|
||
* non-empty line is read. Copy it to the destination buffer.
|
||
*
|
||
* Return string length (incl. terminating zero) or 0 if end of file has been
|
||
* reached.
|
||
*/
|
||
int conf_file_reader::read_conf_record (FILE* file, char* key, int max_len)
|
||
{
|
||
char buf[MAX_CFGLINE]; /* line buffer */
|
||
|
||
//Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_conf_record():key: %s\n", key));
|
||
|
||
while (fgets(buf, MAX_CFGLINE, file)) {
|
||
|
||
char* str;
|
||
int len;
|
||
|
||
/* Strip leading spaces and tabs */
|
||
for (str = buf; *str && strchr(" \t", *str); ++str){
|
||
;
|
||
}
|
||
|
||
/* Skip comments and empty lines */
|
||
len = strcspn(str, "#;\n\r");
|
||
if (len) {
|
||
str[len] = '\0';
|
||
|
||
//Debug(DBG_CONF_FILE_READER, ("read_conf_record():str: %s\n", str));
|
||
|
||
strlcpy(key, str, max_len);
|
||
return len + 1;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Build a list of channel definitions.
|
||
*/
|
||
/*
|
||
* sample output
|
||
key: w3g1 = wanpipe3, , STACK, Comment
|
||
key: w3g1ppp = wanpipe3, , WANPIPE, ppp, ppp.ppp1
|
||
key: w3g2 = wanpipe3, , STACK, Comment
|
||
key: w3g2f16 = wanpipe3, 16, WANPIPE, fr, fr.fr2
|
||
key: w3g2f17 = wanpipe3, 17, API, fr, fr.fr2
|
||
key: w3g3 = wanpipe3, , API, Comment
|
||
|
||
w5g1 = wanpipe5, , STACK, Comment
|
||
w5g1tty0 = wanpipe5, 0, TTY, tty, tty.tty1
|
||
|
||
|
||
key: w3g1 = wanpipe3, , STACK, Comment
|
||
token[0]: w3g1
|
||
token[1]: wanpipe3
|
||
token[2]:
|
||
token[3]: STACK
|
||
token[4]: Comment
|
||
|
||
=========================
|
||
key: w3g1ppp = wanpipe3, , WANPIPE, ppp, ppp.ppp1
|
||
token[0]: w3g1ppp
|
||
token[1]: wanpipe3
|
||
token[2]:
|
||
token[3]: WANPIPE
|
||
token[4]: ppp
|
||
token[5]: ppp.ppp1
|
||
|
||
=========================
|
||
key: w3g2 = wanpipe3, , STACK, Comment
|
||
token[0]: w3g2
|
||
token[1]: wanpipe3
|
||
token[2]:
|
||
token[3]: STACK
|
||
token[4]: Comment
|
||
|
||
=========================
|
||
key: w3g2f16 = wanpipe3, 16, WANPIPE, fr, fr.fr2
|
||
token[0]: w3g2f16
|
||
token[1]: wanpipe3
|
||
token[2]: 16
|
||
token[3]: WANPIPE
|
||
token[4]: fr
|
||
token[5]: fr.fr2
|
||
|
||
=========================
|
||
key: w3g2f17 = wanpipe3, 17, API, fr, fr.fr2
|
||
token[0]: w3g2f17
|
||
token[1]: wanpipe3
|
||
token[2]: 17
|
||
token[3]: API
|
||
token[4]: fr
|
||
token[5]: fr.fr2
|
||
|
||
=========================
|
||
key: w3g3 = wanpipe3, , API, Comment
|
||
token[0]: w3g3
|
||
token[1]: wanpipe3
|
||
token[2]:
|
||
token[3]: API
|
||
token[4]: Comment
|
||
|
||
=========================
|
||
*/
|
||
int conf_file_reader::read_interfaces_section(
|
||
FILE* file,
|
||
objects_list* parent_objects_list,
|
||
char* parent_dev_name,
|
||
int* current_line_number
|
||
)
|
||
{
|
||
int err = 0;
|
||
char* conf; /* -> section buffer */
|
||
char* key; /* -> current configuration record */
|
||
int len = 0; /* record length */
|
||
char *token[MAX_TOKENS];
|
||
char dev_name_backup[LEN_OF_DBG_BUFF];
|
||
int local_line_number = 0;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::read_interfaces_section()\n"));
|
||
|
||
if(parent_dev_name != NULL){
|
||
Debug(DBG_CONF_FILE_READER, (" 'parent_dev_name': %s\n", parent_dev_name));
|
||
}else{
|
||
Debug(DBG_CONF_FILE_READER, (" 'parent_dev_name' is NULL\n"));
|
||
}
|
||
|
||
/* Read [interfaces] section */
|
||
conf = read_conf_section(file, "interfaces");
|
||
if (conf == NULL){
|
||
ERR_DBG_OUT(("Failed to read '[interfaces]' section!\n"));
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
/* For each record in [interfaces] section create channel definition structure.
|
||
* If channel is usedby STACK, read channels belonging to this stack.
|
||
*/
|
||
for (key = conf; !err && *key; key += len) {
|
||
int toknum;
|
||
char *channel_sect;
|
||
list_element_chan_def* list_el_chan_def = NULL;
|
||
chan_def_t* chandef = NULL;
|
||
wanif_conf_t* chanconf = NULL;
|
||
|
||
len = strlen(key) + 1;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("key: %s\n", key));
|
||
|
||
//have to start parsing at the line passed to this function,
|
||
//all the preceeding lines were already parsed
|
||
if(local_line_number != *current_line_number){
|
||
Debug(DBG_CONF_FILE_READER, ("skipping line: %d, key: %s\n", local_line_number, key));
|
||
local_line_number++;
|
||
//key += len;
|
||
continue;
|
||
}
|
||
|
||
toknum = tokenize(key, token);
|
||
if (toknum < 4){
|
||
ERR_DBG_OUT(("Invalid number of tokens: %d, in key:%s. Expected at least 4!\n",
|
||
toknum, key));
|
||
return ERR_CONFIG;
|
||
//continue;
|
||
}
|
||
/*
|
||
for(indx=0; indx < toknum; indx++){
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[%d]: %s\n", indx, token[indx]));
|
||
}
|
||
*/
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("\n ========================= \n"));
|
||
|
||
//use copy of the name because 'strstr()' inserts nulls and it
|
||
//will break things.
|
||
snprintf(dev_name_backup, LEN_OF_DBG_BUFF, token[0]);
|
||
|
||
if(parent_dev_name != NULL){
|
||
|
||
char parent_dev_name_backup[LEN_OF_DBG_BUFF];
|
||
|
||
#if defined(__LINUX__) && !BSD_DEBG
|
||
snprintf(parent_dev_name_backup, WAN_IFNAME_SZ, "%s",
|
||
parent_dev_name);
|
||
#elif (defined __FreeBSD__) || (defined __OpenBSD__) || defined(__NetBSD__) || BSD_DEBG
|
||
|
||
//on BSD parent device name ends with a digit, but digits are illigal in
|
||
//the middle of upper (or any) layer names
|
||
snprintf(parent_dev_name_backup, WAN_IFNAME_SZ, "%s",
|
||
replace_numeric_with_char(parent_dev_name));
|
||
#endif
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("searching '%s' in '%s'\n",
|
||
parent_dev_name_backup, dev_name_backup));
|
||
|
||
//check this line belongs to the parent device
|
||
if(strstr(dev_name_backup, parent_dev_name_backup) == NULL){
|
||
//if not, return from the recursive call.
|
||
Debug(DBG_CONF_FILE_READER, ("this line does NOT belong to parent device: %s\n",
|
||
parent_dev_name));
|
||
return 0;
|
||
}else{
|
||
Debug(DBG_CONF_FILE_READER, ("this line does BELONGS to parent device: %s\n",
|
||
parent_dev_name));
|
||
}
|
||
}
|
||
|
||
//allocate and initialize channel definition structure
|
||
list_el_chan_def = new list_element_chan_def();
|
||
chandef = &list_el_chan_def->data;
|
||
chanconf = chandef->chanconf;
|
||
|
||
snprintf(chandef->name, WAN_IFNAME_SZ, token[0]);
|
||
snprintf(chandef->addr, MAX_ADDR_STR_LEN, token[2]);
|
||
|
||
//NOTE: 'atoi()' returns zero if it failes AND if number
|
||
//is actually zero.
|
||
if(atoi(chandef->addr) == 0){
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("no valid 'chandef->addr', using 'list->get_size()': %d\n",
|
||
parent_objects_list->get_size()));
|
||
|
||
//1. There is nothing at all (blank space instead of a number).
|
||
// It is possible for a STACK or PPP interface where
|
||
// there is no "address" or "dlci number".
|
||
//OR
|
||
//2. For TTY zero is a *valid* number.
|
||
//OR
|
||
//3. For WANCONFIG_MFR there can be "auto" instead of the "dlci number".
|
||
// In this case there must be only one dlci/interface and '1' will mean "auto".
|
||
//
|
||
// Current 'size' of the list will be actually the sequence number. Start from 1.
|
||
// 0+1
|
||
snprintf(chandef->addr, MAX_ADDR_STR_LEN, "%d", parent_objects_list->get_size() + 1);
|
||
}
|
||
|
||
if(toknum == 6){
|
||
if(strcmp(token[4],"tty") == 0){
|
||
strlcpy(chandef->addr, token[2], MAX_ADDR_STR_LEN);
|
||
}
|
||
}
|
||
//print 'addr' after all the updates
|
||
Debug(DBG_CONF_FILE_READER, ("Final 'chandef->addr': %s\n", chandef->addr));
|
||
|
||
if (toknum > 5){
|
||
chanconf->config_id = get_config_id_from_profile(token[4]);
|
||
if(chanconf->config_id == PROTOCOL_NOT_SET){
|
||
ERR_DBG_OUT(("Invalid 'config_id': %s in profile!\n", token[4]));
|
||
return ERR_CONFIG;
|
||
}
|
||
}
|
||
|
||
chandef->usedby = get_used_by_integer_value(token[3]);
|
||
switch(chandef->usedby)
|
||
{
|
||
case WANPIPE:
|
||
case API:
|
||
case TDM_API:
|
||
case BRIDGE:
|
||
case BRIDGE_NODE:
|
||
//case ANNEXG:
|
||
case TDM_VOICE:
|
||
case TDM_VOICE_API:
|
||
case TTY:
|
||
case PPPoE:
|
||
case WP_NETGRAPH:
|
||
//do nothing special
|
||
break;
|
||
|
||
case STACK:
|
||
//allocate new object list for THIS stack
|
||
list_el_chan_def->next_objects_list = new objects_list();
|
||
if(list_el_chan_def->next_objects_list == NULL){
|
||
ERR_DBG_OUT(("Memory allocation failed for 'next_objects_list'!!\n"));
|
||
return ERR_CONFIG;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
ERR_DBG_OUT(("Unsupported 'usedby' string: '%s' for interface: %s!\n",
|
||
token[3], token[0]));
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
channel_sect=strdup(token[0]);
|
||
|
||
if (toknum > 5){
|
||
//there is LIP layer
|
||
char *section=strdup(token[5]);
|
||
|
||
/* X25_SW */
|
||
if (toknum > 7){
|
||
if (toknum > 6)
|
||
chandef->virtual_addr = strdup(token[6]);
|
||
if (toknum > 7)
|
||
chandef->real_addr = strdup(token[7]);
|
||
if (toknum > 8)
|
||
chandef->label = strdup(token[8]);
|
||
}else{
|
||
if (toknum > 6)
|
||
chandef->label = strdup(token[6]);
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT,
|
||
("calling 'chandef->conf_profile = read_conf_section(file, section: %s)'\n",
|
||
section));
|
||
|
||
//read the profile
|
||
chandef->conf_profile = read_conf_section(file, section);
|
||
free(section);
|
||
|
||
}else{
|
||
chandef->conf_profile = NULL;
|
||
}//if(toknum > 5)
|
||
|
||
chandef->conf = read_conf_section(file, channel_sect);
|
||
free(channel_sect);
|
||
|
||
//If 'chanconf->config_id' is 0, it means it is NOT a LIP Interface,
|
||
//it is Hardware Interface, so it will have the same config_id as
|
||
//the actual Hardware which is WANCONFIG_HDLC.
|
||
//Note, that 'link_defs->linkconf->config_id' can NOT always be used because
|
||
//for example, on S514 with LIP layer it will be set to WAN_MULTPROT or WAN_MULTPPP,
|
||
//which indicates PPP!!! Inconsistency of conf file again.
|
||
|
||
if(chanconf->config_id == 0){
|
||
//Right now 'WANCONFIG_MPPP' is the same as 'WANCONFIG_MPROT',
|
||
//but in case it changed one day, check for both.
|
||
if(link_defs->linkconf->config_id == WANCONFIG_MPPP ||
|
||
link_defs->linkconf->config_id == WANCONFIG_MPROT){
|
||
|
||
chanconf->config_id = WANCONFIG_HDLC;
|
||
}else{
|
||
chanconf->config_id = link_defs->linkconf->config_id;
|
||
}
|
||
}
|
||
|
||
/*
|
||
if(chanconf->config_id == WANCONFIG_AFT || chanconf->config_id == WANCONFIG_AFT_TE3){
|
||
chanconf->config_id = WANCONFIG_HDLC;
|
||
}
|
||
*/
|
||
|
||
//now, when configuration was read to a buffer, set all structures
|
||
//to real values
|
||
err = configure_chan(chandef, chanconf->config_id);
|
||
if (err){
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
if(parent_objects_list != NULL){
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("inserting interface: %s.\n", token[0]));
|
||
|
||
if(parent_objects_list->insert(list_el_chan_def) != LIST_ACTION_OK){
|
||
ERR_DBG_OUT(("Failed to insert interface %s to list!\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
//advance the global 'current_line_number' for the next iteration
|
||
Debug(DBG_CONF_FILE_READER, ("old current_line_number: %d\n", *current_line_number));
|
||
(*current_line_number)++;
|
||
Debug(DBG_CONF_FILE_READER, ("new current_line_number: %d\n", *current_line_number));
|
||
|
||
//update the local one in order not skip the next line.
|
||
local_line_number = *current_line_number;
|
||
}else{
|
||
ERR_DBG_OUT(("Error: channels list pointer is NULL!!\n"));
|
||
return ERR_CONFIG;
|
||
}
|
||
|
||
if(chandef->usedby == STACK){
|
||
//the next interface (line in the file) we read belongs to this STACK,
|
||
//not to the original 'parent_objects_list'.
|
||
//NOTE: recursive call!!
|
||
err = read_interfaces_section(
|
||
file,
|
||
(objects_list*)list_el_chan_def->next_objects_list,
|
||
token[0],
|
||
current_line_number
|
||
);
|
||
}//if()
|
||
|
||
}//for()
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
/*============================================================================
|
||
* Set configuration parameter.
|
||
* Look up a keyword in configuration description table to find offset
|
||
* and data type of the configuration parameter into configuration data
|
||
* buffer. Convert parameter to apporriate data type and store it the
|
||
* configuration data buffer.
|
||
*
|
||
* Return: 0 - success
|
||
* 1 - error
|
||
* -1 - not found
|
||
*/
|
||
int conf_file_reader::set_conf_param (char* key, char* val, key_word_t* dtab,
|
||
void* conf, int size, link_def_t* lnks_def, chan_def_t* chan_def)
|
||
{
|
||
unsigned int tmp = 0;
|
||
|
||
// Debug(DBG_CONF_FILE_READER, ("conf_file_reader::set_conf_param()\n"));
|
||
// Debug(DBG_CONF_FILE_READER, ("key ::::%s\n", key));
|
||
|
||
/* Search a keyword in configuration definition table */
|
||
for (; dtab->keyword && strcmp(dtab->keyword, key); ++dtab){
|
||
;
|
||
}
|
||
|
||
if(dtab->keyword == NULL){
|
||
//searched to end of the table.
|
||
Debug(DBG_CONF_FILE_READER, ("key not found in the table!! key: %s\n", key));
|
||
return -1; /* keyword not found */
|
||
}
|
||
|
||
/* Interpert parameter value according to its data type */
|
||
if (dtab->dtype == DTYPE_FILENAME && lnks_def != NULL) {
|
||
|
||
if(strcmp(key, "FIRMWARE") == 0){
|
||
Debug(DBG_CONF_FILE_READER, ("file name: %s\n", val));
|
||
snprintf(lnks_def->firmware_file_path, MAX_PATH_LENGTH, val);
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
if (verbose){
|
||
printf(" * Setting %s to %s\n", key, val);
|
||
}
|
||
|
||
if (dtab->dtype == DTYPE_STR) {
|
||
strlcpy((char*)conf + dtab->offset, val, size-dtab->offset);
|
||
return 0;
|
||
}
|
||
|
||
if( !isdigit(*val) ||
|
||
strcmp(key, "ACTIVE_CH") == 0 ||
|
||
strcmp(key, "LBO") == 0 ||
|
||
strcmp(key, "MEDIA") == 0 || /* old style for FE_MEDIA */
|
||
strcmp(key, "FE_MEDIA") == 0 ||
|
||
strcmp(key, "TDMV_HWEC_MAP") == 0 ) {
|
||
|
||
look_up_t* sym;
|
||
unsigned int tmp_ch;
|
||
|
||
FUNC_DBG();
|
||
|
||
strupcase(val);
|
||
for (sym = sym_table; sym->ptr && strcmp((char*)sym->ptr, val); ++sym){
|
||
;
|
||
}
|
||
|
||
if (sym->ptr == NULL) {
|
||
/* TE1 */
|
||
if(strcmp(key, "TDMV_HWEC_MAP")){
|
||
if (strcmp(key, "ACTIVE_CH")) {
|
||
ERR_DBG_OUT((" * invalid term %s ...\n", val));
|
||
return -1;
|
||
}
|
||
|
||
if(lnks_def != NULL){
|
||
/* TE1 Convert active channel string to ULONG */
|
||
tmp_ch = parse_active_channel(val, lnks_def->linkconf->fe_cfg.media);
|
||
if (tmp_ch == 0){
|
||
ERR_DBG_OUT(("Illegal active channel range for media type ! (%s).\n", val));
|
||
return -1;
|
||
}
|
||
tmp = (unsigned int)tmp_ch;
|
||
}
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Active Channels val: ")); Debug(DBG_CONF_FILE_READER, ("%s\n", val));
|
||
Debug(DBG_CONF_FILE_READER, ("Active Channels int tmp: ")); Debug(DBG_CONF_FILE_READER, ("0x%X\n", tmp));
|
||
|
||
//Active Channels can be passed for both the 'device' and the 'channel'
|
||
//Store the active channels string for display and modification by the user.
|
||
if(lnks_def != NULL){
|
||
//time slots for this 'device'
|
||
snprintf(lnks_def->active_channels_string, MAX_LEN_OF_ACTIVE_CHANNELS_STRING, "%s", val);
|
||
//lnks_def->chanconf->active_ch = tmp;
|
||
}else if(conf != NULL && chan_def != NULL){
|
||
//time slots for this 'channel'
|
||
if(strcmp(key, "TDMV_HWEC_MAP") == 0){
|
||
snprintf(chan_def->active_hwec_channels_string, MAX_LEN_OF_ACTIVE_CHANNELS_STRING, "%s", val);
|
||
//chan_def->hwec_flag = WANOPT_YES;
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("HWEC Channels: %s\n",
|
||
chan_def->active_hwec_channels_string));
|
||
}else{
|
||
snprintf(chan_def->active_channels_string, MAX_LEN_OF_ACTIVE_CHANNELS_STRING, "%s", val);
|
||
}
|
||
//chan_def->chanconf->active_ch = tmp;
|
||
}
|
||
|
||
}else{
|
||
tmp = sym->val;
|
||
}
|
||
|
||
}else{
|
||
FUNC_DBG();
|
||
tmp = strtoul(val, NULL, 0);
|
||
}//if()
|
||
|
||
switch (dtab->dtype)
|
||
{
|
||
case DTYPE_INT:
|
||
SIZEOFASSERT(dtab, sizeof(int));
|
||
*(int*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_UINT:
|
||
SIZEOFASSERT(dtab, sizeof(unsigned int));
|
||
*(uint*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_LONG:
|
||
SIZEOFASSERT(dtab, sizeof(long));
|
||
*(long*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_ULONG:
|
||
SIZEOFASSERT(dtab, sizeof(unsigned long));
|
||
*(unsigned long*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_SHORT:
|
||
SIZEOFASSERT(dtab, sizeof(short));
|
||
*(short*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_USHORT:
|
||
SIZEOFASSERT(dtab, sizeof(unsigned short));
|
||
*(ushort*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_CHAR:
|
||
SIZEOFASSERT(dtab, sizeof(char));
|
||
*(char*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_UCHAR:
|
||
SIZEOFASSERT(dtab, sizeof(unsigned char));
|
||
*(unsigned char*)((char*)conf + dtab->offset) = tmp;
|
||
break;
|
||
|
||
case DTYPE_PTR:
|
||
*(void**)((char*)conf + dtab->offset) = (void*)tmp;
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Configure WAN logical channel.
|
||
*/
|
||
#if 0
|
||
int conf_file_reader::configure_chan (chan_def_t* chandef, int id)
|
||
{
|
||
int err = 0;
|
||
int len = 0;
|
||
char* conf_rec;
|
||
char *token[MAX_TOKENS];
|
||
key_word_t* conf_table = (key_word_t*)lookup(id, conf_if_def_tables);
|
||
#if DBG_FLAG
|
||
wan_fr_conf_t* fr = &chandef->chanconf->u.fr;
|
||
#endif
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::configure_chan(): id: %d\n", id));
|
||
|
||
if(!conf_table){
|
||
Debug(DBG_CONF_FILE_READER, ("conf_table is NULL!!\n"));
|
||
}
|
||
|
||
/* Prepare configuration data */
|
||
strncpy(chandef->chanconf->name, chandef->name, WAN_IFNAME_SZ);
|
||
if (chandef->addr){
|
||
strncpy(chandef->chanconf->addr, chandef->addr, WAN_ADDRESS_SZ);
|
||
}
|
||
|
||
if (chandef->usedby){
|
||
strncpy(chandef->chanconf->usedby, get_used_by_string(chandef->usedby), USED_BY_FIELD);
|
||
}
|
||
|
||
if(chandef->label){
|
||
Debug(DBG_CONF_FILE_READER, ("configure_chan(): chandef->label: %s\n", chandef->label));
|
||
memcpy(chandef->chanconf->label, chandef->label, WAN_IF_LABEL_SZ);
|
||
}else{
|
||
Debug(DBG_CONF_FILE_READER, ("configure_chan(): no 'chandef->label'\n"));
|
||
}
|
||
|
||
if (chandef->conf){
|
||
|
||
for (conf_rec = chandef->conf; *conf_rec; conf_rec += len) {
|
||
int toknum;
|
||
|
||
len = strlen(conf_rec) + 1;
|
||
toknum = tokenize(conf_rec, token);
|
||
if (toknum < 2) {
|
||
return -EINVAL;
|
||
}
|
||
|
||
//
|
||
// Look up a keyword first in common, then media-specific
|
||
// configuration definition tables.
|
||
//
|
||
strupcase(token[0]);
|
||
if (set_conf_param(token[0], token[1], chan_conftab, chandef->chanconf, NULL, chandef)) {
|
||
|
||
if (!conf_table ||
|
||
set_conf_param(token[0], token[1], conf_table, &chandef->chanconf->u, NULL, chandef)) {
|
||
|
||
//not found in 'conf_if_def_tables' too !!
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}
|
||
}
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Current 'chandef->chanconf->config_id': %d\n",
|
||
chandef->chanconf->config_id));
|
||
|
||
if(chandef->usedby == TDM_VOICE){
|
||
Debug(DBG_CONF_FILE_READER, ("TDM_VOICE channel!!\n"));
|
||
chandef->chanconf->config_id = PROTOCOL_TDM_VOICE;
|
||
}
|
||
if(chandef->usedby == TDM_VOICE_API){
|
||
Debug(DBG_CONF_FILE_READER, ("TDM_VOICE_API channel!!\n"));
|
||
chandef->chanconf->config_id = PROTOCOL_TDM_VOICE_API;
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Final 'chandef->chanconf->config_id': %d.\n",
|
||
chandef->chanconf->config_id));
|
||
|
||
len=0;
|
||
|
||
if (chandef->conf_profile){
|
||
|
||
for(conf_rec = chandef->conf_profile; *conf_rec; conf_rec += len) {
|
||
|
||
int toknum;
|
||
wanif_conf_t* chanconf = chandef->chanconf;
|
||
|
||
len = strlen(conf_rec) + 1;
|
||
toknum = tokenize(conf_rec, token);
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("toknum: %d\n", toknum));
|
||
|
||
if (toknum != 2) {
|
||
return -EINVAL;
|
||
}
|
||
|
||
strupcase(token[0]);
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("chandef->addr: %s\n", chandef->addr));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("0x%p, chanconf->config_id: %d (%s)\n",
|
||
chanconf, chanconf->config_id, get_protocol_string(chanconf->config_id)));
|
||
|
||
switch(chanconf->config_id)
|
||
{
|
||
case WANCONFIG_MFR:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MFR\n"));
|
||
|
||
if(set_conf_param(token[0], token[1], fr_conftab, &chandef->chanconf->u.fr,
|
||
NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("fr->signalling: %d\n", fr->signalling));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("fr->station : %d\n", fr->station));
|
||
break;
|
||
|
||
case WANCONFIG_TTY:
|
||
//do nothing - everything was read already from : 'chan_conftab'
|
||
//and/or 'conf_table'
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_TTY\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
break;
|
||
|
||
case WANCONFIG_MPPP:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MPPP\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
if(set_conf_param(token[0], token[1], sppp_conftab, &chandef->chanconf->u.ppp,
|
||
NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
|
||
//Debug(DBG_CONF_FILE_READER_AFT, ("link_defs->linkconf->u.ppp.ip_mode: %d\n",
|
||
// link_defs->linkconf->u.ppp.ip_mode));
|
||
break;
|
||
|
||
case WANCONFIG_MPCHDLC:
|
||
//profile for this protocol is empty, so we never get here.
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MPCHDLC\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
break;
|
||
|
||
case WANCONFIG_LAPB:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_LAPB\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
if(set_conf_param(token[0], token[1], lapb_annexg_conftab, &chandef->chanconf->u.lapb,
|
||
NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
break;
|
||
|
||
default:
|
||
//it actually means that this protocol MUST NOT have a profile section
|
||
ERR_DBG_OUT(("Protocol %d(%s) MUST NOT have a profile section!\n",
|
||
chanconf->config_id, get_protocol_string(chanconf->config_id)));
|
||
return ERR_CONFIG;
|
||
}//switch()
|
||
|
||
}//for()
|
||
}//if(chandef->conf_profile)
|
||
{
|
||
Debug(DBG_CONF_FILE_READER, ("chandef->conf_profile == NULL!!\n"));
|
||
}
|
||
}//if(chandef->conf)
|
||
else
|
||
{ Debug(DBG_CONF_FILE_READER, ("chandef->conf == NULL!!\n"));
|
||
}
|
||
return err;
|
||
}
|
||
#endif
|
||
|
||
int conf_file_reader::configure_chan (chan_def_t* chandef, int id)
|
||
{
|
||
int err = 0;
|
||
int len = 0;
|
||
char* conf_rec;
|
||
char *token[MAX_TOKENS];
|
||
key_word_t* conf_table = (key_word_t*)lookup(id, conf_if_def_tables);
|
||
#if DBG_FLAG
|
||
wan_fr_conf_t* fr = &chandef->chanconf->u.fr;
|
||
#endif
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::configure_chan(): id: %d\n", id));
|
||
|
||
if(!conf_table){
|
||
Debug(DBG_CONF_FILE_READER, ("conf_table is NULL!!\n"));
|
||
}
|
||
|
||
/* Prepare configuration data */
|
||
strncpy(chandef->chanconf->name, chandef->name, WAN_IFNAME_SZ);
|
||
if (chandef->addr){
|
||
strncpy(chandef->chanconf->addr, chandef->addr, WAN_ADDRESS_SZ);
|
||
}
|
||
|
||
if (chandef->usedby){
|
||
strncpy(chandef->chanconf->usedby, get_used_by_string(chandef->usedby), USED_BY_FIELD);
|
||
}
|
||
|
||
if(chandef->label){
|
||
Debug(DBG_CONF_FILE_READER, ("configure_chan(): chandef->label: %s\n", chandef->label));
|
||
memcpy(chandef->chanconf->label, chandef->label, WAN_IF_LABEL_SZ);
|
||
}else{
|
||
Debug(DBG_CONF_FILE_READER, ("configure_chan(): no 'chandef->label'\n"));
|
||
}
|
||
|
||
//if there is any information in the [interface] section, get it.
|
||
//some interfaces have no information.
|
||
if (chandef->conf){
|
||
for (conf_rec = chandef->conf; *conf_rec; conf_rec += len) {
|
||
int toknum;
|
||
|
||
len = strlen(conf_rec) + 1;
|
||
toknum = tokenize(conf_rec, token);
|
||
if (toknum < 2) {
|
||
return -EINVAL;
|
||
}
|
||
|
||
// Look up a keyword first in common, then media-specific
|
||
// configuration definition tables.
|
||
strupcase(token[0]);
|
||
if (set_conf_param(token[0], token[1], chan_conftab, chandef->chanconf, sizeof(wanif_conf_t), NULL, chandef)) {
|
||
|
||
if (!conf_table ||
|
||
set_conf_param(token[0], token[1], conf_table, &chandef->chanconf->u, sizeof(chandef->chanconf->u), NULL, chandef)) {
|
||
|
||
if(id == WANCONFIG_ADSL && link_defs->sub_config_id == WANCONFIG_MPPP){
|
||
//on ADSL there can be PPP without the LIP layer!!
|
||
if(set_conf_param(token[0], token[1],
|
||
sppp_conftab, &chandef->chanconf->u.ppp,sizeof(wan_sppp_if_conf_t),NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
/*
|
||
Nov 21, 2006 - not done anymore - all configuration is in profile
|
||
}else if(id == WANCONFIG_MPCHDLC){
|
||
//getting here because CHDLC configuration is kept in 2 places:
|
||
// 1. wanif conf 2. in u.ppp
|
||
if(set_conf_param(token[0], token[1], sppp_conftab, &chandef->chanconf->u.ppp,
|
||
NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
*/
|
||
}else{
|
||
//not found in 'conf_if_def_tables' too !!
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}
|
||
}
|
||
}//if()
|
||
}//for()
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Current 'chandef->chanconf->config_id': %d\n",
|
||
chandef->chanconf->config_id));
|
||
|
||
if(chandef->usedby == TDM_VOICE){
|
||
Debug(DBG_CONF_FILE_READER, ("2. TDM_VOICE channel!!\n"));
|
||
chandef->chanconf->config_id = PROTOCOL_TDM_VOICE;
|
||
}
|
||
if(chandef->usedby == TDM_VOICE_API){
|
||
Debug(DBG_CONF_FILE_READER, ("2. TDM_VOICE_API channel!!\n"));
|
||
chandef->chanconf->config_id = PROTOCOL_TDM_VOICE_API;
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Final 'chandef->chanconf->config_id': %d.\n",
|
||
chandef->chanconf->config_id));
|
||
|
||
len=0;
|
||
|
||
}//if(chandef->conf)
|
||
else
|
||
{ Debug(DBG_CONF_FILE_READER, ("chandef->conf == NULL!!\n"));
|
||
}
|
||
|
||
//if there is anything in [profile] section, get it
|
||
if (chandef->conf_profile){
|
||
|
||
for(conf_rec = chandef->conf_profile; *conf_rec; conf_rec += len) {
|
||
|
||
int toknum;
|
||
wanif_conf_t* chanconf = chandef->chanconf;
|
||
|
||
len = strlen(conf_rec) + 1;
|
||
toknum = tokenize(conf_rec, token);
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("toknum: %d\n", toknum));
|
||
|
||
if (toknum != 2) {
|
||
return -EINVAL;
|
||
}
|
||
|
||
strupcase(token[0]);
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("chandef->addr: %s\n", chandef->addr));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("0x%p, chanconf->config_id: %d (%s)\n",
|
||
chanconf, chanconf->config_id, get_protocol_string(chanconf->config_id)));
|
||
|
||
switch(chanconf->config_id)
|
||
{
|
||
case WANCONFIG_MFR:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MFR\n"));
|
||
|
||
if(set_conf_param(token[0], token[1],
|
||
fr_conftab, &chandef->chanconf->u.fr, sizeof(wan_fr_conf_t),NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("fr->signalling: %d\n", fr->signalling));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("fr->station : %d\n", fr->station));
|
||
break;
|
||
|
||
case WANCONFIG_TTY:
|
||
//do nothing - everything was read already from : 'chan_conftab'
|
||
//and/or 'conf_table'
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_TTY\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
break;
|
||
|
||
case WANCONFIG_MPPP:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MPPP\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
if(set_conf_param(token[0], token[1],
|
||
sppp_conftab, &chandef->chanconf->u.ppp,sizeof(wan_sppp_if_conf_t),NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
|
||
//Debug(DBG_CONF_FILE_READER_AFT, ("link_defs->linkconf->u.ppp.ip_mode: %d\n",
|
||
// link_defs->linkconf->u.ppp.ip_mode));
|
||
break;
|
||
|
||
case WANCONFIG_CHDLC:
|
||
case WANCONFIG_MPCHDLC:
|
||
//profile for this protocol is empty, so we never get here.
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_MPCHDLC\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
if(set_conf_param(token[0], token[1],
|
||
sppp_conftab, &chandef->chanconf->u.ppp,sizeof(wan_sppp_if_conf_t), NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
|
||
break;
|
||
|
||
case WANCONFIG_LAPB:
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("WANCONFIG_LAPB\n"));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[0]: %s\n", token[0]));
|
||
Debug(DBG_CONF_FILE_READER_AFT, ("token[1]: %s\n", token[1]));
|
||
|
||
if(set_conf_param(token[0], token[1],
|
||
lapb_annexg_conftab, &chandef->chanconf->u.lapb,sizeof(wan_lapb_if_conf_t), NULL, chandef)) {
|
||
ERR_DBG_OUT(("Invalid parameter %s\n", token[0]));
|
||
return ERR_CONFIG;
|
||
}//if()
|
||
break;
|
||
|
||
default:
|
||
//it actually means that this protocol MUST NOT have a profile section
|
||
ERR_DBG_OUT(("Protocol %d(%s) MUST NOT have a profile section!\n",
|
||
chanconf->config_id, get_protocol_string(chanconf->config_id)));
|
||
return ERR_CONFIG;
|
||
}//switch()
|
||
}//for()
|
||
}//if(chandef->conf_profile)
|
||
{
|
||
Debug(DBG_CONF_FILE_READER, ("chandef->conf_profile == NULL!!\n"));
|
||
}
|
||
|
||
return err;
|
||
}
|
||
|
||
void conf_file_reader::free_linkdefs(void)
|
||
{
|
||
Debug(DBG_CONF_FILE_READER, ("conf_file_reader::free_linkdefs()\n"));
|
||
|
||
//David
|
||
if(main_obj_list == NULL){
|
||
printf("Error: free_linkdefs(): main_obj_list is NULL! \n");
|
||
return;
|
||
}
|
||
|
||
Debug(DBG_CONF_FILE_READER, ("Freeing Link %s\n", link_defs->name));
|
||
|
||
/* Clear (by deleteting) channel definition list */
|
||
delete main_obj_list;
|
||
main_obj_list = NULL;
|
||
|
||
if(link_defs == NULL){
|
||
Debug(DBG_CONF_FILE_READER, ("Freeing Link %s\n", link_defs->name));
|
||
return;
|
||
}
|
||
|
||
if (link_defs->conf) free(link_defs->conf);
|
||
if (link_defs->descr) free(link_defs->descr);
|
||
|
||
if (link_defs->linkconf){
|
||
if (link_defs->linkconf->data){
|
||
free(link_defs->linkconf->data);
|
||
}
|
||
free(link_defs->linkconf);
|
||
}
|
||
|
||
free(link_defs);
|
||
link_defs = NULL;
|
||
}
|
||
|
||
//this function extracts version of S514 (1/2/...7) card from the "conf" file.
|
||
//do not call it for other cards
|
||
int conf_file_reader::
|
||
get_pci_adapter_type_from_wanpipe_conf_file(char * conf_file_name, unsigned int* card_version)
|
||
{
|
||
FILE * conf_file = fopen(conf_file_name, "r+");
|
||
char str_buff[MAX_PATH_LENGTH];
|
||
|
||
if(conf_file == NULL){
|
||
ERR_DBG_OUT(("Failed to open configuration file '%s'. File does not exist.\n",
|
||
conf_file_name));
|
||
return NO;
|
||
}
|
||
|
||
*card_version = INVALID_CARD_TYPE;
|
||
/////////////////////////////////////////////////////
|
||
Debug(DBG_CONF_FILE_READER, ("Conf file :\n"));
|
||
do{
|
||
fgets(str_buff, MAX_PATH_LENGTH, conf_file);
|
||
|
||
if(!feof(conf_file)){
|
||
|
||
//Debug(DBG_CONF_FILE_READER, (str_buff));
|
||
|
||
if(strstr(str_buff, "CARD_TYPE") != NULL){
|
||
if(get_card_type_from_str(str_buff) == NO){
|
||
//Invalid card type or failed to parse the string.
|
||
return NO;
|
||
}
|
||
}
|
||
|
||
*card_version = S5141_ADPTR_1_CPU_SERIAL;
|
||
|
||
//if 'MEDIA' exist it can be: 56K or TE1 card
|
||
if(strstr(str_buff, "MEDIA") != NULL){
|
||
if(get_media_type_from_str(str_buff, card_version) == NO){
|
||
//Invalid media type or failed to parse the string.
|
||
return NO;
|
||
}else{
|
||
return YES;
|
||
}
|
||
}//if()
|
||
}//if()
|
||
|
||
}while(!feof(conf_file));
|
||
Debug(DBG_CONF_FILE_READER, ("\n"));
|
||
|
||
if(*card_version == INVALID_CARD_TYPE){
|
||
ERR_DBG_OUT(("Failed to get S514 card version from 'conf' file!!\n"));
|
||
return NO;
|
||
}else{
|
||
return YES;
|
||
}
|
||
}
|
||
|
||
//call this function
|
||
int conf_file_reader::get_card_type_from_str(char * line)
|
||
{
|
||
//check it is S514X card
|
||
if(strstr(line, "S51X") != NULL){
|
||
return YES;
|
||
}
|
||
return NO;
|
||
}
|
||
|
||
int conf_file_reader::get_media_type_from_str(char * line, unsigned int* card_version)
|
||
{
|
||
char * media_str;
|
||
|
||
//check if this is a 56K card.
|
||
media_str = strstr(line, "56K");
|
||
if(media_str != NULL){
|
||
printf("S514-5 56K card\n");
|
||
*card_version = S5145_ADPTR_1_CPU_56K;
|
||
return YES;
|
||
}
|
||
|
||
printf("Media type is ");
|
||
|
||
//is it T1?
|
||
media_str = strstr(line, "T1");
|
||
if(media_str != NULL){
|
||
printf("T1\n");
|
||
*card_version = S5144_ADPTR_1_CPU_T1E1;
|
||
return YES;
|
||
}
|
||
|
||
//is it E1?
|
||
media_str = strstr(line, "E1");
|
||
if(media_str != NULL){
|
||
printf("E1\n");
|
||
*card_version = S5144_ADPTR_1_CPU_T1E1;
|
||
return YES;
|
||
}
|
||
|
||
return NO;
|
||
}
|
||
|
||
|
||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||
//Global (non-member) functions.
|
||
void init_first_time_tokens(char **token){
|
||
int i;
|
||
|
||
for (i=0;i<MAX_TOKENS;i++){
|
||
token[i]=NULL;
|
||
}
|
||
}
|
||
|
||
/*============================================================================
|
||
* Tokenize string.
|
||
* Parse a string of the following syntax:
|
||
* <tag>=<arg1>,<arg2>,...
|
||
* and fill array of tokens with pointers to string elements.
|
||
*
|
||
* Return number of tokens.
|
||
*/
|
||
void init_tokens(char **token){
|
||
int i;
|
||
|
||
for (i=0;i<MAX_TOKENS;i++){
|
||
token[i]=NULL;
|
||
}
|
||
}
|
||
|
||
/* Bug Fix by Ren<65>Scharfe <l.s.r@web.de>
|
||
* removed strtok
|
||
*/
|
||
int tokenize (char *str, char **tokens)
|
||
{
|
||
int cnt = 0;
|
||
char *tok;
|
||
|
||
init_tokens(tokens);
|
||
|
||
if (!str){
|
||
return 0;
|
||
}
|
||
|
||
tok = strchr(str, '=');
|
||
if (!tok)
|
||
return 0;
|
||
|
||
*tok='\0';
|
||
|
||
tokens[cnt] = str;
|
||
str=++tok;
|
||
|
||
while (tokens[cnt] && (cnt < MAX_TOKENS-1)) {
|
||
|
||
tokens[cnt] = str_strip(tokens[cnt], " \t");
|
||
|
||
if ((tok = strchr(str, ',')) == NULL){
|
||
tokens[++cnt] = str_strip(str, " \t");
|
||
goto end_tokenize;
|
||
}
|
||
|
||
*tok='\0';
|
||
|
||
tokens[++cnt] = str_strip(str, " \t");
|
||
str=++tok;
|
||
}
|
||
|
||
end_tokenize:
|
||
return ++cnt;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Strip leading and trailing spaces off the string str.
|
||
*/
|
||
char* str_strip (char* str, char* s)
|
||
{
|
||
char* eos = str + strlen(str); /* -> end of string */
|
||
|
||
while (*str && strchr(s, *str))
|
||
++str; /* strip leading spaces */
|
||
while ((eos > str) && strchr(s, *(eos - 1)))
|
||
--eos; /* strip trailing spaces */
|
||
*eos = '\0';
|
||
return str;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Uppercase string.
|
||
*/
|
||
char* strupcase (char* str)
|
||
{
|
||
char* s;
|
||
|
||
for(s = str; *s; ++s) *s = toupper(*s);
|
||
return str;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Get a pointer from a look-up table.
|
||
*/
|
||
void* lookup (int val, look_up_t* table)
|
||
{
|
||
while(table->val && (table->val != (uint)val)){
|
||
table++;
|
||
}
|
||
return table->ptr;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Look up a symbolic name in name table.
|
||
* Return a numeric value associated with that name or zero, if name was
|
||
* not found.
|
||
*/
|
||
int name2val (char* name, look_up_t* table)
|
||
{
|
||
while (table->ptr && strcmp(name, (char*)table->ptr)) table++;
|
||
return table->val;
|
||
}
|
||
|
||
/*============================================================================
|
||
* Convert decimal string to unsigned integer.
|
||
* If len != 0 then only 'len' characters of the string are converted.
|
||
*/
|
||
unsigned int dec_to_uint (unsigned char* str, int len)
|
||
{
|
||
unsigned val;
|
||
|
||
if (!len) len = strlen((char*)str);
|
||
for (val = 0; len && is_digit(*str); ++str, --len)
|
||
val = (val * 10) + (*str - (unsigned)'0')
|
||
;
|
||
return val;
|
||
}
|
||
|
||
//****** End *****************************************************************/
|