X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=scripts%2Fchbind;fp=scripts%2Fchbind;h=ae82ed03d8753eb5d05fe09d98f011889b6eb42c;hb=3b34449070c0846fdc49436d1edd5916512f1644;hp=0000000000000000000000000000000000000000;hpb=7370d748ee384dd549f2947c60ebc9a647907d06;p=util-vserver.git diff --git a/scripts/chbind b/scripts/chbind new file mode 100755 index 0000000..ae82ed0 --- /dev/null +++ b/scripts/chbind @@ -0,0 +1,132 @@ +#! /bin/bash +# $Id: chbind 2394 2006-11-23 21:12:26Z dhozac $ + +# Copyright (C) 2004 Enrico Scholz +# Copyright (C) 2006 Daniel Hokka Zakrisson +# +# 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; version 2 of the License. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +: ${UTIL_VSERVER_VARS:=/usr/lib/util-vserver/util-vserver-vars} +test -e "$UTIL_VSERVER_VARS" || { + echo $"Can not find util-vserver installation (the file '$UTIL_VSERVER_VARS' would be expected); aborting..." >&2 + exit 1 +} +. "$UTIL_VSERVER_VARS" +. "$_LIB_FUNCTIONS" + +function showHelp() +{ + echo \ +$"Usage: $1 [--silent] [--nid ] [--ip [/]] + [--bcast ] [--] * + +--silent + Do not print the addresses assigned. +--nid + Network context id to use. +--ip [/] + IP address to bind to. +--bcast + Broadcast address for the network context. + +Report bugs to <$PACKAGE_BUGREPORT>." + exit $2 +} + +function showVersion() +{ + echo \ +$"chbind $PACKAGE_VERSION -- bind to IP addresses and execute a program +This program is part of $PACKAGE_STRING + +Copyright (C) 2004 Enrico Scholz +Copyright (C) 2006 Daniel Hokka Zakrisson +This program is free software; you may redistribute it under the terms of +the GNU General Public License. This program has absolutely no warranty." + exit $1 +} + +tmp=$(getopt -o + --long ncap:,nid:,ip:,bcast:,disconnect,flag:,secure,silent,help,version -n "$0" -- "$@") || exit 1 +eval set -- "$tmp" + +OPT_CAPS=() +OPT_NID= +OPT_DISCONNECT= +OPT_FLAGS=() +OPT_SECURE= +OPT_SILENT= +OPT_BCAST= +OPT_IPS=() + +while true; do + case "$1" in + --help) showHelp $0 0;; + --version) showVersion 0;; + --ncap) OPT_CAPS=( "${OPT_CAPS[@]}" "$2" ); shift;; + --nid) OPT_NID=$2; shift;; + --disconnect) OPT_DISCONNECT=1;; + --flag) OPT_FLAGS=( "${OPT_FLAGS[@]}" "$2" ); shift;; + --secure) OPT_SECURE=1;; + --silent) OPT_SILENT=1;; + --ip) OPT_IPS=( "${OPT_IPS[@]}" --ip "$2" ); shift;; + --bcast) OPT_BCAST=$2; shift;; + --) shift; break;; + *) echo $"chbind: internal error; arg=='$1'" >&2; exit 1;; + esac + shift +done + +$_VSERVER_INFO - FEATURE vnet || exec $_CHBIND_COMPAT \ + ${OPT_NID:+--nid "$OPT_NID"} \ + ${OPT_SILENT:+--silent} \ + ${OPT_BCAST:+--bcast "$OPT_BCAST"} \ + "${OPT_IPS[@]}" \ + -- "$@" + +create_cmd=( $_NCONTEXT --create --silentexist + ${OPT_SILENT:+--silent} + ${OPT_NID:+--nid "$OPT_NID"} ) + +chain_cmd=() + +old_IFS=$IFS +IFS=,$IFS + +chain_cmd=( "${chain_cmd[@]}" + -- + $_NATTRIBUTE --set + ${OPT_SECURE:+--secure} + ${OPT_CAPS:+--ncap "${OPT_CAPS[*]}"} + ${OPT_FLAGS:+--flag "${OPT_FLAGS[*]}"} + -- + $_NADDRESS --add + ${OPT_SILENT:+--silent} + ${OPT_BCAST:+--bcast "$OPT_BCAST"} + "${OPT_IPS[@]}" ) + +migrate_cmd=( $_NCONTEXT + ${OPT_SILENT:+--silent} + ${OPT_DISCONNECT:+--disconnect} ) + +IFS=$old_IFS + +if test -z "$OPT_NID" || $_VSERVER_INFO -q "$OPT_NID" XIDTYPE static; then + "${create_cmd[@]}" "${chain_cmd[@]}" -- "$@" + rc=$? +else + rc=254 +fi + +test "$rc" -ne 254 || exec "${migrate_cmd[@]}" --nid "$OPT_NID" --migrate -- "$@" +exit $rc