Chinaunix首页 | 论坛 | 博客
  • 博客访问: 210303
  • 博文数量: 145
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 18:42
文章分类

全部博文(145)

文章存档

2011年(1)

2009年(144)

我的朋友

分类: LINUX

2009-09-20 21:06:46

by tangke 2009-09-20

本文主要介绍关于pppoe_loongson软件在co-create系统上面运行出错的问题.

在co-create系统上面,我们的默认使用用户是yee,非root权限。
因为在运行的时候需要修改/etc/ppp/peers/dsl-provider以及/etc/ppp/chap-secrets这两个文件,而且这两个文件是非root用户不能修改,所以需要root权限的。

所以程序也进行了修改,采用了脚本来执行这些操作。

脚本如下:/usr/share/pppoe_loongson/pppoe_loongosn.sh

TARGET_DIRECTORY=/etc/ppp/peers
TARGET_FILE=${TARGET_DIRECTORY}/dsl-provider
PASSWORD_FILE=/etc/ppp/chap-secrets

test -d ${TARGET_DIRECTORY} || sudo mkdir -pv ${TARGET_DIRECTORY}
case $1 in
    "setup")
        sudo rm -rf ${TARGET_FILE}
        sudo echo "noipdefault" >> ${TARGET_FILE}
        sudo echo "replacedefaultroute">> ${TARGET_FILE}
        sudo echo "hide-password">> ${TARGET_FILE}
        sudo echo "#lcp-echo-interval 30">> ${TARGET_FILE}
        sudo echo "#lcp-echo-failure 4">> ${TARGET_FILE}
        sudo echo "noauth">> ${TARGET_FILE}
        sudo echo "persist">> ${TARGET_FILE}
        sudo echo "#mtu 1492">> ${TARGET_FILE}
        sudo echo "#persist">> ${TARGET_FILE}
        sudo echo "#maxfail 0">> ${TARGET_FILE}
        sudo echo "#holdoff 20">> ${TARGET_FILE}
        sudo echo "plugin rp-pppoe.so $3">> ${TARGET_FILE} #network interface ->$3
        sudo echo "user \"$2\"">> ${TARGET_FILE} #username->$2
        sudo echo "usepeerdns">> ${TARGET_FILE}

        sudo rm -rf ${PASSWORD_FILE}
        sudo echo "\"$2\" dsl-provider \"$4\" *" > ${PASSWORD_FILE}
        sudo echo "\"$2\" dsl-provider \"$4\" *" ;;
#以上为创建一个dsl-provider文件.
    "information")
        if test -e ${TARGET_FILE}
        then
            PPP_USERNAME=`cat ${TARGET_FILE}| sed -n -e "s/^user.*\"\(.*\)\"/\1/p" `
            PPP_INTERFACE=`cat ${TARGET_FILE}| sed -n -e "s/^plugin.*rp-pppoe.so \(.*\)/\1/p" `
            PPP_PASSWORD=`cat ${PASSWORD_FILE}| sed -n -e "s/^\"${PPP_USERNAME}\".*\"\(.*\)\"/\1/p" `
            echo ${PPP_USERNAME} ${PPP_INTERFACE} ${PPP_PASSWORD}
            fi;;
#以上为得到上次使用的用户名,密码以及network interface.然后输出这些内容,在二进制文件读取这些信息。
    "list")
            XXX=""
            ALL_INTERFACE=`sudo ifconfig | sed -n -e "s/\(^[a-z]*[0-9]\).*/\1/p" `
            for a in ${ALL_INTERFACE}
            do
                XXX=${XXX}" "${a}
            done
            echo ${XXX};;
#以上为列出目前的可能使用的network interface设备。
    "connect")
            sudo pon dsl-provider;;
    "disconnect")
            sudo poff dsl-provider;;
    *)
        echo "you must input a parameters.....";;
esac

目前这个修改还没有测试过,不过应该问题不大,明天可以拿一台共创系统然后安装上这个软件,回家测试一下。

2009-09-22
测试没有成功.发现co-create系统上面连ppp软件包都没有安装
重新修改脚本:
# Minimalistic default options file for DSL/PPPoE connections

TARGET_DIRECTORY=/etc/ppp/peers
TARGET_FILE=${TARGET_DIRECTORY}/dsl-provider
PASSWORD_FILE=/etc/ppp/chap-secrets

test -d ${TARGET_DIRECTORY} || sudo mkdir -pv ${TARGET_DIRECTORY}
sudo chmod 777 ${TARGET_DIRECTORY}
case $1 in
    "setup")
        sudo rm -rf ${TARGET_FILE}
        sudo  echo "noipdefault" >> ${TARGET_FILE}
        sudo  echo "defaultroute">> ${TARGET_FILE}
        sudo  echo "hide-password">> ${TARGET_FILE}
        sudo  echo "#lcp-echo-interval 30">> ${TARGET_FILE}
        sudo  echo "#lcp-echo-failure 4">> ${TARGET_FILE}
        sudo  echo "noauth">> ${TARGET_FILE}
        sudo  echo "persist">> ${TARGET_FILE}
        sudo  echo "#mtu 1492">> ${TARGET_FILE}
        sudo  echo "#persist">> ${TARGET_FILE}
        sudo  echo "#maxfail 0">> ${TARGET_FILE}
        sudo  echo "#holdoff 20">> ${TARGET_FILE}
        sudo  echo "plugin rp-pppoe.so $3">> ${TARGET_FILE} #network interface ->$3
        sudo  echo "user \"$2\"">> ${TARGET_FILE} #username->$2
        sudo  echo "usepeerdns">> ${TARGET_FILE}

        sudo rm -rf ${PASSWORD_FILE}
        sudo touch ${PASSWORD_FILE} && sudo chmod 666 ${PASSWORD_FILE}
        sudo  echo "\"$2\" dsl-provider \"$4\" *" > ${PASSWORD_FILE}
        exit 0;;
#        sudo  "echo "\"$2\" dsl-provider \"$4\" *"" ;;
    "information")
        if test -e ${TARGET_FILE}
        then
            PPP_USERNAME=`cat ${TARGET_FILE}| sed -n -e "s/^user.*\"\(.*\)\"/\1/p" `
            PPP_INTERFACE=`cat ${TARGET_FILE}| sed -n -e "s/^plugin.*rp-pppoe.so \(.*\)/\1/p" `
            PPP_PASSWORD=`cat ${PASSWORD_FILE}| sed -n -e "s/^\"${PPP_USERNAME}\".*\"\(.*\)\"/\1/p" `
            echo ${PPP_USERNAME} ${PPP_INTERFACE} ${PPP_PASSWORD}
            fi;;
    "list")
            XXX=""
            ALL_INTERFACE=`sudo ifconfig | sed -n -e "s/\(^[a-z]*[0-9]\).*/\1/p" `
            for a in ${ALL_INTERFACE}
            do
                XXX=${XXX}" "${a}
            done
            echo ${XXX};;
    "connect")
            sudo pon dsl-provider
            exit $?;;
    "disconnect")
            sudo poff dsl-provider
            exit $?;;
    "check")
            INTERFACE=`sudo plog | sed -n -e "s/Using interface \(.*\)/\1/p" `
            PAP_AUTH=`sudo plog | sed -n -e "s/PAP authentication \(.*\)/\1/p" `
            LOCAL_IP=`sudo plog | sed -n -e "s/local  IP address \(.*\)/\1/p" `
            REMOTE_IP=`sudo plog | sed -n -e "s/remote IP address \(.*\)/\1/p" `
            PRIMARY_DNS=`sudo plog | sed -n -e "s/primary   DNS address \(.*\)/\1/p" `
            SECONDARY_DNS=`sudo plog | sed -n -e "s/secondary DNS address \(.*\)/\1/p" `
            if [ -n "${INTERFACE}" -a -n "${PAP_AUTH}" ]; then
                if [ -n "${LOCAL_IP}" -a -n "${REMOTE_IP}" ] ; then
                    if [ -n "${PRIMARY_DNS}" ]; then
                        echo  ${INTERFACE} ${PAP_AUTH} ${LOCAL_IP} ${REMOTE_IP} ${PRIMARY_DNS} ${SECONDARY_DNS}
                        exit 0
                    fi
                fi
            fi
            sudo poff dsl-provider
            exit 1;;
    *)
        echo "you must input a parameters.....";;
esac

关键是引入了plog命令,该命令是在ppp软件包里面的。
错误信息
root@tangke-laptop:/etc/ppp/peers# plog
Sep 21 21:10:06 tangke-laptop pppd[10961]: Plugin rp-pppoe.so loaded.
Sep 21 21:10:06 tangke-laptop pppd[10961]: RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
Sep 21 21:10:06 tangke-laptop pppd[10963]: pppd 2.4.5 started by root, uid 0
Sep 21 21:10:07 tangke-laptop pppd[10963]: PPP session is 5915
Sep 21 21:10:07 tangke-laptop pppd[10963]: Connected to 00:30:88:03:75:28 via interface eth0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Using interface ppp0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Connect: ppp0 <--> eth0
Sep 21 21:10:07 tangke-laptop pppd[10963]: Remote message: Limit Users Err
Sep 21 21:10:07 tangke-laptop pppd[10963]: PAP authentication failed
root@tangke-laptop:/etc/ppp/peers# plog
Sep 21 21:10:43 tangke-laptop pppd[10963]: PPP session is 1774
Sep 21 21:10:43 tangke-laptop pppd[10963]: Connected to 00:30:88:03:82:4e via interface eth0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Using interface ppp0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Connect: ppp0 <--> eth0
Sep 21 21:10:43 tangke-laptop pppd[10963]: Remote message: Limit Users Err
Sep 21 21:10:43 tangke-laptop pppd[10963]: PAP authentication failed
Sep 21 21:10:49 tangke-laptop pppd[10963]: Connection terminated.
Sep 21 21:10:49 tangke-laptop pppd[10963]: Modem hangup


after /etc/init.d/KNetworkManager stop

正确信息
root@tangke-laptop:/etc/ppp# pon dsl-provider
Plugin rp-pppoe.so loaded.
RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
root@tangke-laptop:/etc/ppp# plog
Sep 21 21:13:42 tangke-laptop pppd[11255]: Using interface ppp0
Sep 21 21:13:42 tangke-laptop pppd[11255]: Connect: ppp0 <--> eth0
Sep 21 21:13:42 tangke-laptop pppd[11255]: PAP authentication succeeded
Sep 21 21:13:42 tangke-laptop pppd[11255]: peer from calling number 00:30:88:03:82:4E authorized
Sep 21 21:13:42 tangke-laptop pppd[11255]: Cannot determine ethernet address for proxy ARP
Sep 21 21:13:42 tangke-laptop pppd[11255]: local  IP address 117.82.16.242
Sep 21 21:13:42 tangke-laptop pppd[11255]: remote IP address 117.82.16.1
Sep 21 21:13:42 tangke-laptop pppd[11255]: primary   DNS address 61.177.7.1
Sep 21 21:13:42 tangke-laptop pppd[11255]: secondary DNS address 221.228.255.1
root@tangke-laptop:/etc/ppp# ping
PING (61.132.118.132) 56(84) bytes of data.
64 bytes from (61.132.118.132): icmp_seq=1 ttl=59 time=10.8 ms

this is not connect to the remote because of dsl-provider "replacedefaultroute"
RP-PPPoE plugin version 3.8p compiled against pppd 2.4.5
root@tangke-laptop:/etc/ppp# plog
Sep 21 21:17:49 tangke-laptop pppd[11729]: Using interface ppp0
Sep 21 21:17:49 tangke-laptop pppd[11729]: Connect: ppp0 <--> eth0
Sep 21 21:17:49 tangke-laptop pppd[11729]: PAP authentication succeeded
Sep 21 21:17:49 tangke-laptop pppd[11729]: peer from calling number 00:30:88:03:75:28 authorized
Sep 21 21:17:49 tangke-laptop pppd[11729]: Cannot determine ethernet address for proxy ARP
Sep 21 21:17:49 tangke-laptop pppd[11729]: local  IP address 117.83.53.15
Sep 21 21:17:49 tangke-laptop pppd[11729]: remote IP address 117.83.48.1
Sep 21 21:17:49 tangke-laptop pppd[11729]: primary   DNS address 61.177.7.1
Sep 21 21:17:49 tangke-laptop pppd[11729]: secondary DNS address 221.228.255.1

because of the /etc/ppp/peers/dsl-provider file use the replacedefaultroute
edit the "replacedefaultroute" to "defaultroute"


目前不太确定NetworkManager对pppoe的连接有什么影响,还需要多进行测试!!!

2009-09-24
今天研究了一下pon,poff,plog的脚本,
plog的脚本是从/var/log/syslog文件来读取的,而不是从/var/log/ppp.log文件读取的,所以要看到plog信息的话,必须要先安装sysklogd这个包。
pon脚本是调用/usr/sbin/pppd这个二进制程序
poff脚本要稍微复杂一点,主要用来killall pppd,复杂点主要在于如果ps aux里面看到很多pppd进程在跑的话,使用poff -a将删掉所有的进程。

这两天在家里测试一直OK,但是同样的机器同事拿回去测试却每次都不OK,很是郁闷,今天研究了一下source code.重新修改了一下脚本
        for OPTIONS in  "noipdefault" "noipv6" "noipx" "noauth" \
                        "hide-password" "defaultroute" "lcp-echo-interval 10" \
                        "lcp-echo-failure 1" "plugin rp-pppoe.so" "$3" \
                        "user \"$2\"" "usepeerdns" "debug" \
                        "dump" "refuse-pap" "receive-all" "password \"$4\""
        do
            sudo echo ${OPTIONS} >> ${TARGET_FILE}
        done

其中加入dump和debug参数用来调试,如果再加入kdebug的话,应该可以启动内核级调试。
建议再安装上sysklogd来进行plog级别调试。
下面是这些参数的一些意义:
lcp-echo-failure 1

lcp-echo-interval 10

defaultroute

hide-password
在以后的打印信息中隐藏密码信息。
usepeerdns

noauth

receive-all

noipx

其中还有两个来自/etc/ppp/options的参数

proxyarp

asyncmap 0   

阅读(792) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~