All pastes #960457 Raw Edit

Stuff

public text v1 · immutable
#960457 ·published 2008-03-28 03:18 UTC
rendered paste body
#!/bin/ash
#
# Obelisco BALConfig
#
# /usr/sbin/balconfig
# 20070411 - HernanRossetto@buenosaireslibre.org
#
# Configuration wizard for BuenosAiresLibre devices
#
# http://wiki.buenosaireslibre.org/Obelisco
#


# -----------------------------------------
CFG_BALCFG_LIB=/usr/lib/balcfg.sh
if [ -x ${CFG_BALCFG_LIB} ]
then
  . ${CFG_BALCFG_LIB}
else
  echo "Error, no se puede encontrar ${CFG_BALCFG_LIB}"
  exit 1
fi
# -----------------------------------------

# <main>
# -----------------------------------------

check_arguments $*
balconfig_title
set_nvram_bin
if [ "${CFG_TYPE}" != "defaults" ]
then
  check_boot_wait
  check_root_passwd
fi
hw_detection
set_hw_default_features
set_hw_features
clear_nvram
read_project_cfgfile
set_project_defaults

case "${CFG_TYPE}" in
  ("defaults")
    display_msg "Configuración por defecto."
    set_cfg_defaults
    create_tmp_cfgfile
    set_cfg_with_defaults
    ;;
  ("auto")
    display_msg "Configuración automática."
    ;;
  ("normal"|"test"|"kamikaze"|"extra")
    read_cfg_from_nvram
    read_cfgfile
    set_cfg_defaults
    create_tmp_cfgfile

    # Configuration Wizard
    # -----------------------------------------

    display_msg "Por favor, responder cuidadosamente:"

    # General configuration
    #save_setting BALCFG_boot_wait ${BALCFG_boot_wait}
    save_setting BALCFG_obelisco_defaults false
    save_setting BALCFG_obelisco_nvram_defaults blank
    # Info
    save_setting BALCFG_obelisco_hw_detected ${BALCFG_obelisco_hw_detected}
    save_setting BALCFG_obelisco_project_name ${BALCFG_obelisco_project_name}
    save_setting BALCFG_obelisco_project_url ${BALCFG_obelisco_project_url}
    save_setting BALCFG_obelisco_project_rss ${BALCFG_obelisco_project_rss}
    save_setting BALCFG_obelisco_project_cgiirc ${BALCFG_obelisco_project_cgiirc}
    save_setting BALCFG_obelisco_project_irc_channel ${BALCFG_obelisco_project_irc_channel}
    save_setting BALCFG_obelisco_project_dns_tld ${BALCFG_obelisco_project_dns_tld}
    ask_user "Nombre Wiki del Nodo" BALCFG_obelisco_node_name ${BALCFG_obelisco_node_name}
    if [ "${BALCFG_obelisco_node_name}" != "${CFG_RETURN}" ]
    then
      BALCFG_obelisco_node_name=${CFG_RETURN}
      BALCFG_obelisco_node_url=${CFG_obelisco_node_url_PREFIX}${BALCFG_obelisco_node_name}
      BALCFG_wl0_ssid=""
      if [ -n $( echo ${BALCFG_obelisco_node_name} | grep "^[Nn]odo") ]
      then
        BALCFG_wan_hostname=$(echo ${CFG_RETURN} | sed 's/^[Nn]odo//' | tr [A-Z] [a-z])
      fi
    fi
    ask_user "URL del Wiki del Nodo" BALCFG_obelisco_node_url ${BALCFG_obelisco_node_url}
    ask_user "Nombre Wiki del responsable del Nodo" BALCFG_obelisco_admin_name ${BALCFG_obelisco_admin_name}
    ask_user "e-mail para contacto del responsable" BALCFG_obelisco_admin_email ${BALCFG_obelisco_admin_email}

    # Node type selection
    CFG_obelisco_node_type_prev=${BALCFG_obelisco_node_type}
    case "${CFG_HW_DETECTED}" in
      ("ProAP"*)
        if [ "${CFG_HW_PORT2}" != "none" -a "${CFG_HW_PORT3}" != "none" ]
        then
          ask_user "Tipo de Nodo [${CFG_NODE_TYPE1}|${CFG_NODE_TYPE2}|${CFG_NODE_TYPE3}|${CFG_NODE_TYPE4}]" BALCFG_obelisco_node_type ${BALCFG_obelisco_node_type}
          case "${CFG_RETURN}" in
            ("${CFG_NODE_TYPE1}"|"${CFG_NODE_TYPE2}"|"${CFG_NODE_TYPE3}"|"${CFG_NODE_TYPE4}")
              BALCFG_obelisco_node_type=${CFG_RETURN}
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2} o ${CFG_NODE_TYPE3} o ${CFG_NODE_TYPE4}"
              ;;
          esac
        elif [ "${CFG_HW_PORT2}" != "none" ]
        then
          ask_user "Tipo de Nodo [${CFG_NODE_TYPE1}|${CFG_NODE_TYPE2}|${CFG_NODE_TYPE3}]" BALCFG_obelisco_node_type ${BALCFG_obelisco_node_type}
          case "${CFG_RETURN}" in
            ("${CFG_NODE_TYPE1}"|"${CFG_NODE_TYPE2}"|"${CFG_NODE_TYPE3}")
              BALCFG_obelisco_node_type=${CFG_RETURN}
              ;;
            ("${CFG_NODE_TYPE4}")
              # Error, type not supported
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, su hardware no soporta este tipo de configuración"
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2} o ${CFG_NODE_TYPE3}"
             ;;
          esac
        else
          ask_user "Tipo de Nodo [${CFG_NODE_TYPE1}|${CFG_NODE_TYPE2}]" BALCFG_obelisco_node_type ${BALCFG_obelisco_node_type}
          case "${CFG_RETURN}" in
            ("${CFG_NODE_TYPE1}"|"${CFG_NODE_TYPE2}")
              BALCFG_obelisco_node_type=${CFG_RETURN}
              ;;
            ("${CFG_NODE_TYPE3}"|"${CFG_NODE_TYPE4}")
              # Error, type not supported
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, su hardware no soporta este tipo de configuración"
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2}"
             ;;
          esac
        fi
        ;;
      (*)
        if [ ${CFG_HW_VLAN_SUPPORT} -eq 1 ]
        then
          ask_user "Tipo de Nodo [${CFG_NODE_TYPE1}|${CFG_NODE_TYPE2}|${CFG_NODE_TYPE3}|${CFG_NODE_TYPE4}]" BALCFG_obelisco_node_type ${BALCFG_obelisco_node_type}
          case "${CFG_RETURN}" in
            ("${CFG_NODE_TYPE1}"|"${CFG_NODE_TYPE2}"|"${CFG_NODE_TYPE3}"|"${CFG_NODE_TYPE4}")
              BALCFG_obelisco_node_type=${CFG_RETURN}
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2} o ${CFG_NODE_TYPE3} o ${CFG_NODE_TYPE4}"
              ;;
          esac
        else
          ask_user "Tipo de Nodo [${CFG_NODE_TYPE1}|${CFG_NODE_TYPE2}]" BALCFG_obelisco_node_type ${BALCFG_obelisco_node_type}
          case "${CFG_RETURN}" in
            ("${CFG_NODE_TYPE1}"|"${CFG_NODE_TYPE2}")
              BALCFG_obelisco_node_type=${CFG_RETURN}
              ;;
            ("${CFG_NODE_TYPE3}"|"${CFG_NODE_TYPE4}")
              # Error, type not supported
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, su hardware no soporta este tipo de configuración"
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_node_type ""
              display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2}"
             ;;
          esac
        fi
        ;;
    esac

    display_msg "Tipo de Nodo: ${BALCFG_obelisco_node_type}"

    # Configuration based on Node type
    # Interfaces
    #save_setting BALCFG_ifup_interfaces ${BALCFG_ifup_interfaces}
    save_setting BALCFG_static_route ${BALCFG_static_route}
    ask_user "Nombre de red, hostname, del ${BALCFG_obelisco_node_type:=Nodo}" BALCFG_wan_hostname ${BALCFG_wan_hostname}
    [ ${BALCFG_wan_hostname} != ${CFG_RETURN} ] && BALCFG_wl0_ssid=""
    BALCFG_wan_hostname=${CFG_RETURN}
    # LAN
    save_setting BALCFG_lan_ifname ${BALCFG_lan_ifname}
    #save_setting BALCFG_lan_ifnames ${BALCFG_lan_ifnames}
    save_setting BALCFG_lan_proto ${BALCFG_lan_proto}
    ask_user "IP Address" BALCFG_lan_ipaddr ${BALCFG_lan_ipaddr}
    [ ${CFG_RETURN} != ${BALCFG_lan_ipaddr} ] && BALCFG_lan_netmask=$(set_netmask ${CFG_RETURN})
    BALCFG_lan_ipaddr=${CFG_RETURN}
    ask_user "Netmask" BALCFG_lan_netmask ${BALCFG_lan_netmask}
    BALCFG_lan_netmask=${CFG_RETURN}
    BALCFG_First_IP=$(int2ip $(($(($(ip2int ${BALCFG_lan_ipaddr})&$(ip2int ${BALCFG_lan_netmask})))+1)))
    [ $? -ne 0 ] && display_msg_error "Error: Dirección IP incorrecta"
    if [ "${BALCFG_First_IP}" != "${BALCFG_lan_ipaddr}" ]
    then
      if [ "${BALCFG_obelisco_node_type}" = "${CFG_NODE_TYPE1}" ]
      then
        BALCFG_lan_gateway=$(int2ip $(($(ip2int ${BALCFG_lan_ipaddr})-1)))
        BALCFG_lan_dns=${BALCFG_lan_gateway}
      else
        BALCFG_lan_gateway=${BALCFG_First_IP}
        BALCFG_lan_dns=${BALCFG_lan_gateway}
      fi
    fi
    ask_user "Default Gateway" BALCFG_lan_gateway ${BALCFG_lan_gateway}
    [ "${BALCFG_lan_gateway}" != "${CFG_RETURN}" ] && BALCFG_lan_dns=${CFG_RETURN}
    ask_user "DNS Server" BALCFG_lan_dns ${BALCFG_lan_dns}
    save_setting BALCFG_lan_hostname ${BALCFG_lan_hostname}
    save_setting BALCFG_lan_stp ${BALCFG_lan_stp}
    save_setting BALCFG_lan_static_route ${BALCFG_lan_static_route}
    # WIFI
    save_setting BALCFG_wl0_ifname ${BALCFG_wl0_ifname}
    save_setting BALCFG_wl0_ap_isolate ${BALCFG_wl0_ap_isolate}
    if [ "${BALCFG_obelisco_node_type}" != "${CFG_NODE_TYPE1}" ]
    then
      BALCFG_wl0_ssid=${BALCFG_wl0_ssid:=${BALCFG_wan_hostname}${CFG_SSID_SUFFIX}}
    else
      BALCFG_wl0_ssid=${BALCFG_wl0_ssid:=$CFG_wl0_ssid}
    fi
    ask_user "Wireless SSID" BALCFG_wl0_ssid ${BALCFG_wl0_ssid}
    save_setting BALCFG_wl0_infra ${BALCFG_wl0_infra}
    save_setting BALCFG_wl0_closed ${BALCFG_wl0_closed}
    save_setting BALCFG_wl0_country_code ${BALCFG_wl0_country_code}
    save_setting BALCFG_wl0_macmode ${BALCFG_wl0_macmode}
    save_setting BALCFG_wl0_radio ${BALCFG_wl0_radio}
    ask_user "Wireless Channel" BALCFG_wl0_channel ${BALCFG_wl0_channel}
    save_setting BALCFG_wl0_gmode ${BALCFG_wl0_gmode}
    save_setting BALCFG_wl0_gmode_protection ${BALCFG_wl0_gmode_protection}
    save_setting BALCFG_wl0_rateset ${BALCFG_wl0_rateset}
    save_setting BALCFG_wl0_plcphdr ${BALCFG_wl0_plcphdr}
    save_setting BALCFG_wl0_rate ${BALCFG_wl0_rate}
    if [ "${CFG_TYPE}" = "extra" ]
    then
      ask_user "Extra: Wireless TX Power en miliwatts" BALCFG_wl0_txpwr ${BALCFG_wl0_txpwr}
      case "${BALCFG_wl0_antdiv}" in
        ("-1")
          CFG_wl0_antdiv="auto"
          ;;
        ("0")
          if [ "${CFG_HW_ANTENNA_ORDER}" = "reverse" ]
          then
            CFG_wl0_antdiv="aux"
          else
            CFG_wl0_antdiv="main"
          fi
          ;;
        ("1")
          if [ "${CFG_HW_ANTENNA_ORDER}" = "reverse" ]
          then
            CFG_wl0_antdiv="main"
          else
            CFG_wl0_antdiv="aux"
          fi
          ;;
        ("3")
          CFG_wl0_antdiv="diversity"
          ;;
        (*)
          CFG_wl0_antdiv="auto"
          ;;
      esac
      ask_user "Extra: Seleccionar antena [auto|main|aux|diversity]" CFG_wl0_antdiv ${CFG_wl0_antdiv}
      CFG_wl0_antdiv=${CFG_RETURN}
      case "${CFG_wl0_antdiv}" in
        ("auto")
          save_setting BALCFG_wl0_antdiv -1
          save_setting BALCFG_wl0_txant -1
          ;;
        ("main")
          if [ "${CFG_HW_ANTENNA_ORDER}" = "reverse" ]
          then
            save_setting BALCFG_wl0_antdiv 1
            save_setting BALCFG_wl0_txant 1
          else
            save_setting BALCFG_wl0_antdiv 0
            save_setting BALCFG_wl0_txant 0
          fi
          ;;
        ("aux")
          if [ "${CFG_HW_ANTENNA_ORDER}" = "reverse" ]
          then
            save_setting BALCFG_wl0_antdiv 0
            save_setting BALCFG_wl0_txant 0
          else
            save_setting BALCFG_wl0_antdiv 1
            save_setting BALCFG_wl0_txant 1
          fi
          ;;
        ("diversity")
          save_setting BALCFG_wl0_antdiv 3
          save_setting BALCFG_wl0_txant 3
          ;;
        (*)
          save_setting BALCFG_wl0_antdiv -1
          save_setting BALCFG_wl0_txant -1
          funError "Error, opción inválida"
          ;;
      esac
      ask_user "Extra: Distancia en metros del enlace (mayor a 1500)" BALCFG_wl0_distance ${BALCFG_wl0_distance}
    else
      save_setting BALCFG_wl0_txpwr blank
      save_setting BALCFG_wl0_antdiv -1
      save_setting BALCFG_wl0_txant -1
      save_setting BALCFG_wl0_distance blank
    fi
    save_setting BALCFG_wl0_rts ${BALCFG_wl0_rts}
    save_setting BALCFG_wl0_frag ${BALCFG_wl0_frag}
    save_setting BALCFG_wl0_dtim ${BALCFG_wl0_dtim}
    save_setting BALCFG_wl0_bcn ${BALCFG_wl0_bcn}
    save_setting BALCFG_wl0_frameburst ${BALCFG_wl0_frameburst}
    save_setting BALCFG_wl0_wdstimeout ${BALCFG_wl0_wdstimeout}
    save_setting BALCFG_wl0_auth_mode ${BALCFG_wl0_auth_mode}
    save_setting BALCFG_wl0_akm ${BALCFG_wl0_akm}
    save_setting BALCFG_wl0_wpa_psk ${BALCFG_wl0_wpa_psk}
    save_setting BALCFG_wl0_wpa_gtk_rekey ${BALCFG_wl0_wpa_gtk_rekey}
    save_setting BALCFG_wl0_radius_ipaddr ${BALCFG_wl0_radius_ipaddr}
    save_setting BALCFG_wl0_radius_key ${BALCFG_wl0_radius_key}
    save_setting BALCFG_wl0_radius_port ${BALCFG_wl0_radius_port}
    save_setting BALCFG_wl0_wep ${BALCFG_wl0_wep}
    save_setting BALCFG_wl0_key1 ${BALCFG_wl0_key1}
    save_setting BALCFG_wl0_key2 ${BALCFG_wl0_key2}
    save_setting BALCFG_wl0_key3 ${BALCFG_wl0_key3}
    save_setting BALCFG_wl0_key4 ${BALCFG_wl0_key4}
    save_setting BALCFG_wl0_key ${BALCFG_wl0_key}
    save_setting BALCFG_wl0_auth ${BALCFG_wl0_auth}
    # WDS
    #
    # WAN
    save_setting BALCFG_wan_stp ${BALCFG_wan_stp}
    save_setting BALCFG_wan_static_route ${BALCFG_wan_static_route}
    # PORT 1
    #
    # PORT 2
    save_setting BALCFG_port2_ifnames ${BALCFG_port2_ifnames}
    save_setting BALCFG_port2_gateway ${BALCFG_port2_gateway}
    save_setting BALCFG_port2_dns ${BALCFG_port2_dns}
    save_setting BALCFG_port2_hostname ${BALCFG_port2_hostname}
    save_setting BALCFG_port2_stp ${BALCFG_port2_stp}
    save_setting BALCFG_port2_static_route ${BALCFG_port2_static_route}
    # PORT 3
    save_setting BALCFG_port3_ifnames ${BALCFG_port3_ifnames}
    save_setting BALCFG_port3_gateway ${BALCFG_port3_gateway}
    save_setting BALCFG_port3_dns ${BALCFG_port3_dns}
    save_setting BALCFG_port3_hostname ${BALCFG_port3_hostname}
    save_setting BALCFG_port3_stp ${BALCFG_port3_stp}
    save_setting BALCFG_port3_static_route ${BALCFG_port3_static_route}
    # PORT 4
    save_setting BALCFG_port4_ifnames ${BALCFG_port4_ifnames}
    save_setting BALCFG_port4_gateway ${BALCFG_port4_gateway}
    save_setting BALCFG_port4_dns ${BALCFG_port4_dns}
    save_setting BALCFG_port4_hostname ${BALCFG_port4_hostname}
    save_setting BALCFG_port4_stp ${BALCFG_port4_stp}
    save_setting BALCFG_port4_static_route ${BALCFG_port4_static_route}
    # Internet - PPPOE
    #
    # OpenVPN
    #
    # Services
    save_setting BALCFG_obelisco_button_enable ${BALCFG_obelisco_button_enable}
    save_setting BALCFG_dhcp_start ${BALCFG_dhcp_start}
    save_setting BALCFG_dhcp_num ${BALCFG_dhcp_num}
    save_setting BALCFG_dhcp_lease ${BALCFG_dhcp_lease}
    save_setting BALCFG_ntp_server ${BALCFG_ntp_server}
    if [ "${CFG_TYPE}" = "extra" ]
    then
      ask_user "Extra: Syslog Server" BALCFG_log_ipaddr ${BALCFG_log_ipaddr}
    else
      save_setting BALCFG_log_ipaddr ${BALCFG_log_ipaddr}
    fi
    # MMC
    #

    case "${BALCFG_obelisco_node_type}" in
      ("${CFG_NODE_TYPE1}")
        # Bridged client
        # DHCP Server disabled, HTTPD Server disabled, OLSR disabled
        #
        save_setting BALCFG_ifup_interfaces lan#wifi
        # LAN
        save_setting BALCFG_vlan0hwname et0
        save_setting BALCFG_vlan0ports 0#1#2#3#4#5#
        save_setting BALCFG_lan_ifnames ${CFG_HW_LAN}#${CFG_HW_WIFI}
        # WIFI
        if [ "${CFG_TYPE}" = "extra" ]
        then
          case "${BALCFG_wl0_mode}" in
            ("ap")
              if [ "${CFG_obelisco_node_type_prev}" = "${CFG_NODE_TYPE1}" ]
              then
                CFG_wl0_master="si"
              else
                CFG_wl0_master="no"
              fi
              ;;
            ("wet")
              CFG_wl0_master="no"
              ;;
            (*)
              CFG_wl0_master="no"
              ;;
          esac
          ask_user "Extra: ${CFG_NODE_TYPE1} en Modo Master [si|no]" CFG_wl0_master ${CFG_wl0_master}
          CFG_wl0_master=${CFG_RETURN}
          case "${CFG_wl0_master}" in
            ("si")
              save_setting BALCFG_wl0_mode ap
              ;;
            ("no")
              save_setting BALCFG_wl0_mode wet
              ;;
            (*)
              save_setting BALCFG_wl0_mode ""
              display_msg_error "Error, respuesta incorrecta, debe ser si o no"
              ;;
          esac
        else
          save_setting BALCFG_wl0_mode wet
        fi
        # WDS
        save_setting BALCFG_obelisco_wds_enable false
        save_setting BALCFG_wl0_lazywds blank
        save_setting BALCFG_wl0_wds blank
        save_setting BALCFG_wds_ifname blank
        save_setting BALCFG_wds_ifnames blank
        save_setting BALCFG_wds_proto blank
        save_setting BALCFG_wds_ipaddr blank
        save_setting BALCFG_wds_netmask blank
        save_setting BALCFG_wds_gateway blank
        save_setting BALCFG_wds_dns blank
        save_setting BALCFG_wds_hostname blank
        save_setting BALCFG_wds_stp blank
        save_setting BALCFG_wds_static_route blank
        # WAN
        save_setting BALCFG_vlan1hwname blank
        save_setting BALCFG_vlan1ports blank
        save_setting BALCFG_wan_ifname ${BALCFG_wan_ifname}
        save_setting BALCFG_wan_proto none
        save_setting BALCFG_wan_ipaddr blank
        save_setting BALCFG_wan_netmask blank
        save_setting BALCFG_wan_gateway blank
        save_setting BALCFG_wan_dns blank
        # PORT 1
        #
        # PORT 2
        save_setting BALCFG_vlan4hwname blank
        save_setting BALCFG_vlan4ports blank
        save_setting BALCFG_port2_ifname blank
        save_setting BALCFG_port2_proto blank
        save_setting BALCFG_port2_ipaddr blank
        save_setting BALCFG_port2_netmask blank
        # PORT 2 - WIFI
        save_setting BALCFG_wl1_ifname blank
        save_setting BALCFG_wl1_mode blank
        save_setting BALCFG_wl1_ssid blank
        save_setting BALCFG_wl1_channel blank
        save_setting BALCFG_wl1_txpwr blank
        # PORT 3
        save_setting BALCFG_vlan6hwname blank
        save_setting BALCFG_vlan6ports blank
        save_setting BALCFG_port3_ifname blank
        save_setting BALCFG_port3_proto blank
        save_setting BALCFG_port3_ipaddr blank
        save_setting BALCFG_port3_netmask blank
        # PORT 3 - WIFI
        save_setting BALCFG_wl2_ifname blank
        save_setting BALCFG_wl2_mode blank
        save_setting BALCFG_wl2_ssid blank
        save_setting BALCFG_wl2_channel blank
        save_setting BALCFG_wl2_txpwr blank
        # PORT 4
        save_setting BALCFG_vlan8hwname blank
        save_setting BALCFG_vlan8ports blank
        save_setting BALCFG_port4_ifname blank
        save_setting BALCFG_port4_proto blank
        save_setting BALCFG_port4_ipaddr blank
        save_setting BALCFG_port4_netmask blank
        # Internet - PPPOE
        save_setting BALCFG_ppp_idletime blank
        save_setting BALCFG_ppp_mtu blank
        save_setting BALCFG_ppp_redialperiod blank
        save_setting BALCFG_ppp_username blank
        save_setting BALCFG_ppp_passwd blank
        save_setting BALCFG_pppoe_ifname blank
        save_setting BALCFG_pppoe_idletime blank
        save_setting BALCFG_pppoe_username blank
        save_setting BALCFG_pppoe_passwd blank
        # OpenVPN
        save_setting BALCFG_obelisco_vpn0_enable false
        save_setting BALCFG_vpn0_ifname blank
        save_setting BALCFG_vpn0_port blank
        save_setting BALCFG_vpn0_ipaddr blank
        save_setting BALCFG_vpn0_netmask blank
        save_setting BALCFG_vpn0_peer_ipaddr blank
        save_setting BALCFG_obelisco_vpn1_enable false
        save_setting BALCFG_vpn1_ifname blank
        save_setting BALCFG_vpn1_port blank
        save_setting BALCFG_vpn1_remote blank
        save_setting BALCFG_vpn1_ipaddr blank
        save_setting BALCFG_vpn1_netmask blank
        save_setting BALCFG_vpn1_peer_ipaddr blank
        # Services
        save_setting BALCFG_obelisco_internet false
        save_setting BALCFG_obelisco_dhcpd_enable false
        save_setting BALCFG_obelisco_httpd_enable false
        save_setting BALCFG_obelisco_olsrd_enable false
        save_setting BALCFG_obelisco_olsrd_hna4 blank
        save_setting BALCFG_obelisco_portal_enable false
        save_setting BALCFG_obelisco_portal_log file
        save_setting BALCFG_obelisco_portal_accept ${BALCFG_obelisco_portal_accept}
        save_setting BALCFG_obelisco_portal_irc_enable false
        save_setting BALCFG_obelisco_balls_update_enable true
        # MMC
        save_setting BALCFG_obelisco_mmc_enable false
        save_setting BALCFG_obelisco_mmc_driver ${BALCFG_obelisco_mmc_driver}
        ;;
      ("${CFG_NODE_TYPE2}")
        # DHCP Server enabled, HTTPD Server enabled, OLSR enabled
        #
        #save_setting BALCFG_ifup_interfaces lan#wan#wifi
        BALCFG_ifup_interfaces="lan#wan#wifi"
        # LAN
        save_setting BALCFG_vlan0hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan0ports 0#1#2#3#5#
        else
          save_setting BALCFG_vlan0ports 1#2#3#4#5#
        fi
        save_setting BALCFG_lan_ifnames ${CFG_HW_LAN}#${CFG_HW_WIFI}
        # WIFI
        save_setting BALCFG_wl0_mode ap
        # WDS
        #
        # WAN
        save_setting BALCFG_vlan1hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan1ports 4#5
        else
          save_setting BALCFG_vlan1ports 0#5
        fi
        # PORT 1
        #
        # PORT 2
        save_setting BALCFG_vlan4hwname blank
        save_setting BALCFG_vlan4ports blank
        save_setting BALCFG_port2_ifname blank
        save_setting BALCFG_port2_proto blank
        save_setting BALCFG_port2_ipaddr blank
        save_setting BALCFG_port2_netmask blank
        # PORT 2 - WIFI
        save_setting BALCFG_wl1_ifname blank
        save_setting BALCFG_wl1_mode blank
        save_setting BALCFG_wl1_ssid blank
        save_setting BALCFG_wl1_channel blank
        save_setting BALCFG_wl1_txpwr blank
        # PORT 3
        save_setting BALCFG_vlan6hwname blank
        save_setting BALCFG_vlan6ports blank
        save_setting BALCFG_port3_ifname blank
        save_setting BALCFG_port3_proto blank
        save_setting BALCFG_port3_ipaddr blank
        save_setting BALCFG_port3_netmask blank
        # PORT 3 - WIFI
        save_setting BALCFG_wl2_ifname blank
        save_setting BALCFG_wl2_mode blank
        save_setting BALCFG_wl2_ssid blank
        save_setting BALCFG_wl2_channel blank
        save_setting BALCFG_wl2_txpwr blank
        # PORT 4
        save_setting BALCFG_vlan8hwname blank
        save_setting BALCFG_vlan8ports blank
        save_setting BALCFG_port4_ifname blank
        save_setting BALCFG_port4_proto blank
        save_setting BALCFG_port4_ipaddr blank
        save_setting BALCFG_port4_netmask blank
        # Internet - PPPOE
        #
        # OpenVPN
        #
        # Services
        save_setting BALCFG_obelisco_dhcpd_enable true
        save_setting BALCFG_obelisco_httpd_enable true
        save_setting BALCFG_obelisco_olsrd_enable true
        save_setting BALCFG_obelisco_balls_update_enable true
        # MMC
        #
        ;;
      ("${CFG_NODE_TYPE3}")
        # DHCP Server enabled, HTTPD Server enabled, OLSR enabled
        # Switch PORT2 on VLAN4 
        #
        if [ ${CFG_HW_VLAN_SUPPORT} -eq 0 ]
        then
          save_setting BALCFG_obelisco_node_type ""
          display_msg_error "Error, su hardware no soporta este tipo de configuración"
        fi
        #
        #save_setting BALCFG_ifup_interfaces lan#wan#wifi#port2
        BALCFG_ifup_interfaces="lan#wan#wifi#port2"
        # LAN
        save_setting BALCFG_vlan0hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan0ports 0#1#3#5#
        else
          save_setting BALCFG_vlan0ports 1#3#4#5#
        fi
        save_setting BALCFG_lan_ifnames ${CFG_HW_LAN}#${CFG_HW_WIFI}
        # WIFI
        save_setting BALCFG_wl0_mode ap
        # WDS
        #
        # WAN
        save_setting BALCFG_vlan1hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan1ports 4#5
        else
          save_setting BALCFG_vlan1ports 0#5
        fi
        # PORT 1
        #
        # PORT 2
        save_setting BALCFG_vlan4hwname et0
        save_setting BALCFG_vlan4ports 2#5
        save_setting BALCFG_port2_ifname ${CFG_HW_PORT2}
        save_setting BALCFG_port2_proto static
        ask_user "PORT2 IP Address" BALCFG_port2_ipaddr ${BALCFG_port2_ipaddr}
        [ ${CFG_RETURN} != ${BALCFG_port2_ipaddr} ] && BALCFG_port2_netmask=$(set_netmask ${CFG_RETURN})
        ask_user "PORT2 Netmask" BALCFG_port2_netmask ${BALCFG_port2_netmask}
        # PORT 2 - WIFI
        if [ "${CFG_HW_PORT2_ISWIFI}" = "true" ]
        then
          save_setting BALCFG_wl1_ifname ${CFG_HW_PORT2}
          ask_user "PORT2 Wireless Mode [ap|sta]" CFG_wl1_mode ${BALCFG_wl1_mode}
          case "${CFG_RETURN}" in
            ("ap"|"sta")
              save_setting BALCFG_wl1_mode ${CFG_RETURN}
              ;;
            (*)
              save_setting BALCFG_wl1_mode ""
              display_msg_error "Error, la respuesta debe ser ap o sta"
              ;;
          esac
          ask_user "PORT2 Wireless SSID" BALCFG_wl1_ssid ${BALCFG_wl1_ssid}
          ask_user "PORT2 Wireless Channel" BALCFG_wl1_channel ${BALCFG_wl1_channel}
          if [ "${CFG_TYPE}" = "extra" ]
          then
            ask_user "Extra: PORT2 Wireless TX Power en miliwatts" BALCFG_wl1_txpwr ${BALCFG_wl1_txpwr}
          else
            save_setting BALCFG_wl1_txpwr blank
          fi
        else
          save_setting BALCFG_wl1_ifname blank
          save_setting BALCFG_wl1_mode blank
          save_setting BALCFG_wl1_ssid blank
          save_setting BALCFG_wl1_channel blank
          save_setting BALCFG_wl1_txpwr blank
        fi
        # PORT 3
        save_setting BALCFG_vlan6hwname blank
        save_setting BALCFG_vlan6ports blank
        save_setting BALCFG_port3_ifname blank
        save_setting BALCFG_port3_proto blank
        save_setting BALCFG_port3_ipaddr blank
        save_setting BALCFG_port3_netmask blank
        # PORT 3 - WIFI
        save_setting BALCFG_wl2_ifname blank
        save_setting BALCFG_wl2_mode blank
        save_setting BALCFG_wl2_ssid blank
        save_setting BALCFG_wl2_channel blank
        save_setting BALCFG_wl2_txpwr blank
        # PORT 4
        save_setting BALCFG_vlan8hwname blank
        save_setting BALCFG_vlan8ports blank
        save_setting BALCFG_port4_ifname blank
        save_setting BALCFG_port4_proto blank
        save_setting BALCFG_port4_ipaddr blank
        save_setting BALCFG_port4_netmask blank
        # Internet - PPPOE
        #
        # OpeVPN
        #
        # Services
        save_setting BALCFG_obelisco_dhcpd_enable true
        save_setting BALCFG_obelisco_httpd_enable true
        save_setting BALCFG_obelisco_olsrd_enable true
        save_setting BALCFG_obelisco_balls_update_enable true
        # MMC
        #
        ;;
      ("${CFG_NODE_TYPE4}")
        # DHCP Server enabled, HTTPD Server enabled, OLSR enabled
        # Switch PORT2 on VLAN4, Switch PORT3 on VLAN6
        #
        if [ ${CFG_HW_VLAN_SUPPORT} -eq 0 ]
        then
          save_setting BALCFG_obelisco_node_type ""
          display_msg_error "Error, su hardware no soporta este tipo de configuración"
        fi
        #
        #save_setting BALCFG_ifup_interfaces lan#wan#wifi#port2#port3
        BALCFG_ifup_interfaces="lan#wan#wifi#port2#port3"
        # LAN
        save_setting BALCFG_vlan0hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan0ports 0#3#5#
        else
          save_setting BALCFG_vlan0ports 1#4#5#
        fi
        save_setting BALCFG_lan_ifnames ${CFG_HW_LAN}#${CFG_HW_WIFI}
        # WIFI
        save_setting BALCFG_wl0_mode ap
        # WDS
        #
        # WAN
        save_setting BALCFG_vlan1hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan1ports 4#5
        else
          save_setting BALCFG_vlan1ports 0#5
        fi
        # PORT 1
        #
        # PORT 2
        save_setting BALCFG_vlan4hwname et0
        save_setting BALCFG_vlan4ports 2#5
        save_setting BALCFG_port2_ifname ${CFG_HW_PORT2}
        save_setting BALCFG_port2_proto static
        ask_user "PORT2 IP Address" BALCFG_port2_ipaddr ${BALCFG_port2_ipaddr}
        [ ${CFG_RETURN} != ${BALCFG_port2_ipaddr} ] && BALCFG_port2_netmask=$(set_netmask ${CFG_RETURN})
        ask_user "PORT2 Netmask" BALCFG_port2_netmask ${BALCFG_port2_netmask}
        # PORT 2 - WIFI
        if [ "${CFG_HW_PORT2_ISWIFI}" = "true" ]
        then
          save_setting BALCFG_wl1_ifname ${CFG_HW_PORT2}
          ask_user "PORT2 Wireless Mode [ap|sta]" CFG_wl1_mode ${BALCFG_wl1_mode}
          case "${CFG_RETURN}" in
            ("ap"|"sta")
              save_setting BALCFG_wl1_mode ${CFG_RETURN}
              ;;
            (*)
              save_setting BALCFG_wl1_mode ""
              display_msg_error "Error, la respuesta debe ser ap o sta"
              ;;
          esac
          ask_user "PORT2 Wireless SSID" BALCFG_wl1_ssid ${BALCFG_wl1_ssid}
          ask_user "PORT2 Wireless Channel" BALCFG_wl1_channel ${BALCFG_wl1_channel}
          if [ "${CFG_TYPE}" = "extra" ]
          then
            ask_user "Extra: PORT2 Wireless TX Power en miliwatts" BALCFG_wl1_txpwr ${BALCFG_wl1_txpwr}
          else
            save_setting BALCFG_wl1_txpwr blank
          fi
        else
          save_setting BALCFG_wl1_ifname blank
          save_setting BALCFG_wl1_mode blank
          save_setting BALCFG_wl1_ssid blank
          save_setting BALCFG_wl1_channel blank
          save_setting BALCFG_wl1_txpwr blank
        fi
        # PORT 3
        save_setting BALCFG_vlan6hwname et0
        if [ ${CFG_HW_SWITCH_ORDER} = "reverse" ]
        then
          save_setting BALCFG_vlan6ports 1#5
        else
          save_setting BALCFG_vlan6ports 3#5
        fi
        save_setting BALCFG_port3_ifname ${CFG_HW_PORT3}
        save_setting BALCFG_port3_proto static
        ask_user "PORT3 IP Address" BALCFG_port3_ipaddr ${BALCFG_port3_ipaddr}
        [ ${CFG_RETURN} != ${BALCFG_port3_ipaddr} ] && BALCFG_port3_netmask=$(set_netmask ${CFG_RETURN})
        ask_user "PORT3 Netmask" BALCFG_port3_netmask ${BALCFG_port3_netmask}
        # PORT 3 - WIFI
        if [ "${CFG_HW_PORT3_ISWIFI}" = "true" ]
        then
          save_setting BALCFG_wl2_ifname ${CFG_HW_PORT3}
          ask_user "PORT3 Wireless Mode [ap|sta]" CFG_wl2_mode ${BALCFG_wl2_mode}
          case "${CFG_RETURN}" in
            ("ap"|"sta")
              save_setting BALCFG_wl2_mode ${CFG_RETURN}
              ;;
            (*)
              save_setting BALCFG_wl2_mode ""
              display_msg_error "Error, la respuesta debe ser ap o sta"
              ;;
          esac
          ask_user "PORT3 Wireless SSID" BALCFG_wl2_ssid ${BALCFG_wl2_ssid}
          ask_user "PORT3 Wireless Channel" BALCFG_wl2_channel ${BALCFG_wl2_channel}
          if [ "${CFG_TYPE}" = "extra" ]
          then
            ask_user "Extra: PORT3 Wireless TX Power en miliwatts" BALCFG_wl2_txpwr ${BALCFG_wl2_txpwr}
          else
            save_setting BALCFG_wl2_txpwr blank
          fi
        else
          save_setting BALCFG_wl2_ifname blank
          save_setting BALCFG_wl2_mode blank
          save_setting BALCFG_wl2_ssid blank
          save_setting BALCFG_wl2_channel blank
          save_setting BALCFG_wl2_txpwr blank
        fi
        # PORT 4
        save_setting BALCFG_vlan8hwname blank
        save_setting BALCFG_vlan8ports blank
        save_setting BALCFG_port4_ifname blank
        save_setting BALCFG_port4_proto blank
        save_setting BALCFG_port4_ipaddr blank
        save_setting BALCFG_port4_netmask blank
        # Internet - PPPOE
        #
        # OpenVPN
        #
        # Services
        save_setting BALCFG_obelisco_dhcpd_enable true
        save_setting BALCFG_obelisco_httpd_enable true
        save_setting BALCFG_obelisco_olsrd_enable true
        save_setting BALCFG_obelisco_balls_update_enable true
        # MMC
        #
        ;;
      (*)
        # Error
        save_setting BALCFG_obelisco_node_type ""
        display_msg_error "Error, Tipo de Nodo incorrecto, debe ser ${CFG_NODE_TYPE1} o ${CFG_NODE_TYPE2} o ${CFG_NODE_TYPE3} o ${CFG_NODE_TYPE4}"
        ;;
    esac

    # OLSR, WDS, Internet, PortalCautivo, OpenVPN and MMC
    if [ ${BALCFG_obelisco_node_type} != "${CFG_NODE_TYPE1}" ]
    then
      # OLSR
      CFG_obelisco_olsrd_hna4="$(int2ip $(($(ip2int ${BALCFG_lan_ipaddr})&$(ip2int ${BALCFG_lan_netmask}))))"
      CFG_obelisco_olsrd_hna4="${CFG_obelisco_olsrd_hna4}#${BALCFG_lan_netmask}"

      # WDS
      case "${BALCFG_obelisco_wds_enable}" in
        ("true")
          CFG_obelisco_wds_enable="si"
          ;;
        ("false")
          CFG_obelisco_wds_enable="no"
          ;;
        (*)
          CFG_obelisco_wds_enable="no"
          ;;
      esac
      if [ "${CFG_TYPE}" = "extra" ]
      then
        display_msg "Extra: WDS (Wireless Distribution System)"
        ask_user "Configurar WDS [si|no]?" CFG_obelisco_wds_enable ${CFG_obelisco_wds_enable}
        CFG_obelisco_wds_enable=${CFG_RETURN}
        case "${CFG_obelisco_wds_enable}" in
          ("si")
            BALCFG_ifup_interfaces="wds#${BALCFG_ifup_interfaces}"
            save_setting BALCFG_obelisco_wds_enable true
            save_setting BALCFG_wl0_lazywds 0
            ask_user "Listado de direcciones MAC habilitadas, separadas por #" BALCFG_wl0_wds ${BALCFG_wl0_wds}
            save_setting BALCFG_wds_ifname br1
            save_setting BALCFG_wds_ifnames wds0.49153
            save_setting BALCFG_wds_proto static
            ask_user "WDS IP Address" BALCFG_wds_ipaddr ${BALCFG_wds_ipaddr}
            [ ${CFG_RETURN} != ${BALCFG_wds_ipaddr} ] && BALCFG_wds_netmask=$(set_netmask ${CFG_RETURN})
            ask_user "WDS Netmask" BALCFG_wds_netmask ${BALCFG_wds_netmask}
            save_setting BALCFG_wds_gateway ${BALCFG_wds_gateway}
            save_setting BALCFG_wds_dns ${BALCFG_wds_dns}
            save_setting BALCFG_wds_hostname ${BALCFG_wds_hostname}
            save_setting BALCFG_wds_stp 1
            save_setting BALCFG_wds_static_route ${BALCFG_wds_static_route}
            ;;
          ("no")
            save_setting BALCFG_obelisco_wds_enable false
            save_setting BALCFG_wl0_lazywds blank
            save_setting BALCFG_wl0_wds blank
            save_setting BALCFG_wds_ifname blank
            save_setting BALCFG_wds_ifnames blank
            save_setting BALCFG_wds_proto blank
            save_setting BALCFG_wds_ipaddr blank
            save_setting BALCFG_wds_netmask blank
            save_setting BALCFG_wds_gateway blank
            save_setting BALCFG_wds_dns blank
            save_setting BALCFG_wds_hostname blank
            save_setting BALCFG_wds_stp blank
            save_setting BALCFG_wds_static_route blank
            ;;
          (*)
            save_setting BALCFG_obelisco_wds_enable ""
            display_msg_error "Error, respuesta incorrecta, debe ser si o no"
            ;;
        esac
      else
        save_setting BALCFG_obelisco_wds_enable ${BALCFG_obelisco_wds_enable}
        save_setting BALCFG_wl0_lazywds ${BALCFG_wl0_lazywds}
        save_setting BALCFG_wl0_wds ${BALCFG_wl0_wds}
        save_setting BALCFG_wds_ifname ${BALCFG_wds_ifname}
        save_setting BALCFG_wds_ifnames ${BALCFG_wds_ifnames}
        save_setting BALCFG_wds_proto ${BALCFG_wds_proto}
        save_setting BALCFG_wds_ipaddr ${BALCFG_wds_ipaddr}
        save_setting BALCFG_wds_netmask ${BALCFG_wds_netmask}
        save_setting BALCFG_wds_gateway ${BALCFG_wds_gateway}
        save_setting BALCFG_wds_dns ${BALCFG_wds_dns}
        save_setting BALCFG_wds_hostname ${BALCFG_wds_hostname}
        save_setting BALCFG_wds_stp ${BALCFG_wds_stp}
        save_setting BALCFG_wds_static_route ${BALCFG_wds_static_route}
      fi

      save_setting BALCFG_ifup_interfaces ${BALCFG_ifup_interfaces}

      # Internet
      case "${BALCFG_wan_ifname}" in
        ("none")
          CFG_obelisco_internet="no"
          save_setting BALCFG_obelisco_internet false
          save_setting BALCFG_obelisco_internet_type none
          save_setting BALCFG_wan_ifname none
          save_setting BALCFG_wan_proto none
          save_setting BALCFG_wan_ipaddr blank
          save_setting BALCFG_wan_netmask blank
          save_setting BALCFG_wan_gateway blank
          save_setting BALCFG_wan_dns blank
          save_setting BALCFG_ppp_idletime blank
          save_setting BALCFG_ppp_mtu blank
          save_setting BALCFG_ppp_redialperiod blank
          save_setting BALCFG_ppp_username blank
          save_setting BALCFG_ppp_passwd blank
          save_setting BALCFG_pppoe_ifname blank
          save_setting BALCFG_pppoe_idletime blank
          save_setting BALCFG_pppoe_username blank
          save_setting BALCFG_pppoe_passwd blank
          ;;
        (*)
          case "${BALCFG_obelisco_internet}" in
            ("true")
              CFG_obelisco_internet="si"
              ;;
            ("false")
              CFG_obelisco_internet="no"
              ;;
            (*)
              CFG_obelisco_internet="no"
              ;;
          esac
          display_msg "Acceso a Internet"
          ask_user "Configurar Internet [si|no]" CFG_obelisco_internet ${CFG_obelisco_internet}
          CFG_obelisco_internet=${CFG_RETURN}
          case "${CFG_obelisco_internet}" in
            ("si")
              save_setting BALCFG_obelisco_internet true
              case "${BALCFG_obelisco_internet_type}" in
                ("static"|"dhcp"|"pppoe")
                  # nothing
                  ;;
                (*)
                  BALCFG_obelisco_internet_type=dhcp
                  ;;
              esac
              ask_user "Tipo de acceso [static|dhcp|pppoe]" BALCFG_obelisco_internet_type ${BALCFG_obelisco_internet_type}
              BALCFG_obelisco_internet_type=${CFG_RETURN}
              case "${BALCFG_obelisco_internet_type}" in
                ("static")
                  save_setting BALCFG_wan_ifname ${CFG_HW_WAN}
                  save_setting BALCFG_wan_proto static
                  ask_user "WAN IP Address" BALCFG_wan_ipaddr ${BALCFG_wan_ipaddr}
                  [ ${CFG_RETURN} != ${BALCFG_wan_ipaddr} ] && BALCFG_wan_netmask=$(set_netmask ${CFG_RETURN})
                  BALCFG_wan_ipaddr=${CFG_RETURN}
                  ask_user "WAN Netmask" BALCFG_wan_netmask ${BALCFG_wan_netmask}
                  BALCFG_wan_netmask=${CFG_RETURN}
                  BALCFG_First_IP=$(int2ip $(($(($(ip2int ${BALCFG_wan_ipaddr})&$(ip2int ${BALCFG_wan_netmask})))+1)))
                  [ $? -ne 0 ] && display_msg_error "Error: Dirección IP incorrecta"
                  if [ "${BALCFG_First_IP}" != "${BALCFG_wan_ipaddr}" ]
                  then
                    BALCFG_wan_gateway=${BALCFG_First_IP}
                    BALCFG_wan_dns=${BALCFG_First_IP}
                  fi
                  ask_user "WAN Default Gateway" BALCFG_wan_gateway ${BALCFG_wan_gateway}
                  [ "${BALCFG_wan_gateway}" != "${CFG_RETURN}" ] && BALCFG_wan_dns=${CFG_RETURN}
                  ask_user "WAN DNS Server" BALCFG_wan_dns ${BALCFG_wan_dns}
                  save_setting BALCFG_ppp_idletime blank
                  save_setting BALCFG_ppp_mtu blank
                  save_setting BALCFG_ppp_redialperiod blank
                  save_setting BALCFG_ppp_username blank
                  save_setting BALCFG_ppp_passwd blank
                  save_setting BALCFG_pppoe_ifname blank
                  save_setting BALCFG_pppoe_idletime blank
                  save_setting BALCFG_pppoe_username blank
                  save_setting BALCFG_pppoe_passwd blank
                  ;;
                ("dhcp")
                  save_setting BALCFG_wan_ifname ${CFG_HW_WAN}
                  save_setting BALCFG_wan_proto dhcp
                  save_setting BALCFG_wan_ipaddr blank
                  save_setting BALCFG_wan_netmask blank
                  save_setting BALCFG_wan_gateway blank
                  save_setting BALCFG_wan_dns blank
                  save_setting BALCFG_ppp_idletime blank
                  save_setting BALCFG_ppp_mtu blank
                  save_setting BALCFG_ppp_redialperiod blank
                  save_setting BALCFG_ppp_username blank
                  save_setting BALCFG_ppp_passwd blank
                  save_setting BALCFG_pppoe_ifname blank
                  save_setting BALCFG_pppoe_idletime blank
                  save_setting BALCFG_pppoe_username blank
                  save_setting BALCFG_pppoe_passwd blank
                  ;;
                ("pppoe")
                  save_setting BALCFG_wan_ifname ppp0
                  save_setting BALCFG_wan_proto pppoe
                  save_setting BALCFG_wan_ipaddr blank
                  save_setting BALCFG_wan_netmask blank
                  save_setting BALCFG_wan_gateway blank
                  save_setting BALCFG_wan_dns blank
                  save_setting BALCFG_ppp_idletime 10
                  save_setting BALCFG_ppp_mtu 1492
                  save_setting BALCFG_ppp_redialperiod 15
                  save_setting BALCFG_pppoe_ifname ${CFG_HW_WAN}
                  ask_user "Usuario ISP" BALCFG_ppp_username ${BALCFG_ppp_username}
                  ask_user "Contraseña ISP" BALCFG_ppp_passwd ${BALCFG_ppp_passwd}
                  ;;
                (*)
                  # Error
                  save_setting BALCFG_obelisco_internet_type ""
                  display_msg_error "Error, Tipo de acceso a Internet incorrecto, debe ser dhcp o pppoe"
                  ;;
               esac
               case "${BALCFG_obelisco_internet_type}" in
                 ("static"|"dhcp")
                   if [ "${CFG_TYPE}" = "extra" ]
                   then
                     case "${BALCFG_obelisco_wan_nat_enable}" in
                       ("true")
                         CFG_obelisco_wan_nat_enable="si"
                         ;;
                       ("false")
                         CFG_obelisco_wan_nat_enable="no"
                         ;;
                       (*)
                         CFG_obelisco_wan_nat_enable="no"
                         ;;
                     esac
                     ask_user "Extra: Habilitar NAT en puerto WAN [si|no]" CFG_obelisco_wan_nat_enable ${CFG_obelisco_wan_nat_enable}
                     CFG_obelisco_wan_nat_enable=${CFG_RETURN}
                     case "${CFG_obelisco_wan_nat_enable}" in
                       ("si")
                         save_setting BALCFG_obelisco_wan_nat_enable true
                         ;;
                       ("no")
                         save_setting BALCFG_obelisco_wan_nat_enable false
                         ;;
                       (*)
                         save_setting BALCFG_obelisco_wan_nat_enable ""
                         display_msg_error "Error, respuesta incorrecta, debe ser si o no"
                         ;;
                     esac
                   else
                     save_setting BALCFG_obelisco_wan_nat_enable ${BALCFG_obelisco_wan_nat_enable}
                   fi
                   ;;
                 (*)
                   save_setting BALCFG_obelisco_wan_nat_enable true
                   ;;
               esac
               # OLSR
               CFG_obelisco_olsrd_hna4="0.0.0.0#0.0.0.0#$CFG_obelisco_olsrd_hna4"
               ;;
            ("no")
              save_setting BALCFG_obelisco_internet false
              save_setting BALCFG_obelisco_internet_type none
              save_setting BALCFG_wan_ifname ${CFG_HW_WAN}
              save_setting BALCFG_wan_proto none
              save_setting BALCFG_wan_ipaddr blank
              save_setting BALCFG_wan_netmask blank
              save_setting BALCFG_wan_gateway blank
              save_setting BALCFG_wan_dns blank
              save_setting BALCFG_ppp_idletime blank
              save_setting BALCFG_ppp_mtu blank
              save_setting BALCFG_ppp_redialperiod blank
              save_setting BALCFG_ppp_username blank
              save_setting BALCFG_ppp_passwd blank
              save_setting BALCFG_pppoe_ifname blank
              save_setting BALCFG_pppoe_idletime blank
              save_setting BALCFG_pppoe_username blank
              save_setting BALCFG_pppoe_passwd blank
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_internet ""
              display_msg_error "Error, respuesta incorrecta, debe ser si o no"
              ;;
          esac
          ;;
      esac

      # OLSR
      save_setting BALCFG_obelisco_olsrd_hna4 ${CFG_obelisco_olsrd_hna4}

      # PortalCautivo
      case "${BALCFG_obelisco_portal_enable}" in
        ("true")
          CFG_obelisco_portal_enable="si"
          ;;
        ("false")
          CFG_obelisco_portal_enable="no"
          ;;
        (*)
          CFG_obelisco_portal_enable="si"
          ;;
      esac
      display_msg "Funcionalidad Portal Cautivo"
      ask_user "Habilitar funcionalidad de Portal Cautivo [si|no]" CFG_obelisco_portal_enable ${CFG_obelisco_portal_enable}
      CFG_obelisco_portal_enable=${CFG_RETURN}
      case "${CFG_obelisco_portal_enable}" in
        ("si")
          save_setting BALCFG_obelisco_portal_enable true
          ask_user "Listado de direcciones IP excluídas, separadas por #" BALCFG_obelisco_portal_hosts ${BALCFG_obelisco_portal_hosts}
          if [ "${CFG_TYPE}" = "extra" ]
          then
            ask_user "Extra: Portal Cautivo, tipo de log [file|syslog]" BALCFG_obelisco_portal_log ${BALCFG_obelisco_portal_log}
            case "${CFG_RETURN}" in
              (!"file"|!"syslog")
                save_setting BALCFG_obelisco_portal_log file
                funError "Error, opción inválida"
                ;;
            esac
          else
            save_setting BALCFG_obelisco_portal_log file
          fi
          save_setting BALCFG_obelisco_portal_accept ${BALCFG_obelisco_portal_accept}
          save_setting BALCFG_obelisco_portal_irc_enable true
          ;;
        ("no")
          save_setting BALCFG_obelisco_portal_enable false
          save_setting BALCFG_obelisco_portal_log file
          save_setting BALCFG_obelisco_portal_accept ${BALCFG_obelisco_portal_accept}
          save_setting BALCFG_obelisco_portal_irc_enable false
          ;;
        (*)
          # Error
          save_setting BALCFG_obelisco_portal_enable ""
          display_msg_error "Error, respuesta incorrecta, debe ser si o no"
          ;;
      esac

      # OpenVPN
      if [ "${CFG_obelisco_internet}" = "si" -a "${CFG_SW_VPN}" = "true" ]
      then
        if [ "${CFG_TYPE}" = "extra" ]
        then
          display_msg "Extra: Túneles por Internet con OpenVPN"
          display_msg2 "Por favor, leer bien la documentación de Obelisco para entender que implica activarlo"
          # OpenVPN Server
          case "${BALCFG_obelisco_vpn0_enable}" in
            ("true")
              CFG_obelisco_vpn0_enable="si"
              ;;
            ("false")
              CFG_obelisco_vpn0_enable="no"
              ;;
            (*)
              CFG_obelisco_vpn0_enable="si"
              ;;
          esac
          ask_user "Habilitar servidor OpenVPN [si|no]" CFG_obelisco_vpn0_enable ${CFG_obelisco_vpn0_enable}
          CFG_obelisco_vpn0_enable="${CFG_RETURN}"
          case "${CFG_obelisco_vpn0_enable}" in
            ("si")
              save_setting BALCFG_obelisco_vpn0_enable true
              save_setting BALCFG_vpn0_ifname tap0
              save_setting BALCFG_vpn0_port 1195
              ask_user "Dirección IP a utilizar en este extremo del túnel" BALCFG_vpn0_ipaddr ${BALCFG_vpn0_ipaddr}
              if [ "${CFG_RETURN}" != "blank" ]
              then
                BALCFG_vpn0_netmask=$(set_netmask ${CFG_RETURN})
                BALCFG_vpn0_peer_ipaddr=$(int2ip $(($(ip2int ${CFG_RETURN})+1)))
                [ $? -ne 0 ] && display_msg_error "Error: Dirección IP incorrecta"
                display_msg "Máscara de red a utilizar en ambos extremos: ${BALCFG_vpn0_netmask}"
                save_setting BALCFG_vpn0_netmask ${BALCFG_vpn0_netmask}
                display_msg2 "Dirección IP a utilizar en el extremo cliente: ${BALCFG_vpn0_peer_ipaddr}"
                save_setting BALCFG_vpn0_peer_ipaddr ${BALCFG_vpn0_peer_ipaddr}
              else
                save_setting BALCFG_obelisco_vpn0_enable false
                display_msg_error "Error, debe especificar una dirección IP"
              fi
              ;;
            ("no")
              save_setting BALCFG_obelisco_vpn0_enable false
              save_setting BALCFG_vpn0_ifname blank
              save_setting BALCFG_vpn0_port blank
              save_setting BALCFG_vpn0_ipaddr blank
              save_setting BALCFG_vpn0_netmask blank
              save_setting BALCFG_vpn0_peer_ipaddr blank
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_vpn0_enable ""
              display_msg_error "Error, respuesta incorrecta, debe ser si o no"
              ;;
          esac
          # OpenVPN Client
          case "${BALCFG_obelisco_vpn1_enable}" in
            ("true")
              CFG_obelisco_vpn1_enable="si"
              ;;
            ("false")
              CFG_obelisco_vpn1_enable="no"
              ;;
            (*)
              CFG_obelisco_vpn1_enable="si"
              ;;
          esac
          ask_user "Habilitar cliente OpenVPN [si|no]" CFG_obelisco_vpn1_enable ${CFG_obelisco_vpn1_enable}
          CFG_obelisco_vpn1_enable="${CFG_RETURN}"
          case "${CFG_obelisco_vpn1_enable}" in
            ("si")
              save_setting BALCFG_obelisco_vpn1_enable true
              save_setting BALCFG_vpn1_ifname tap1
              save_setting BALCFG_vpn1_port 1195
              ask_user "Dirección IP en Internet del Servidor" BALCFG_vpn1_remote ${BALCFG_vpn1_remote}
              [ "${BALCFG_vpn1_remote}" != "${CFG_RETURN}" ] && BALCFG_vpn1_remote="${CFG_RETURN}"
              if [ "${BALCFG_vpn1_remote}" != "auto" ]
              then
                ask_user "Dirección IP a utilizar en este extremo del túnel" BALCFG_vpn1_ipaddr ${BALCFG_vpn1_ipaddr}
                if [ "${CFG_RETURN}" != "blank" ]
                then
                  BALCFG_vpn1_peer_ipaddr=$(int2ip $(($(ip2int ${CFG_RETURN})-1)))
                  [ $? -ne 0 ] && display_msg_error "Error: Dirección IP incorrecta"
                  BALCFG_vpn1_netmask=$(set_netmask ${CFG_RETURN})
                  display_msg "Máscara de red a utilizar en ambos extremos: ${BALCFG_vpn1_netmask}"
                  save_setting BALCFG_vpn1_netmask ${BALCFG_vpn1_netmask}
                  display_msg2 "Dirección IP a utilizar en el extremo server: ${BALCFG_vpn1_peer_ipaddr}"
                  save_setting BALCFG_vpn1_peer_ipaddr ${BALCFG_vpn1_peer_ipaddr}
                else
                  save_setting BALCFG_obelisco_vpn1_enable false
                  display_msg_error "Error, debe especificar una dirección IP"
                fi
              else
                save_setting BALCFG_vpn1_ipaddr blank
                save_setting BALCFG_vpn1_netmask blank
                save_setting BALCFG_vpn1_peer_ipaddr blank
              fi
              ;;
            ("no")
              save_setting BALCFG_obelisco_vpn1_enable false
              save_setting BALCFG_vpn1_ifname blank
              save_setting BALCFG_vpn1_port blank
              save_setting BALCFG_vpn1_remote blank
              save_setting BALCFG_vpn1_ipaddr blank
              save_setting BALCFG_vpn1_netmask blank
              save_setting BALCFG_vpn1_peer_ipaddr blank
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_vpn1_enable ""
              display_msg_error "Error, respuesta incorrecta, debe ser si o no"
              ;;
           esac
        else
          save_setting BALCFG_obelisco_vpn0_enable ${BALCFG_obelisco_vpn0_enable}
          save_setting BALCFG_vpn0_ifname ${BALCFG_vpn0_ifname}
          save_setting BALCFG_vpn0_port ${BALCFG_vpn0_port}
          save_setting BALCFG_vpn0_ipaddr ${BALCFG_vpn0_ipaddr}
          save_setting BALCFG_vpn0_netmask ${BALCFG_vpn0_netmask}
          save_setting BALCFG_vpn0_peer_ipaddr ${BALCFG_vpn0_peer_ipaddr}
          save_setting BALCFG_obelisco_vpn1_enable ${BALCFG_obelisco_vpn1_enable}
          save_setting BALCFG_vpn1_ifname ${BALCFG_vpn1_ifname}
          save_setting BALCFG_vpn1_port ${BALCFG_vpn1_port}
          save_setting BALCFG_vpn1_remote ${BALCFG_vpn1_remote}
          save_setting BALCFG_vpn1_ipaddr ${BALCFG_vpn1_ipaddr}
          save_setting BALCFG_vpn1_netmask ${BALCFG_vpn1_netmask}
          save_setting BALCFG_vpn1_peer_ipaddr ${BALCFG_vpn1_peer_ipaddr}
        fi
      else
        # OpenVPN is not enabled when Internet is not available
        save_setting BALCFG_obelisco_vpn0_enable false
        save_setting BALCFG_vpn0_ifname blank
        save_setting BALCFG_vpn0_port blank
        save_setting BALCFG_vpn0_ipaddr blank
        save_setting BALCFG_vpn0_netmask blank
        save_setting BALCFG_vpn0_peer_ipaddr blank
        save_setting BALCFG_obelisco_vpn1_enable false
        save_setting BALCFG_vpn1_ifname blank
        save_setting BALCFG_vpn1_port blank
        save_setting BALCFG_vpn1_remote blank
        save_setting BALCFG_vpn1_ipaddr blank
        save_setting BALCFG_vpn1_netmask blank
        save_setting BALCFG_vpn1_peer_ipaddr blank
      fi

      # MMC
      if [ "${CFG_TYPE}" = "extra" ]
      then
        if [ -n "${BALCFG_obelisco_mmc_driver}" -a "${BALCFG_obelisco_mmc_driver}" != "na" ]
        then
          display_msg "Extra: MMC/SD Mod"
          case "${BALCFG_obelisco_mmc_enable}" in
            ("true")
              CFG_obelisco_mmc_enable="si"
              ;;
            ("false")
              CFG_obelisco_mmc_enable="no"
              ;;
            (*)
              CFG_obelisco_mmc_enable="si"
              ;;
          esac
          ask_user "Habilitar soporte MMC/SD [si|no]" CFG_obelisco_mmc_enable ${CFG_obelisco_mmc_enable}
          CFG_obelisco_mmc_enable="${CFG_RETURN}"
          case "${CFG_obelisco_mmc_enable}" in
            ("si")
              save_setting BALCFG_obelisco_mmc_enable true
              save_setting BALCFG_obelisco_mmc_driver ${BALCFG_obelisco_mmc_driver}
              ;;
            ("no")
              save_setting BALCFG_obelisco_mmc_enable false
              save_setting BALCFG_obelisco_mmc_driver ${BALCFG_obelisco_mmc_driver}
              ;;
            (*)
              # Error
              save_setting BALCFG_obelisco_mmc_enable ""
              display_msg_error "Error, respuesta incorrecta, debe ser si o no"
              ;;
          esac
        fi
      fi
    fi
    ;;
esac
#</main>

#<device_configuration>
# Configuration file processing
# -----------------------------------------

echo
[ "${CFG_TYPE}" != "test" ] && display_msg "No detener la ejecución !!!, aplicando en memoria la configuración..."
clear_variables
get_cfg_from_file
# Configuration file MUST be ok starting from here
backup_cfgfile 
set_cfg_nvram
set_cfg_hosts_file
set_cfg_portal

case "${CFG_TYPE}" in
  ("kamikaze"|"auto"|"defaults")
    display_msg "GUARDANDO CAMBIOS EN NVRAM !!!"
    $nvram commit && display_msg "REBOOT !!!" && reboot
    ;;
  ("normal"|"extra")
    display_msg "Configuración aplicada en memoria !!"
    ask_user "Guardar definitivamente los cambios de configuración ? [si|no]" CFG_COMMIT ${CFG_COMMIT}
    if [ "${CFG_RETURN}" = "si" ]
    then
      display_msg "Guardando cambios... se reiniciará el equipo..."
      $nvram commit && display_msg "REBOOT !!!" && reboot
    else
      display_msg_error "Advertencia: No se guardaron los cambios"
    fi
    ;;
esac

echo
#</device_configuration>