「networking.sh」の編集履歴(バックアップ)一覧はこちら
networking.sh - (2008/01/26 (土) 12:39:52) の1つ前との変更点
追加された行は緑色になります。
削除された行は赤色になります。
標準Linuxの/etc/init.d/内にある。
*スクリプト
#!/bin/sh
#
# start/stop network deamons
#
#
DHCPCD=/sbin/dhcpcd
BASE=`basename $DHCPCD`
LOCK=/var/lock/networking
. /usr/local/bin/kuro_lib
if [ -f /etc/netinfo ]; then
. /etc/netinfo
fi
# for dhcpcd.exe
export INTERFACE=$ENETNAME
configure()
{
echo "create network files.."
echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]"
if [ "$my_ipaddress" = "" ]; then
my_ipaddress=$DEFAULT_IP
my_subnetmask=255.255.255.0
my_dgw=
fi
touch /etc/resolv.conf
}
set_defaultGw()
{
if [ "$my_dgw" = "" ]; then
route del default
else
route add default gw $my_dgw
fi
}
set_defaultIp()
{
echo "** setting default ip"
/sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0
# delete default gw
my_dgw=
}
set_defaultIf()
{
TMP=`cat /proc/net/route |awk '{print $4}'|grep 0003`
if [ "$TMP" = "" ]; then
echo "add default if"
#route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME
route add -net default $ENETNAME
fi
}
set_dns()
{
echo "Configuration resolv.conf"
cat /dev/null > /etc/resolv.conf
if [ "$my_dns1" != "" ]; then
echo "nameserver $my_dns1" >> /etc/resolv.conf
fi
if [ "$my_dns2" != "" ]; then
echo "nameserver $my_dns2" >> /etc/resolv.conf
fi
}
start()
{
configure
/sbin/ifconfig lo up
killall $BASE
rm -f /etc/dhcpc/dhcpcd-eth0.pid
# delete default gw
while :
do :
/sbin/route del default
if [ $? -ne 0 ]; then
break
fi
done
sleep 1
echo "Configuration network interface: lo $ENETNAME"
##
## change mtu (frame-size 1518,4100,7418)
##
if [ "$mtu" = "4102" ] ; then
mtu=4084
elif [ "$mtu" = "7422" ] ; then
mtu=7404
elif [ "$mtu" = "9694" ] ; then
mtu=9676
else
mtu=1500
fi
/sbin/ifconfig $ENETNAME mtu $mtu multicast
if [ $? -ne 0 ]; then
echo "mtu fail"
/sbin/ifconfig $ENETNAME mtu 1500 multicast
fi
if [ "$my_ipaddress" = "dhcp" ]; then
if [ "$my_dgw" != "" ]; then
echo "--- set static dgw"
DHCP_GW="-G $my_dgw"
fi
## see also /etc/dhcpc/dhcpcd.exe
echo "DHCPCSTATE=requesting" > /var/tmp/dhcpcstate
##
echo "requesting DHCP tout=30[s]"
$DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME
if [ $? -ne 0 ]; then
echo "** dhcp fail"
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
set_defaultIp
set_defaultGw
# wait linkup delay
sleep 4
fi
else
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask"
/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask
if [ $? -ne 0 ]; then
set_defaultIp
fi
set_defaultGw
set_dns
fi
##
set_defaultIf
## set ipaddress in /etc/hosts
/etc/init.d/sethostname.sh
#/usr/local/bin/change_notify.sh network
}
stop()
{
echo "Deconfiguration network interface: lo $ENETNAME"
killall $BASE
/sbin/ifconfig $ENETNAME down
/sbin/ifconfig lo down
}
# for NFS
TMP=`grep /dev/root /proc/mounts|grep nfs`
if [ "$TMP" != "" ]; then
echo "nfs root mode. skip $ENETNAME network configuration."
exit 0
fi
#
lock_file check
lock_file create
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
lock_file delete
exit 0
*スクリプト詳細
ブロックごとに見てみる。
#!/bin/sh
#
# start/stop network deamons
#
#
シェルにshを指定。ネットワークデーモンの開始/停止のコメント。
DHCPCD=/sbin/dhcpcd
BASE=`basename $DHCPCD`
LOCK=/var/lock/networking
DHCPCDという変数を用意し、そこに/sbin/dhcpcdを代入。
BASEという変数を用意し、そこに'basename /sbin/dhcpcd'を代入。
LOCKという変数を用意し、そこに/var/lock/networkingを代入。
. /usr/local/bin/kuro_lib
/usr/local/bin/[[kuro_lib]]をサブシェルで走らせる。
[[kuro_lib]]内の
-DEFAULT_IP変数(=192.168.11.150)
-ENETNAME変数(=eth0)
-lock_file関数
を使用するためだ。
if [ -f /etc/netinfo ]; then
/etc/netinfoが存在すれば(/etcにnetinfoというファイルがあれば)以下を実行。
. /etc/netinfo
/etc/netinfoをサブシェルで走らせる。
netinfo内の
-my_ipaddress変数
-my_subnetmask変数
-my_dgw変数
-my_dns1変数
-my_dns2変数
-mtu変数
を使用するためだ。
fi
/etc/netinfoの存在の有無の条件分岐を終了。
# for dhcpcd.exe
/etc/dhcpc/dhcpcd.exeのために、というコメント。
export INTERFACE=$ENETNAME
環境変数を設定するexportコマンドで、INTERFACE変数にeth0を代入している。
ここからは7つの関数の記述になる。
**configure関数
configure()
{
configure関数の定義が始まる。
echo "create network files.."
echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]"
画面に
>create network files..
>IP=IPアドレス値, netmask=[ネットマスク値], dgw=[デフォルトゲートウェイ値], dns1=[DNS1値], dns2=[DNS2値]
と表示される。
if [ "$my_ipaddress" = "" ]; then
my_ipaddress変数に何も設定されていなければ以下を実行。
my_ipaddress=$DEFAULT_IP
my_subnetmask=255.255.255.0
my_dgw=
my_ipaddress変数にDEFAULT_IP変数の値、my_subnetmask変数に255.255.255.0、my_dgw変数は空、とそれぞれの変数に値を代入。
fi
my_ipaddress変数が空かどうかの条件分岐を終了。
touch /etc/resolv.conf
/etcにresolv.confというファイルを作成。
}
configure関数はここまで。
**set_defaultGw関数
set_defaultGw()
{
set_defaultGw関数の定義ここから。
if [ "$my_dgw" = "" ]; then
my_dgw変数が空であれば以下を実行。
route del default
routeコマンドでデフォルト経路情報を削除。
デフォルト経路とは、自分の経路情報に記録されていない宛て先のパケットを送るためのものだ。
一般的にはルーターを指す。
else
my_dgw変数が空でなければ以下を実行。
route add default gw $my_dgw
routeコマンドで、デフォルト経路としてmy_dgw変数の内容を経路テーブルに追加。
fi
my_dgw変数が空かどうかの条件分岐を終了。
}
set_defaultGw関数はここまで。
**set_defaultIp関数
set_defaultIp()
{
set_defaultIp関数はここから。
echo "** setting default ip"
/sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0
画面上に「** setting default ip」と表示。
ifconfigコマンドでeth0にDEFAULT_IP変数の値とnetmaskを255.255.255.0を設定。
# delete default gw
my_dgw=
デフォルトゲートウェイを削除する、というコメントの後にmy_dgw変数に空を代入している。
}
set_defaultIp関数はここまで。
**set_defaultIf関数
set_defaultIf()
{
set_defaultIf関数はここから。
TMP=`cat /proc/net/route |awk '{print $4}'|grep 0003`
TMPという変数を用意して、そこに「cat /proc/net/route |awk '{print $4}'|grep 0003」の結果を代入している。
3つの命令をパイプでつないでいるのだが、ひとつづつ見てみる。
>cat /proc/net/route
/proc/net/routeを読み込んで次の命令に渡す。
この/procにはprocファイルシステムがマウントされていて、カーネルの各種統計情報を閲覧することができるが、/proc/net/routeにはIP経路情報が記載されている。
このコマンドを実行してみると
|Iface|Destination|Gateway|Flags|RefCnt|Use|Metric|Mask|MTU|Window|IRTT|
|eth0|0001A8C0|00000000|0001|0|0|0|00FFFFFF|0|0|0|
|eth0|00000000|0101A8C0|0003|0|0|0|00000000|0|0|0|
というように出力された。
>awk '{print $4}'
awkコマンドで第4パラメータを抜き取って次の命令へ。
第4パラメータとは、上の表から「Flags」のことだとわかる。
>grep 0003
「0003」という文字列を検索している。
実際に「0003」という文字列があったので、この場合、TMP変数には「0003」と入る。
フラグ「0003」とは「経路は有効でゲートウェイを使用する」という内容だ。
今の例で言うなら、宛て先が「0.0.0.0/0」なので選ばれた経路はデフォルト経路である。
つまり、この一連の命令は「デフォルト経路をeth0が持っているかどうか」を調べていたのだ。
なければ空白が入る。
if [ "$TMP" = "" ]; then
TMP変数が空なら以下を実行。
echo "add default if"
画面に「add default if」と表示。
#route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME
route add -net default $ENETNAME
routeコマンドでeth0経由のネットワーク255.255.255.255を追加する、はコメントアウトされ、routeコマンドでeth0にデフォルト経路を追加している。
コメントアウトされている255.255.255.255/32の経路情報は「ローカルブロードキャスト」と呼ばれるもので、ルーターを超えないLAN内に一斉にパケットを送信する手段である。
fi
TMP変数の内容の条件分岐を終了する。
}
set_defaultIf関数はここまで。
**set_dns関数
set_dns()
{
set_dns関数はここから。
echo "Configuration resolv.conf"
画面に「Configuration resolv.conf」と表示する。
cat /dev/null > /etc/resolv.conf
/etc/resolv.confの内容を消去している。
if [ "$my_dns1" != "" ]; then
my_dns1変数が空でなければ以下を実行。
echo "nameserver $my_dns1" >> /etc/resolv.conf
「nameserver my_dns1変数の値」を/etc/resolv.confに追記。
fi
my_dns1変数が空かどうかの条件分岐を抜ける。
if [ "$my_dns2" != "" ]; then
my_dns2変数が空でなければ以下を実行。
echo "nameserver $my_dns2" >> /etc/resolv.conf
「nameserver my_dns2変数の値」を/etc/resolv.confに追記。
fi
my_dns2変数が空かどうかの条件分岐を終了する。
}
set_dns関数はここまで。
**start関数
start()
{
start関数の定義が始まる。
configure
configure関数の実行。
/sbin/ifconfig lo up
ifconfigコマンドでlo(ループバック)デバイスを始動する。
killall $BASE
killallコマンドで「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンドで/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンドに渡している。
結果的には「killall dhcpcd」となる。
rm -f /etc/dhcpc/dhcpcd-eth0.pid
/etc/dhcpc/dhcpcd-eth0.pidをrmコマンドで消去する。
# delete default gw
デフォルトゲートウェイを削除する、とのコメント。
while :
do :
/sbin/route del default
if [ $? -ne 0 ]; then
break
fi
done
while文による無限ループだ。
>/sbin/route del default
routeコマンドでデフォルト経路を削除し
>if [ $? -ne 0 ]; then
>break
>fi
routeコマンドがエラーの終了ステータス「1」を返すまでbreak文でループから抜けられない。
sleep 1
1秒数えたあと
echo "Configuration network interface: lo $ENETNAME"
画面上に「Configuration network interface: lo eth0」と表示。
##
## change mtu (frame-size 1518,4100,7418)
##
mtuの変更、とのコメント。
if [ "$mtu" = "4102" ] ; then
mtu=4084
elif [ "$mtu" = "7422" ] ; then
mtu=7404
elif [ "$mtu" = "9694" ] ; then
mtu=9676
else
mtu=1500
fi
mtu変数が
-4102であればmtu変数に4084を代入
-7422であればmtu変数に7404を代入
-9694であればmtu変数に9676を代入
-それ以外ならmtu変数に1500を代入
という内容だ。
/sbin/ifconfig $ENETNAME mtu $mtu multicast
ifconfigコマンドでeth0のmtuを上で判別した値に設定しマルチキャストフラグを立てる。
if [ $? -ne 0 ]; then
echo "mtu fail"
/sbin/ifconfig $ENETNAME mtu 1500 multicast
fi
ifconfigコマンドがエラーの場合、画面上に「mtu fail」と表示し、eth0のmtuを1500に設定しマルチキャストフラグを立てる。
if [ "$my_ipaddress" = "dhcp" ]; then
my_ipaddress変数が「dhcp」であれば以下を実行。
if [ "$my_dgw" != "" ]; then
my_dgw変数が空でなければ以下を実行。
echo "--- set static dgw"
DHCP_GW="-G $my_dgw"
画面上に「--- set static dgw」と表示。
DHCP_GWという変数を用意し、「-G $my_dgw」を代入。
fi
my_dgw変数が空かどうかの条件分岐を終了する。
## see also /etc/dhcpc/dhcpcd.exe
echo "DHCPCSTATE=requesting" > /var/tmp/dhcpcstate
/etc/dhcpc/dhcpcd.exeを参照、とのコメント。
/var/tmp/dhcpcstateに「DHCPCSTATE=requesting」を書き込み。
##
echo "requesting DHCP tout=30[s]"
画面上に「requesting DHCP tout=30[s]」と表示する。
$DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME
>/sbin/dhcpcd -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 eth0
を実行。
if [ $? -ne 0 ]; then
エラーが返れば以下を実行。
echo "** dhcp fail"
画面上に「** dhcp fail」と表示する。
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
/var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。
set_defaultIp
set_defaultGw
set_defaultIp関数とset_defaultGw関数を実行する。
# wait linkup delay
sleep 4
リンクが始動するのを4秒間待つ。
fi
dhcpcdコマンドがエラーを返すかどうかの条件分岐を終了する。
else
my_ipaddress変数が「dhcp」でなければ以下を実行。
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
/var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。
echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask"
/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask
>/sbin/ifconfig eth0 $my_ipaddress netmask $my_subnetmask
を実行。
if [ $? -ne 0 ]; then
エラーが返れば以下。
set_defaultIp
set_defaultIp関数を実行。
fi
エラーかどうかの判別終了。
set_defaultGw
set_dns
set_defaultGw関数、set_dns関数の実行。
fi
my_ipaddress変数が「dhcp」かどうかの条件分岐を終了する。
##
set_defaultIf
set_defaultIf関数を実行する。
## set ipaddress in /etc/hosts
/etc/init.d/sethostname.sh
/etc/hostsにIPアドレスを設定する、というコメント。
/etc/init.d/sethostname.shの実行。
#/usr/local/bin/change_notify.sh network
/usr/local/bin/change_notify.sh networkの実行はコメントアウトだ。
}
start関数はここまで。
stop()
{
echo "Deconfiguration network interface: lo $ENETNAME"
killall $BASE
/sbin/ifconfig $ENETNAME down
/sbin/ifconfig lo down
}
# for NFS
TMP=`grep /dev/root /proc/mounts|grep nfs`
if [ "$TMP" != "" ]; then
echo "nfs root mode. skip $ENETNAME network configuration."
exit 0
fi
#
lock_file check
lock_file create
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
lock_file delete
exit 0
----
標準Linuxの/etc/init.d/内にある。
*スクリプト
#!/bin/sh
#
# start/stop network deamons
#
#
DHCPCD=/sbin/dhcpcd
BASE=`basename $DHCPCD`
LOCK=/var/lock/networking
. /usr/local/bin/kuro_lib
if [ -f /etc/netinfo ]; then
. /etc/netinfo
fi
# for dhcpcd.exe
export INTERFACE=$ENETNAME
configure()
{
echo "create network files.."
echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]"
if [ "$my_ipaddress" = "" ]; then
my_ipaddress=$DEFAULT_IP
my_subnetmask=255.255.255.0
my_dgw=
fi
touch /etc/resolv.conf
}
set_defaultGw()
{
if [ "$my_dgw" = "" ]; then
route del default
else
route add default gw $my_dgw
fi
}
set_defaultIp()
{
echo "** setting default ip"
/sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0
# delete default gw
my_dgw=
}
set_defaultIf()
{
TMP=`cat /proc/net/route |awk '{print $4}'|grep 0003`
if [ "$TMP" = "" ]; then
echo "add default if"
#route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME
route add -net default $ENETNAME
fi
}
set_dns()
{
echo "Configuration resolv.conf"
cat /dev/null > /etc/resolv.conf
if [ "$my_dns1" != "" ]; then
echo "nameserver $my_dns1" >> /etc/resolv.conf
fi
if [ "$my_dns2" != "" ]; then
echo "nameserver $my_dns2" >> /etc/resolv.conf
fi
}
start()
{
configure
/sbin/ifconfig lo up
killall $BASE
rm -f /etc/dhcpc/dhcpcd-eth0.pid
# delete default gw
while :
do :
/sbin/route del default
if [ $? -ne 0 ]; then
break
fi
done
sleep 1
echo "Configuration network interface: lo $ENETNAME"
##
## change mtu (frame-size 1518,4100,7418)
##
if [ "$mtu" = "4102" ] ; then
mtu=4084
elif [ "$mtu" = "7422" ] ; then
mtu=7404
elif [ "$mtu" = "9694" ] ; then
mtu=9676
else
mtu=1500
fi
/sbin/ifconfig $ENETNAME mtu $mtu multicast
if [ $? -ne 0 ]; then
echo "mtu fail"
/sbin/ifconfig $ENETNAME mtu 1500 multicast
fi
if [ "$my_ipaddress" = "dhcp" ]; then
if [ "$my_dgw" != "" ]; then
echo "--- set static dgw"
DHCP_GW="-G $my_dgw"
fi
## see also /etc/dhcpc/dhcpcd.exe
echo "DHCPCSTATE=requesting" > /var/tmp/dhcpcstate
##
echo "requesting DHCP tout=30[s]"
$DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME
if [ $? -ne 0 ]; then
echo "** dhcp fail"
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
set_defaultIp
set_defaultGw
# wait linkup delay
sleep 4
fi
else
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask"
/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask
if [ $? -ne 0 ]; then
set_defaultIp
fi
set_defaultGw
set_dns
fi
##
set_defaultIf
## set ipaddress in /etc/hosts
/etc/init.d/sethostname.sh
#/usr/local/bin/change_notify.sh network
}
stop()
{
echo "Deconfiguration network interface: lo $ENETNAME"
killall $BASE
/sbin/ifconfig $ENETNAME down
/sbin/ifconfig lo down
}
# for NFS
TMP=`grep /dev/root /proc/mounts|grep nfs`
if [ "$TMP" != "" ]; then
echo "nfs root mode. skip $ENETNAME network configuration."
exit 0
fi
#
lock_file check
lock_file create
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
lock_file delete
exit 0
*スクリプト詳細
ブロックごとに見てみる。
#!/bin/sh
#
# start/stop network deamons
#
#
シェルにshを指定。ネットワークデーモンの開始/停止のコメント。
DHCPCD=/sbin/dhcpcd
BASE=`basename $DHCPCD`
LOCK=/var/lock/networking
DHCPCDという変数を用意し、そこに/sbin/dhcpcdを代入。
BASEという変数を用意し、そこに'basename /sbin/dhcpcd'を代入。
LOCKという変数を用意し、そこに/var/lock/networkingを代入。
. /usr/local/bin/kuro_lib
/usr/local/bin/[[kuro_lib]]をサブシェルで走らせる。
[[kuro_lib]]内の
-DEFAULT_IP変数(=192.168.11.150)
-ENETNAME変数(=eth0)
-lock_file関数
を使用するためだ。
if [ -f /etc/netinfo ]; then
/etc/netinfoが存在すれば(/etcにnetinfoというファイルがあれば)以下を実行。
. /etc/netinfo
/etc/netinfoをサブシェルで走らせる。
netinfo内の
-my_ipaddress変数
-my_subnetmask変数
-my_dgw変数
-my_dns1変数
-my_dns2変数
-mtu変数
を使用するためだ。
fi
/etc/netinfoの存在の有無の条件分岐を終了。
# for dhcpcd.exe
/etc/dhcpc/dhcpcd.exeのために、というコメント。
export INTERFACE=$ENETNAME
環境変数を設定するexportコマンドで、INTERFACE変数にeth0を代入している。
ここからは7つの関数の記述になる。
**configure関数
configure()
{
configure関数の定義が始まる。
echo "create network files.."
echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]"
画面に
>create network files..
>IP=[IPアドレス値], netmask=[ネットマスク値], dgw=[デフォルトゲートウェイ値], dns1=[DNS1値], dns2=[DNS2値]
と表示される。
if [ "$my_ipaddress" = "" ]; then
my_ipaddress変数に何も設定されていなければ以下を実行。
my_ipaddress=$DEFAULT_IP
my_subnetmask=255.255.255.0
my_dgw=
my_ipaddress変数にDEFAULT_IP変数の値、my_subnetmask変数に255.255.255.0、my_dgw変数は空、とそれぞれの変数に値を代入。
fi
my_ipaddress変数が空かどうかの条件分岐を終了。
touch /etc/resolv.conf
/etcにresolv.confというファイルを作成。
}
configure関数はここまで。
**set_defaultGw関数
set_defaultGw()
{
set_defaultGw関数の定義ここから。
if [ "$my_dgw" = "" ]; then
my_dgw変数が空であれば以下を実行。
route del default
routeコマンドでデフォルト経路情報を削除。
デフォルト経路とは、自分の経路情報に記録されていない宛て先のパケットを送るためのものだ。
一般的にはルーターを指す。
else
my_dgw変数が空でなければ以下を実行。
route add default gw $my_dgw
routeコマンドで、デフォルト経路としてmy_dgw変数の内容を経路テーブルに追加。
fi
my_dgw変数が空かどうかの条件分岐を終了。
}
set_defaultGw関数はここまで。
**set_defaultIp関数
set_defaultIp()
{
set_defaultIp関数はここから。
echo "** setting default ip"
/sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0
画面上に「** setting default ip」と表示。
ifconfigコマンドでeth0にDEFAULT_IP変数の値とnetmaskを255.255.255.0を設定。
# delete default gw
my_dgw=
デフォルトゲートウェイを削除する、というコメントの後にmy_dgw変数に空を代入している。
}
set_defaultIp関数はここまで。
**set_defaultIf関数
set_defaultIf()
{
set_defaultIf関数はここから。
TMP=`cat /proc/net/route |awk '{print $4}'|grep 0003`
TMPという変数を用意して、そこに「cat /proc/net/route |awk '{print $4}'|grep 0003」の結果を代入している。
3つの命令をパイプでつないでいるのだが、ひとつづつ見てみる。
>cat /proc/net/route
/proc/net/routeを読み込んで次の命令に渡す。
この/procにはprocファイルシステムがマウントされていて、カーネルの各種統計情報を閲覧することができるが、/proc/net/routeにはIP経路情報が記載されている。
このコマンドを実行してみると
|Iface|Destination|Gateway|Flags|RefCnt|Use|Metric|Mask|MTU|Window|IRTT|
|eth0|0001A8C0|00000000|0001|0|0|0|00FFFFFF|0|0|0|
|eth0|00000000|0101A8C0|0003|0|0|0|00000000|0|0|0|
というように出力された。
>awk '{print $4}'
awkコマンドで第4パラメータを抜き取って次の命令へ。
第4パラメータとは、上の表から「Flags」のことだとわかる。
>grep 0003
「0003」という文字列を検索している。
実際に「0003」という文字列があったので、この場合、TMP変数には「0003」と入る。
フラグ「0003」とは「経路は有効でゲートウェイを使用する」という内容だ。
今の例で言うなら、宛て先が「0.0.0.0/0」なので選ばれた経路はデフォルト経路である。
つまり、この一連の命令は「デフォルト経路をeth0が持っているかどうか」を調べていたのだ。
なければ空白が入る。
if [ "$TMP" = "" ]; then
TMP変数が空なら以下を実行。
echo "add default if"
画面に「add default if」と表示。
#route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME
route add -net default $ENETNAME
routeコマンドでeth0経由のネットワーク255.255.255.255を追加する、はコメントアウトされ、routeコマンドでeth0にデフォルト経路を追加している。
コメントアウトされている255.255.255.255/32の経路情報は「ローカルブロードキャスト」と呼ばれるもので、ルーターを超えないLAN内に一斉にパケットを送信する手段である。
fi
TMP変数の内容の条件分岐を終了する。
}
set_defaultIf関数はここまで。
**set_dns関数
set_dns()
{
set_dns関数はここから。
echo "Configuration resolv.conf"
画面に「Configuration resolv.conf」と表示する。
cat /dev/null > /etc/resolv.conf
/etc/resolv.confの内容を消去している。
if [ "$my_dns1" != "" ]; then
my_dns1変数が空でなければ以下を実行。
echo "nameserver $my_dns1" >> /etc/resolv.conf
「nameserver my_dns1変数の値」を/etc/resolv.confに追記。
fi
my_dns1変数が空かどうかの条件分岐を抜ける。
if [ "$my_dns2" != "" ]; then
my_dns2変数が空でなければ以下を実行。
echo "nameserver $my_dns2" >> /etc/resolv.conf
「nameserver my_dns2変数の値」を/etc/resolv.confに追記。
fi
my_dns2変数が空かどうかの条件分岐を終了する。
}
set_dns関数はここまで。
**start関数
start()
{
start関数の定義が始まる。
configure
configure関数の実行。
/sbin/ifconfig lo up
ifconfigコマンドでlo(ループバック)デバイスを始動する。
killall $BASE
killallコマンドで「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンドで/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンドに渡している。
結果的には「killall dhcpcd」となる。
rm -f /etc/dhcpc/dhcpcd-eth0.pid
/etc/dhcpc/dhcpcd-eth0.pidをrmコマンドで消去する。
# delete default gw
デフォルトゲートウェイを削除する、とのコメント。
while :
do :
/sbin/route del default
if [ $? -ne 0 ]; then
break
fi
done
while文による無限ループだ。
>/sbin/route del default
routeコマンドでデフォルト経路を削除し
>if [ $? -ne 0 ]; then
>break
>fi
routeコマンドがエラーの終了ステータス「1」を返すまでbreak文でループから抜けられない。
sleep 1
1秒数えたあと
echo "Configuration network interface: lo $ENETNAME"
画面上に「Configuration network interface: lo eth0」と表示。
##
## change mtu (frame-size 1518,4100,7418)
##
mtuの変更、とのコメント。
if [ "$mtu" = "4102" ] ; then
mtu=4084
elif [ "$mtu" = "7422" ] ; then
mtu=7404
elif [ "$mtu" = "9694" ] ; then
mtu=9676
else
mtu=1500
fi
mtu変数が
-4102であればmtu変数に4084を代入
-7422であればmtu変数に7404を代入
-9694であればmtu変数に9676を代入
-それ以外ならmtu変数に1500を代入
という内容だ。
/sbin/ifconfig $ENETNAME mtu $mtu multicast
ifconfigコマンドでeth0のmtuを上で判別した値に設定しマルチキャストフラグを立てる。
if [ $? -ne 0 ]; then
echo "mtu fail"
/sbin/ifconfig $ENETNAME mtu 1500 multicast
fi
ifconfigコマンドがエラーの場合、画面上に「mtu fail」と表示し、eth0のmtuを1500に設定しマルチキャストフラグを立てる。
if [ "$my_ipaddress" = "dhcp" ]; then
my_ipaddress変数が「dhcp」であれば以下を実行。
if [ "$my_dgw" != "" ]; then
my_dgw変数が空でなければ以下を実行。
echo "--- set static dgw"
DHCP_GW="-G $my_dgw"
画面上に「--- set static dgw」と表示。
DHCP_GWという変数を用意し、「-G $my_dgw」を代入。
fi
my_dgw変数が空かどうかの条件分岐を終了する。
## see also /etc/dhcpc/dhcpcd.exe
echo "DHCPCSTATE=requesting" > /var/tmp/dhcpcstate
/etc/dhcpc/dhcpcd.exeを参照、とのコメント。
/var/tmp/dhcpcstateに「DHCPCSTATE=requesting」を書き込み。
##
echo "requesting DHCP tout=30[s]"
画面上に「requesting DHCP tout=30[s]」と表示する。
$DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME
>/sbin/dhcpcd -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 eth0
を実行。
if [ $? -ne 0 ]; then
エラーが返れば以下を実行。
echo "** dhcp fail"
画面上に「** dhcp fail」と表示する。
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
/var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。
set_defaultIp
set_defaultGw
set_defaultIp関数とset_defaultGw関数を実行する。
# wait linkup delay
sleep 4
リンクが始動するのを4秒間待つ。
fi
dhcpcdコマンドがエラーを返すかどうかの条件分岐を終了する。
else
my_ipaddress変数が「dhcp」でなければ以下を実行。
echo "DHCPCSTATE=fixip" > /var/tmp/dhcpcstate
/var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。
echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask"
/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask
>/sbin/ifconfig eth0 $my_ipaddress netmask $my_subnetmask
を実行。
if [ $? -ne 0 ]; then
エラーが返れば以下。
set_defaultIp
set_defaultIp関数を実行。
fi
エラーかどうかの判別終了。
set_defaultGw
set_dns
set_defaultGw関数、set_dns関数の実行。
fi
my_ipaddress変数が「dhcp」かどうかの条件分岐を終了する。
##
set_defaultIf
set_defaultIf関数を実行する。
## set ipaddress in /etc/hosts
/etc/init.d/sethostname.sh
/etc/hostsにIPアドレスを設定する、というコメント。
/etc/init.d/sethostname.shの実行。
#/usr/local/bin/change_notify.sh network
/usr/local/bin/change_notify.sh networkの実行はコメントアウトだ。
}
start関数はここまで。
stop()
{
echo "Deconfiguration network interface: lo $ENETNAME"
killall $BASE
/sbin/ifconfig $ENETNAME down
/sbin/ifconfig lo down
}
# for NFS
TMP=`grep /dev/root /proc/mounts|grep nfs`
if [ "$TMP" != "" ]; then
echo "nfs root mode. skip $ENETNAME network configuration."
exit 0
fi
#
lock_file check
lock_file create
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
lock_file delete
exit 0
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: