20170222_jeffrey - silenceuncrio/diary GitHub Wiki
0925
review
0930
今天先從 M300 的 /home/log/web.log
來觀察 webModule 的初始化行為
root@Mobile Router:~# cat /home/log/web.log
1487726094[20170222 1:14:54] [notify_web:871]IN(E82|S44|D44)
1487726094[20170222 1:14:54] [notify_web:880]module init
1487726099[20170222 1:14:59] [notify_web:871]IN(E62|S00|D00)
1487726099[20170222 1:14:59] [notify_web:905]boot init done
1487726099[20170222 1:14:59] [web_dump:609]===init config===
1487726099[20170222 1:14:59] [web_dump:619][COM]conn_mgr=1,mod_init_done:1.
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=-1,status=0,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x0,DID1
1487726099[20170222 1:14:59] [web_dump:653][RTI]wan4_ifname=,wan6_ifname=.
1487726099[20170222 1:14:59] [daemon_restart:756][DID0] remain IP server retry for 6 times.
1487726099[20170222 1:14:59] [create_daemon_conf:664]IN
1487726099[20170222 1:14:59] [create_daemon_conf:675]cmd_buf=>dir=/
1487726099[20170222 1:14:59] [create_daemon_conf:680]cmd_buf=>cgipat=cgi-bin/**
1487726099[20170222 1:14:59] [create_daemon_conf:685]cmd_buf=>chroot
1487726099[20170222 1:14:59] [create_daemon_conf:690]cmd_buf=>user=root
1487726099[20170222 1:14:59] [create_daemon_conf:695]cmd_buf=>max_age=0
1487726099[20170222 1:14:59] [create_daemon_conf:700]cmd_buf=>debug
1487726099[20170222 1:14:59] [daemon_restart:781][DMN]Lanch=>/usr/sbin/iweb -p 80 -d /www
1487726099[20170222 1:14:59] [daemon_restart:756][DID1] remain IP server retry for 6 times.
1487726099[20170222 1:14:59] [web_dump:609]===cfg not allowed===
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=759,status=1,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x1,DID1
1487726099[20170222 1:14:59] [web_dump:609]===After daemon restart===
1487726099[20170222 1:14:59] [web_dump:619][COM]conn_mgr=1,mod_init_done:1.
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=759,status=1,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x0,DID1
1487726099[20170222 1:14:59] [web_dump:653][RTI]wan4_ifname=,wan6_ifname=.
1487726100[20170222 1:15:0] [notify_web:871]IN(E50|S59|D00)
1487726102[20170222 1:15:2] [msgcb_web:1155]IN(DID0,pid 759)
<--
Icos_user_root.session_ttl: 300 sec
Icos_user_root.user: root
Icos_user_root.pass: $1$$2Dg0uARUa9gcTJ9I5/iKb/
Starting iweb on port 80, serving /www
-->
1487726102[20170222 1:15:2] [notify_web:871]IN(E02|S56|D00)
1487726102[20170222 1:15:2] [notify_web:871]IN(E01|S56|D00)
1487726145[20170222 1:15:45] [notify_web:871]IN(E43|S35|D00)
1487726153[20170222 1:15:53] [msgcb_web:1155]IN(DID0,pid 759)
<--
wasLogin_handler
-->
1487726153[20170222 1:15:53] [msgcb_web:1155]IN(DID0,pid 759)
<--
sid: -460018129
wasLogin: false
-->
1487726164[20170222 1:16:4] [msgcb_web:1155]IN(DID0,pid 759)
<--
wasLogin_handler
sid: -460018129
wasLogin: false
-->
1487726173[20170222 1:16:13] [msgcb_web:1155]IN(DID0,pid 759)
<--
wasLogin_handler
-->
1487726173[20170222 1:16:13] [msgcb_web:1155]IN(DID0,pid 759)
<--
sid: -460018129
wasLogin: false
-->
1487726178[20170222 1:16:18] [msgcb_web:1155]IN(DID0,pid 759)
<--
auth_handler: /cgi-bin/firmware.cgi
sid: -460018129
auth_handler: /app/feature/firmware.html
sid: -460018129
-->
1487726183[20170222 1:16:23] [msgcb_web:1155]IN(DID0,pid 759)
<--
wasLogin_handler
-->
1487726183[20170222 1:16:23] [msgcb_web:1155]IN(DID0,pid 759)
<--
sid: -460018129
wasLogin: false
-->
1487726187[20170222 1:16:27] [msgcb_web:1155]IN(DID0,pid 759)
<--
login_handler
user: root; pass:2wsx#EDC
-->
1487726187[20170222 1:16:27] [msgcb_web:1155]IN(DID0,pid 759)
<--
root logged in, sid 7b90c0ecb0e172b8
-->
1487726188[20170222 1:16:28] [msgcb_web:1155]IN(DID0,pid 759)
<--
auth_handler: /app/feature/firmware.html
sid: -1327402312
root logged in, sid 7b90c0ecb0e172b8
-->
1487726188[20170222 1:16:28] [msgcb_web:1155]IN(DID0,pid 759)
<--
auth_handler: /cgi-bin/firmware.cgi
sid: -1327402312
root logged in, sid 7b90c0ecb0e172b8
-->
root@Mobile Router:~#
上面的紀錄是 M300 剛開機
然後我開了 web
點了一個需要 login 的 page 作了成功的 login
0940
1487726094[20170222 1:14:54] [notify_web:871]IN(E82|S44|D44)
1487726094[20170222 1:14:54] [notify_web:880]module init
webModule.notify()
是這樣走的
static int notify_web(PRO_EVENT *pevent)
{
sWebConfig *cfg=&gWebCtrl.cfg;
RT_INFO_T *rt_info=&gWebCtrl.rt_info;
WEB_INFO("IN(E%02d|S%02d|D%02d)\n",pevent->event_id,pevent->src_id,pevent->dst_id);
switch(pevent->event_id)
{
case ICOS_UCAST_MODULE_APPLY:
if(pevent->msg_len==sizeof(sWebConfig))
{
if(0==gWebCtrl.mod_init_done)
{
WEB_INFO("module init\n");
web_init((sWebConfig *)pevent->msg);
gWebCtrl.mod_init_done=1;
}
else
{
...
}
}
break;
...
}
if(gWebCtrl.mod_init_done)
{
...
}
return ICOS_SUCCESS;
}
注意到 gWebCtrl.mod_init_done=1;
這會影響後續的流程
0945
1487726099[20170222 1:14:59] [notify_web:871]IN(E62|S00|D00)
1487726099[20170222 1:14:59] [notify_web:905]boot init done
1487726099[20170222 1:14:59] [web_dump:609]===init config===
1487726099[20170222 1:14:59] [web_dump:619][COM]conn_mgr=1,mod_init_done:1.
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=-1,status=0,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x0,DID1
1487726099[20170222 1:14:59] [web_dump:653][RTI]wan4_ifname=,wan6_ifname=.
webModule.notify()
是這樣走的
static int notify_web(PRO_EVENT *pevent)
{
int i;
sWebConfig *cfg=&gWebCtrl.cfg;
RT_INFO_T *rt_info=&gWebCtrl.rt_info;
WEB_INFO("IN(E%02d|S%02d|D%02d)\n",pevent->event_id,pevent->src_id,pevent->dst_id);
switch(pevent->event_id)
{
...
case ICOS_BOOTINIT_DONE:
WEB_INFO("boot init done\n");
web_dump(DUMP_ALL,"init config");
for(i=0;MAX_DAEMON_NUM>i;i++)
{
gWebCtrl.dmn_ctrl[i].flag=FLAG_DMN_RESTART;
}
break;
...
}
if(gWebCtrl.mod_init_done)
{
int has_restart=0;
int has_fw4_restart=0;
int has_fw6_restart=0;
for(i=0;MAX_DAEMON_NUM>i;i++)
{
if(gWebCtrl.dmn_ctrl[i].flag)
{
int iface_sel=WEB_ATTVAL_ACCESS_INTERFACE_DISABLE==cfg->WWWAccessInterface?IPT_IFACE_DIS:
WEB_ATTVAL_ACCESS_INTERFACE_LAN==cfg->WWWAccessInterface?IPT_IFACE_LAN:
WEB_ATTVAL_ACCESS_INTERFACE_WAN==cfg->WWWAccessInterface?IPT_IFACE_WAN:
WEB_ATTVAL_ACCESS_INTERFACE_ALL==cfg->WWWAccessInterface?IPT_IFACE_ALL:IPT_IFACE_DIS; //Default disable
if((FLAG_DMN_RESTART|FLAG_FW4_RESTART)&gWebCtrl.dmn_ctrl[i].flag)
{
...
}
if((FLAG_DMN_RESTART|FLAG_FW6_RESTART)&gWebCtrl.dmn_ctrl[i].flag)
{
...
}
if(FLAG_DMN_RESTART & gWebCtrl.dmn_ctrl[i].flag)
{
...
}
gWebCtrl.dmn_ctrl[i].flag&=~(FLAG_FW4_RESTART|FLAG_FW6_RESTART|FLAG_DMN_RESTART);
}
}
if(has_restart)
{
web_dump(DUMP_ALL,"After daemon restart");
}
}
return ICOS_SUCCESS;
}
1305
繼續看 log 之前先看當 FLAG_DMN_RESTART & gWebCtrl.dmn_ctrl[i].flag
成立時做了甚麼
for(i=0;MAX_DAEMON_NUM>i;i++)
{
if(gWebCtrl.dmn_ctrl[i].flag)
{
...
if(FLAG_DMN_RESTART & gWebCtrl.dmn_ctrl[i].flag)
{
gWebCtrl.dmn_ctrl[i].retry_cnt=MAX_DAEMON_RETRY_NUM;
if(DAEMON_STATUS_OFF!=gWebCtrl.dmn_ctrl[i].status)
{
WEB_DBG("Daemon is running,add one retry count...\n");
gWebCtrl.dmn_ctrl[i].retry_cnt+=1;
}
daemon_restart(&gWebCtrl.dmn_ctrl[i]);
has_restart++;
}
gWebCtrl.dmn_ctrl[i].flag&=~(FLAG_FW4_RESTART|FLAG_FW6_RESTART|FLAG_DMN_RESTART);
}
}
這樣了流程會走兩次
走第一次時的 log
1487726099[20170222 1:14:59] [daemon_restart:756][DID0] remain IP server retry for 6 times.
1487726099[20170222 1:14:59] [create_daemon_conf:664]IN
1487726099[20170222 1:14:59] [create_daemon_conf:675]cmd_buf=>dir=/
1487726099[20170222 1:14:59] [create_daemon_conf:680]cmd_buf=>cgipat=cgi-bin/**
1487726099[20170222 1:14:59] [create_daemon_conf:685]cmd_buf=>chroot
1487726099[20170222 1:14:59] [create_daemon_conf:690]cmd_buf=>user=root
1487726099[20170222 1:14:59] [create_daemon_conf:695]cmd_buf=>max_age=0
1487726099[20170222 1:14:59] [create_daemon_conf:700]cmd_buf=>debug
1487726099[20170222 1:14:59] [daemon_restart:781][DMN]Lanch=>/usr/sbin/iweb -p 80 -d /www
流程如下
static int create_daemon_conf(DAEMON_CTRL_T *dmn_ctrl)
{
...
WEB_INFO("IN\n");
...
}
static int is_request_start(DAEMON_CTRL_T *dmn_ctrl)
{
if(ICOS_FAILURE==create_daemon_conf(dmn_ctrl))
{
...
}
}
static void daemon_restart(DAEMON_CTRL_T *dmn_ctrl)
{
WEB_INFO("[DID%d] remain IP server retry for %d times.\n",dmn_ctrl->did,dmn_ctrl->retry_cnt);
if(ICOS_SUCCESS==is_request_start(dmn_ctrl))
{
WEB_DBG("[DMN]Lanch=>%s %s\n",WEB_DAEMON_BIN_FILE,argv);
}
}
走第二次時的 log
1487726099[20170222 1:14:59] [daemon_restart:756][DID1] remain IP server retry for 6 times.
1487726099[20170222 1:14:59] [web_dump:609]===cfg not allowed===
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=759,status=1,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x1,DID1
走第二次時的流程如下
static int is_request_start(DAEMON_CTRL_T *dmn_ctrl)
{
if(!((DID_HTTPD==dmn_ctrl->did && (ATTVAL_WEBMODE_HTTPD==cfg->mode || ATTVAL_WEBMODE_BOTH==cfg->mode)) ||
(DID_HTTPS==dmn_ctrl->did && (ATTVAL_WEBMODE_HTTPS==cfg->mode || ATTVAL_WEBMODE_BOTH==cfg->mode))))
{
web_dump(DUMP_CFG|DUMP_DMN,"cfg not allowed");
return ICOS_FAILURE;
}
}
static void daemon_restart(DAEMON_CTRL_T *dmn_ctrl)
{
WEB_INFO("[DID%d] remain IP server retry for %d times.\n",dmn_ctrl->did,dmn_ctrl->retry_cnt);
if(ICOS_SUCCESS==is_request_start(dmn_ctrl))
{
...
}
}
1325
再來的 log 如下
1487726099[20170222 1:14:59] [web_dump:609]===After daemon restart===
1487726099[20170222 1:14:59] [web_dump:619][COM]conn_mgr=1,mod_init_done:1.
1487726099[20170222 1:14:59] [web_dump:640][CFG]mode=httpd,httpd_port=80,https_port=443,refreshperiod=2,sport=80,intf=all,secure=all,clienip=0.0.0.0
1487726099[20170222 1:14:59] [web_dump:648][DMN0]active=1,pid=759,status=1,flag=0x0,DID0
1487726099[20170222 1:14:59] [web_dump:648][DMN1]active=1,pid=-1,status=0,flag=0x0,DID1
1487726099[20170222 1:14:59] [web_dump:653][RTI]wan4_ifname=,wan6_ifname=.
流程如下
static int notify_web(PRO_EVENT *pevent)
{
...
if(gWebCtrl.mod_init_done)
{
for(i=0;MAX_DAEMON_NUM>i;i++)
{
...
}
if(has_restart)
{
web_dump(DUMP_ALL,"After daemon restart");
}
}
...
}
1330
再來的 log
1487726100[20170222 1:15:0] [notify_web:871]IN(E50|S59|D00)
- event_id - 50 - ICOS_LAN_IP_UPDATE
- src_id - 59 - MODULE_LANST
- dst_id - 00 - broadcast
webModule
並沒有針對 ICOS_LAN_IP_UPDATE
這個 broadcast event 進行任何處理
1335
再來
1487726102[20170222 1:15:2] [msgcb_web:1155]IN(DID0,pid 759)
<--
Icos_user_root.session_ttl: 300 sec
Icos_user_root.user: root
Icos_user_root.pass: $1$$2Dg0uARUa9gcTJ9I5/iKb/
Starting iweb on port 80, serving /www
-->
這是因為 webModulw.msgcb_web()
被觸發了
static int msgcb_web(char *msg, pid_t pid, int rc)
{
int i;
DAEMON_CTRL_T *dmn_ctrl=NULL;
for(i=0;MAX_DAEMON_NUM>i;i++)
{
if(pid==gWebCtrl.dmn_ctrl[i].pid)
{
WEB_INFO("IN(DID%d,pid %d)\n",gWebCtrl.dmn_ctrl[i].did,gWebCtrl.dmn_ctrl[i].pid);
dmn_ctrl=&gWebCtrl.dmn_ctrl[i];
break;
}
}
if(NULL==dmn_ctrl)
{
return ICOS_SUCCESS;
}
if(msg)
{
#if 1 //debug
WEB_DAEMON("<--\n");
WEB_DAEMON("%s",msg);
WEB_DAEMON("-->\n");
#endif
//daemon_event(dmn_ctrl,msg);
}
return ICOS_SUCCESS;
}
這是 ariel 跟 john 帶進來 icos 的新機制
來源就不去追了
1435
arile 請我跟 shin 聯絡一下看是怎麼樣來 demo 一下 M300 怎麼把軟體 燒錄 到 nand flash 去的流程
1440
直接走一趟... 不過 shin 不在
1510
目前 M300 的案子對外的 release 放在 P:\2_Projects\3_Wireless\M300_M301\firmware
也可說是放在 \\mis-serv\2_Projects\3_Wireless\M300_M301\firmware
目前有兩個 release
- 20170106
- m300_v1.0_20170106070251.tar
- M300-ReleaseNotes.v1.0.txt
- 20170112
- m300_v1.1_012C000000129880.tar
- M30x-ReleaseNotes.xxx.txt
先為了 m300_v1.1_012C000000129880.tar
準備個配套的 mfgtool 燒錄包 m300_v1.1_mfgtools.rar
到時候就直接解開這包然後搭配 M300 的板子作 demo 即可
1535
換來 trace 一下 sshModule
裡頭應該有建立 key 的相關流程可以參考
https 的啟動流程應該可以模仿才對
sshModule
定義如下
sIcosModule sshModule={
.szName = "ssh",
.Init = InitSsh,
.Exit = ExitSsh,
.Apply = ApplySshSetting,
.GetSetting = GetSshSetting,
.SetSetting = SetSshSetting,
.VerifySetting = VerifySshSetting,
.Factory = facotry_default_ssh_setting,
.NotifyHandler = notify_ssh,
.proc_msg_cb = msgcb_ssh,
.proc_term_cb = termcb_ssh,
};
直接從 log 來追流程
root@Mobile Router:~# cat /home/log/ssh.log
1487748846[20170222 7:34:6] [LoadDefault:158]loaded from fac done.
1487748846[20170222 7:34:6] [notify_ssh:795]IN(E82|S33|D33)
1487748846[20170222 7:34:6] [notify_ssh:804]module init
1487748846[20170222 7:34:6] [ssh_init:587]Key file generated done.
1487748852[20170222 7:34:12] [notify_ssh:795]IN(E62|S00|D00)
1487748852[20170222 7:34:12] [notify_ssh:829]boot init done
1487748852[20170222 7:34:12] [ssh_dump:434][COM]conn_mgr=1,mod_init_done:1.
1487748852[20170222 7:34:12] [ssh_dump:453][CFG]mode=on,port=22,iface_sel=lan,scenario=dual,cli4_mode=all,ipv4_addr=0.0.0.0,cli6_mode=all,ipv6_addr=
1487748852[20170222 7:34:12] [ssh_dump:458][DMN]active=1,pid=-1,status=0,flag=0x0,is_keyfile_ready=1.
1487748852[20170222 7:34:12] [ssh_dump:462][RTI]wan4_ifname=,wan6_ifname=.
1487748852[20170222 7:34:12] [daemon_restart:530]IN
1487748852[20170222 7:34:12] [gen_key_files:471]IN
1487748852[20170222 7:34:12] [gen_key_files:490]OUT
1487748852[20170222 7:34:12] [daemon_restart:558][DMN]Lanch=>/usr/sbin/dropbear -F -v -r /etc/icos/ssh/dropbear_rsa_host_key -r /etc/icos/ssh/dropbear_dss_host_key -r /etc/icos/ssh/dropbear_ecdsa_host_key -p 22
1487748852[20170222 7:34:12] [ssh_dump:434][COM]conn_mgr=1,mod_init_done:1.
1487748852[20170222 7:34:12] [ssh_dump:453][CFG]mode=on,port=22,iface_sel=lan,scenario=dual,cli4_mode=all,ipv4_addr=0.0.0.0,cli6_mode=all,ipv6_addr=
1487748852[20170222 7:34:12] [ssh_dump:458][DMN]active=1,pid=748,status=1,flag=0x1,is_keyfile_ready=1.
1487748852[20170222 7:34:12] [ssh_dump:462][RTI]wan4_ifname=,wan6_ifname=.
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E50|S59|D00)
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E53|S50|D00)
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E02|S56|D00)
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E01|S56|D00)
1487748855[20170222 7:34:15] [notify_ssh:795]IN(E43|S35|D00)
1355
按步就班
1487748846[20170222 7:34:6] [LoadDefault:158]loaded from fac done.
流程如下
static int LoadDefault(sSshConfig *pCfg)
{
if(0==SysParsorTextFile(SSH_FACTORY_FILE, SshCallBack,pCfg,sizeof(*pCfg)))
{
SSH_INFO("loaded from fac done.\n");
return ICOS_SUCCESS;
}
}
static int InitSsh(char *pCfgStr) {
sSshConfig *pCfg = (sSshConfig *)(&gUnionConfig.sshCfg);
LoadDefault(pCfg);
SysParsorTextFile(SSH_ETC_CFG_FILE, SshCallBack, pCfg,sizeof(*pCfg));
return ApplySshSetting(0, 0, pCfg, sizeof(*pCfg) );
}
1405
1487748846[20170222 7:34:6] [notify_ssh:795]IN(E82|S33|D33)
1487748846[20170222 7:34:6] [notify_ssh:804]module init
1487748846[20170222 7:34:6] [ssh_init:587]Key file generated done.
- event_id - 82 - ICOS_UCAST_MODULE_APPLY
- src_id - 33 - MODULE_SSH
- dst_id - 33 - MODULE_SSH
流程
static int ssh_init(sSshConfig *cfgp)
{
int keyfile_rsa=(0==access(SSH_DAEMON_KEY_FILE_RSA,F_OK));
int keyfile_dss=(0==access(SSH_DAEMON_KEY_FILE_DSS,F_OK));
int keyfile_ecdsa=(0==access(SSH_DAEMON_KEY_FILE_ECDSA,F_OK));
gSshCtrl.dmn_ctrl.is_keyfile_ready=0;
if( keyfile_rsa && keyfile_dss && keyfile_ecdsa )
{
SSH_INFO("Key file generated done.\n");
gSshCtrl.dmn_ctrl.is_keyfile_ready=1;
}
return ICOS_SUCCESS;
}
static int notify_ssh(PRO_EVENT *pevent)
{
SSH_INFO("IN(E%02d|S%02d|D%02d)\n",pevent->event_id,pevent->src_id,pevent->dst_id);
switch(pevent->event_id)
{
case ICOS_UCAST_MODULE_APPLY:
if(pevent->msg_len==sizeof(sSshConfig))
{
if(0==gSshCtrl.mod_init_done)
{
SSH_INFO("module init\n");
ssh_init((sSshConfig *)pevent->msg);
gSshCtrl.mod_init_done=1;
}
}
break;
...
}
...
}
注意到相關的 key 都已經存在了
- SSH_DAEMON_KEY_FILE_RSA
- SSH_DAEMON_KEY_FILE_DSS
- SSH_DAEMON_KEY_FILE_ECDSA
1645
再來的 log
1487748852[20170222 7:34:12] [notify_ssh:795]IN(E62|S00|D00)
1487748852[20170222 7:34:12] [notify_ssh:829]boot init done
1487748852[20170222 7:34:12] [ssh_dump:434][COM]conn_mgr=1,mod_init_done:1.
1487748852[20170222 7:34:12] [ssh_dump:453][CFG]mode=on,port=22,iface_sel=lan,scenario=dual,cli4_mode=all,ipv4_addr=0.0.0.0,cli6_mode=all,ipv6_addr=
1487748852[20170222 7:34:12] [ssh_dump:458][DMN]active=1,pid=-1,status=0,flag=0x0,is_keyfile_ready=1.
1487748852[20170222 7:34:12] [ssh_dump:462][RTI]wan4_ifname=,wan6_ifname=.
1487748852[20170222 7:34:12] [daemon_restart:530]IN
1487748852[20170222 7:34:12] [gen_key_files:471]IN
1487748852[20170222 7:34:12] [gen_key_files:490]OUT
1487748852[20170222 7:34:12] [daemon_restart:558][DMN]Lanch=>/usr/sbin/dropbear -F -v -r /etc/icos/ssh/dropbear_rsa_host_key -r /etc/icos/ssh/dropbear_dss_host_key -r /etc/icos/ssh/dropbear_ecdsa_host_key -p 22
1487748852[20170222 7:34:12] [ssh_dump:434][COM]conn_mgr=1,mod_init_done:1.
1487748852[20170222 7:34:12] [ssh_dump:453][CFG]mode=on,port=22,iface_sel=lan,scenario=dual,cli4_mode=all,ipv4_addr=0.0.0.0,cli6_mode=all,ipv6_addr=
1487748852[20170222 7:34:12] [ssh_dump:458][DMN]active=1,pid=748,status=1,flag=0x1,is_keyfile_ready=1.
1487748852[20170222 7:34:12] [ssh_dump:462][RTI]wan4_ifname=,wan6_ifname=.
流程有點多
static void gen_key_files(void)
{
int pid;
char cmd[256];
SSH_INFO("IN\n");
if(-1==access(SSH_DAEMON_KEY_FILE_RSA,F_OK))
{
...
}
if(-1==access(SSH_DAEMON_KEY_FILE_DSS,F_OK))
{
...
}
if(-1==access(SSH_DAEMON_KEY_FILE_ECDSA,F_OK))
{
...
}
SSH_INFO("OUT\n");
}
static void daemon_restart(void)
{
sSshConfig *cfg=&gSshCtrl.cfg;
DAEMON_CTRL_T *dmn_ctrl=&gSshCtrl.dmn_ctrl;
SSH_INFO("IN\n");
//Daemon shutdown
if(DAEMON_STATUS_OFF!=dmn_ctrl->status)
{
if(DAEMON_STATUS_RUNNING==dmn_ctrl->status &&
BAD_PID!=dmn_ctrl->pid)
{
SSH_INFO("[DMN] killed (%d).\n",dmn_ctrl->pid);
ICOS_kill(dmn_ctrl->pid);
}
dmn_ctrl->status=DAEMON_STATUS_WAIT_EXIT;
SSH_INFO("[DMN] Wait exit(%d).\n",dmn_ctrl->pid);
return;
}
gen_key_files();
dmn_ctrl->pid=BAD_PID;
dmn_ctrl->status=DAEMON_STATUS_OFF;
//Daemon start
if(ICOS_SUCCESS==is_request_start())
{
char argv[256]= {0};
//-v: log(huge data)
//-F: foregroud
//-r: key file
//-p: server port
snprintf(argv,sizeof(argv),"-F -v -r %s -r %s -r %s -p %d",SSH_DAEMON_KEY_FILE_RSA,SSH_DAEMON_KEY_FILE_DSS,SSH_DAEMON_KEY_FILE_ECDSA,cfg->server_port);
SSH_DBG("[DMN]Lanch=>%s %s\n",SSH_DAEMON_BIN_FILE,argv);
dmn_ctrl->pid=ICOS_ProcLaunch(MODULE_SSH,SSH_DAEMON_BIN_FILE,argv,NULL);
dmn_ctrl->status=DAEMON_STATUS_RUNNING;
ICOS_slog(MODULE_SSH,LOG_INFO,"SSH server started.");
}
}
static int notify_ssh(PRO_EVENT *pevent)
{
SSH_INFO("IN(E%02d|S%02d|D%02d)\n",pevent->event_id,pevent->src_id,pevent->dst_id);
switch(pevent->event_id)
{
...
case ICOS_BOOTINIT_DONE:
SSH_INFO("boot init done\n");
ssh_dump(DUMP_ALL);
dmn_ctrl->flag|=FLAG_DMN_RESTART;
break;
...
}
if(gSshCtrl.mod_init_done)
{
if(dmn_ctrl->flag)
{
...
if((FLAG_DMN_RESTART|FLAG_FW4_RESTART)&dmn_ctrl->flag)
{
...
}
if((FLAG_DMN_RESTART|FLAG_FW6_RESTART)&dmn_ctrl->flag)
{
...
}
if(FLAG_DMN_RESTART & dmn_ctrl->flag)
{
daemon_restart();
}
ssh_dump(DUMP_ALL);
dmn_ctrl->flag=0;
}
}
return ICOS_SUCCESS;
}
1625
再來都是沒去處裡的 broadcast message
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E50|S59|D00)
- event_id - 50 - ICOS_LAN_IP_UPDATE
- src_id - 59 - MODULE_LANST
- dst_id - 0 - broadcast
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E53|S50|D00)
- event_id - 53 - ICOS_LAN6_IP_UPDATE
- src_id - 50 - MODULE_IPV6LAN
- dst_id - 0 - broadcast
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E02|S56|D00)
- event_id - 02 - ICOS_CHG_CONN_TYPE
- src_id - 56 - MODULE_CONNMGR
- dst_id - 0 - broadcast
1487748854[20170222 7:34:14] [notify_ssh:795]IN(E01|S56|D00)
- event_id - 01 - ICOS_CHG_WPROTO
- src_id - 56 - MODULE_CONNMGR
- dst_id - 0 - broadcast
1487748855[20170222 7:34:15] [notify_ssh:795]IN(E43|S35|D00)
- event_id - 43 - ICOS_ETH_LINK_UP
- src_id - 35 - MODULE_SWITCH
- dst_id - 0 - broadcast