Skip to content

zebra: kernel level graceful restart functionality. #4197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed

Conversation

praveen-li
Copy link

@praveen-li praveen-li commented Apr 24, 2019

zebra: kernel level graceful restart functionality.
lib: zebra kernel stale route flag.

Signed-off-by: Praveen Chaudhary [email protected]

Problem Statement:
On some systems FRR runs inside a docker with other process with it, mainly FPM Related. While s/w upgrade to FRR docker, minimum disturbance to Control Plane Route (i.e Kernel Route) should happen. Today with -r flag or kill -9, Zebra Route are retained in kernel. But during startup Zebra
i.) Without -k flag: Cleans all kernel routes and insert them back if learned via BGPD/OSPF etc again. This may take 10-15 secs.
ii.) With -k flags: Zebra rib contains stale routes, which will not be deleted ever.

Solution Proposed:
Perform Kernel level graceful restart with routes learned from kernel during start up.

Steps:
Perform below if Zebra runs with -K flag .(capital K)
1.) Add a special flag to all routes learned from kernel during start up.
2.) Start a timer of 60 (Configurable) secs to clean stale kernel routes.
3.) If within 60 secs, a route is learned for same prefix (from same or different protocol), then call rib_delnode() on old kernel route. This way rib_process() will always choose new route.
4.) After 60 secs, sweep tables and delete remaining old kernel routes until all stale kernel routes are marked for deletion.

Note:
. -K is chosen to keep it similar to -k. Both deals with old kernel routes.
. Since FRR may run different protocol after startup, so a timer period should be chosen without keeping any particular protocol in mind. I chose 60 secs as per Russ White`s advice. Any reasonable value is good. Also, It is configurable now.

Thanks a lot. Kindly Review:

Test Results: (I have not pasted scaled test result, not to make description so lengthy). [Test results with 900K routes are copied in one of the comment below after latest commit.]
———————————————————————————————————————
Testing for FRR Master:
--Setup includes--
2 Arista BGP Peer.
DUT (Debian Kernel)

———————————————————————————————————————
Routes are published to DUT from 2 BGP peers: (Track 192.168.0.* routes)

Peer1:

ARISTA01T2(config)#show ip route

VRF name: default
Codes: C - connected, S - static, K - kernel,
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B I - iBGP, B E - eBGP,
       R - RIP, I L1 - ISIS level 1, I L2 - ISIS level 2,
       A B - BGP Aggregate, A O - OSPF Summary,
       NG - Nexthop Group Static Route, V - VXLAN Control Service

Gateway of last resort is not set

 C      10.0.0.0/31 is directly connected, Ethernet1
 B E    10.1.0.32/32 [200/0] via 10.0.0.0, Ethernet1
 C      10.10.246.0/24 is directly connected, Ethernet9
 C      100.1.0.1/32 is directly connected, Loopback0
 S      192.168.0.1/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.2/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.3/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.4/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.5/32 [1/0] via 10.10.246.100, Ethernet9

Peer2:

ARISTA02T2(config)#show ip route

VRF name: default
Codes: C - connected, S - static, K - kernel,
       O - OSPF, IA - OSPF inter area, E1 - OSPF external type 1,
       E2 - OSPF external type 2, N1 - OSPF NSSA external type 1,
       N2 - OSPF NSSA external type2, B I - iBGP, B E - eBGP,
       R - RIP, I L1 - ISIS level 1, I L2 - ISIS level 2,
       A B - BGP Aggregate, A O - OSPF Summary,
       NG - Nexthop Group Static Route, V - VXLAN Control Service

Gateway of last resort is not set

 C      10.0.0.2/31 is directly connected, Ethernet1
 B E    10.1.0.32/32 [200/0] via 10.0.0.2, Ethernet1
 C      10.10.246.0/24 is directly connected, Ethernet9
 C      100.1.0.2/32 is directly connected, Loopback0
 S      192.168.0.4/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.5/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.6/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.7/32 [1/0] via 10.10.246.100, Ethernet9
 S      192.168.0.8/32 [1/0] via 10.10.246.100, Ethernet9

Zebra DUT:

dut01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR,
       > - selected route, * - FIB route

B>* 0.0.0.0/0 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
  *                  via 10.0.0.3, Ethernet4, 00:04:30
C>* 10.0.0.0/31 is directly connected, Ethernet0, 00:04:32
C>* 10.0.0.2/31 is directly connected, Ethernet4, 00:04:32
C>* 10.1.0.32/32 is directly connected, lo, 00:04:32
B>* 100.1.0.1/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
B>* 100.1.0.2/32 [20/0] via 10.0.0.3, Ethernet4, 00:04:30
C>* 172.25.11.0/24 is directly connected, eth0, 00:04:32
B>* 192.168.0.1/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
B>* 192.168.0.2/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
B>* 192.168.0.3/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
B>* 192.168.0.4/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
  *                       via 10.0.0.3, Ethernet4, 00:04:30
B>* 192.168.0.5/32 [20/0] via 10.0.0.1, Ethernet0, 00:04:30
  *                       via 10.0.0.3, Ethernet4, 00:04:30
B>* 192.168.0.6/32 [20/0] via 10.0.0.3, Ethernet4, 00:04:30
B>* 192.168.0.7/32 [20/0] via 10.0.0.3, Ethernet4, 00:04:30
B>* 192.168.0.8/32 [20/0] via 10.0.0.3, Ethernet4, 00:04:30

Kernel Route: route -n

admin@dut01:~$ sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    20     0        0 Ethernet0
10.0.0.0        0.0.0.0         255.255.255.254 U     0      0        0 Ethernet0
10.0.0.2        0.0.0.0         255.255.255.254 U     0      0        0 Ethernet4
100.1.0.1       10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
100.1.0.2       10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
172.25.11.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.1     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.2     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.3     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.4     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.5     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.6     10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
192.168.0.7     10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
192.168.0.8     10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
240.127.1.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0

Stop FRR

admin@dut01:~$ date
Tue Apr 23 22:05:02 UTC 2019
admin@dut01:~$ sudo service bgp stop

Changes in Published route

Peer1:
ip route 192.168.0.8/32 10.10.246.100  (Change case: NH move from Peer 2 to Peer 1)
ip route 192.168.0.9/32 10.10.246.100  (Absolute add case: New Route)

Peer2: 
no ip route 192.168.0.4/32 10.10.246.100  (Change case: from ECMP to non_ecmp)
no ip route 192.168.0.7/32 10.10.246.100  (Delete Case) (Should be deleted after time out)
no ip route 192.168.0.8/32 10.10.246.100  (Change case: )

Start FRR

admin@dut01:~$ date
Tue Apr 23 22:05:48 UTC 2019
admin@dut01:~$ sudo service bgp start

Zebra logs:
Note: All logs may not be part of final diff

Apr 23 22:05:59.589030 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 1 P 0.0.0.0/0 rn 0x556d54234ca0
Apr 23 22:05:59.589301 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 2 P 192.168.0.1/32 rn 0x556d5423d780
Apr 23 22:05:59.589378 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 3 P 192.168.0.2/32 rn 0x556d5423da00
Apr 23 22:05:59.589691 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 4 P 192.168.0.3/32 rn 0x556d5423dc80
Apr 23 22:05:59.589788 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 5 P 192.168.0.4/32 rn 0x556d5423df80
Apr 23 22:05:59.589859 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 6 P 192.168.0.5/32 rn 0x556d5423e280
Apr 23 22:05:59.589931 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 7 P 192.168.0.8/32 rn 0x556d5423ea00
Apr 23 22:05:59.590001 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 8 P 100.1.0.1/32 rn 0x556d5423d280
Apr 23 22:05:59.590072 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 9 P 192.168.0.6/32 rn 0x556d5423e500
Apr 23 22:05:59.590142 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: match, A 11 D 10 P 100.1.0.2/32 rn 0x556d5423d500
Apr 23 22:05:59.599051 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d54234ca0
Apr 23 22:05:59.599334 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423d780
Apr 23 22:05:59.599462 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423da00
Apr 23 22:05:59.599533 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423dc80
Apr 23 22:05:59.599665 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423df80
Apr 23 22:05:59.600987 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423e280
Apr 23 22:05:59.600987 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423ea00
Apr 23 22:05:59.600987 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d54334390
Apr 23 22:05:59.600987 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423d280
Apr 23 22:05:59.601044 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423e500
Apr 23 22:05:59.601044 dut01 NOTICE bgp#zebra[85]: Send Update to kernel rn 0x556d5423d500

Apr 23 22:06:12.615442 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: timer_expire stats before flush: add 11, del 10
Apr 23 22:06:12.615442 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: sweep, A 11 D 11 P 192.168.0.7/32 rn 0x556d5423e780
Apr 23 22:06:12.615741 dut01 NOTICE bgp#zebra[85]: Send Delete to kernel rn 0x556d5423e780
Apr 23 22:06:12.615824 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: timer_expire stats after flush: add 11, del 11
Apr 23 22:06:12.615896 dut01 NOTICE bgp#zebra[85]: kernel_reconcile: Reset kernel_reconcile = 0

Ip monitor:

admin@dut01:~$ ip monitor
192.168.0.4 via 10.0.0.1 dev Ethernet0 proto 186 src 10.1.0.32 metric 20
192.168.0.8 via 10.0.0.1 dev Ethernet0 proto 186 src 10.1.0.32 metric 20
192.168.0.9 via 10.0.0.1 dev Ethernet0 proto 186 src 10.1.0.32 metric 20
Deleted 192.168.0.7 via 10.0.0.3 dev Ethernet4 proto 186 src 10.1.0.32 metric 20

Zebra DUT:

dut01# show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR,
       > - selected route, * - FIB route

B>* 0.0.0.0/0 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
  *                  via 10.0.0.3, Ethernet4, 00:00:29
C>* 10.0.0.0/31 is directly connected, Ethernet0, 00:00:31
C>* 10.0.0.2/31 is directly connected, Ethernet4, 00:00:31
C>* 10.1.0.32/32 is directly connected, lo, 00:00:31
B>* 100.1.0.1/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 100.1.0.2/32 [20/0] via 10.0.0.3, Ethernet4, 00:00:29
C>* 172.25.11.0/24 is directly connected, eth0, 00:00:31
B>* 192.168.0.1/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 192.168.0.2/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 192.168.0.3/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 192.168.0.4/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 192.168.0.5/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
  *                       via 10.0.0.3, Ethernet4, 00:00:29
B>* 192.168.0.6/32 [20/0] via 10.0.0.3, Ethernet4, 00:00:29
B>* 192.168.0.8/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29
B>* 192.168.0.9/32 [20/0] via 10.0.0.1, Ethernet0, 00:00:29

Kernel:

admin@dut01:~$ sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    20     0        0 Ethernet0
10.0.0.0        0.0.0.0         255.255.255.254 U     0      0        0 Ethernet0
10.0.0.2        0.0.0.0         255.255.255.254 U     0      0        0 Ethernet4
100.1.0.1       10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
100.1.0.2       10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
172.25.11.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.0.1     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.2     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.3     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.4     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.5     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.6     10.0.0.3        255.255.255.255 UGH   20     0        0 Ethernet4
192.168.0.8     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
192.168.0.9     10.0.0.1        255.255.255.255 UGH   20     0        0 Ethernet0
240.127.1.0     0.0.0.0         255.255.255.0   U     0      0        0 docker0

@LabN-CI
Copy link
Collaborator

LabN-CI commented Apr 24, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 aa7085e
Date 04/24/2019
Start 16:40:29
Finish 17:04:18
Run-Time 23:49
Total 1816
Pass 1816
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-04-24-16:40:29.txt
Log autoscript-2019-04-24-16:41:12.log.bz2
Memory 448 443 374

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7356/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for main.c | 2 issues
===============================================
< ERROR: do not initialise globals to 0
< #81: FILE: /tmp/f1-25340/main.c:81:
Report for rt_netlink.c | 4 issues
===============================================
< WARNING: externs should be avoided in .c files
< #84: FILE: /tmp/f1-25340/rt_netlink.c:84:
< WARNING: line over 80 characters
< #939: FILE: /tmp/f1-25340/rt_netlink.c:939:
Report for zebra_rib.c | 14 issues
===============================================
< WARNING: externs should be avoided in .c files
< #71: FILE: /tmp/f1-25340/zebra_rib.c:71:
< WARNING: line over 80 characters
< #2753: FILE: /tmp/f1-25340/zebra_rib.c:2753:
< WARNING: line over 80 characters
< #2759: FILE: /tmp/f1-25340/zebra_rib.c:2759:
< WARNING: line over 80 characters
< #2765: FILE: /tmp/f1-25340/zebra_rib.c:2765:
< WARNING: line over 80 characters
< #3295: FILE: /tmp/f1-25340/zebra_rib.c:3295:
< WARNING: line over 80 characters
< #3296: FILE: /tmp/f1-25340/zebra_rib.c:3296:
< ERROR: do not use assignment in if condition
< #3315: FILE: /tmp/f1-25340/zebra_rib.c:3315:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA bbd8da7
  • Base image data for Git bbd8da7 does not exist - compare skipped

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7356/artifact/shared/static_analysis/index.html

@sworleys
Copy link
Member

Thanks for your contribution!

Could you break this up into a few logically separate commits?

I'd put the lib and debug changes into separate commits. And then maybe the startup options.

@donaldsharp
Copy link
Member

so this looks like a basic form of graceful restart that we know other people are working on. Let me see if I can get them over here and looking at what you have done.

@praveen-li
Copy link
Author

so this looks like a basic form of graceful restart that we know other people are working on. Let me see if I can get them over here and looking at what you have done.

@donaldsharp: Sure Donald, Thanks.

@srimohans srimohans self-requested a review April 25, 2019 16:38
@praveen-li
Copy link
Author

Thanks for your contribution!

Could you break this up into a few logically separate commits?

I'd put the lib and debug changes into separate commits. And then maybe the startup options.

Hi Stephen

After getting some reviews on startup part, I will break it into multiple commits if needed. It is not a big diff I feel, so it should be easy to through in single shot.
But if FRR follows that pattern I will break into multiple commits. Thanks a lot.

@praveen-li
Copy link
Author

@donaldsharp @srimohans @qlyoung

Hi Folks, I request you to review this PR or get attention of right person.

We use FRR on SONIC (https://azure.github.io/SONiC/), and it is critical to us that when we perform s/w upgrade to FRR, there is no down time. If we can add this PR as part of main FRR repo then we can continue use FRR without any additional maintenance work.

We do not want to keep this fix as extra patch, which we need to apply for each FRR version while deploying, that would be cumbersome. Kindly review and let me know if any thing can be improved in diff, Thanks a lot.

@donaldsharp
Copy link
Member

I'm not a big fan of calling this kernel-reconciliation . Can we come up with a better name? I personally tend to think of this as being graceful-restart but also realize that might not be a great name for it either. Personally I was just going to call the routes as ROUTE_ENTRY_STALE

Additionally I would like to see some thought from @riw777 about what a good length of time should be for holding the stale routes

@praveen-li
Copy link
Author

I'm not a big fan of calling this kernel-reconciliation . Can we come up with a better name? I personally tend to think of this as being graceful-restart but also realize that might not be a great name for it either. Personally I was just going to call the routes as ROUTE_ENTRY_STALE

Additionally I would like to see some thought from @riw777 about what a good length of time should be for holding the stale routes

@donaldsharp : I decided to start with kernel_reconcile, because we do not throw old kernel routes till timer_expire. We try to reconcile first with latest update from protocols.

I am happy to choose any good name. We have to choose name for 2 main things:
1.) Zebra FLAG, I can call it ZEBRA_FLAG_KERNEL_STALE_ROUTE instead of ZEBRA_FLAG_KERNEL_RECONCILE.
2.) The option i.e -K which maps to kernel_reconcile in my fix. I want to choose -K because it is similar to -k (small k) and both deals with stale kernel routes. For option name, kernel_reconcile sounds good to me. Let me know if any better name for option. Also after Russ White`s suggestion, I can add timer as an argument for -K.

It may be that, this fix can be changed, as you mentioned there are folks working on similar solution. But till then, this fix is critical to us as part of FRR, which we deploy over SONiC. Thanks for looking into it.

@riw777
Copy link
Member

riw777 commented Apr 30, 2019

I think this might be easier to find in the future if it were renamed to something like "kernel level graceful restart support" or something... the current name is going to make it hard to figure out this is related to the protocol level graceful restart capabilities.

@praveen-li
Copy link
Author

I think this might be easier to find in the future if it were renamed to something like "kernel level graceful restart support" or something... the current name is going to make it hard to figure out this is related to the protocol level graceful restart capabilities.

Thanks Russ,
@riw777 , Yeah I agree, it is good to include kernel in any name we choose. I think kernel_graceful_restart or kernel_grestart looks good to me.

@praveen-li
Copy link
Author

I am planning to go for following logical commits to address review comments:

1.) Move statistic variable in zebra_router.h and may change name for these variables.
2.) Merge rib_sweep_table() and rib_sweep_kernel_reconcile_table().
3.) Change name of option & zebra flag and make timer configurable.
Thanks.

@LabN-CI
Copy link
Collaborator

LabN-CI commented Apr 30, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 3e214f7
Date 04/30/2019
Start 14:30:29
Finish 14:54:51
Run-Time 24:22
Total 1816
Pass 1816
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-04-30-14:30:29.txt
Log autoscript-2019-04-30-14:31:20.log.bz2
Memory 441 439 375

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7416/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for main.c | 2 issues
===============================================
< ERROR: do not initialise globals to 0
< #81: FILE: /tmp/f1-5178/main.c:81:
Report for rt_netlink.c | 4 issues
===============================================
< WARNING: externs should be avoided in .c files
< #84: FILE: /tmp/f1-5178/rt_netlink.c:84:
< WARNING: line over 80 characters
< #939: FILE: /tmp/f1-5178/rt_netlink.c:939:
Report for zebra_rib.c | 12 issues
===============================================
< WARNING: externs should be avoided in .c files
< #71: FILE: /tmp/f1-5178/zebra_rib.c:71:
< WARNING: line over 80 characters
< #2753: FILE: /tmp/f1-5178/zebra_rib.c:2753:
< WARNING: line over 80 characters
< #2759: FILE: /tmp/f1-5178/zebra_rib.c:2759:
< WARNING: line over 80 characters
< #3294: FILE: /tmp/f1-5178/zebra_rib.c:3294:
< WARNING: line over 80 characters
< #3295: FILE: /tmp/f1-5178/zebra_rib.c:3295:
< ERROR: do not use assignment in if condition
< #3313: FILE: /tmp/f1-5178/zebra_rib.c:3313:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA bbd8da7

No Changes in Static Analysis warnings compared to base

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7416/artifact/shared/static_analysis/index.html

@LabN-CI
Copy link
Collaborator

LabN-CI commented Apr 30, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 14f71d2
Date 04/30/2019
Start 15:25:29
Finish 15:49:55
Run-Time 24:26
Total 1816
Pass 1816
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-04-30-15:25:29.txt
Log autoscript-2019-04-30-15:26:15.log.bz2
Memory 444 443 374

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7419/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for main.c | 2 issues
===============================================
< ERROR: do not initialise globals to 0
< #81: FILE: /tmp/f1-5745/main.c:81:
Report for rt_netlink.c | 4 issues
===============================================
< WARNING: externs should be avoided in .c files
< #84: FILE: /tmp/f1-5745/rt_netlink.c:84:
< WARNING: line over 80 characters
< #939: FILE: /tmp/f1-5745/rt_netlink.c:939:
Report for zebra_rib.c | 8 issues
===============================================
< WARNING: externs should be avoided in .c files
< #71: FILE: /tmp/f1-5745/zebra_rib.c:71:
< WARNING: line over 80 characters
< #2753: FILE: /tmp/f1-5745/zebra_rib.c:2753:
< WARNING: line over 80 characters
< #2759: FILE: /tmp/f1-5745/zebra_rib.c:2759:
< ERROR: do not use assignment in if condition
< #3262: FILE: /tmp/f1-5745/zebra_rib.c:3262:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA bbd8da7

No Changes in Static Analysis warnings compared to base

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7419/artifact/shared/static_analysis/index.html

@praveen-li
Copy link
Author

Pending Tasks:
-- Add support for multicast.
-- Run full scale testing again once all suggestions to improvement are addressed.
-- Update results and ask for final approval.

@LabN-CI
Copy link
Collaborator

LabN-CI commented May 1, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 1da299f
Date 04/30/2019
Start 22:35:27
Finish 22:59:45
Run-Time 24:18
Total 1813
Pass 1813
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-04-30-22:35:27.txt
Log autoscript-2019-04-30-22:36:20.log.bz2
Memory 440 447 375

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7422/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for main.c | 2 issues
===============================================
< WARNING: line over 80 characters
< #358: FILE: /tmp/f1-30665/main.c:358:
Report for zebra_rib.c | 6 issues
===============================================
< WARNING: line over 80 characters
< #2751: FILE: /tmp/f1-30665/zebra_rib.c:2751:
< WARNING: line over 80 characters
< #2757: FILE: /tmp/f1-30665/zebra_rib.c:2757:
< ERROR: do not use assignment in if condition
< #3260: FILE: /tmp/f1-30665/zebra_rib.c:3260:
Report for zebra_router.c | 2 issues
===============================================
< ERROR: do not initialise globals to 0
< #34: FILE: /tmp/f1-30665/zebra_router.c:34:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA bbd8da7

No Changes in Static Analysis warnings compared to base

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7422/artifact/shared/static_analysis/index.html

@srimohans
Copy link
Contributor

@praveen-li once you are done with pending tasks let me know. I will check, go ahead and approve.

@praveen-li
Copy link
Author

@praveen-li once you are done with pending tasks let me know. I will check, go ahead and approve.

@srimohans Sure, I will add support for multicast and will run my tests ( which are only for unicast as of now), and then I will approach you for approval. Thanks for actively looking into it. I appreciate it.

  • @donaldsharp
    Also, how can I contribute my tests to FRR community. Because today, without -K option new code is not getting any hits. I am not sure how easy is to plug my tests with FRR regressions.

@riw777
Copy link
Member

riw777 commented May 1, 2019

@praveen-li once you are done with pending tasks let me know. I will check, go ahead and approve.

@praveen-li me, as well...

Praveen Chaudhary added 4 commits May 3, 2019 22:44
lib: zebra kernel stale route flag.

Signed-off-by: Praveen Chaudhary <[email protected]>
and add kernel_reconcile_rt in if condition.

Signed-off-by: Praveen Chaudhary <[email protected]>
Make kernel_gr_timer configurable.

lib: Change the name for zebra flag.
@praveen-li praveen-li force-pushed the zebra_kernel_reconcile branch from 1da299f to 92fdecd Compare May 4, 2019 05:47
@praveen-li praveen-li changed the title zebra: Kernel reconciliation functionality. zebra: kernel level graceful restart functionality. May 4, 2019
@praveen-li
Copy link
Author

praveen-li commented May 4, 2019

@riw777 @srimohans @donaldsharp

Hi Reviewers,

I have done with all the changes. Kindly note: for multicast, there is no work needed, since we do not push those routes to Kernel. I confirmed the same with Donald.

Earlier I was trying to create actual topology to learn routes from peers, but I found in this case, sharpd is best way to test quickly.

Copied below a summary for few tests. Kindly review. Thanks a lot for help.

Note: I tested with 900K max routes.

Test case 1.) Add 12 k routes from sharpd and then restart zebra with -K 35 option. After restart, enter new routes as shown below.

Routes before restart:
——————
sharp install route 10.0.0.0 nexthop 172.25.11.53 6000
sharp install route 20.0.0.0 nexthop 172.25.11.53 6000

Routes after restart:
——————
sharp install route 10.0.0.0 nexthop 172.25.11.43 6000
sharp install route 20.0.0.0 nexthop 172.25.11.53 5000
sharp install route 30.0.0.0 nexthop 172.25.11.53 3000

Expectation:
——————
Prefix 10.0.0.0: should be update to kernel immediately with new next-hop.
Prefix 20.0..0.0: 5k routes should be updated to kernel with same NH. Extra 1 k routes must be deleted later after around 35 secs.
Prefix 30.0.0.0: routes must be update to kernel immediately.
Zebra log must show that 12k routes were added with Stale flag and 1k were swept after timer expire.

Restart options:
——————
zebra_options=" -r -A 127.0.0.1 -K 35 -s 90000000"

Kernel routes before restart:
——————
Every 5.0s: ./route.sh                                                                                  Fri May  3 22:01:29 2019

Fri May  3 22:01:29 PDT 2019
sudo route -n | grep 10.0 | wc -l
6002
sudo route -n | grep 20.0 | wc -l
6001
sudo route -n | grep 30.0 | wc -l
0

pchaudha@server05:/home/pchaudha/srcCode/pc_frr$ systemctl restart frr 
——————

Zebra Logs  and Kernel Routes with timestamp:
——————
May  3 22:01:55 server05 watchfrr[13520]: all daemons up, doing startup-complete notify
May  3 22:01:55 server05 frrinit.sh[13508]:  * Started watchfrr
May  3 22:01:55 server05 systemd[1]: Started FRRouting.…

.,..

Every 5.0s: ./route.sh                                                                                  Fri May  3 22:02:27 2019

Fri May  3 22:02:11 PDT 2019
sudo route -n | grep 10.0 | wc -l
6003
sudo route -n | grep 20.0 | wc -l
6001
sudo route -n | grep 30.0 | wc -l
3000

…..

Every 5.0s: ./route.sh                                                                                  Fri May  3 22:02:27 2019

Fri May  3 22:02:27 PDT 2019
sudo route -n | grep 10.0 | wc -l
6003
sudo route -n | grep 20.0 | wc -l
6001
sudo route -n | grep 30.0 | wc -l
3000

…..

May  3 22:02:29 server05 zebra[13541]: kernel_gr: timer_expire before sweep: add 12000, del 11000 
May  3 22:02:29 server05 zebra[13541]: kernel_gr: timer_expire after sweep: add 12000, del 12000
May  3 22:02:29 server05 zebra[13541]: kernel_gr: Reset kernel_gr = 0
….
[** Stale Flag was added to 12K routes, 11K were learned before timer expires.]
….

Every 5.0s: ./route.sh                                                                                  Fri May  3 22:02:43 2019

Fri May  3 22:02:32 PDT 2019
sudo route -n | grep 10.0 | wc -l
6003
sudo route -n | grep 20.0 | wc -l
5001
sudo route -n | grep 30.0 | wc -l
3000

——————

Test case 2.) Add 14 k routes from sharpd and then restart zebra with -K 55 option secs. After restart add no routes.

Expectation:
——————
Should delete all routes from kernel after kernel_gr time expire. Zebra notice level logs must show time and count for routes.
Zebra log must show that 14k routes were added with Stale flag and all 14k were swept after timer expire.

Routes before restart
——————
sharp install route 10.0.0.0 nexthop 172.25.11.43 6000
sharp install route 20.0.0.0 nexthop 172.25.11.53 5000
sharp install route 30.0.0.0 nexthop 172.25.11.53 3000

Restart options:
——————
40 zebra_options=" -r -A 127.0.0.1 -K 55 -s 90000000"

pchaudha@server05:/home/pchaudha/srcCode/pc_frr$ systemctl restart frr 

——————
Zebra Logs and kernel routes with timestamp:
—————

Fri May  3 22:09:03 PDT 2019
sudo route -n | grep 10.0 | wc -l
6003
sudo route -n | grep 20.0 | wc -l
5001
sudo route -n | grep 30.0 | wc -l
3000

………..

May  3 22:09:04 server05 watchfrr[14963]: all daemons up, doing startup-complete notify
May  3 22:09:04 server05 frrinit.sh[14948]:  * Started watchfrr
May  3 22:09:04 server05 systemd[1]: Started FRRouting.
.....….

Fri May  3 22:09:19 PDT 2019
sudo route -n | grep 10.0 | wc -l
6003
sudo route -n | grep 20.0 | wc -l
5001
sudo route -n | grep 30.0 | wc -l
3000

…………….
May  3 22:09:59 server05 zebra[14985]: kernel_gr: timer_expire before sweep: add 14000, del 0
May  3 22:09:59 server05 NetworkManager[1141]: <info>  [1556946599.5236] platform-linux: netlink: read: too many netlink events. Need to resynchronize platform cache
May  3 22:09:59 server05 NetworkManager[1141]: <info>  [1556946599.5308] platform-linux: netlink: read: too many netlink events. Need to resynchronize platform cache
May  3 22:09:59 server05 NetworkManager[1141]: <info>  [1556946599.5371] platform-linux: netlink: read: too many netlink events. Need to resynchronize platform cache
May  3 22:09:59 server05 NetworkManager[1141]: <info>  [1556946599.5436] platform-linux: netlink: read: too many netlink events. Need to resynchronize platform cache
May  3 22:09:59 server05 zebra[14985]: kernel_gr: timer_expire after sweep: add 14000, del 14000
May  3 22:09:59 server05 zebra[14985]: kernel_gr: Reset kernel_gr = 0
………………

Fri May  3 22:10:02 PDT 2019
sudo route -n | grep 10.0 | wc -l
1
sudo route -n | grep 20.0 | wc -l
0
sudo route -n | grep 30.0 | wc -l
0

Test 3: Test with 900 K routes, with -K 25. Install same 900K routes after restart.

Routes before and after restart:
——————
sharp install route 10.0.0.0 nexthop 172.25.11.43 100000
sharp install route 20.0.0.0 nexthop 172.25.11.43 100000
sharp install route 30.0.0.0 nexthop 172.25.11.43 100000
sharp install route 40.0.0.0 nexthop 172.25.11.43 100000
sharp install route 50.0.0.0 nexthop 172.25.11.43 100000
sharp install route 60.0.0.0 nexthop 172.25.11.43 100000
sharp install route 70.0.0.0 nexthop 172.25.11.43 100000
sharp install route 80.0.0.0 nexthop 172.25.11.43 100000
sharp install route 90.0.0.0 nexthop 172.25.11.43 100000

Expectation:
——————
Zebra log must show that 900k routes were added with Stale flag and 0 were swept after timer expire, I.e. all 900K were learned back before timer expire.

ZEbra logs and kernel Routes:
——————

Every 3.0s: route -n | wc -l                                                                            

Fri May  3 22:25:01 2019

900007

…………
May  3 22:25:11 server05 systemd[1]: Started FRRouting.
May  3 22:25:13 server05 systemd[1]: Started CUPS Scheduler.
May  3 22:25:36 server05 zebra[17253]: kernel_gr: timer_expire before sweep: add 900000, del 900000
May  3 22:25:36 server05 zebra[17253]: kernel_gr: timer_expire after sweep: add 900000, del 900000
May  3 22:25:36 server05 zebra[17253]: kernel_gr: Reset kernel_gr = 0
………….

Every 3.0s: route -n | wc -l                                                                            

Fri May  3 22:25:40 2019

900007

Test 4: Test with 900 K routes, with -K 20. Do not install any routes after restart.

Routes before restart:
——————
sharp install route 10.0.0.0 nexthop 172.25.11.43 100000
sharp install route 20.0.0.0 nexthop 172.25.11.43 100000
sharp install route 30.0.0.0 nexthop 172.25.11.43 100000
sharp install route 40.0.0.0 nexthop 172.25.11.43 100000
sharp install route 50.0.0.0 nexthop 172.25.11.43 100000
sharp install route 60.0.0.0 nexthop 172.25.11.43 100000
sharp install route 70.0.0.0 nexthop 172.25.11.43 100000
sharp install route 80.0.0.0 nexthop 172.25.11.43 100000
sharp install route 90.0.0.0 nexthop 172.25.11.43 100000

Expectation:
——————
Zebra log must show that 900k routes were added with Stale flag and all 900k were swept after timer expire, I.e. all 0 were learned back before timer expire.

ZEbra logs and kernel Routes:
——————

Fri May  3 22:27:07 2019

900007
………
May  3 22:27:10 server05 systemd[1]: Started FRRouting.
May  3 22:27:30 server05 zebra[17459]: kernel_gr: timer_expire before sweep: add 900000, del 0
May  3 22:27:31 server05 zebra[17459]: kernel_gr: timer_expire after sweep: add 900000, del 900000
May  3 22:27:31 server05 zebra[17459]: kernel_gr: Reset kernel_gr = 0
………….
Every 3.0s: route -n | wc -l                                                                            
Fri May  3 22:27:34 2019

7
—————

@LabN-CI
Copy link
Collaborator

LabN-CI commented May 4, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 92fdecd
Date 05/04/2019
Start 02:10:30
Finish 02:34:43
Run-Time 24:13
Total 1813
Pass 1813
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-05-04-02:10:30.txt
Log autoscript-2019-05-04-02:11:23.log.bz2
Memory 447 441 374

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7491/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for zebra_rib.c | 6 issues
===============================================
< WARNING: line over 80 characters
< #2752: FILE: /tmp/f1-29356/zebra_rib.c:2752:
< WARNING: line over 80 characters
< #2758: FILE: /tmp/f1-29356/zebra_rib.c:2758:
< ERROR: do not use assignment in if condition
< #3270: FILE: /tmp/f1-29356/zebra_rib.c:3270:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA b1ad735

No Changes in Static Analysis warnings compared to base

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7491/artifact/shared/static_analysis/index.html

@pguibert6WIND
Copy link
Member

nice feature.
about the 15 second timer, I think retrieveing a full routes may be not enough to fully acquire all.
I think having this timer configurable would be nice.

@praveen-li
Copy link
Author

nice feature.
about the 15 second timer, I think retrieveing a full routes may be not enough to fully acquire all.
I think having this timer configurable would be nice.

Thanks Philippe, Yes after my last commit, I made it configurable with all positive values allowed. Also I updated test results in my last comment with different # of routes and with different timer values. Cheers.

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: SUCCESSFUL

Congratulations, this patch passed basic tests

Tested-by: NetDEF / OpenSourceRouting.org CI System

CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7560/

This is a comment from an automated CI system.
For questions and feedback in regards to this CI system, please feel free to email
Martin Winter - mwinter (at) opensourcerouting.org.

Warnings Generated during build:

Checkout code: Successful with additional warnings
Report for zebra_rib.c | 22 issues
===============================================
< ERROR: Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
< #146: FILE: /tmp/f1-22848/zebra_rib.c:146:
< WARNING: macros should not use a trailing semicolon
< #146: FILE: /tmp/f1-22848/zebra_rib.c:146:
< ERROR: Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
< #150: FILE: /tmp/f1-22848/zebra_rib.c:150:
< WARNING: Macros with flow control statements should be avoided
< #150: FILE: /tmp/f1-22848/zebra_rib.c:150:
< WARNING: line over 80 characters
< #2766: FILE: /tmp/f1-22848/zebra_rib.c:2766:
< WARNING: line over 80 characters
< #2772: FILE: /tmp/f1-22848/zebra_rib.c:2772:
< ERROR: do not use assignment in if condition
< #3285: FILE: /tmp/f1-22848/zebra_rib.c:3285:
< WARNING: externs should be avoided in .c files
< #3289: FILE: /tmp/f1-22848/zebra_rib.c:3289:
< WARNING: function definition argument 'ZEBRA_FLAG_KERNEL_STALE_RT' should also have an identifier name
< #3289: FILE: /tmp/f1-22848/zebra_rib.c:3289:
< WARNING: externs should be avoided in .c files
< #3293: FILE: /tmp/f1-22848/zebra_rib.c:3293:
< WARNING: function definition argument 'ZEBRA_FLAG_KERNEL_STALE_RT' should also have an identifier name
< #3293: FILE: /tmp/f1-22848/zebra_rib.c:3293:

CLANG Static Analyzer Summary

  • Github Pull Request 4197, comparing to Git base SHA b1ad735

No Changes in Static Analysis warnings compared to base

12 Static Analyzer issues remaining.

See details at
https://ci1.netdef.org/browse/FRR-FRRPULLREQ-7560/artifact/shared/static_analysis/index.html

@LabN-CI
Copy link
Collaborator

LabN-CI commented May 8, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/4197 0bf4687
Date 05/07/2019
Start 23:36:18
Finish 00:00:02
Run-Time 23:44
Total 1813
Pass 1813
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-05-07-23:36:18.txt
Log autoscript-2019-05-07-23:37:07.log.bz2
Memory 448 445 374

For details, please contact louberger

@praveen-li
Copy link
Author

@srimohans, @donaldsharp, @riw777

Hi Reviewers

Feel free to let me know, if any thing pending from my end. As mentioned, I have not added yield in rib_sweep_table as of now, because It is a common code. And yield may have issues while marking route as stale specially during client<->zebra GR, where we may mark new route as stale.

So yill further comment, I will assume approve\merge of this feature will be decided after Client<->Zebra design.

Thanks for reviewing this.

@srimohans
Copy link
Contributor

Praveen,

we had concluded on the design for clietn-Zebra interaction and it will be time stamp based. @donaldsharp will syncup with you on if your code needs any redesign. I can approve after that.

I don't have any more comments on this PR.

Thanks,

Copy link
Contributor

@eqvinox eqvinox left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a specification doc that bolts down how exactly things are supposed to work, just so responsibilities & states are clear on shutdown & startup

pretty please :)

(same comment as on #4301)

@praveen-li
Copy link
Author

This needs a specification doc that bolts down how exactly things are supposed to work, just so responsibilities & states are clear on shutdown & startup

pretty please :)

(same comment as on #4301)

I have a design doc at this location:
https://github.com/Azure/SONiC/blob/48b29b879b4adab661c86ea3cb8828d999c222d1/doc/frr-kernel/frr_kernel_design_doc_utp.md

I can modify it just to have FRR information.

@eqvinox
Copy link
Contributor

eqvinox commented May 14, 2019

same comment as #4301

=> we want this to be part of the config instead of a startup flag

=> but for that we need to know when we've finished loading config

=> working on adding a "config done" mechanism

@eqvinox
Copy link
Contributor

eqvinox commented May 14, 2019

@praveen-li interesting, let me find some time to read that & see if it answers the GR details i'm looking for

@praveen-li
Copy link
Author

@praveen-li interesting, let me find some time to read that & see if it answers the GR details i'm looking for

@eqvinox : Sure, Kindly note that PR 4301 is based on this PR, so I may close this PR later. And only 4301 will make the final cut.

Also, my document includes details of how we were trying to solve it in SONiC so you may skip few topics. Thanks,

@praveen-li
Copy link
Author

@LabN-CI

This comment has been minimized.

@louberger
Copy link
Member

this needs a rebase

@donaldsharp
Copy link
Member

the alternative approach was already committed. This should be closed

@donaldsharp
Copy link
Member

alternate implementation was committed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.