#!/bin/bash # $HeadURL$ $LastChangedRevision$ set -e PROGNAME=$(basename $0) # Load support functions . $(pcms-config PCMS_SHARE_PREFIX)/scripts/support.sh main() { # Defaults for options VERBOSELEVEL=2 OPT_FILE= # Can't set it to specific value because that is derived OPT_TOUCH=false # Process options while [ $# -ge 1 ]; do case $1 in --file=*) OPT_FILE=${1#*=} ;; --touch) OPT_TOUCH=true ;; --debug=*) VERBOSELEVEL=${1#*=} ;; -d) VERBOSELEVEL=$2; shift ;; -v|--verbose) VERBOSELEVEL=3 ;; --) shift; break ;; -*) error "main: $1: bad option" ;; *) break ;; esac shift done # Process arguments [ $# = 1 ] || usage eval set -- $(encode --decode "$1") [ $# -ge 2 ] || usage DEVICE="$1" METHOD="$2" shift 2 # Sanity checks and derivations [[ $DEVICE =~ ^((eth|br|wlan|dummy|eno)[0-6]|lo)$ ]] || error "$DEVICE: invalid device" [[ $METHOD =~ ^(loopback|static|dhcp|nm|manual|external)$ ]] || error "$METHOD: invalid method" method_$METHOD "$@" } method_loopback() { [ $# -eq 0 ] || usage debug 10 "loopback: DEVICE=$DEVICE" ifdown --force $DEVICE 2> /dev/null || true sleep 2 ifconfig $DEVICE down 2>/dev/null || true sleep 2 echo -e "auto $DEVICE\niface $DEVICE inet loopback\n" > ${OPT_FILE:-/etc/network/interfaces.d/$DEVICE} ifup $DEVICE } method_static() { [ $# -ge 3 ] || usage IPADDR=$1 NETMASK=$2 GATEWAY_FLAG=$3 [[ $GATEWAY_FLAG =~ ^(true|false)$ ]] || error "$GATEWAY_FLAG: invalid gateway flag" if $GATEWAY_FLAG; then [ $# = 4 ] || usage GATEWAY_IPADDR=$4 else [ $# = 3 ] || usage fi debug 10 "method_static: DEVICE=$DEVICE, METHOD=$METHOD, IPADDR=$IPADDR, NETMASK=$NETMASK, GATEWAY_FLAG=$GATEWAY_FLAG" ifdown --force $DEVICE 2> /dev/null || true sleep 2 ifconfig $DEVICE down 2>/dev/null || true sleep 2 if $GATEWAY_FLAG; then echo -e "auto $DEVICE\niface $DEVICE inet $METHOD\n address $IPADDR\n netmask $NETMASK\n gateway $GATEWAY_IPADDR\n" > ${OPT_FILE:-/etc/network/interfaces.d/$DEVICE} else echo -e "auto $DEVICE\niface $DEVICE inet $METHOD\n address $IPADDR\n netmask $NETMASK\n" > ${OPT_FILE:-/etc/network/interfaces.d/$DEVICE} fi } method_manual() { [ $# = 0 ] || usage ifdown --force $DEVICE 2> /dev/null || true sleep 2 ifconfig $DEVICE down 2>/dev/null || true sleep 2 echo -e "iface $DEVICE inet $METHOD\n" > ${OPT_FILE:-/etc/network/interfaces.d/$DEVICE} } method_external() { [ $# = 0 ] || usage ifdown --force $DEVICE 2> /dev/null || true sleep 2 ifconfig $DEVICE down 2>/dev/null || true sleep 2 echo -e "# $DEVICE defined in a different file (probably because it's complicated.\nsource /etc/network/interfaces.d/$DEVICE\n" > ${OPT_FILE:-/etc/network/interfaces.d/$DEVICE} } usage() { echo "Usage: $PROGNAME [ --file= ] @[@@@[@&2; exit 1; } main "$@"