20170707_jeffrey - silenceuncrio/diary GitHub Wiki
今天來把剩下的 VRRP 做完
切到 branch develop
... ok
compile... ok
firmware upgrade... ok
check web ui... vrrp web page get... ICOS_GetSetting fail
從 console 觀察開機流程發現 vrrp
icos module 沒有 init
vrrp
icos module 沒有 init 應該是 PROSRC_VRRP
這個 compile flag 沒被 enable 所引起
可能是我從 branch release/v1.51
切到 develop
的關係
branch release/v1.51
並沒有 PROSRC_VRRP
這個 compile flag
在 proscend
目錄下做 make distclean
後再重新做一次 make menuconfig
重新 compile... ok
firmware upgrade... ok
確定 vrrp
icos module 有 init ... ok
john 發現 SWMP
WEB UI 上 某個 設定的 label 我用錯了
趕緊切回 branch release/v1.51
作如下修正
diff --git a/proscend/prosrc/www/app/feature/cwmp.html b/proscend/prosrc/www/app/feature/cwmp.html
index 4f75937..a8f62c0 100644
--- a/proscend/prosrc/www/app/feature/cwmp.html
+++ b/proscend/prosrc/www/app/feature/cwmp.html
@@ -63,7 +63,7 @@
</div>
<div class="form-group">
- <label class="col-sm-3 control-label">{{ 'PORT' | translate }}</label>
+ <label class="col-sm-3 control-label">{{ 'CWMP_PERIODIC_INFORM_INTERVAL' | translate }}</label>^M
<div class="col-sm-9">
<input type="number" class="form-control"
ng-model="vm.cwmp.periodInformInterval" min=0>
compile ... ok
firmware upgrade ... ok
check WEB UI label ... fixed
趕緊 commit 並 git push
commit 5bfea30f5c2d95e284ddb251d5abbf05b02f369a
Refs: [release/v1.51]
Author: jeffrey <[email protected]>
Date: Fri Jul 7 09:39:32 2017 +0800
'CWMP' ICOS Module UI
- in web page, fix the wrong label for field 'Periodic Inform Interval(Sec)'
proscend/prosrc/www/app/feature/cwmp.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
hold 一下... 先不切回 branch develop
M300 週會
- aaron 會準備個 proposal
- 說服老闆我們要自己來做 p2p 的 solution
- TR069 真的很複雜
- 還好 john 是專家
切回 branch develop
VRRP 可以說近乎完工了
就剩下 Coexisting of VRRP and DHCP Server Problem
下禮拜再做吧
先把目前的成果 commit
commit 95c2c7854558f7fbe2ad6394ff6c98225ba2f03b
Refs: [develop], {origin/develop}
Author: jeffrey <[email protected]>
Date: Fri Jul 7 15:53:37 2017 +0800
'VRRP' ICOS Module implementing
- implement PRO_EVENT 'ICOS_UCAST_MODULE_APPLY'
proscend/prosrc/icos/icoslib/vrrp/vrrp.c | 54 ++++++++++++++++++++++++++++++--
1 file changed, 51 insertions(+), 3 deletions(-)
修改的細節如下
commit 95c2c7854558f7fbe2ad6394ff6c98225ba2f03b
Author: jeffrey <[email protected]>
Date: Fri Jul 7 15:53:37 2017 +0800
'VRRP' ICOS Module implementing
- implement PRO_EVENT 'ICOS_UCAST_MODULE_APPLY'
diff --git a/proscend/prosrc/icos/icoslib/vrrp/vrrp.c b/proscend/prosrc/icos/icoslib/vrrp/vrrp.c
index 694b26f..5a2dd56 100644
--- a/proscend/prosrc/icos/icoslib/vrrp/vrrp.c
+++ b/proscend/prosrc/icos/icoslib/vrrp/vrrp.c
@@ -19,6 +19,24 @@
+#define VRRP_DAEMON_PATH "/usr/sbin/keepalived"
+#define VRRP_DAEMON "keepalived"
+#define VRRP_ARGV "-f %s -P"
+#define VRRP_CONF_FILE "/var/keepalived.conf"
+#define VRRP_CONF_FORMAT \
+ "vrrp_instance vrrp {\n" \
+ " state MASTER\n" \
+ " interface lan\n" \
+ " virtual_router_id %d\n" \
+ " priority %d\n" \
+ " advert_int 1\n" \
+ " virtual_ipaddress {\n" \
+ " %s\n" \
+ " }\n" \
+ "}\n"
+
+
+
sAttTypeTable vrrpAttTypeTable[] =
{
{ VRRP_ATTID_MODE, ATTYPE_STRING_SETS },
@@ -40,6 +58,30 @@ static sAttNameTable vrrpCfgAttNameTable[] =
+static int prepare_vrrp_config(sVrrpConfig *config)
+{
+ CPRT("prepare_vrrp_config\n");
+
+ FILE *fp = fopen(VRRP_CONF_FILE, "w");
+ if (fp == 0)
+ {
+ CPRT("Failed to open file: '%s'\n", VRRP_CONF_FILE);
+ return ICOS_FAILURE;
+ }
+
+ char ipaddr[64];
+ IPv42String(&config->virtual_ip, ipaddr);
+
+ fprintf(fp, VRRP_CONF_FORMAT,
+ config->group_id,
+ config->priority,
+ ipaddr
+ );
+
+ fclose(fp);
+
+ return ICOS_SUCCESS;
+}
@@ -237,6 +279,9 @@ static int _notify(PRO_EVENT *pevent)
{
_dump_setting(&setting);
}
+
+ _apply(0, 0, &setting, sizeof(setting));
+
}
break;
case ICOS_UCAST_MODULE_APPLY:
@@ -249,15 +294,18 @@ static int _notify(PRO_EVENT *pevent)
if (ATTVAL_MODE_ON == pconfig->mode)
{
CPRT("ATTVAL_MODE_ON\n");
- // ?????????????????????
+ ICOS_process_killall(VRRP_DAEMON, 10);
+ char vrrp_argv[256];
+ prepare_vrrp_config(pconfig);
+ sprintf(vrrp_argv, VRRP_ARGV, VRRP_CONF_FILE);
+ ICOS_ProcLaunch(MODULE_VRRP, VRRP_DAEMON_PATH, vrrp_argv, NULL);
}
else
{
CPRT("ATTVAL_MODE_OFF\n");
- // ?????????????????????
+ ICOS_process_killall(VRRP_DAEMON, 10);
}
-
}
break;
case ICOS_UCAST_MODULE_EXIT:
來寫一下 engineering notebook