vm-start/setup_bridge.sh

142 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/bash
# Set global variables
Usage="
$(basename $0) [PARAMETTER] [OPTION]
set up a bridge interface. Use either doas or sudo to get the root access. Please make sure that you account have access to theses commands.
This script will use either doas or sudo to access the root user and do some temporary modifications. You will be able to see it with 'ip a' command
Please do not name your bridge the saùe as an already existed interface.
PARAMETTER available
-h, --help Print this help message and quit
-v, --version Print the version of this program and quit
OPTION available
-a <br-id>, --addbridge=<br-id> Set the name for the new bridge interface, usually it is br0, br1, etc
-r <br-id>, --rmbridge=<br-id> Remove a bridge interface. Be carefull, it do no verification wheither br-id is a real interface or a bridge interface.
--addr=<address> Set an external address on the bridge. The external is the one accessible from the host.
"
Version="1.2.0"
unset action
add_bridge() {
echo "add bridge interface ${bridge}"
${rooter} ip link add ${bridge} type bridge
# authorise qemu to use as interface ${bridge} as bridge
if cat /etc/qemu/bridge.conf | grep -q "${bridge}"
then
echo "bridge already authorised by qemu"
else
echo "allow ${bridge}" | doas tee -a /etc/qemu/bridge.conf
echo "entry added to /etc/qemu/bridge.conf"
fi
echo "activate bridge ${bridge}"
${rooter} ip link set dev ${bridge} up
}
rm_bridge() {
echo "rm bridge interface ${bridge}"
${rooter} ip link del ${bridge}
}
# detect the parametters
for i in $@; do
case "$i" in
"-h" | "--help")
echo "$Usage"
exit 0
;;
"-v" | "--version")
echo "$(basename $0) $Version"
exit 0
;;
esac
done
# check if sudo is installed
if which doas &> /dev/null
then
rooter=$(which doas)
elif which sudo &> /dev/null
then
rooter=$(which sudo)
else
echo "no command to give access to root is given. Abandon" >&2
exit
fi
# detect options 2 parametters (-a, -r)
for (( arg=1; arg< $#; arg++)); do
value="$((arg+1))"
case "${!arg}" in
"-a")
bridge="${!value}"
action="add"
;;
"-r")
bridge="${!value}"
action="rm"
;;
esac
done
# detect the options
for i in $@; do
case "${i%=*}" in
"--addbridge")
bridge="${i#*=}"
action="add"
;;
"--rmbridge")
bridge="${i#*=}"
action="rm"
;;
"--addr")
address="${i#*=}"
;;
esac
done
case "${action}" in
"add")
add_bridge
;;
"rm")
rm_bridge
exit 0
;;
*)
echo "Error, bridge have to setup the bridge" >&2
exit 1
;;
esac
if [ ! "${address}" == "" ]
then
echo "add ${address} to bridge ${bridge}"
${rooter} ip a add dev ${bridge} ${address}
fi