PPP設定の各ファイルについて記載します。
1. /etc/config/network
/etc/config/network - 下記のPPP設定をファイルの最後に追加します。device, speed, username, password, connectcmdは、hotplug in処理の際に該当するUSB modemの設定情報から書き換えられます。
| config 'interface' 'ppp' option 'ifname' 'wan' option 'proto' 'ppp' option 'mtu' '1500' option 'linkname' 'wan' option 'ipparam' 'wan' option 'device' '/dev/ttyUSB0' option 'speed' '921600' option 'username' 'em' option 'password' 'em' option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#' option 'attached' '0' |
config ‘interface’ ‘ppp’: PPP接続用のセクションです。
ifname: pppdに渡すparameterとなります。今回は’wan’固定となります。
proto: Protocol指定となります。今回は’ppp’固定となります。
mtu: 1500固定です。
linkname: pppdに渡すlink nameです。今回は’wan’固定となります。
ipparam: ‘wan’固定となります。
device: ppp通信用のdevice file nameとなります。D02HW, H12HWを接続すると制御用ポートの /dev/ttyUSB1 も作成されます。3GUMTSでは /dev/ttyUSB1も利用しますが、ppp dialup接続では /dev/ttyUSB0 のみの利用となります。
speed: 回線のinterface速度です。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。
username: ppp接続アカウント名です。Emobileの場合には固定の’em’となります。Willcomの場合には、個別のアカウントとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。
password: ppp接続パスワードです。Emobileの場合には固定の’em’となります。Willcomの場合には、個別のアカウントとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。
connectcmd: chat scriptのコマンドラインとなります。USB dialup modemのhotplug in処理中にttyusbから、コピーされます。同じく /tmp/chat_dailerもhotplug in処理中に作成されます。
attached: D02HW, H12HWのような3GUMTS対応のmodemを利用した場合に、/dev/ttyUSB0と/dev/ttyUSB1の2回 hotplug in処理が起動されるためttyUSB0の処理中に設定しれた値がttyUSB1の処理で上書きされるのを防ぐためのflagです。この値が 1 であると、ttyUSB0のhotplug in 処理が完了したことを示します。
2. /etc/config/ttyusb
/etc/config/ttyusb - 新規ファイル追加のサンプル。WSIM接続のusername, passwordはdummyの’*’としています。
| config 'ttyusb' '12D11003' option 'vendor' 'Huawei' option 'driver' 'option' option 'modemtype' 'dialup' option 'username' 'em' option 'password' 'em' option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#' option 'speed' '921600' option 'atinit' 'AT' option 'vidpid' '12D11003' option 'product' 'D02HW(E220)' config 'ttyusb' '12D11008' option 'vendor' 'Huawei' option 'product' 'H12HW' option 'driver' 'option' option 'modemtype' 'dialup' option 'username' 'em' option 'password' 'em' option 'connectcmd' '/tmp/chat_dialer -s -v -T*99#' option 'speed' '921600' option 'atinit' 'AT' option 'vidpid' '12D11008' config 'ttyusb' '04BB0940' option 'product' 'IO Data WSIM' option 'driver' 'pl2303' option 'modemtype' 'dialup' option 'username' '********' option 'password' '********' option 'connectcmd' '/tmp/chat_dialer -s -v -T0570572744##64' option 'speed' '115200' option 'atinit' 'AT&D2&C1&K3S0=0' option 'vidpid' '04BB0940' option 'vendor' 'Willcom INC' |
config ‘ttyusb’ VIDPID: VIDPIDによって識別されるUSB dialup modemの設定情報セクションです。
vendor: ベンダー名
product: 製品名
vidpid: dialup modemのvendor idとproduct idを連結した16進8桁の値となります。dailup modemの識別のためにセクション名とこちらの2重に保持しています。
driver: device driverの種類を設定します。IO Data WSIMの場合にはpl2303, Huawei (Emobile)についてはoptionです。他にusbserialも選択できます。この項目は、以前のimplementationにおいて利用していました。現在は利用していません。
modemtype: モデムタイプ。’dialup’ or ‘3gumts’。’dialup’のときには今回のdialup処理とし、3GUMTS処理が起動されないようにします。’3gumts’の場合には、その逆となります。
username: PPP接続のアカウント名です。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのusernameにコピーされます。
password: PPP接続のパスワードです。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのpasswordにコピーされます。
connectcmd: PPP接続のchat script起動用コマンドラインです。-T以降の電話番号のみ変更するようにしてください。Emobileの場合は、-T*99#になります。USB dialup modemのhotplug in処理中、ttyusbの該当情報が/etc/config/networkの’interface’ ‘ppp’セクションのconnectcmdにコピーされます。
speed: PPP接続のインターフェース速度(bps)です。IO Data WSIMの場合は 115200(bps)が上限のようです。Huawei (Emobile)のH12HWの場合には921600(bps)
atinit: USB dialup modemの初期化コマンドです。空でも差し支えはないでしょう。/tmp/chat_dialerの中で “ATZ” は発行しています。3GUMTSの場合は、ATZとATHを発行しているようです。(/App/umtsd.lua)
3. /etc/ppp/options
/etc/ppp/options - パラメーターの修正(bold部分)
| #debug #logfile /dev/null noaccomp nopcomp #nocrtscts crtscts lock maxfail 0 lcp-echo-failure 5 lcp-echo-interval 3 |
Hardware flow controlを有効にするために nocrtsctsをコメントにします。そしてctsctsを追加します。また、lcp-echo-intervalの値を3に変更します。オリジナルの1では、IO Data WSIM接続の場合に LCP Timeoutが発生することがありました。
4. /etc/hotplug.d/ttyusb/10-umts
/etc/hotplug.d/ttyusb/10-umts - 修正 (ファイルの先頭に追加)
| modemtype=`uci get ttyusb.${VIDPID}.modemtype` if [ "${modemtype}" != "3gumts" ] ; then exit 1 fi |
modemtypeが”3gumts”ではないデバイスが装着されたときに3GUMTSが起動されるのを防ぎます。
5. /etc/hotplug.d/ttyusb/11-dialup
/etc/hotplug.d/ttyusb/11-dialup - 新規ファイルの追加
| DIALER="/tmp/chat_dialer" modemtype=`uci get ttyusb.${VIDPID}.modemtype` if [ "${modemtype}" != "dialup" ] ; then exit 1 fi [ "$ACTION" == "add" -a "$SUBSYSTEM" == "ttyusb" ] && { attached=`uci get network.ppp.attached` if [ "${attached}" != "1" ] ; then speed=`uci get ttyusb.${VIDPID}.speed` username=`uci get ttyusb.${VIDPID}.username` password=`uci get ttyusb.${VIDPID}.password` connectcmd=`uci get ttyusb.${VIDPID}.connectcmd` atinit=`uci get ttyusb.${VIDPID}.atinit` # Write to /etc/config/network ppp section uci set network.ppp.speed="${speed}" uci set network.ppp.username="${username}" uci set network.ppp.password="${password}" uci set network.ppp.connectcmd="${connectcmd}" uci set network.ppp.device="/dev/""${NODE}" uci commit network echo "\ #!/usr/sbin/chat -f TIMEOUT 10 ABORT '\nNO ANSWER\r' ABORT '\nNO CARRIER\r' ABORT '\nNO DIALTONE\r' ABORT '\nBUSY\r' '' ATZ OK AT OK ${atinit} TIMEOUT 30 OK ATDT\T CONNECT \d\d" > ${DIALER} chmod +x ${DIALER} uci set network.ppp.attached=1 uci commit network ifup ppp fi } [ "$ACTION" == "remove" -a "$SUBSYSTEM" == "ttyusb" ] && { uci set network.ppp.attached=0 uci commit network } |
modemtypeが”dialup”ではないデバイスが装着されたときにdial up接続が起動されるのを防ぎます。
Hotplug in 処理(環境変数 ACTIONの値が”add”)のときには、
- ‘attached’ flagが1でない場合、すなわち WSIM接続時、Huawei (Emobile)接続で /dev/ttyUSB0の処理のときには、処理を進めます。 ‘attached’が1の場合には、Huawei(Emboile)接続で /dev/ttyUSB1(Control port)の処理でのすで、以下の処理はttyUSB0 (Data port)と重複するため行いません。
- VIDPIDが環境変数として引き渡されるので、対応する設定情報を /etc/config/ttyusbより取得し、/etc/config/networkの’interface’ ‘ppp’セクションにコピーします。そして、最後に ‘attached’ を1にします。
unplug処理(環境変数 ACTIONの値が”remove”)のときには、’attached’を0として、次回のhotplug in処理用に初期化します。
6. /etc/hotplug.d/usb/10-umts
/etc/hotplug.d/usb/10-umts - 追加(ファイルの先頭に追加します)
| fillzero() { id=$1 len=`expr 4 - ${#id}` while [ ${len} -ge 1 ]; do id="0"$id len=`expr $len - 1` done echo ${id} } # ${PRODUCT} contains vendor and product information, like 04bb/0940/1. VID=`echo ${PRODUCT} | cut -f1 -d'/'` PID=`echo ${PRODUCT} | cut -f2 -d'/'` VID=`fillzero ${VID} | tr '[a-z]' '[A-Z]'` PID=`fillzero ${PID} | tr '[a-z]' '[A-Z]'` VIDPID=$VID$PID # check the modemtype to prevent this script working on 3G/UMTS. modemtype=`uci get ttyusb.${VIDPID}.modemtype` if [ "${modemtype}" != "3gumts" ] ; then exit 1 fi |
modemtypeが”3gumts”ではないデバイスが装着されたときに3GUMTSが起動されるのを防ぎます。
7. /etc/hotplug.d/usb/11-dialup
/etc/hotplug.d/usb/11-dialup - 新規ファイルの追加
| DIALER="/tmp/chat_dialer" fillzero() { id=$1 len=`expr 4 - ${#id}` while [ ${len} -ge 1 ]; do id="0"$id len=`expr $len - 1` done echo ${id} } # ${PRODUCT} contains vendor and product information, like 04bb/0940/1. VID=`echo ${PRODUCT} | cut -f1 -d'/'` PID=`echo ${PRODUCT} | cut -f2 -d'/'` VID=`fillzero ${VID} | tr '[a-z]' '[A-Z]'` PID=`fillzero ${PID} | tr '[a-z]' '[A-Z]'` VIDPID=$VID$PID # check the modemtype to prevent this script working on 3G/UMTS. modemtype=`uci get ttyusb.${VIDPID}.modemtype` if [ "${modemtype}" != "dialup" ] ; then exit 1 fi [ "$ACTION" == "add" -a "$HOTPLUG_TYPE" == "usb" ] && { : } [ "$ACTION" == "remove" -a "$HOTPLUG_TYPE" == "usb" ] && { ifdown ppp # Remote dailup chat script rm -f ${DIALER} # Reset ppp attached flag uci set network.ppp.attached=0 uci commit network } |
modemtypeが”dialup”ではないデバイスが装着されたときにdialup接続が起動されるのを防ぎます。そして、unplug処理(環境変数ACTIONの値が”remove”のときにはppp の接続断、chat script (/tmp/chat_dialer)の削除、’attached’を0にします(重複していますが)。
8. /lib/network/ppp.sh
/lib/network/ppp.sh - 修正(太字部分)
| start_pppd() { local cfg="$1"; shift # make sure only one pppd process is started lock "/var/lock/ppp-${cfg}" local pid="$(head -n1 /var/run/ppp-${cfg}.pid 2>/dev/null)" [ -d "/proc/$pid" ] && grep pppd "/proc/$pid/cmdline" 2>/dev/null >/dev/null && { lock -u "/var/lock/ppp-${cfg}" return 0 } # Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating # /dev/ppp fast enough to be used here [ -e /dev/ppp ] || mknod /dev/ppp c 108 0 config_get device "$cfg" device config_get unit "$cfg" unit config_get username "$cfg" username config_get password "$cfg" password config_get keepalive "$cfg" keepalive config_get connect "$cfg" connect config_get disconnect "$cfg" disconnect config_get pppd_options "$cfg" pppd_options config_get_bool defaultroute "$cfg" defaultroute 1 # -- Start # 2010/06/14 # Added overwriting "connect" paramter. # Added linkname and ipparam config_get connect "$cfg" connectcmd config_get linkname "$cfg" linkname config_get ipparam "$cfg" ipparam # – End [ "$defaultroute" -eq 1 ] && defaultroute="defaultroute replacedefaultroute" || de interval="${keepalive##*[, ]}" [ "$interval" != "$keepalive" ] || interval=5 config_get_bool peerdns "$cfg" peerdns 1 [ "$peerdns" -eq 1 ] && peerdns="usepeerdns" || peerdns="" config_get demand "$cfg" demand [ -n "$demand" ] && echo "nameserver 1.1.1.1" > /tmp/resolv.conf.auto config_get_bool ipv6 "$cfg" ipv6 0 [ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6="" # 2010/06/14 /usr/sbin/pppd "$@" \ ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ${demand:+precompiled-active-filter /etc/ppp/filter demand idle }${demand: $peerdns \ $defaultroute \ ${username:+user "$username" password "$password"} \ unit "$unit" \ linkname "$linkname" \ ipparam "$ipparam" \ ${connect:+connect "$connect"} \ ${disconnect:+disconnect "$disconnect"} \ ${ipv6} \ ${pppd_options} lock -u "/var/lock/ppp-${cfg}" } setup_interface_ppp() { local iface="$1" local config="$2" config_get device "$config" device # 2010/06/14 config_get speed "$config" speed config_get mtu "$cfg" mtu mtu=${mtu:-1492} start_pppd "$config" \ mtu $mtu mru $mtu \ "$device" "$speed" |
- connectcmd, linkname, ipparamの値を /etc/config/networkの’interface’ ‘ppp’より取得します。connectcmdはconnectを上書きします。
- linknameとipparamをpppdの引数として追加します。
- speedの値を取り出し、同じく引数として追加します。
9. /lib/uci/schema/defaults/network
/lib/uci/schema/defaults/network - 追加(ファイルの最後)
| config variable option name 'connectcmd' option title 'Connect command" option section 'network.interface' option datatype 'string' option minlength 0 option maxlength 64 list depends 'proto=ppp' config variable option name 'linkname' option title 'pppd option linkname" option section 'network.interface' option datatype 'string' option minlength 0 option maxlength 64 list depends 'proto=ppp' config variable option name 'ipparam' option title 'pppd option ipparam" option section 'network.interface' option datatype 'string' option minlength 0 option maxlength 64 list depends 'proto=ppp' config variable option name 'speed' option title 'Connection bit rate' option section 'network.interface' option datatype uint config variable option name 'attached' opiton title 'Dialup 1st data device attached' option datatype 'boolean' |
/etc/config/networkに追加した値の定義をします。
10. /lib/uci/schema/defaults/ttyusb
/lib/uci/schema/defaults/ttyusb - 新規ファイル
| package ttyusb config section option name 'ttyusb' option package 'ttyusb' option unique true config variable option name 'driver' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 32 config variable option name 'vendor' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 32 config variable option name 'product' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 32 config variable option name 'modemtype' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 32 config variable option name 'device' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 32 config variable option name 'connectcmd' option title 'Connect command' option section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 option maxlength 64 config variable option name 'speed' option title 'Connection bit rate' option section 'ttyusb.ttyusb' option datatype uint config variable option name 'atinit' option title 'AT INIT command line' opiton section 'ttyusb.ttyusb' option datatype 'string' option minlength 0 opiton maxlength 64 |
/etc/config/ttyusbの値の定義をします。
更新履歴
- 2010/07/28: Initial release