From f6cc525c91d527dde9cfa12ea186698a3814bc1c Mon Sep 17 00:00:00 2001 From: ronenroth-lb Date: Thu, 8 Dec 2022 16:09:30 +0200 Subject: [PATCH] Add suport to create a bridge on top of dhcp interface:x --- vagrant/scripts/create_bridge.sh | 77 ++++++++++++++++++++------------ 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/vagrant/scripts/create_bridge.sh b/vagrant/scripts/create_bridge.sh index eec5834..98cb1ee 100755 --- a/vagrant/scripts/create_bridge.sh +++ b/vagrant/scripts/create_bridge.sh @@ -25,6 +25,7 @@ function check_eth { } function display_usage { + echo echo "create a bridge network using a provided interface" echo "usage:" echo "" @@ -33,11 +34,14 @@ function display_usage { echo "options:" echo "bridge_name - our vagrant boxes use br1 as a bridge name." echo "iface_name - name of the interface we want to use under the bridge." + echo "bridge mode - static or dhcp" echo "bridge_cidr - subnet each we will issue data IPs for each provisioned VM." echo "gateway - IP address inside the provided " echo "" echo "example:" - echo "./create_bridge.sh br1 ens1f0np0 10.10.230.2/24 10.10.230.1" + echo "For Static IP configuration: ./create_bridge.sh br1 ens1f0np0 static 10.10.230.2/24 10.10.230.1" + echo "For DHCP configuration: ./create_bridge.sh br1 ens1f0np0 dhcp" + echo } # check whether user had supplied -h or --help . If yes display usage @@ -46,19 +50,25 @@ if [[ ( $@ == "--help") || $@ == "-h" ]]; then exit 0 fi -# if less than five arguments supplied, display usage -if [ $# -le 3 ]; then +# if less than three arguments supplied, display usage +if [ $# -le 2 ]; then display_usage exit 1 fi -install_dependencies - - export BRIDGE_NAME=${1} export BRIDGE_INTERFACE=${2} -export BRIDGE_ADDRESS_CIDR=${3} -export BRIDGE_GATEWAY=${4} +export BRIDGE_MODE=${3} +export BRIDGE_ADDRESS_CIDR=${4} +export BRIDGE_GATEWAY=${5} + +if [[ $BRIDGE_MODE != "static" && $BRIDGE_MODE != "dhcp" ]] ;then + printf "\nWrong value for bridge mode, valid values are static or dhcp\n" + display_usage + exit 1 +fi + +install_dependencies if check_eth $BRIDGE_INTERFACE; then echo "The provided link for the bridge is Online!" @@ -67,26 +77,30 @@ else exit 1 fi -# n - ip format validation, m - subnet format validation -n='([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' -m='([0-9]|[12][0-9]|3[012])' # validate cidr with n & m -if [[ $BRIDGE_ADDRESS_CIDR =~ ^$n(\.$n){3}/$m$ ]]; then - printf '"%s" is a valid CIDR\n' "$BRIDGE_ADDRESS_CIDR" -else - printf 'ERROR: "%s" is not valid CIDR..exiting\n' "$BRIDGE_ADDRESS_CIDR" - exit 1 -fi +# n - ip format validation, m - subnet format validation +if [[ $BRIDGE_MODE == "static" ]] ; then + n='([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])' + m='([0-9]|[12][0-9]|3[012])' + # CIDR value validation + if [[ $BRIDGE_ADDRESS_CIDR =~ ^$n(\.$n){3}/$m$ ]]; then + printf '"%s" is a valid CIDR\n' "$BRIDGE_ADDRESS_CIDR" + else + printf 'ERROR: "%s" is not valid CIDR..exiting\n' "$BRIDGE_ADDRESS_CIDR" + exit 1 + fi -# ip format validation -if [[ $BRIDGE_GATEWAY =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - printf '"%s" is a valid IP\n' "$BRIDGE_GATEWAY" -else - printf 'ERROR: "%s" is not valid gateway address\n' "$BRIDGE_GATEWAY" - exit 1 + # ip format validation + if [[ $BRIDGE_GATEWAY =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + printf '"%s" is a valid IP\n' "$BRIDGE_GATEWAY" + else + printf 'ERROR: "%s" is not valid gateway address\n' "$BRIDGE_GATEWAY" + exit 1 + fi fi + set +e nmcli con show "$BRIDGE_NAME" &>/dev/null RESULT=$? @@ -100,13 +114,18 @@ echo "creating bridge $BRIDGE_NAME" # start creating the bridge sudo systemctl stop libvirtd sudo nmcli con add type bridge ifname $BRIDGE_NAME autoconnect yes con-name $BRIDGE_NAME stp off -sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method manual -sudo nmcli con modify $BRIDGE_NAME ipv4.gateway $BRIDGE_GATEWAY -sudo nmcli con modify $BRIDGE_NAME ipv4.dns $BRIDGE_GATEWAY +if [[ $BRIDGE_MODE == "static" ]] ; then + sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method manual + sudo nmcli con modify $BRIDGE_NAME ipv4.gateway $BRIDGE_GATEWAY + sudo nmcli con modify $BRIDGE_NAME ipv4.dns $BRIDGE_GATEWAY +else + #sudo nmcli con modify $BRIDGE_NAME ipv4.addresses $BRIDGE_ADDRESS_CIDR ipv4.method auto + sudo nmcli con modify $BRIDGE_NAME ipv4.method auto +fi sudo nmcli con add type bridge-slave autoconnect yes con-name "$BRIDGE_INTERFACE" ifname "$BRIDGE_INTERFACE" master $BRIDGE_NAME -sudo systemctl restart NetworkManager -sudo systemctl restart libvirtd echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-ipforward.conf sudo sysctl -p /etc/sysctl.d/99-ipforward.conf -sudo nmcli con up $BRIDGE_NAME sudo nmcli con modify $BRIDGE_NAME connection.autoconnect-slaves 1 +sudo nmcli con up $BRIDGE_NAME +sudo systemctl restart NetworkManager +sudo systemctl restart libvirtd