20170717_jeffrey - silenceuncrio/diary GitHub Wiki

0930

review

利用這禮拜周報的 UI Chart 先來盤一下待做事項

1030

RIP 可從 quagg 這個 YOCTO recipe 下手

先從我們自己的 proposal RIP 開始整理

1045

利用 git flow feature 建立一個 rip 的 feature branch

➜  M300 git:(develop) git flow feature start rip
Switched to a new branch 'feature/rip'

Summary of actions:
- A new branch 'feature/rip' was created, based on 'develop'
- You are now on branch 'feature/rip'

Now, start committing on your feature. When done, use:

     git flow feature finish rip

➜  M300 git:(feature/rip)

1150

prosrc recipe 的 RDEPENDS_${PN} 加上 quagga

已經 build 過了

firmware upgrade 也過了

1300

monkeyjj time

1420

目前 ripd 這個 routing daemon 已經有了

root@Mobile Router:~# ripd -h
Usage : ripd [OPTION...]
Daemon which manages RIP version 1 and 2.

-d, --daemon       Runs in daemon mode
-f, --config_file  Set configuration file name
-i, --pid_file     Set process identifier file name
-z, --socket       Set path of zebra socket
-A, --vty_addr     Set vty's bind address
-P, --vty_port     Set vty's port number
-C, --dryrun       Check configuration for validity and exit
-r, --retain       When program terminates, retain added route by ripd.
-u, --user         User to run as
-g, --group        Group to run as
-v, --version      Print program version
-h, --help         Display this help and exit

Report bugs to https://bugzilla.quagga.net

update 一下 RIP proposal

1525

來做一下 WEB UI - DNAT

先把今天對於 branch feature/rip 的工作告一段落

commit 4f020354bf0165668992689ff56e35652133ff0b
Refs: [feature/rip]
Author: jeffrey <[email protected]>
Date:   Mon Jul 17 15:28:02 2017 +0800

    Add 'quagga' recipe for implementing 'RIP I/II' feature

 meta-proscend/recipes-core/prosrc/prosrc_0.1.bb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

切到 branch feature/dnat6

➜  M300 git:(feature/rip) git checkout feature/dnat6
Branch feature/dnat6 set up to track remote branch feature/dnat6 from origin.
Switched to a new branch 'feature/dnat6'
➜  M300 git:(feature/dnat6) ✗
diff --git a/proscend/prosrc/webcgi/dnat.c b/proscend/prosrc/webcgi/dnat.c
index 126a17e..f8afee5 100644
--- a/proscend/prosrc/webcgi/dnat.c
+++ b/proscend/prosrc/webcgi/dnat.c
@@ -20,8 +20,6 @@ static void _apply() {
         jweb.out.json.fail("ICOS_GetSetting fail");
     }

-    char ipaddr[64];
-
     jweb.in.to_int("mode", &_config.mode);

     json_object *entry;
@@ -35,17 +33,23 @@ static void _apply() {
         jweb.j.to_int(e, "protocol", &_config.entry[i].protocol);
         jweb.j.to_int(e, "srcPortBen", &_config.entry[i].srcPortBen);
         jweb.j.to_int(e, "srcPortEnd", &_config.entry[i].srcPortEnd);
-
-        jweb.j.to_nstring(e, "dstIpAddr", &ipaddr, 64);
-        String2IPv4(ipaddr, &_config.entry[i].dstIpAddr);
-
+        jweb.j.to_nstring(e, "dstIpAddr", &_config.entry[i].dstIpAddr, IPV6ADDR_SIZE);^M
         jweb.j.to_int(e, "dstPort", &_config.entry[i].dstPort);
     }

     res = ICOS_Apply(MODULE_DNAT, 0, 0, &_config, sizeof(_config));
-    if (res != ICOS_SUCCESS) {
+    if (res != ICOS_SUCCESS)^M
+    {^M
         jweb.http.status(500);
-        jweb.out.json.fail("ICOS_Apply fail");
+        const char* err = get_dnat_error_msg();^M
+        if (err)^M
+        {^M
+            jweb.out.json.fail(err);^M
+        }^M
+        else^M
+        {^M
+            jweb.out.json.fail("ICOS_Apply fail");^M
+        }^M
     }

     jweb.out.json.ok();
@@ -54,7 +58,6 @@ static void _apply() {



 static json_object * _new_entry(sDNatConfig *_config) {
-    char ipaddr[64];
     json_object *entry = json_object_new_array();

     for (int i = 0; i < DNAT_ENTRY_NUM; i ++) {
@@ -64,8 +67,7 @@ static json_object * _new_entry(sDNatConfig *_config) {
         json_object_object_add(obj, "protocol", json_object_new_int(_config->entry[i].protocol));
         json_object_object_add(obj, "srcPortBen", json_object_new_int(_config->entry[i].srcPortBen));
         json_object_object_add(obj, "srcPortEnd", json_object_new_int(_config->entry[i].srcPortEnd));
-        IPv42String(&_config->entry[i].dstIpAddr, ipaddr);
-        json_object_object_add(obj, "dstIpAddr", json_object_new_string(ipaddr));
+        json_object_object_add(obj, "dstIpAddr", json_object_new_string(_config->entry[i].dstIpAddr));^M
         json_object_object_add(obj, "dstPort", json_object_new_int(_config->entry[i].dstPort));
         json_object_array_add(entry, obj);
     }

上 code

commit 52fc6b11673636de00332e61c20b08e99591bead
Refs: [feature/dnat6]
Author: jeffrey <[email protected]>
Date:   Mon Jul 17 15:43:57 2017 +0800

    In MODULE_DNAT CGI
    - Change the type of `ipDstAddr` from U32 to char[IPV6ADDR_SIZE]
    - while ICOS_Apply not success, get the error message form 'get_dnat_error_msg()'

 proscend/prosrc/webcgi/dnat.c | 267 ++++++++++++++++++++++--------------------
 1 file changed, 143 insertions(+), 124 deletions(-)

1555

切回 branch feature/rip

➜  M300 git:(feature/dnat6) ✗ git checkout feature/rip
Switched to branch 'feature/rip'
➜  M300 git:(feature/rip) ✗