2008年7月11日 星期五

研發筆記-ppp如何設定script

以ip-up會呼叫的script為例:

執行ip-up script的意義就是當Tunnel建好,取得IP後請幫我執行Script的事項。
ppp的script還有一個很優的好處,他可以把連線後的資訊丟出來,ip-up可以丟的資料如下:
argv[0] = script; //使用script的路徑
argv[1] = ifname; //連線建立後的網路虛擬interface
argv[2] = devnam; //使用哪一個tty device
argv[3] = strspeed; //tty device的速度
argv[4] = strlocal; //本地端取得的IP
argv[5] = strremote; //遠端取得的IP
argv[6] = ipparam; //這個就未知了....因為沒有output出來...
argv[7] = NULL;

一個sample script如下:

#!/bin/sh
#
# This sample code shows you one way to modify your setup to allow automatic
# configuration of your resolv.conf for peer supplied DNS addresses when using
# the `usepeerdns' option.
#
# In my case I just added this to my /etc/ppp/ip-up.local script. You may need to
# create an executable script if one does not exist.
#
# Nick Walker (nickwalker@email.com)
#

if [ -n "$USEPEERDNS" -a -f /etc/ppp/resolv.conf ]; then
rm -f /etc/ppp/resolv.prev
if [ -f /etc/resolv.conf ]; then
cp /etc/resolv.conf /etc/ppp/resolv.prev
grep domain /etc/ppp/resolv.prev > /etc/resolv.conf
grep search /etc/ppp/resolv.prev >> /etc/resolv.conf
cat /etc/ppp/resolv.conf >> /etc/resolv.conf
else
cp /etc/ppp/resolv.conf /etc
fi
fi

這是ppp-2.4.3內附的script sample,這只是一個範本,需要注意的是一定要把你目前系統的shell(ex. "sh")指定出來,就是一定要下#!/bin/sh,才知道用哪一個shell來執行script。
有$表示這個字串會被替換掉,就我所知ip-up的script的替換順序是:
$0-->argv[0] = script; //使用script的路徑
$1-->argv[1] = ifname; //連線建立後的網路虛擬interface
$2-->argv[2] = devnam; //使用哪一個tty device
$3-->argv[3] = strspeed; //tty device的速度
$4-->argv[4] = strlocal; //本地端取得的IP
$5-->argv[5] = strremote; //遠端取得的IP
$6-->argv[6] = ipparam; //這個就未知了....因為沒有output出來...
所以我們可以很簡單的寫一個script:

#!/bin/sh
echo $1 > "/var/config/ppp_interface"


這個script的意義是把ppp連線後所使用的interface output出來,至於如何下routing, iptable就各自發揮了。


0 意見: