続・起動時にlagg(4) を有効化するスクリプト

d:id:yaizawa:20121224 の続き。やっぱりlo*やgif*を除くとはいえ、問答無用で見つかったデバイスをlaggに突っ込むのも乱暴だし、汎用性が無いのもあんまり嬉しくないし、エラーハンドリングしてないのもキモいなと思いちょっと変更。
(スクリプト名をlagg_config.shとして) lagg_config.sh lagg0 failover 192.168.0.1/24 igb0 em0 bge0とかやると、igb0 → em0 → bge0の優先順位でlagg0をfailoverモードで構成する。見つからないNICは無視するので、たとえば再起動時にem0が見えなかった場合にはigb0とbge0だけでlagg0を構成しようとするので突如見えなくなることも無いハズ。あとifconfig lagg0 createもスクリプト内で実行するのでrc.confにcloned_interfacesも不要。コレでそれなりに使えるスクリプトになったハズ。

#!/bin/sh

if [ $# \< 4 ]; then
  echo "Usage: ${0} DEVICE PROTOCOL IPv4ADDR IF1 IF2..."
  exit 1
fi

LAGG_DEV=${1}
LAGGPROTO=${2}
IPv4ADDR=${3}

/sbin/ifconfig ${LAGG_DEV} create > /dev/null 2>&1
if [ $? != 0 ]; then
  echo "cannot create ${LAGG_DEV}"
  exit 1
fi

LAGGPORTS=""

shift 3
while [ 0 \< $# ]
do
  for IF in `/sbin/ifconfig -l`; do
    case ${IF} in
      ${1} )
        echo "inferface ${1} found"
        /sbin/ifconfig ${1} up
        if [ 0 = $? ]; then
          LAGGPORTS="${LAGGPORTS} laggport ${IF}"
        else
          echo "cannot activate interface ${IF}"
        fi
    esac
  done
  shift
done

if [ -n "${LAGGPORTS}" ]; then
  /sbin/ifconfig ${LAGG_DEV} laggproto ${LAGGPROTO} ${LAGGPORTS} ${IPv4ADDR}
  if [ 0 = $? ]; then
    echo "interface ${LAGG_DEV} configured"
  else
    echo "interface ${LAGG_DEV} configure failed"
    exit 1
  fi
else
  echo "no interfaces found"
  exit 1
fi