|
@@ -0,0 +1,151 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+CONFIG_PATH="./ipw-configsample"
|
|
|
+
|
|
|
+source "$CONFIG_PATH"
|
|
|
+
|
|
|
+NEWCONFIG_TMPPATH="/tmp/.~ipw"
|
|
|
+
|
|
|
+
|
|
|
+CMD="$1"; shift;
|
|
|
+
|
|
|
+NEWCONFIG=0
|
|
|
+case "$CMD" in
|
|
|
+ add1qif)
|
|
|
+ NEWCONFIG=1 # we need to update the config after the command
|
|
|
+
|
|
|
+
|
|
|
+ D1Q_IFACES[ ${#D1Q_IFACES}]
|
|
|
+
|
|
|
+ ;;
|
|
|
+ addbrif)
|
|
|
+ NEWCONFIG=1 # we need to update the config after the command
|
|
|
+
|
|
|
+ BRNAME="$1"; shift
|
|
|
+ SLAVE="$1"; shift
|
|
|
+
|
|
|
+ # TODO: implement this
|
|
|
+ #bond0_SLAVES[ ${#bond0_SLAVES[@]} ]="eth2"
|
|
|
+ ;;
|
|
|
+ fix)
|
|
|
+ #brctl addif bond0 eth2
|
|
|
+ ;;
|
|
|
+ *)
|
|
|
+ ;;
|
|
|
+esac
|
|
|
+
|
|
|
+newconfig_open() {
|
|
|
+ echo -n > "$NEWCONFIG_TMPPATH"
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_write() {
|
|
|
+ LINE="$1"; shift;
|
|
|
+
|
|
|
+ [[ $NEWCONFIG -eq 0 ]] && return
|
|
|
+
|
|
|
+ echo "$LINE" >> "$NEWCONFIG_TMPPATH"
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_commit() {
|
|
|
+ rm -f "$CONFIG_PATH"
|
|
|
+ mv "$NEWCONFIG_TMPPATH" "$CONFIG_PATH"
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_push() {
|
|
|
+ BUFNUM="$1"; shift;
|
|
|
+ LINE="$1"; shift;
|
|
|
+
|
|
|
+ BUF[$BUFNUM]="${BUF[$BUFNUM]}
|
|
|
+$LINE"
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_popall() {
|
|
|
+ BUFNUM="$1"; shift;
|
|
|
+
|
|
|
+ BUF[$BUFNUM]=""
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_popallwrite() {
|
|
|
+ BUFNUM="$1"; shift;
|
|
|
+
|
|
|
+ newconfig_write "${BUF[$BUFNUM]}"
|
|
|
+ BUF[$BUFNUM]=""
|
|
|
+}
|
|
|
+
|
|
|
+newconfig_open
|
|
|
+newconfig_write "#"
|
|
|
+newconfig_write ""
|
|
|
+newconfig_write "D1Q_IFACES=("
|
|
|
+
|
|
|
+for D1Q_IFACE in ${D1Q_IFACES[@]}; do
|
|
|
+ newconfig_write " $D1Q_IFACE"
|
|
|
+
|
|
|
+ newconfig_push 1 "${D1Q_IFACE}_SLAVES=("
|
|
|
+
|
|
|
+ SLAVES_VARIABLE="${D1Q_IFACE}_SLAVES"
|
|
|
+ SLAVES_VARIABLE="${SLAVES_VARIABLE//[.]/_}[@]"
|
|
|
+ for SLAVE in "${!SLAVES_VARIABLE}"; do
|
|
|
+ newconfig_push 1 " $SLAVE";
|
|
|
+ done
|
|
|
+
|
|
|
+ newconfig_push 1 ")"
|
|
|
+
|
|
|
+ # If there're no slaves then don't write anything about them
|
|
|
+ [[ $SLAVE_i -eq 0 ]] && newconfig_popall 1
|
|
|
+
|
|
|
+ VLAN_N_BRIDGE_VARIABLE="${D1Q_IFACE}_VLAN_N_BRIDGES"
|
|
|
+ VLAN_N_BRIDGE_VARIABLE="${VLAN_N_BRIDGE_VARIABLE//[.]/_}[@]"
|
|
|
+ for VLANS_N_BRIDGE in "${!VLAN_N_BRIDGE_VARIABLE}"; do
|
|
|
+ # Checking if no "vlan(.subvlan)?" is set
|
|
|
+ if [[ "${VLANS_N_BRIDGE:0:1}" = ":" ]]; then
|
|
|
+ VLAN=""
|
|
|
+ BRNAME="${VLANS_N_BRIDGE:1}"
|
|
|
+ else
|
|
|
+ # Splitting by ":"
|
|
|
+ WORDS=( ${VLANS_N_BRIDGE//[:]/ } )
|
|
|
+
|
|
|
+ # The second word defines interface name. If it's empty, "vlan$VLAN.$SUBVLAN" is used.
|
|
|
+ VLAN="${WORDS[0]}"
|
|
|
+ BRNAME="${WORDS[1]}"
|
|
|
+
|
|
|
+ # Splitting by "."
|
|
|
+ WORDS=( ${VLAN//[.]/ } )
|
|
|
+
|
|
|
+ # The second word defines subvlan (1q-in-1q) if it's used. It's empty if no subvlan is used.
|
|
|
+ VLAN="${WORDS[0]}"
|
|
|
+ SUBVLAN="${WORDS[1]}"
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Checking if no "vlan(.subvlan)?" is set
|
|
|
+ if ! [[ "${VLANS_N_BRIDGE: -1}" = ":" ]]; then
|
|
|
+ # Setting default values
|
|
|
+ [[ "$SUBVLAN" = "" ]] && BRNAME="${BRNAME:-vlan${VLAN}}" || BRNAME="${BRNAME:-vlan${VLAN}.${SUBVLAN}}"
|
|
|
+
|
|
|
+ # Getting commands for "ip"
|
|
|
+ IP_CMDS_VARIABLE="${BRNAME}_IP"
|
|
|
+ IP_CMDS_VARIABLE="${IP_CMDS_VARIABLE//[.]/_}[@]"
|
|
|
+ for IP_CMD in "${!IP_CMDS_VARIABLE}"; do
|
|
|
+ echo ip $IP_CMD dev $BRNAME
|
|
|
+ (( IP_CMD_i++ ))
|
|
|
+ done
|
|
|
+ fi
|
|
|
+
|
|
|
+ printf "br: %-10s vlan:%4s subvlan:%4s\n" "$BRNAME" "$VLAN" "$SUBVLAN"
|
|
|
+
|
|
|
+ (( VLAN_N_BRIDGE_i++ ))
|
|
|
+ done
|
|
|
+
|
|
|
+done
|
|
|
+
|
|
|
+newconfig_write ")"
|
|
|
+newconfig_write ""
|
|
|
+
|
|
|
+newconfig_popallwrite 1
|
|
|
+newconfig_popallwrite 2
|
|
|
+newconfig_popallwrite 3
|
|
|
+
|
|
|
+echo ${D1Q_IFACES[@]}
|
|
|
+
|
|
|
+#[[ $NEWCONFIG -ne 0 ]] && newconfig_commit
|
|
|
+
|
|
|
+exit 0
|