20170331_jeffrey - silenceuncrio/diary GitHub Wiki

1150

一早都在忙 WAN Ethernet page 的事

目前的發現是 cgi-bin/ipv6lan.cgi?act=default 這個動作會造成系統異常

細節如 ipv6lan.c

static json_object * _default() {
    int res = ICOS_GetSetting(MODULE_IPV6LAN, OPFLAG_GET_DEFAULT, 0, &Ipv6lan, sizeof(Ipv6lan));
    if (res != ICOS_SUCCESS) {
        jweb.http.status(500);
        jweb.out.json.fail("ICOS_GetSetting fail");
    }

    res = ICOS_Apply(MODULE_IPV6LAN, 0, 0, &Ipv6lan, sizeof(Ipv6lan));
    if (res != ICOS_SUCCESS) {
        jweb.http.status(500);
        jweb.out.json.fail("ICOS_Apply fail");
    }

    jweb.out.json.ok();
}

當異常發生的時候

ICOS_Apply(MODULE_IPV6LAN, 0, 0, &Ipv6lan, sizeof(Ipv6lan)) 會咬住不會 return

目前不是每次都會發生

ariel 表示他會去查這個 issue

1445

ariel 表示他最近有針對 pppoe 和 ipv6lan 作一些修改

幫忙 git pull 最新的 code 再測一下

透過 web 切換到 pppoe 時候順便把 ipv6lan apply 成 default

不過當使用者從 browser 端 trigger reboot 動作時

發現 device 並沒有收到該 reboot 的 http 訊息

幫忙修改 ipv6_lan.cSetIPV6LANSetting()

static int SetIPV6LANSetting(int flag, int index, void* pStruct, int structSize)
{
    ipv6_lan  *pLAN=(ipv6_lan *)pStruct;

    CPRT("IN:\n");

    if (IsBootInitProcess())
    {
        return ICOS_SUCCESS;
    }

    if(0>LocSaveConfigTxt(IPV6LAN_TMP_CFG_FILE, &(pLAN->dhcp6s_conf)))
    {
        return ICOS_FAILURE;
    }
    SysCopyFile(IPV6LAN_TMP_CFG_FILE, IPV6LAN_ETC_CFG_FILE);

    return ICOS_SUCCESS;
}

cgi-bin/ipv6lan.cgi?act=default 這個動作觸發的 ipv6lan.c_default() 變成

static json_object * _default() {
    int res = ICOS_GetSetting(MODULE_IPV6LAN, OPFLAG_GET_DEFAULT, 0, &Ipv6lan, sizeof(Ipv6lan));
    if (res != ICOS_SUCCESS) {
        jweb.http.status(500);
        jweb.out.json.fail("ICOS_GetSetting fail");
    }

    res = ICOS_SetSetting(MODULE_IPV6LAN, 0, 0, &Ipv6lan, sizeof(Ipv6lan));
    if (res != ICOS_SUCCESS) {
        jweb.http.status(500);
        jweb.out.json.fail("ICOS_Apply fail");
    }

    jweb.out.json.ok();
}

這樣 ICOS_SetSetting(MODULE_IPV6LAN, 0, 0, &Ipv6lan, sizeof(Ipv6lan)) 便只是修改 config file

然後使用者再透過 web trigger device reboot 的動作

1500

還是不行

看來 pppoe apply 的動作也要改掉

1600

pppoe 改成 set 後還是一樣

看來問題並不單純