20170707_jeffrey - silenceuncrio/diary GitHub Wiki

0845

今天來把剩下的 VRRP 做完

切到 branch develop... ok

compile... ok

firmware upgrade... ok

check web ui... vrrp web page get... ICOS_GetSetting fail

從 console 觀察開機流程發現 vrrp icos module 沒有 init

0910

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

0935

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

1015

M300 週會

  • aaron 會準備個 proposal
    • 說服老闆我們要自己來做 p2p 的 solution
  • TR069 真的很複雜
    • 還好 john 是專家

1305

切回 branch develop

1600

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:

1625

來寫一下 engineering notebook

⚠️ **GitHub.com Fallback** ⚠️