#!/bin/bash ############################################################################### # # # IPFire.org - A linux based firewall # # Copyright (C) 2010 Michael Tremer & Christian Schmidt # # # # 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 3 of the License, or # # (at your option) any later version. # # # # This program is distributed in the hope that it will be useful, # # but WITHOUT ANY WARRANTY; without even the implied warranty of # # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # # GNU General Public License for more details. # # # # You should have received a copy of the GNU General Public License # # along with this program. If not, see . # # # ############################################################################### . /usr/lib/network/header-zone HOOK_SETTINGS="HOOK AUTH LINKNAME USER SECRET PEERDNS DEFAULTROUTE MSN MTU" HOOK_SETTINGS="${HOOK_SETTINGS} L2PROTO L3PROTO ENCAP PHONE" AUTH= CHANNELS="auto" DEFAULTROUTE=1 ENCAP="syncppp" L2PROTO="hdlc" L3PROTO="trans" LINKNAME="$(uuid)" MSN= MTU=1500 PEERDNS=1 TIMEOUT=10 SECRET= USER= PHONE= MODE="persistent" ISDN_ALLOWED_AUTHS="chap pap" function hook_check() { assert isset USER assert isset SECRET assert isset LINKNAME assert isset DEFAULTROUTE assert isset PEERDNS assert isset TIMEOUT assert isset PHONE assert isbool DEFAULTROUTE assert isbool PEERDNS assert isinteger MSN assert isinteger TIMEOUT isset AUTH && assert isoneof AUTH ${ISDN_ALLOWED_AUTHS} } function hook_parse_cmdline() { local value while [ $# -gt 0 ]; do case "$1" in --user=*) USER=${1#--user=} ;; --secret=*) SECRET=${1#--secret=} ;; --linkname=*) LINKNAME=${1#--name=} ;; --mtu=*) MTU=${1#--mtu=} ;; --defaultroute=*) value=${1#--defaultroute=} if enabled value; then DEFAULTROUTE=1 else DEFAULTROUTE=0 fi ;; --dns=*) value=${1#--dns=} if enabled value; then PEERDNS=1 else PEERDNS=0 fi ;; --auth=*) AUTH=${1#--auth=} ;; --device=*) DEVICE=${1#--device=} ;; --msn=*) MSN=${1#--msn=} ;; --timeout=*) TIMEOUT=${1#--timeout=} ;; --phone=*) PHONE="${PHONE} ${1#--phone=}" ;; *) echo "Unknown option: $1" >&2 exit ${EXIT_ERROR} ;; esac shift done } function hook_up() { local zone=${1} shift assert isset zone zone_config_read ${zone} assert [ -e "/dev/${DEVICE}" ] # Creating necessary files # XXX must be PPP_RUN [ -d "${RED_RUN}/${LINKNAME}" ] || mkdir -p ${RED_RUN}/${LINKNAME} # Create device node. isdn_create_device ${zone} # Apply configuration to the ISDN stack. isdn_set_l2proto ${zone} ${L2PROTO} isdn_set_l3proto ${zone} ${L3PROTO} isdn_set_encap ${zone} ${ENCAP} isdn_set_eaz ${zone} ${MSN} isdn_set_huptimeout ${zone} $(( ${TIMEOUT} * 60 )) isdn_addphone ${zone} out ${PHONE} # Updating PPP credentials. ppp_secret "${USER}" "${SECRET}" # Bring up connection. isdn_dial ${zone} \ --mode=${MODE} \ --channels=${CHANNELS} \ --user=${USER} \ --mtu=${MTU} exit ${EXIT_OK} } function hook_down() { local zone=${1} shift # Bring down ISDN interface. isdn_hangup ${zone} # Remove ISDN device. isdn_remove_device ${zone} exit ${EXIT_OK} } function hook_status() { local zone=${1} assert isset zone cli_device_headline ${zone} zone_config_read ${zone} cli_headline 2 "Configuration:" cli_print_fmt1 2 "User" "${USER}" cli_print_fmt1 2 "Secret" "" cli_space if device_exists ${zone}; then cli_headline 3 "ISDN information:" cli_print_fmt1 3 "L2 protocol" "$(isdn_get_l2proto ${zone})" cli_print_fmt1 3 "L3 protocol" "$(isdn_get_l3proto ${zone})" cli_print_fmt1 3 "Encapsulation" "$(isdn_get_encap ${zone})" cli_space fi # Exit if zone is down zone_is_up ${zone} || exit ${EXIT_ERROR} # XXX display time since connection started cli_headline 2 "Point-to-Point protocol" cli_print_fmt1 2 "IP address" "$(routing_db_get ${zone} local-ip-address)" cli_print_fmt1 2 "Gateway" "$(routing_db_get ${zone} remote-ip-address)" cli_print_fmt1 2 "DNS servers" "$(routing_db_get ${zone} dns)" cli_space exit ${EXIT_OK} }