#!/bin/bash # $HeadURL$ $LastChangedRevision$ # Modules . $(miniade) || { echo "${0##*/}: ERROR: miniade failed (hint: run 'miniade' to see error)" >&2; exit 1; } # Configurable stuff # Other globals IFNAME_REGEXP='^(lo|[a-z][a-z0-9]*[0-9])$' main() { local MY_ARGS # Defaults for options OPT_FILE= # Can't set it to specific value because that is derived OPT_TOUCH=false # Process options special_opts_handler() { case $1 in --file=*) OPT_FILE=${1#*=} ;; --touch) OPT_TOUCH=true ;; *) return 1 ;; esac } miniade_process_options --help-handler=help --special-opts-handler=special_opts_handler MY_ARGS "$@" && set -- "${MY_ARGS[@]}" # Process arguments [ $# = 1 ] || miniade_bad_usage type encode > /dev/null 2>&1 || miniade_internal "encode: command not found (hint: is PATH set correctly?)" ENCODE_OUTPUT=$(encode --decode "$1") || miniade_internal "encode: failed (hint: see messages above)" eval set -- "$ENCODE_OUTPUT" [ $# -ge 2 ] || miniade_bad_usage IFNAME="$1" METHOD="$2" shift 2 # Sanity checks and derivations [[ $IFNAME =~ $IFNAME_REGEXP ]] || miniade_error "$IFNAME: invalid device" [[ $METHOD =~ ^(loopback|static|dhcp|nm|manual|external)$ ]] || miniade_error "$METHOD: invalid method" method_$METHOD "$@" } method_loopback() { [ $# -eq 0 ] || miniade_bad_usage miniade_debug 10 "loopback: IFNAME=$IFNAME" ifdown --force $IFNAME 2> /dev/null || true sleep 2 ifconfig $IFNAME down 2>/dev/null || true sleep 2 echo -e "auto $IFNAME\niface $IFNAME inet loopback\n" > ${OPT_FILE:-/etc/network/interfaces.d/$IFNAME} ifup $IFNAME } method_static() { [ $# -ge 3 ] || miniade_bad_usage IPADDR=$1 NETMASK=$2 GATEWAY_FLAG=$3 [[ $GATEWAY_FLAG =~ ^(true|false)$ ]] || miniade_error "$GATEWAY_FLAG: invalid gateway flag" if $GATEWAY_FLAG; then [ $# = 4 ] || miniade_bad_usage GATEWAY_IPADDR=$4 else [ $# = 3 ] || miniade_bad_usage fi miniade_debug 10 "method_static: IFNAME=$IFNAME, METHOD=$METHOD, IPADDR=$IPADDR, NETMASK=$NETMASK, GATEWAY_FLAG=$GATEWAY_FLAG" ifdown --force $IFNAME 2> /dev/null || true sleep 2 ifconfig $IFNAME down 2>/dev/null || true sleep 2 if $GATEWAY_FLAG; then echo -e "auto $IFNAME\niface $IFNAME inet $METHOD\n address $IPADDR\n netmask $NETMASK\n gateway $GATEWAY_IPADDR\n" > ${OPT_FILE:-/etc/network/interfaces.d/$IFNAME} else echo -e "auto $IFNAME\niface $IFNAME inet $METHOD\n address $IPADDR\n netmask $NETMASK\n" > ${OPT_FILE:-/etc/network/interfaces.d/$IFNAME} fi } method_manual() { [ $# = 0 ] || miniade_bad_usage ifdown --force $IFNAME 2> /dev/null || true sleep 2 ifconfig $IFNAME down 2>/dev/null || true sleep 2 echo -e "iface $IFNAME inet $METHOD\n" > ${OPT_FILE:-/etc/network/interfaces.d/$IFNAME} } method_external() { [ $# = 0 ] || miniade_bad_usage ifdown --force $IFNAME 2> /dev/null || true sleep 2 ifconfig $IFNAME down 2>/dev/null || true sleep 2 echo -e "# $IFNAME defined in a different file (probably because it's complicated.\nsource /etc/network/interfaces.d/$IFNAME\n" > ${OPT_FILE:-/etc/network/interfaces.d/$IFNAME} } help() { local PROGNAME miniade_get_progname PROGNAME echo "Usage: $PROGNAME [ ] [ --file= ] [ --touch ] @[@@@[@