diff options
Diffstat (limited to 'src/network.subr')
-rw-r--r-- | src/network.subr | 297 |
1 files changed, 0 insertions, 297 deletions
diff --git a/src/network.subr b/src/network.subr deleted file mode 100644 index 326ca6e..0000000 --- a/src/network.subr +++ /dev/null @@ -1,297 +0,0 @@ -### Globals -PROFILE_DIR="/etc/network.d" -SUBR_DIR="/usr/lib/network/" - -### Messages -## -# err msg -# output specified message -err_append() { -echo -n $* -} - -err() { -echo $* -} - -### Profile loading -## -# load_profile profile -# source the profile -load_profile() { - validate_profile $1 || return 1 - . $PROFILE_DIR/$1 -} -# validate_profile profile -# check whether profile exists and is usable -validate_profile() -{ - [[ -z "$1" ]] && return 1 - if [[ ! -f $PROFILE_DIR/$1 ]]; then - err "Profile \"$1\" does not exist" - return 1 - fi - . $PROFILE_DIR/$1 - if [[ -z "$INTERFACE" ]]; then - err "Profile missing an interface to configure" - return 1 - fi - if [[ ! -f $SUBR_DIR/$CONNECTION.subr ]]; then - err "$CONNECTION is not a valid connection, check spelling or look at examples" - return 1 - fi -} - -### Profile up/down -## -# all_down -# take all profiles down -# -all_down() -{ - ls -1 $STATE_DIR/profiles/ | while read prof; do - profile_down $prof - done - rm_daemon net-profiles -} - -# all_suspend -# store a list of running profiles and take them down -# -all_suspend() -{ - [[ ! -d $STATE_DIR ]] && mkdir -p $STATE_DIR/{interfaces,profiles} - [[ ! -d $STATE_DIR/suspend ]] && mkdir $STATE_DIR/suspend - - ls -1 $STATE_DIR/profiles/ | while read prof; do - cp $STATE_DIR/profiles/$prof $STATE_DIR/suspend/ - profile_down $prof - done -} - -# all_suspend -# store a list of running profiles and take them down -# -all_resume() -{ - ls -1 $STATE_DIR/suspend/ | while read prof; do - profile_up $prof - rm $STATE_DIR/suspend/$prof - done -} - -# profile_up profile -# put all profiles up -# -profile_up() -{ - - [[ ! -d $STATE_DIR ]] && mkdir -p $STATE_DIR/{interfaces,profiles} - - load_profile $1 || return 1 - - check_profile $1 && err "$1 already connected" && return 1 - - # NETWORKS_EXCLUSIVE, rc.conf: Profiles are globally mutually exclusive - # EXCLUSIVE, network.d/profile: Individual profile is mutually exclusive - if checkyesno $NETWORKS_EXCLUSIVE || checkyesno $EXCLUSIVE; then - all_down - fi - - stat_busy "$1 up" - - if check_iface $INTERFACE; then - if checkyesno $CHECK; then - err_append "Interface $INTERFACE already in use" - stat_fail && return 1 - else - interface_down $INTERFACE || return 1 - load_profile $1 - fi - fi - - - eval $PRE_UP || return 1 - - . $SUBR_DIR/${CONNECTION}.subr - if ! ${CONNECTION}_up $1; then - stat_fail - return 1 - fi - - eval $POST_UP || return 1 - - set_profile up $1 - ${CONNECTION}_clean_scope - unset EXCLUSIVE - - add_daemon net-profiles - stat_done -} - -# profile_down profile -# take profile down -# -profile_down() -{ - - [[ ! -d $STATE_DIR ]] && mkdir -p $STATE_DIR/{interfaces,profiles} - - load_profile $1 || return 1 - - if ! check_profile $1; then - err "Profile not connected" - return 1 - fi - - stat_busy "$1 down" - if [[ "$(get_iface_prof $INTERFACE)" == "external" ]]; then - err_append "$interface was connected by another application" - stat_fail - return 1 - fi - - eval $PRE_DOWN || return 1 - - . $SUBR_DIR/${CONNECTION}.subr - if ! ${CONNECTION}_down $1; then - stat_fail - return 1 - fi - - eval $POST_DOWN || return 1 - - set_profile down $1 - ${CONNECTION}_clean_scope - stat_done -} - -# Check if variable is a member of an array -inarray() -{ -search=$1 -shift -for item in $*; do - if [[ "$item" == "$search" ]]; then - return 0 - fi -done -return 1 -} - -quirk() { -inarray $1 ${QUIRKS[@]} -return $? -} - -# interface_down interface -# take interface down -# -interface_down() -{ - local prof=$(get_iface_prof $1) - profile_down $prof - return $? -} - - -### Query functions -## -# check_iface interface -# Return 0 if interface up -# Return 1 if interface down -# -check_iface() { - [[ -f $STATE_DIR/interfaces/$1 ]] && return 0 - return 1 -} - -# get_iface_prof interface -# Echo interface profile and return 0 if up -# Return 1 if down. -# -get_iface_prof() { - if check_iface $1; then - . $STATE_DIR/interfaces/$1 - echo $PROFILE - else - return 1 - fi -} - -# list_profiles -# Outputs a list of all profiles -list_profiles() { - find $PROFILE_DIR/ -maxdepth 1 -type f -printf "%f\n" -} - -# check_profile profile -# Return 0 if profile up -# Return 1 if profile down -# -check_profile() { - [[ -f $STATE_DIR/profiles/$1 ]] && return 0 - return 1 -} - -### Status setting functions -## -# set_profile up/down profile -# Set profile state, either up or down -# -set_profile() { - if [[ "$1" == "up" ]]; then - . $PROFILE_DIR/$2 - cp $PROFILE_DIR/$2 $STATE_DIR/profiles/ - echo $2 > $STATE_DIR/last_profile - set_iface up $INTERFACE $2 - - elif [[ "$1" == "down" ]]; then - . $STATE_DIR/profiles/$2 - rm $STATE_DIR/profiles/$2 - set_iface down $INTERFACE $2 - fi -} - -# set_iface up/down interface [profile] -# Set interface status to up/down -# optionally link it to a profile. -# -set_iface() { - PROFILE=$3 - [[ -z "$PROFILE" ]] && PROFILE=external - if [[ "$1" == "up" ]]; then - echo "PROFILE=$PROFILE" > $STATE_DIR/interfaces/$2 - elif [[ "$1" == "down" ]]; then - rm $STATE_DIR/interfaces/$2 - fi -} - - -### From FreeBSD's /etc/rc.subr -## -# checkyesno var -# Test $1 variable, and warn if not set to YES or NO. -# Return 0 if it's "yes" (et al), nonzero otherwise. -# -checkyesno() -{ - _value=${1} - #debug "checkyesno: $1 is set to $_value." - case $_value in - - # "yes", "true", "on", or "1" - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - return 0 - ;; - - # "no", "false", "off", or "0" - [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) - return 1 - ;; - *) - #warn "\$${1} is not set properly - see ${rcvar_manpage}." - return 1 - ;; - esac -} |