物联网loT从业者物联网相关技术研究

MT7688学习笔记(13)——C++编程配置PPPoE拨号

2019-06-19  本文已影响1人  Leung_ManWah

一、PPPoE拨号上网语法

在设置pppoe时要确保设备WAN口连接的外网具备PPPoE的服务器,比如小区宽带、光猫或上联ADSL猫。PPPoE拨号上网语法如下:

选项 说明 可选值及说明 必填
proto 协议类型 pppoe
ifname 设备名称 eth0.2
macaddr WAN口MAC地址 首次数据根据factory分区内参数自动生成
mtu 修改最大数据包大小,默认不用设置 数值
username 拨号用的账号 字符串
password 拨号用的密码 字符串
ac 使用指定的访问集中器进行连接 字符串
service 连接的服务名称 字符串
connect 连接时执行的外部脚本 字符串
disconnect 断开连接时执行的外部脚本 字符串
demand 等待多久没有活动就断开PPPoE连接 数字,单位为秒
dns DNS服务器地址 字符串
pppd_options 用于pppd进程执行时的附加参数 字符串

二、修改编译前PPPoE配置文件

2.1 在openwrt-hiwooya-stable-master中

配置文件位置/work/openwrt-hiwooya-stable-master/files/etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdd8:c0ec:8d29::/48'

config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option macaddr '0c:ef:af:cf:e1:b3'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.100.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option _orig_ifname 'eth0.2'
        option _orig_bridge 'false'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config interface 'wwan'
        option ifname 'apcli0'
        option proto 'dhcp'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 6t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '0 6t'

config interface '4g'
        option proto 'dhcp'
        option ifname 'eth1'
        option dns '114.114.114.114'

在wan配置中添加 option usernameoption password

config interface 'wan'
        option ifname 'eth0.2'
        option _orig_ifname 'eth0.2'
        option _orig_bridge 'false'
        option proto 'dhcp'
        option username
        option password

2.2 在OpenWrt 1505中

配置文件位置/work/openwrt/package/base-files/files/bin/config_generate

wan) uci -q batch <<EOF
set network.$1.proto='dhcp'
delete network.wan6
set network.wan6='interface'
set network.wan6.ifname='$ifname'
set network.wan6.proto='dhcpv6'
EOF

在wan配置中添加 option usernameoption password

wan) uci -q batch <<EOF
set network.$1.proto='dhcp'
set network.$1.username=' '
set network.$1.password=' '
delete network.wan6
set network.wan6='interface'
set network.wan6.ifname='$ifname'
set network.wan6.proto='dhcpv6'
EOF

二、查看编译后PPPoE配置文件

root@hi-wooya:/etc/config# vim network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fdd8:c0ec:8d29::/48'

config interface 'lan'
        option ifname 'eth0.1'
        option force_link '1'
        option macaddr '0c:ef:af:cf:e1:b3'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.100.1'
        option netmask '255.255.255.0'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option _orig_ifname 'eth0.2'
        option _orig_bridge 'false'
        option proto dhcp
        option username  
        option password  
  • proto 位于24行
  • username 位于25行
  • password 位于26行

三、C++程序

/**
 @brief 修改文件某行内容
 @param pFileName   -[in] 文件名
 @param lineNum     -[in] 行号 
 @param content     -[in] 修改的内容
 @return 无
*/
static void modifyContentInFile(char *pFileName, int lineNum, string content)
{
    if(!pFileName)
    {
        return ;
    }
    ifstream in;
    char line[1024] = {'\0'};
    in.open(pFileName);
    int i = 0;
    string tempStr;
    while(in.getline(line, sizeof(line)))
    {
        i++;
        if(lineNum != i)
        {
            tempStr += Char2Str(line);
        }
        else
        {
           tempStr += content;
        }
        tempStr += '\n';
    }
    in.close();
    ofstream out;
    out.open(pFileName);
    out.flush();
    out<<tempStr;
    out.close(); 
}

void pppoe(void)
{
    string protocol = "\toption proto pppoe";
    string username = "\toption username 12345678";
    string password = "\toption password 12345678";
    unsigned char protocolLine = 24;                                                        // 在文件中第25行
    unsigned char usernameLine = 25;                                                        // 在文件中第26行
    unsigned char passwordLine = 26;                                                        // 在文件中第27行
    char fileName[] = "/etc/config/network";

    modifyContentInFile(fileName, protocolLine, protocol);
    modifyContentInFile(fileName, usernameLine, username);
    modifyContentInFile(fileName, passwordLine, password);

    system("/etc/init.d/network restart");                              // 重启network服务进程,使配置生效
}

执行pppoe函数,重启网络后拨号要等待30秒~5分钟,如果参数没错,就会拨号成功。


• 由 Leung 写于 2019 年 6 月 19 日

• 参考:OpenWrt智能路由器系统开发——跟hoowa学智能路由

上一篇下一篇

猜你喜欢

热点阅读