From: Enrico Scholz Date: Tue, 30 Mar 2004 19:07:09 +0000 (+0000) Subject: implemented parts of Liam Helmer's dummy-interface method X-Git-Tag: VERSION_0_10~177 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c69398d688f10b676e19ad471bf1d7e332e6813e;p=util-vserver.git implemented parts of Liam Helmer's dummy-interface method git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1398 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/util-vserver/scripts/vserver.functions b/util-vserver/scripts/vserver.functions index ae9bd05..5cebb5b 100644 --- a/util-vserver/scripts/vserver.functions +++ b/util-vserver/scripts/vserver.functions @@ -411,6 +411,17 @@ function _addInterfaceCmd let ++INTERFACE_CMDS_IDX } +## Usage: _generateMac +function _generateMac +{ + isNumber "$2" || { + echo $"Interface basename '$iface' must be either a number, or the mac must be configured explicitly" >&2 + return 1 + } + + eval $1=$(printf "f0:ff:%02x:%02x:%02x:%02x" $[ (~($2>>8)) & 0xff ] $[ ($2 & 0xff) ] $[ ($3>>8) & 0xff ] $[ $3 & 0xff ]) +} + ## Usage: _processSingleInterface function _processSingleInterface { @@ -423,22 +434,29 @@ function _processSingleInterface local bcast local name local scope + local mac + local extip + local up="up" _getInterfaceValue ip '' "$iface" + _getInterfaceValue extip '' "$iface" "$iface/.." _getInterfaceValue dev '' "$iface" "$iface/.." _getInterfaceValue prefix '' "$iface" "$iface/.." _getInterfaceValue mask '' "$iface" "$iface/.." _getInterfaceValue bcast '' "$iface" "$iface/.." _getInterfaceValue name '' "$iface" _getInterfaceValue scope '' "$iface" "$iface/.." + _getInterfaceValue mac '' "$iface" test "$ip" || { echo $"Can not read ip for '$iface'" >&2; return 1; } - + test ! -e "$iface"/only_ip || { + ## LEGACY ALERT echo $"The 'only_ip' flag for interface '$iface' is deprecated; use 'nodev' instead of" >&2 unset dev } test ! -e "$iface"/nodev || unset dev + test ! -e "$iface"/down || up= if test "$dev"; then _transformMask2Prefix prefix "$prefix" "$mask" @@ -452,15 +470,27 @@ function _processSingleInterface test -f /proc/net/vlan || { _addInterfaceCmd VCONFIG "${dev/./ }" _addInterfaceCmd IP_ADDR 127.0.0.1/8 broadcast 127.255.255.255 dev "$dev" - _addInterfaceCmd IP_LINK "$dev" + _addInterfaceCmd IP_LINK "$dev" $up } ;; esac + if ! test -e "$iface"/indirect; then + _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" broadcast ${bcast:-+} ${name:+label "$dev:$name"} dev "$dev" + #_addInterfaceCmd IP_ROUTE "$ip${prefix:+/$prefix}" dev "$dev" + _addInterfaceCmd IP_LINK "$dev" $up + elif ! test "$ctx"; then + echo $"Using 'dummy' (indirect) for interface '$dev' requires a fixed context number; dynamic ctx are not supported" >&2 + return 1 + else + test "$mac" || _generateMac mac "$(basename '$iface')" "$ctx" || return 1 + _addInterfaceCmd MODPROBE -o "dummy${ctx}" dummy + _addInterfaceCmd IP_LINK dev "dummy${ctx}" address "$mac" + _addInterfaceCmd NAMEIF "$dev" "$mac" + _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" ${name:+label "$dev:$name"} dev "$dev" + test -z "$extip" || _addInterfaceCmd IPTABLES "$ip${prefix:+/$prefix}" "$ctx" "$extip" + fi INTERFACES=( "${INTERFACES[@]}" "$ip${prefix:+/$prefix}" ) - _addInterfaceCmd IP_ADDR "$ip${prefix:+/$prefix}" broadcast ${bcast:-+} ${name:+label "$dev:$name"} dev "$dev" - #_addInterfaceCmd IP_ROUTE "$ip${prefix:+/$prefix}" dev "$dev" - _addInterfaceCmd IP_LINK "$dev" fi } @@ -468,6 +498,9 @@ function _processSingleInterface function _generateInterfaceOptions { local iface + local ctx + + test ! -e "$1"/context || read ctx <"$vdir"/context for iface in "$1/interfaces/"*; do test -d "$iface" || continue @@ -489,9 +522,12 @@ function enableInterfaces unset var[0] case "$type" in + IPTABLES) ;; ## TODO + MODPROBE) $_MODPROBE "${var[@]}";; + NAMEIF) $_NAMEIF "${var[@]}";; VCONFIG) $_VCONFIG add "${var[@]}";; IP_ADDR) $_IP addr add "${var[@]}";; - IP_LINK) $_IP link set "${var[@]}" up;; + IP_LINK) $_IP link set "${var[@]}";; IP_ROUTE) $_IP route add "${var[@]}";; *) echo "Unknown interface-command type '$type'" >&2; false;; esac @@ -515,6 +551,9 @@ function disableInterfaces unset var[0] case "$type" in + IPTABLES) ;; ## TODO + MODPROBE) $_RMMOD "${var[@]}";; + NAMEIF) ;; VCONFIG) $_VCONFIG rem "${var[@]}";; IP_ADDR) $_IP addr del "${var[@]}";; IP_LINK) ;; ## Ignore the link-down command for now