Skip to content
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

lib: Optimizing route-maps #5270

Merged
merged 4 commits into from
Feb 25, 2020
Merged

Conversation

NaveenThanikachalam
Copy link
Contributor

This PR introduces a new way to fetch the best-match route-map index for a
given prefix.
Instead of sequentially passing through all the route-map indexes until a match is found, the search for the best-match index will be based on a look-up in a prefix-tree.

The details of the concept have been captured in the document below:
Fetching_the_Best-Match_Route-Map_Clause_Through_Longest_Prefix_Match_FRR.pdf

The design approach has been captured in the document below:
Route-map_Optimization_Design_Description.pdf

The below document captures the tests that have been executed:
Route-Map_Optimisation_Unit_Tests.pdf

Signed-off-by: NaveenThanikachalam nthanikachal@vmware.com

@LabN-CI
Copy link
Collaborator

LabN-CI commented Nov 2, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 2026fc4
Date 11/01/2019
Start 22:50:25
Finish 23:12:05
Run-Time 21:40
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-11-01-22:50:25.txt
Log autoscript-2019-11-01-22:51:15.log.bz2
Memory 427 424 360

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-9582/

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.


CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 7a6fc87

Fixed warnings:

  • Dead store: Dead initialization in bfd_packet.c, function bfd_recv_cb, line 526

New warnings:

Static Analysis warning summary compared to base:

  • Fixed warnings: 1
  • New warnings: 3

3 Static Analyzer issues remaining.

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

@LabN-CI
Copy link
Collaborator

LabN-CI commented Nov 2, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 0ac4503
Date 11/02/2019
Start 03:25:24
Finish 03:47:06
Run-Time 21:42
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-11-02-03:25:24.txt
Log autoscript-2019-11-02-03:26:16.log.bz2
Memory 436 399 360

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: FAILED

See below for issues.
CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/

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.

Get source / Pull Request: Successful

Building Stage: Successful

Basic Tests: Failed

Topotest tests on Ubuntu 16.04 i386: Failed (click for details)

Topology Test Results are at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-TOPOI386-9583/test

Topology Tests failed for Topotest tests on Ubuntu 16.04 i386:

RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
2019-11-02 00:28:58,729 ERROR: assert failed at "test_route_map_topo1/test_route_map_inbound_outbound_same_neighbor_p0": Testcase {} : Failed 
   
assert True is not True
2019-11-02 00:31:21,773 ERROR: assert failed at "test_route_map_topo2/test_modify_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 00:31:54,069 ERROR: assert failed at "test_route_map_topo2/test_remove_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 00:32:49,414 ERROR: assert failed at "test_route_map_topo2/test_add_remove_rmap_to_specific_neighbor_p0": Testcase {} : 
  
assert True is not True
2019-11-02 00:37:01,044 ERROR: assert failed at "test_route_map_topo2/test_create_rmap_match_prefix_list_to_deny_in_and_outbound_prefixes_p0": Testcase {} : Failed 
  
assert True is not True
*** defaultIntf: warning: r1 has no interfaces
2019-11-02 00:45:03,410 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_1/test_large_community_match_as_path": Test case test_large_community_match_as_path : Should fail 
   Error: True
assert True is not True
2019-11-02 00:46:56,100 ERROR: Traceback (most recent call last):
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOI386/topotests/lib/common_config.py", line 1500, in create_bgp_community_lists
    build=build)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOI386/topotests/lib/common_config.py", line 235, in create_common_configuration
    load_config_to_router(tgen, router)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOI386/topotests/lib/common_config.py", line 380, in load_config_to_router
    raise InvalidCLIError("%s" % output)
InvalidCLIError: line 2: % Command incomplete[4]: bgp large-community-list standard Test1 permit  



2019-11-02 00:47:44,581 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_2/test_large_community_lists_with_rmap_match_regex": Testcase test_large_community_lists_with_rmap_match_regex : Failed 
   Error: True
assert True is not True
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument
RTNETLINK answers: Invalid argument

see full log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOI386/ErrorLog/log_topotests.txt

Topology tests on Ubuntu 16.04 amd64: Failed (click for details)

Topology Test Results are at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-TOPOU1604-9583/test

Topology Tests failed for Topology tests on Ubuntu 16.04 amd64:

2019-11-02 00:28:28,537 ERROR: assert failed at "test_route_map_topo1/test_route_map_inbound_outbound_same_neighbor_p0": Testcase {} : Failed 
   
assert True is not True
2019-11-02 00:30:45,456 ERROR: assert failed at "test_route_map_topo2/test_modify_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 00:31:16,546 ERROR: assert failed at "test_route_map_topo2/test_remove_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 00:32:08,937 ERROR: assert failed at "test_route_map_topo2/test_add_remove_rmap_to_specific_neighbor_p0": Testcase {} : 
  
assert True is not True
2019-11-02 00:36:11,492 ERROR: assert failed at "test_route_map_topo2/test_create_rmap_match_prefix_list_to_deny_in_and_outbound_prefixes_p0": Testcase {} : Failed 
  
assert True is not True
*** defaultIntf: warning: r1 has no interfaces
2019-11-02 00:43:56,526 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_1/test_large_community_match_as_path": Test case test_large_community_match_as_path : Should fail 
   Error: True
assert True is not True
2019-11-02 00:45:51,547 ERROR: Traceback (most recent call last):
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1604/topotests/lib/common_config.py", line 1500, in create_bgp_community_lists
    build=build)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1604/topotests/lib/common_config.py", line 235, in create_common_configuration
    load_config_to_router(tgen, router)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1604/topotests/lib/common_config.py", line 380, in load_config_to_router
    raise InvalidCLIError("%s" % output)
InvalidCLIError: line 2: % Command incomplete[4]: bgp large-community-list standard Test1 permit  



2019-11-02 00:46:37,729 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_2/test_large_community_lists_with_rmap_match_regex": Testcase test_large_community_lists_with_rmap_match_regex : Failed 
   Error: True
assert True is not True

see full log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOU1604/ErrorLog/log_topotests.txt

Topology tests on Ubuntu 18.04 amd64: Failed (click for details)

Topology Test Results are at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-TOPOU1804-9583/test

Topology Tests failed for Topology tests on Ubuntu 18.04 amd64:

2019-11-02 07:27:55,762 ERROR: assert failed at "test_route_map_topo1/test_route_map_inbound_outbound_same_neighbor_p0": Testcase {} : Failed 
   
assert True is not True
2019-11-02 07:30:05,712 ERROR: assert failed at "test_route_map_topo2/test_modify_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 07:30:35,311 ERROR: assert failed at "test_route_map_topo2/test_remove_prefix_list_referenced_by_rmap_p0": Testcase {} : Failed 
  
assert True is not True
2019-11-02 07:31:24,577 ERROR: assert failed at "test_route_map_topo2/test_add_remove_rmap_to_specific_neighbor_p0": Testcase {} : 
  
assert True is not True
2019-11-02 07:35:18,920 ERROR: assert failed at "test_route_map_topo2/test_create_rmap_match_prefix_list_to_deny_in_and_outbound_prefixes_p0": Testcase {} : Failed 
  
assert True is not True
*** defaultIntf: warning: r1 has no interfaces
2019-11-02 07:44:15,089 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_1/test_large_community_match_as_path": Test case test_large_community_match_as_path : Should fail 
   Error: True
assert True is not True
2019-11-02 07:45:59,068 ERROR: Traceback (most recent call last):
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1804/topotests/lib/common_config.py", line 1500, in create_bgp_community_lists
    build=build)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1804/topotests/lib/common_config.py", line 235, in create_common_configuration
    load_config_to_router(tgen, router)
  File "/root/bamboo-agent-home/xml-data/build-dir/FRR-FRRPULLREQ-TOPOU1804/topotests/lib/common_config.py", line 380, in load_config_to_router
    raise InvalidCLIError("%s" % output)
InvalidCLIError: line 2: % Command incomplete[4]: bgp large-community-list standard Test1 permit  



2019-11-02 07:46:41,714 ERROR: assert failed at "bgp_large_community.test_bgp_large_community_topo_2/test_large_community_lists_with_rmap_match_regex": Testcase test_large_community_lists_with_rmap_match_regex : Failed 
   Error: True
assert True is not True

see full log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOU1804/ErrorLog/log_topotests.txt

Successful on other platforms
  • IPv4 ldp protocol on Ubuntu 16.04
  • Ubuntu 14.04 deb pkg check
  • Debian 10 deb pkg check
  • CentOS 7 rpm pkg check
  • Addresssanitizer topotest
  • Debian 8 deb pkg check
  • IPv4 protocols on Ubuntu 14.04
  • Debian 9 deb pkg check
  • Ubuntu 12.04 deb pkg check
  • Static analyzer (clang)
  • Fedora 29 rpm pkg check
  • IPv6 protocols on Ubuntu 14.04
  • Ubuntu 16.04 deb pkg check

Topology Tests memory analysis: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOI386/MemoryLeaks/
Topology Tests memory analysis: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOU1604/MemoryLeaks/
Topology Tests memory analysis: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-9583/artifact/TOPOU1804/MemoryLeaks/

CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 7a6fc87

No Changes in Static Analysis warnings compared to base

1 Static Analyzer issues remaining.

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

@LabN-CI
Copy link
Collaborator

LabN-CI commented Nov 2, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 b784df6
Date 11/02/2019
Start 08:40:23
Finish 09:02:03
Run-Time 21:40
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-11-02-08:40:23.txt
Log autoscript-2019-11-02-08:41:16.log.bz2
Memory 434 431 359

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-9584/

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.


CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 7a6fc87

Fixed warnings:

  • Dead store: Dead initialization in bfd_packet.c, function bfd_recv_cb, line 526

New warnings:

Static Analysis warning summary compared to base:

  • Fixed warnings: 1
  • New warnings: 3

3 Static Analyzer issues remaining.

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

@NaveenThanikachalam
Copy link
Contributor Author

NaveenThanikachalam commented Nov 4, 2019

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-9584/

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.

CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 7a6fc87

Fixed warnings:

  • Dead store: Dead initialization in bfd_packet.c, function bfd_recv_cb, line 526

New warnings:

Static Analysis warning summary compared to base:

  • Fixed warnings: 1
  • New warnings: 3

3 Static Analyzer issues remaining.

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

I'll work on the warnings.

@LabN-CI
Copy link
Collaborator

LabN-CI commented Nov 7, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result 0
Date 0
Start 0
Finish vncregress-2019-11-06-21:40:24.txt
Run-Time autoscript-2019-11-06-21:41:18.log.bz2
Total 419 410 360
Pass SUCCESS git merge/5132 d5c65bf
Fail 10/09/2019
Valgrind-Errors 21:40:25
Valgrind-Loss 22:02:18
Details 21:53
Log 1815
Memory 1812
SUCCESS git merge/5270 55c7569 3
11/06/2019 0
21:40:24 0
22:02:04 vncregress-2019-10-09-21:40:25.txt
21:40 autoscript-2019-10-09-21:41:18.log.bz2
1815 428 422 360
1815

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-9619/

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.


CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 46ddfc4

No Changes in Static Analysis warnings compared to base

1 Static Analyzer issues remaining.

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

@LabN-CI
Copy link
Collaborator

LabN-CI commented Nov 11, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result 0
Date 0
Start 0
Finish vncregress-2019-11-10-23:20:24.txt
Run-Time autoscript-2019-11-10-23:21:16.log.bz2
Total 430 435 361
Pass SUCCESS git merge/5104 73125dd
Fail 10/14/2019
Valgrind-Errors 23:20:24
Valgrind-Loss 23:42:07
Details 21:43
Log 1815
Memory 1815
SUCCESS git merge/5270 1efc133 0
11/10/2019 0
23:20:24 0
23:46:04 vncregress-2019-10-14-23:20:24.txt
25:40 autoscript-2019-10-14-23:21:17.log.bz2
1815 436 405 360
1815

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-9639/

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.


CLANG Static Analyzer Summary

  • Github Pull Request 5270, comparing to Git base SHA 26109a7

No Changes in Static Analysis warnings compared to base

1 Static Analyzer issues remaining.

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

@donaldsharp donaldsharp self-requested a review November 12, 2019 16:31
Copy link
Member

@riw777 riw777 left a comment

Choose a reason for hiding this comment

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

is there any testing across this -- even something simple? -- it might be nice to have them here to show there is a performance improvement?

@NaveenThanikachalam
Copy link
Contributor Author

is there any testing across this -- even something simple? -- it might be nice to have them here to show there is a performance improvement?

Thanks, Russ. I'll have the data compiled and attach it to this PR.

@NaveenThanikachalam
Copy link
Contributor Author

NaveenThanikachalam commented Nov 20, 2019

In order to measure the convergence, the following configuration was used.

  • Introduce 120K routes in the system distributed across 9 peers.
  • Introduce the following configurations:
    • Introduce a number of route-map sequences.
    • Each sequence having a match clause with a unique prefix-list.
    • Each prefix-list containing one unique prefix.
    • The route-map must be called from within another route-map. There must be one parent route-map each for each peer.
  • The intention is to filter out the prefixes listed by the prefix-lists and permit the rest of the 120K prefixes.

For example:

router bgp 100
  neighbor 192.168.1.2 remote-as 202
  …
  neighbor 192.168.1.10 remote-as 210
  !
  address-family ipv4 unicast
    neighbor 192.168.1.2 route-map rm-2 out
    …
    neighbor 192.168.1.10 route-map rm-10 out
  exit-address-family
!
route-map rm-2 permit 1
 call filter-rm
!
…
!
route-map rm-10 permit 1
 call filter-rm
!
ip prefix-list pl-1 seq 5 permit A.B.C.D/L
…
ip prefix-list pl-500 seq 5 permit W.X.Y.Z/L
ip prefix-list pl-any seq 5 permit any
!
route-map filter-rm deny 1
 match ip address prefix-list pl-1
!
…
route-map filter-rm deny 500
 match ip address prefix-list pl-500
!
route-map filter-rm permit 501
 match ip address prefix-list pl-any
!

The below table captures the convergence time with and without the optimization.

Screenshot 2019-11-20 at 11 02 25

Additional unit test cases have been captured in the "Route-Map_Optimisation_Unit_Tests.pdf" that is attached to this PR.

@eqvinox eqvinox self-requested a review December 4, 2019 17:47
@riw777
Copy link
Member

riw777 commented Dec 9, 2019

In order to measure the convergence, the following configuration was used.

thanks -- this is really helpful... Will poke through the code again.

Copy link
Member

@riw777 riw777 left a comment

Choose a reason for hiding this comment

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

Just one small question -- but the structure and functions look right to me.

lib/routemap.c Outdated Show resolved Hide resolved
@eqvinox
Copy link
Contributor

eqvinox commented Dec 11, 2019

I'd like to review this a bit more in depth (mostly with my context of having looked at setups with large filter lists in IXP route server scenarios.)

Adding "do not merge" as a marker of this, if I don't finish review until Dec 17th feel free to remove the label.

Copy link

@polychaeta polychaeta left a comment

Choose a reason for hiding this comment

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

Thanks for your contribution to FRR!

Click for style suggestions

To apply these suggestions:

curl -s https://gist.githubusercontent.com/polychaeta/65776b6a75a810955fdcf41c2119e56c/raw/144b15dfcf4c581ea21e3a90d6b5d552bf467644/cr_5270_1576823681.diff | git apply

diff --git a/lib/plist.c b/lib/plist.c
index 0f26d0595..047869d27 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -303,8 +303,7 @@ static void prefix_list_delete(struct prefix_list *plist)
 
 	/* If prefix-list contain prefix_list_entry free all of it. */
 	for (pentry = plist->head; pentry; pentry = next) {
-		route_map_notify_pentry_dependencies(plist->name,
-						     pentry,
+		route_map_notify_pentry_dependencies(plist->name, pentry,
 						     RMAP_EVENT_PLIST_DELETED);
 		next = pentry->next;
 		prefix_list_trie_del(plist, pentry);
@@ -522,8 +521,7 @@ static void prefix_list_entry_delete(struct prefix_list *plist,
 	else
 		plist->tail = pentry->prev;
 
-	route_map_notify_pentry_dependencies(plist->name,
-					     pentry,
+	route_map_notify_pentry_dependencies(plist->name, pentry,
 					     RMAP_EVENT_PLIST_DELETED);
 	prefix_list_entry_free(pentry);
 
diff --git a/lib/routemap.c b/lib/routemap.c
index eb194c6ac..32ae5a7d7 100644
--- a/lib/routemap.c
+++ b/lib/routemap.c
@@ -50,15 +50,15 @@ DEFINE_QOBJ_TYPE(route_map)
 #define IPv4_MATCH_RULE "ip "
 #define IPv6_MATCH_RULE "ipv6 "
 
-#define IS_RULE_IPv4_PREFIX_LIST(S) (strncmp(S, IPv4_PREFIX_LIST, \
-					     strlen(IPv4_PREFIX_LIST)) == 0)
-#define IS_RULE_IPv6_PREFIX_LIST(S) (strncmp(S, IPv6_PREFIX_LIST, \
-					     strlen(IPv6_PREFIX_LIST)) == 0)
-
-#define IS_IPv4_RULE(S) (strncmp(S, IPv4_MATCH_RULE, \
-					     strlen(IPv4_MATCH_RULE)) == 0)
-#define IS_IPv6_RULE(S) (strncmp(S, IPv6_MATCH_RULE, \
-					     strlen(IPv6_MATCH_RULE)) == 0)
+#define IS_RULE_IPv4_PREFIX_LIST(S)                                            \
+	(strncmp(S, IPv4_PREFIX_LIST, strlen(IPv4_PREFIX_LIST)) == 0)
+#define IS_RULE_IPv6_PREFIX_LIST(S)                                            \
+	(strncmp(S, IPv6_PREFIX_LIST, strlen(IPv6_PREFIX_LIST)) == 0)
+
+#define IS_IPv4_RULE(S)                                                        \
+	(strncmp(S, IPv4_MATCH_RULE, strlen(IPv4_MATCH_RULE)) == 0)
+#define IS_IPv6_RULE(S)                                                        \
+	(strncmp(S, IPv6_MATCH_RULE, strlen(IPv6_MATCH_RULE)) == 0)
 struct route_map_pentry_dep {
 	struct prefix_list_entry *pentry;
 	const char *plist_name;
@@ -71,34 +71,25 @@ static vector route_match_vec;
 /* Vector for route set rules. */
 static vector route_set_vec;
 
-static void
-route_map_pfx_tbl_update(route_map_event_t event,
-			 struct route_map_index *index,
-			 afi_t afi,
-			 const char *plist_name);
-static void
-route_map_pfx_table_add_default(afi_t afi,
-				struct route_map_index *index);
-static void
-route_map_pfx_table_del_default(afi_t afi,
-				struct route_map_index *index);
-static void
-route_map_add_plist_entries(afi_t afi,
-			    struct route_map_index *index,
-			    const char *plist_name,
-			    struct prefix_list_entry *entry);
-static void
-route_map_del_plist_entries(afi_t afi,
-			    struct route_map_index *index,
-			    const char *plist_name,
-			    struct prefix_list_entry *entry);
-static bool
-route_map_is_ip_rule_present(struct route_map_index *index);
-static bool
-route_map_is_ipv6_rule_present(struct route_map_index *index);
-
-static struct hash *
-route_map_get_dep_hash(route_map_event_t event);
+static void route_map_pfx_tbl_update(route_map_event_t event,
+				     struct route_map_index *index, afi_t afi,
+				     const char *plist_name);
+static void route_map_pfx_table_add_default(afi_t afi,
+					    struct route_map_index *index);
+static void route_map_pfx_table_del_default(afi_t afi,
+					    struct route_map_index *index);
+static void route_map_add_plist_entries(afi_t afi,
+					struct route_map_index *index,
+					const char *plist_name,
+					struct prefix_list_entry *entry);
+static void route_map_del_plist_entries(afi_t afi,
+					struct route_map_index *index,
+					const char *plist_name,
+					struct prefix_list_entry *entry);
+static bool route_map_is_ip_rule_present(struct route_map_index *index);
+static bool route_map_is_ipv6_rule_present(struct route_map_index *index);
+
+static struct hash *route_map_get_dep_hash(route_map_event_t event);
 
 struct route_map_match_set_hooks {
 	/* match interface */
@@ -1167,15 +1158,12 @@ static void route_map_index_delete(struct route_map_index *index, int notify)
 	/* Free route match. */
 	while ((rule = index->match_list.head) != NULL) {
 		if (IS_RULE_IPv4_PREFIX_LIST(rule->cmd->str))
-			route_map_pfx_tbl_update(
-					RMAP_EVENT_PLIST_DELETED,
-					index, AFI_IP,
-					rule->rule_str);
+			route_map_pfx_tbl_update(RMAP_EVENT_PLIST_DELETED,
+						 index, AFI_IP, rule->rule_str);
 		else if (IS_RULE_IPv6_PREFIX_LIST(rule->cmd->str))
-			route_map_pfx_tbl_update(
-					RMAP_EVENT_PLIST_DELETED,
-					index, AFI_IP6,
-					rule->rule_str);
+			route_map_pfx_tbl_update(RMAP_EVENT_PLIST_DELETED,
+						 index, AFI_IP6,
+						 rule->rule_str);
 
 		route_map_rule_delete(&index->match_list, rule);
 	}
@@ -1198,8 +1186,7 @@ static void route_map_index_delete(struct route_map_index *index, int notify)
 	/* Free 'char *nextrm' if not NULL */
 	XFREE(MTYPE_ROUTE_MAP_NAME, index->nextrm);
 
-	route_map_pfx_tbl_update(RMAP_EVENT_INDEX_DELETED,
-				 index, 0, NULL);
+	route_map_pfx_tbl_update(RMAP_EVENT_INDEX_DELETED, index, 0, NULL);
 
 	/* Execute event hook. */
 	if (route_map_master.event_hook && notify) {
@@ -1260,8 +1247,7 @@ route_map_index_add(struct route_map *map, enum route_map_type type, int pref)
 		point->prev = index;
 	}
 
-	route_map_pfx_tbl_update(RMAP_EVENT_INDEX_ADDED,
-				 index, 0, NULL);
+	route_map_pfx_tbl_update(RMAP_EVENT_INDEX_ADDED, index, 0, NULL);
 
 	/* Execute event hook. */
 	if (route_map_master.event_hook) {
@@ -1516,14 +1502,12 @@ enum rmap_compile_rets route_map_add_match(struct route_map_index *index,
 			 */
 			if (IS_RULE_IPv4_PREFIX_LIST(match_name))
 				route_map_pfx_tbl_update(
-						RMAP_EVENT_PLIST_DELETED,
-						index, AFI_IP,
-						rule->rule_str);
+					RMAP_EVENT_PLIST_DELETED, index, AFI_IP,
+					rule->rule_str);
 			else if (IS_RULE_IPv6_PREFIX_LIST(match_name))
 				route_map_pfx_tbl_update(
-						RMAP_EVENT_PLIST_DELETED,
-						index, AFI_IP6,
-						rule->rule_str);
+					RMAP_EVENT_PLIST_DELETED, index,
+					AFI_IP6, rule->rule_str);
 
 			/* Remove the dependency of the route-map on the rule
 			 * that is being replaced.
@@ -1558,12 +1542,10 @@ enum rmap_compile_rets route_map_add_match(struct route_map_index *index,
 	 * the route-map's prefix table.
 	 */
 	if (IS_RULE_IPv4_PREFIX_LIST(match_name)) {
-		route_map_pfx_tbl_update(RMAP_EVENT_PLIST_ADDED,
-					 index, AFI_IP,
+		route_map_pfx_tbl_update(RMAP_EVENT_PLIST_ADDED, index, AFI_IP,
 					 match_arg);
 	} else if (IS_RULE_IPv6_PREFIX_LIST(match_name)) {
-		route_map_pfx_tbl_update(RMAP_EVENT_PLIST_ADDED,
-					 index, AFI_IP6,
+		route_map_pfx_tbl_update(RMAP_EVENT_PLIST_ADDED, index, AFI_IP6,
 					 match_arg);
 	} else {
 		/* If IPv4 match criteria has been added to the route-map
@@ -1574,8 +1556,7 @@ enum rmap_compile_rets route_map_add_match(struct route_map_index *index,
 		 * default route's trie node.
 		 */
 		if (IS_IPv4_RULE(match_name))
-			route_map_del_plist_entries(AFI_IP6, index,
-						    NULL, NULL);
+			route_map_del_plist_entries(AFI_IP6, index, NULL, NULL);
 
 		/* If IPv6 match criteria has been added to the route-map
 		 * index, check for IPv4 prefix-list match rule presence and
@@ -1585,8 +1566,7 @@ enum rmap_compile_rets route_map_add_match(struct route_map_index *index,
 		 * default route's trie node.
 		 */
 		else if (IS_IPv6_RULE(match_name))
-			route_map_del_plist_entries(AFI_IP, index,
-						    NULL, NULL);
+			route_map_del_plist_entries(AFI_IP, index, NULL, NULL);
 	}
 
 	/* Execute event hook. */
@@ -1643,14 +1623,12 @@ enum rmap_compile_rets route_map_delete_match(struct route_map_index *index,
 			 */
 			if (IS_RULE_IPv4_PREFIX_LIST(match_name)) {
 				route_map_pfx_tbl_update(
-						RMAP_EVENT_PLIST_DELETED,
-						index, AFI_IP,
-						match_arg);
+					RMAP_EVENT_PLIST_DELETED, index, AFI_IP,
+					match_arg);
 			} else if (IS_RULE_IPv6_PREFIX_LIST(match_name)) {
 				route_map_pfx_tbl_update(
-						RMAP_EVENT_PLIST_DELETED,
-						index, AFI_IP6,
-						match_arg);
+					RMAP_EVENT_PLIST_DELETED, index,
+					AFI_IP6, match_arg);
 			} else {
 				/* If no more IPv4 match rules are present in
 				 * this index, check for IPv6 prefix-list match
@@ -1661,9 +1639,8 @@ enum rmap_compile_rets route_map_delete_match(struct route_map_index *index,
 				 * default route's trie node.
 				 */
 				if (!route_map_is_ip_rule_present(index))
-					route_map_add_plist_entries(AFI_IP6,
-								    index, NULL,
-								    NULL);
+					route_map_add_plist_entries(
+						AFI_IP6, index, NULL, NULL);
 
 				/* If no more IPv6 match rules are present in
 				 * this index, check for IPv4 prefix-list match
@@ -1674,9 +1651,8 @@ enum rmap_compile_rets route_map_delete_match(struct route_map_index *index,
 				 * default route's trie node.
 				 */
 				if (!route_map_is_ipv6_rule_present(index))
-					route_map_add_plist_entries(AFI_IP,
-								    index, NULL,
-								    NULL);
+					route_map_add_plist_entries(
+						AFI_IP, index, NULL, NULL);
 			}
 
 			return RMAP_COMPILE_SUCCESS;
@@ -1844,10 +1820,9 @@ route_map_apply_match(struct route_map_rule_list *match_list,
 	return ret;
 }
 
-static struct list *
-route_map_get_index_list(struct route_node **rn,
-			 const struct prefix *prefix,
-			 struct route_table *table)
+static struct list *route_map_get_index_list(struct route_node **rn,
+					     const struct prefix *prefix,
+					     struct route_table *table)
 {
 	struct route_node *tmp_rn = NULL;
 
@@ -1887,11 +1862,8 @@ route_map_get_index_list(struct route_node **rn,
  * This function returns the route-map index that best matches the prefix.
  */
 static struct route_map_index *
-route_map_get_index(struct route_map *map,
-		    const struct prefix *prefix,
-		    route_map_object_t type,
-		    void *object,
-		    uint8_t *match_ret)
+route_map_get_index(struct route_map *map, const struct prefix *prefix,
+		    route_map_object_t type, void *object, uint8_t *match_ret)
 {
 	int ret = 0;
 	struct list *candidate_rmap_list = NULL;
@@ -1911,8 +1883,8 @@ route_map_get_index(struct route_map *map,
 		return NULL;
 
 	do {
-		candidate_rmap_list = route_map_get_index_list(&rn, prefix,
-							       table);
+		candidate_rmap_list =
+			route_map_get_index_list(&rn, prefix, table);
 		if (!rn)
 			break;
 
@@ -1920,10 +1892,10 @@ route_map_get_index(struct route_map *map,
 		 * than that in best_index, ignore the list and get the
 		 * parent node's list.
 		 */
-		head_index = (struct route_map_index *)
-			     (listgetdata(listhead(candidate_rmap_list)));
-		if (best_index && head_index &&
-		    (best_index->pref < head_index->pref)) {
+		head_index = (struct route_map_index *)(listgetdata(
+			listhead(candidate_rmap_list)));
+		if (best_index && head_index
+		    && (best_index->pref < head_index->pref)) {
 			route_unlock_node(rn);
 			continue;
 		}
@@ -1936,9 +1908,8 @@ route_map_get_index(struct route_map *map,
 			if (best_index && (best_index->pref < index->pref))
 				break;
 
-			ret = route_map_apply_match(
-						&index->match_list,
-						prefix, type, object);
+			ret = route_map_apply_match(&index->match_list, prefix,
+						    type, object);
 
 			if (ret == RMAP_MATCH) {
 				*match_ret = ret;
@@ -1968,9 +1939,8 @@ route_map_get_index(struct route_map *map,
 	return best_index;
 }
 
-static int
-route_map_candidate_list_cmp(struct route_map_index *idx1,
-			     struct route_map_index *idx2)
+static int route_map_candidate_list_cmp(struct route_map_index *idx1,
+					struct route_map_index *idx2)
 {
 	if (!idx1)
 		return -1;
@@ -1984,9 +1954,8 @@ route_map_candidate_list_cmp(struct route_map_index *idx1,
  * This function adds the route-map index into the default route's
  * route-node in the route-map's IPv4/IPv6 prefix-table.
  */
-static void
-route_map_pfx_table_add_default(afi_t afi,
-				struct route_map_index *index)
+static void route_map_pfx_table_add_default(afi_t afi,
+					    struct route_map_index *index)
 {
 	struct route_node *rn = NULL;
 	struct list *rmap_candidate_list = NULL;
@@ -2037,9 +2006,8 @@ route_map_pfx_table_add_default(afi_t afi,
  * This function removes the route-map index from the default route's
  * route-node in the route-map's IPv4/IPv6 prefix-table.
  */
-static void
-route_map_pfx_table_del_default(afi_t afi,
-				struct route_map_index *index)
+static void route_map_pfx_table_del_default(afi_t afi,
+					    struct route_map_index *index)
 {
 	struct route_node *rn = NULL;
 	struct list *rmap_candidate_list = NULL;
@@ -2076,10 +2044,9 @@ route_map_pfx_table_del_default(afi_t afi,
  * This function adds the route-map index to the route-node for
  * the prefix-entry in the route-map's IPv4/IPv6 prefix-table.
  */
-static void
-route_map_pfx_table_add(struct route_table *table,
-			struct route_map_index *index,
-			struct prefix_list_entry *pentry)
+static void route_map_pfx_table_add(struct route_table *table,
+				    struct route_map_index *index,
+				    struct prefix_list_entry *pentry)
 {
 	struct route_node *rn = NULL;
 	struct list *rmap_candidate_list = NULL;
@@ -2108,10 +2075,9 @@ route_map_pfx_table_add(struct route_table *table,
  * This function removes the route-map index from the route-node for
  * the prefix-entry in the route-map's IPv4/IPv6 prefix-table.
  */
-static void
-route_map_pfx_table_del(struct route_table *table,
-			struct route_map_index *index,
-			struct prefix_list_entry *pentry)
+static void route_map_pfx_table_del(struct route_table *table,
+				    struct route_map_index *index,
+				    struct prefix_list_entry *pentry)
 {
 	struct route_node *rn = NULL;
 	struct list *rmap_candidate_list = NULL;
@@ -2135,8 +2101,7 @@ route_map_pfx_table_del(struct route_table *table,
 /* This function checks for the presence of an IPv4 match rule
  * in the given route-map index.
  */
-static bool
-route_map_is_ip_rule_present(struct route_map_index *index)
+static bool route_map_is_ip_rule_present(struct route_map_index *index)
 {
 	struct route_map_rule_list *match_list = NULL;
 	struct route_map_rule *rule = NULL;
@@ -2152,8 +2117,7 @@ route_map_is_ip_rule_present(struct route_map_index *index)
 /* This function checks for the presence of an IPv6 match rule
  * in the given route-map index.
  */
-static bool
-route_map_is_ipv6_rule_present(struct route_map_index *index)
+static bool route_map_is_ipv6_rule_present(struct route_map_index *index)
 {
 	struct route_map_rule_list *match_list = NULL;
 	struct route_map_rule *rule = NULL;
@@ -2181,11 +2145,10 @@ route_map_is_ipv6_rule_present(struct route_map_index *index)
  *    prefix-list, create a route-node for this entry and
  *    add this index to the route-node.
  */
-static void
-route_map_add_plist_entries(afi_t afi,
-			    struct route_map_index *index,
-			    const char *plist_name,
-			    struct prefix_list_entry *entry)
+static void route_map_add_plist_entries(afi_t afi,
+					struct route_map_index *index,
+					const char *plist_name,
+					struct prefix_list_entry *entry)
 {
 	struct route_map_rule_list *match_list = NULL;
 	struct route_map_rule *match = NULL;
@@ -2200,11 +2163,11 @@ route_map_add_plist_entries(afi_t afi,
 			if (afi == AFI_IP) {
 				if (IS_RULE_IPv4_PREFIX_LIST(match->cmd->str))
 					plist_rule_is_present = true;
-					break;
+				break;
 			} else {
 				if (IS_RULE_IPv6_PREFIX_LIST(match->cmd->str))
 					plist_rule_is_present = true;
-					break;
+				break;
 			}
 		}
 
@@ -2223,24 +2186,22 @@ route_map_add_plist_entries(afi_t afi,
 
 	if (entry) {
 		if (afi == AFI_IP) {
-			route_map_pfx_table_add(
-					index->map->ipv4_prefix_table,
-					index, entry);
+			route_map_pfx_table_add(index->map->ipv4_prefix_table,
+						index, entry);
 		} else {
-			route_map_pfx_table_add(
-					index->map->ipv6_prefix_table,
-					index, entry);
+			route_map_pfx_table_add(index->map->ipv6_prefix_table,
+						index, entry);
 		}
 	} else {
 		for (pentry = plist->head; pentry; pentry = pentry->next) {
 			if (afi == AFI_IP) {
 				route_map_pfx_table_add(
-						index->map->ipv4_prefix_table,
-						index, pentry);
+					index->map->ipv4_prefix_table, index,
+					pentry);
 			} else {
 				route_map_pfx_table_add(
-						index->map->ipv6_prefix_table,
-						index, pentry);
+					index->map->ipv6_prefix_table, index,
+					pentry);
 			}
 		}
 	}
@@ -2259,11 +2220,10 @@ route_map_add_plist_entries(afi_t afi,
  *    prefix-list, remove this index from the route-node
  *    for the prefix in this prefix-entry.
  */
-static void
-route_map_del_plist_entries(afi_t afi,
-			    struct route_map_index *index,
-			    const char *plist_name,
-			    struct prefix_list_entry *entry)
+static void route_map_del_plist_entries(afi_t afi,
+					struct route_map_index *index,
+					const char *plist_name,
+					struct prefix_list_entry *entry)
 {
 	struct route_map_rule_list *match_list = NULL;
 	struct route_map_rule *match = NULL;
@@ -2278,11 +2238,11 @@ route_map_del_plist_entries(afi_t afi,
 			if (afi == AFI_IP) {
 				if (IS_RULE_IPv4_PREFIX_LIST(match->cmd->str))
 					plist_rule_is_present = true;
-					break;
+				break;
 			} else {
 				if (IS_RULE_IPv6_PREFIX_LIST(match->cmd->str))
 					plist_rule_is_present = true;
-					break;
+				break;
 			}
 		}
 
@@ -2299,24 +2259,22 @@ route_map_del_plist_entries(afi_t afi,
 
 	if (entry) {
 		if (afi == AFI_IP) {
-			route_map_pfx_table_del(
-					index->map->ipv4_prefix_table,
-					index, entry);
+			route_map_pfx_table_del(index->map->ipv4_prefix_table,
+						index, entry);
 		} else {
-			route_map_pfx_table_del(
-					index->map->ipv6_prefix_table,
-					index, entry);
+			route_map_pfx_table_del(index->map->ipv6_prefix_table,
+						index, entry);
 		}
 	} else {
 		for (pentry = plist->head; pentry; pentry = pentry->next) {
 			if (afi == AFI_IP) {
 				route_map_pfx_table_del(
-						index->map->ipv4_prefix_table,
-						index, pentry);
+					index->map->ipv4_prefix_table, index,
+					pentry);
 			} else {
 				route_map_pfx_table_del(
-						index->map->ipv6_prefix_table,
-						index, pentry);
+					index->map->ipv6_prefix_table, index,
+					pentry);
 			}
 		}
 	}
@@ -2327,17 +2285,14 @@ route_map_del_plist_entries(afi_t afi,
  * as a match command from a particular route-map index.
  * It updates the prefix-table of the route-map accordingly.
  */
-static void
-route_map_trie_update(afi_t afi,
-		      route_map_event_t event,
-		      struct route_map_index *index,
-		      const char *plist_name)
+static void route_map_trie_update(afi_t afi, route_map_event_t event,
+				  struct route_map_index *index,
+				  const char *plist_name)
 {
 	if (event == RMAP_EVENT_PLIST_ADDED) {
 		if (afi == AFI_IP) {
 			if (!route_map_is_ipv6_rule_present(index)) {
-				route_map_pfx_table_del_default(AFI_IP6,
-								index);
+				route_map_pfx_table_del_default(AFI_IP6, index);
 				route_map_add_plist_entries(afi, index,
 							    plist_name, NULL);
 			} else {
@@ -2346,38 +2301,35 @@ route_map_trie_update(afi_t afi,
 			}
 		} else {
 			if (!route_map_is_ip_rule_present(index)) {
-				route_map_pfx_table_del_default(AFI_IP,
-								index);
+				route_map_pfx_table_del_default(AFI_IP, index);
 				route_map_add_plist_entries(afi, index,
 							    plist_name, NULL);
 			} else {
-				route_map_del_plist_entries(AFI_IP, index,
-							    NULL, NULL);
+				route_map_del_plist_entries(AFI_IP, index, NULL,
+							    NULL);
 			}
 		}
 	} else if (event == RMAP_EVENT_PLIST_DELETED) {
 		if (afi == AFI_IP) {
-			route_map_del_plist_entries(afi, index,
-						    plist_name, NULL);
+			route_map_del_plist_entries(afi, index, plist_name,
+						    NULL);
 
 			if (!route_map_is_ipv6_rule_present(index))
 				route_map_pfx_table_add_default(afi, index);
 
 			if (!route_map_is_ip_rule_present(index))
-				route_map_add_plist_entries(AFI_IP6,
-							    index,
+				route_map_add_plist_entries(AFI_IP6, index,
 							    NULL, NULL);
 		} else {
-			route_map_del_plist_entries(afi, index,
-						    plist_name, NULL);
+			route_map_del_plist_entries(afi, index, plist_name,
+						    NULL);
 
 			if (!route_map_is_ip_rule_present(index))
 				route_map_pfx_table_add_default(afi, index);
 
 			if (!route_map_is_ipv6_rule_present(index))
-				route_map_add_plist_entries(AFI_IP,
-							    index,
-							    NULL, NULL);
+				route_map_add_plist_entries(AFI_IP, index, NULL,
+							    NULL);
 		}
 	}
 }
@@ -2387,11 +2339,9 @@ route_map_trie_update(afi_t afi,
  * prefix-list is added/removed.
  * It updates the prefix-table of the route-map accordingly.
  */
-static void
-route_map_pfx_tbl_update(route_map_event_t event,
-			 struct route_map_index *index,
-			 afi_t afi,
-			 const char *plist_name)
+static void route_map_pfx_tbl_update(route_map_event_t event,
+				     struct route_map_index *index, afi_t afi,
+				     const char *plist_name)
 {
 	struct route_map *rmap = NULL;
 
@@ -2408,8 +2358,7 @@ route_map_pfx_tbl_update(route_map_event_t event,
 		route_map_pfx_table_del_default(AFI_IP, index);
 		route_map_pfx_table_del_default(AFI_IP6, index);
 
-		if ((index->map->head == NULL) &&
-		    (index->map->tail == NULL)) {
+		if ((index->map->head == NULL) && (index->map->tail == NULL)) {
 			rmap = index->map;
 
 			if (rmap->ipv4_prefix_table) {
@@ -2427,8 +2376,7 @@ route_map_pfx_tbl_update(route_map_event_t event,
 
 	/* Handle prefix-list match rule addition/deletion.
 	 */
-	route_map_trie_update(afi, event,
-			      index, plist_name);
+	route_map_trie_update(afi, event, index, plist_name);
 }
 
 /*
@@ -2436,11 +2384,10 @@ route_map_pfx_tbl_update(route_map_event_t event,
  * a prefix-list or, an existing prefix-entry is removed from the prefix-list.
  * It updates the prefix-table of the route-map accordingly.
  */
-static void
-route_map_pentry_update(route_map_event_t event,
-			const char *plist_name,
-			struct route_map_index *index,
-			struct prefix_list_entry *pentry)
+static void route_map_pentry_update(route_map_event_t event,
+				    const char *plist_name,
+				    struct route_map_index *index,
+				    struct prefix_list_entry *pentry)
 {
 	struct prefix_list *plist = NULL;
 	afi_t afi;
@@ -2458,18 +2405,16 @@ route_map_pentry_update(route_map_event_t event,
 		if (plist->count == 1) {
 			if (afi == AFI_IP) {
 				if (!route_map_is_ipv6_rule_present(index))
-					route_map_add_plist_entries(afi, index,
-								    plist_name,
-								    pentry);
+					route_map_add_plist_entries(
+						afi, index, plist_name, pentry);
 			} else {
 				if (!route_map_is_ip_rule_present(index))
-					route_map_add_plist_entries(afi, index,
-								    plist_name,
-								    pentry);
+					route_map_add_plist_entries(
+						afi, index, plist_name, pentry);
 			}
 		} else {
-			route_map_add_plist_entries(afi, index,
-						    plist_name, pentry);
+			route_map_add_plist_entries(afi, index, plist_name,
+						    pentry);
 		}
 	} else if (event == RMAP_EVENT_PLIST_DELETED) {
 		route_map_del_plist_entries(afi, index, plist_name, pentry);
@@ -2488,9 +2433,8 @@ route_map_pentry_update(route_map_event_t event,
 	}
 }
 
-static void
-route_map_pentry_process_dependency(struct hash_backet *backet,
-				    void *data)
+static void route_map_pentry_process_dependency(struct hash_backet *backet,
+						void *data)
 {
 	char *rmap_name = NULL;
 	struct route_map *rmap = NULL;
@@ -2499,7 +2443,7 @@ route_map_pentry_process_dependency(struct hash_backet *backet,
 	struct route_map_rule *match = NULL;
 	struct route_map_dep_data *dep_data = NULL;
 	struct route_map_pentry_dep *pentry_dep =
-				(struct route_map_pentry_dep *)data;
+		(struct route_map_pentry_dep *)data;
 	unsigned char family = pentry_dep->pentry->prefix.family;
 
 	dep_data = (struct route_map_dep_data *)backet->data;
@@ -2519,33 +2463,29 @@ route_map_pentry_process_dependency(struct hash_backet *backet,
 
 		for (match = match_list->head; match; match = match->next) {
 			if (strcmp(match->rule_str, pentry_dep->plist_name)
-									== 0) {
-				if (IS_RULE_IPv4_PREFIX_LIST(
-							match->cmd->str) &&
-				    family == AF_INET) {
+			    == 0) {
+				if (IS_RULE_IPv4_PREFIX_LIST(match->cmd->str)
+				    && family == AF_INET) {
 					route_map_pentry_update(
-							pentry_dep->event,
-							pentry_dep->plist_name,
-							index,
-							pentry_dep->pentry);
+						pentry_dep->event,
+						pentry_dep->plist_name, index,
+						pentry_dep->pentry);
 				} else if (IS_RULE_IPv6_PREFIX_LIST(
-							match->cmd->str) &&
-					   family == AF_INET6) {
+						   match->cmd->str)
+					   && family == AF_INET6) {
 					route_map_pentry_update(
-							pentry_dep->event,
-							pentry_dep->plist_name,
-							index,
-							pentry_dep->pentry);
+						pentry_dep->event,
+						pentry_dep->plist_name, index,
+						pentry_dep->pentry);
 				}
 			}
 		}
 	}
 }
 
-void
-route_map_notify_pentry_dependencies(const char *affected_name,
-				     struct prefix_list_entry *pentry,
-				     route_map_event_t event)
+void route_map_notify_pentry_dependencies(const char *affected_name,
+					  struct prefix_list_entry *pentry,
+					  route_map_event_t event)
 {
 	struct route_map_dep *dep = NULL;
 	struct hash *upd8_hash = NULL;
@@ -2649,11 +2589,9 @@ route_map_result_t route_map_apply(struct route_map *map,
 
 	map->applied++;
 
-	if ((!map->optimization_disabled) &&
-	    (map->ipv4_prefix_table ||
-	     map->ipv6_prefix_table)) {
-		index = route_map_get_index(map, prefix,
-					    type, object,
+	if ((!map->optimization_disabled)
+	    && (map->ipv4_prefix_table || map->ipv6_prefix_table)) {
+		index = route_map_get_index(map, prefix, type, object,
 					    (uint8_t *)&match_ret);
 		if (index) {
 			if (rmap_debug)
@@ -2664,10 +2602,11 @@ route_map_result_t route_map_apply(struct route_map *map,
 					route_map_cmd_result_str(match_ret));
 		} else {
 			if (rmap_debug)
-				zlog_debug("No match for pfx: %s in route-map: %s, result: %s",
-					   prefix2str(prefix, buf, sizeof(buf)),
-					   map->name,
-					   route_map_cmd_result_str(match_ret));
+				zlog_debug(
+					"No match for pfx: %s in route-map: %s, result: %s",
+					prefix2str(prefix, buf, sizeof(buf)),
+					map->name,
+					route_map_cmd_result_str(match_ret));
 			/*
 			 * No index matches this prefix. Return deny unless,
 			 * match_ret = RMAP_NOOP.
@@ -3148,12 +3087,11 @@ void route_map_notify_dependencies(const char *affected_name,
 
 
 /* VTY related functions. */
-DEFUN (no_routemap_optimization,
-       no_routemap_optimization_cmd,
-       "no route-map optimization",
-       NO_STR
-       "route-map\n"
-       "optimization\n")
+DEFUN(no_routemap_optimization, no_routemap_optimization_cmd,
+      "no route-map optimization",
+      NO_STR
+      "route-map\n"
+      "optimization\n")
 {
 	VTY_DECLVAR_CONTEXT(route_map_index, index);
 
@@ -3161,11 +3099,10 @@ DEFUN (no_routemap_optimization,
 	return CMD_SUCCESS;
 }
 
-DEFUN (routemap_optimization,
-       routemap_optimization_cmd,
-       "route-map optimization",
-       "route-map\n"
-       "optimization\n")
+DEFUN(routemap_optimization, routemap_optimization_cmd,
+      "route-map optimization",
+      "route-map\n"
+      "optimization\n")
 {
 	VTY_DECLVAR_CONTEXT(route_map_index, index);
 
@@ -4362,13 +4299,12 @@ void route_map_counter_decrement(struct route_map *map)
 	}
 }
 
-DEFUN_HIDDEN (show_route_map_pfx_tbl,
-	      show_route_map_pfx_tbl_cmd,
-	      "show route-map WORD prefix-table",
-	      SHOW_STR
-	      "route-map\n"
-	      "route-map name\n"
-	      "internal prefix-table\n")
+DEFUN_HIDDEN(show_route_map_pfx_tbl, show_route_map_pfx_tbl_cmd,
+	     "show route-map WORD prefix-table",
+	     SHOW_STR
+	     "route-map\n"
+	     "route-map name\n"
+	     "internal prefix-table\n")
 {
 	const char *rmap_name = argv[2]->arg;
 	struct route_map *rmap = NULL;
@@ -4405,18 +4341,16 @@ DEFUN_HIDDEN (show_route_map_pfx_tbl,
 				if (prn) {
 					pp = &prn->p;
 					vty_out(vty, "%s/%d\n",
-						inet_ntop(
-							pp->family,
-							&pp->u.prefix,
-							pbuf,
-							SU_ADDRSTRLEN),
+						inet_ntop(pp->family,
+							  &pp->u.prefix, pbuf,
+							  SU_ADDRSTRLEN),
 						pp->prefixlen);
 				}
 
 				vty_out(vty, "\n");
-				rmap_index_list = (struct list *) rn->info;
-				if (!rmap_index_list ||
-				    !listcount(rmap_index_list))
+				rmap_index_list = (struct list *)rn->info;
+				if (!rmap_index_list
+				    || !listcount(rmap_index_list))
 					vty_out(vty, "%*s%s\n", len, "", "-");
 				else
 					for (ALL_LIST_ELEMENTS(rmap_index_list,
@@ -4451,18 +4385,16 @@ DEFUN_HIDDEN (show_route_map_pfx_tbl,
 				if (prn) {
 					pp = &prn->p;
 					vty_out(vty, "%s/%d\n",
-						inet_ntop(
-							pp->family,
-							&pp->u.prefix,
-							pbuf,
-							SU_ADDRSTRLEN),
+						inet_ntop(pp->family,
+							  &pp->u.prefix, pbuf,
+							  SU_ADDRSTRLEN),
 						pp->prefixlen);
 				}
 
 				vty_out(vty, "\n");
-				rmap_index_list = (struct list *) rn->info;
-				if (!rmap_index_list ||
-				    !listcount(rmap_index_list))
+				rmap_index_list = (struct list *)rn->info;
+				if (!rmap_index_list
+				    || !listcount(rmap_index_list))
 					vty_out(vty, "%*s%s\n", len, "", "-");
 				else
 					for (ALL_LIST_ELEMENTS(rmap_index_list,
diff --git a/lib/routemap.h b/lib/routemap.h
index 63168dd44..8c02f1cb6 100644
--- a/lib/routemap.h
+++ b/lib/routemap.h
@@ -297,10 +297,10 @@ extern void route_map_upd8_dependency(route_map_event_t type, const char *arg,
 				      const char *rmap_name);
 extern void route_map_notify_dependencies(const char *affected_name,
 					  route_map_event_t event);
-extern void route_map_notify_pentry_dependencies(
-					const char *affected_name,
-					struct prefix_list_entry *pentry,
-					route_map_event_t event);
+extern void
+route_map_notify_pentry_dependencies(const char *affected_name,
+				     struct prefix_list_entry *pentry,
+				     route_map_event_t event);
 extern int generic_match_add(struct vty *vty, struct route_map_index *index,
 			     const char *command, const char *arg,
 			     route_map_event_t type);

If you are a new contributor to FRR, please see our contributing guidelines.

@LabN-CI
Copy link
Collaborator

LabN-CI commented Dec 20, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 24215d1
Date 12/20/2019
Start 01:35:24
Finish 02:01:11
Run-Time 25:47
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-12-20-01:35:24.txt
Log autoscript-2019-12-20-01:36:15.log.bz2
Memory 418 436 360

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: FAILED

See below for issues.
CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/

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.

Get source / Pull Request: Successful

Building Stage: Failed

Debian 10 amd64 build: Failed (click for details) Debian 10 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/DEB10BUILD/config.status/config.status

Make failed for Debian 10 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/DEB10BUILD/ErrorLog/log_make.txt)

  CC       lib/json.lo
  CC       lib/keychain.lo
  CC       lib/lib_errors.lo
  CC       lib/libfrr.lo
  CC       lib/linklist.lo
  CC       lib/log.lo
  CLIPPY   lib/log_vty_clippy.c
  CC       lib/log_vty.lo
  CC       lib/md5.lo
FreeBSD 12 amd64 build: Failed (click for details) FreeBSD 12 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/FBSD12AMD64/config.status/config.status

Make failed for FreeBSD 12 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/FBSD12AMD64/ErrorLog/log_make.txt)

  CC       lib/json.lo
  CC       lib/keychain.lo
  CC       lib/lib_errors.lo
  CC       lib/libfrr.lo
  CC       lib/linklist.lo
  CC       lib/log.lo
  CLIPPY   lib/log_vty_clippy.c
  CC       lib/log_vty.lo
  CC       lib/md5.lo
FreeBSD 11 amd64 build: Failed (click for details)

Make failed for FreeBSD 11 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/CI009BUILD/ErrorLog/log_make.txt)

  CC       lib/json.lo
  CC       lib/keychain.lo
  CC       lib/lib_errors.lo
  CC       lib/libfrr.lo
  CC       lib/linklist.lo
  CC       lib/log.lo
  CLIPPY   lib/log_vty_clippy.c
  CC       lib/log_vty.lo
  CC       lib/md5.lo

FreeBSD 11 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/CI009BUILD/config.status/config.status

Ubuntu 18.04 amd64 build: Failed (click for details)

Make failed for Ubuntu 18.04 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/U1804AMD64/ErrorLog/log_make.txt)

  CC       bgpd/bgp_ecommunity.o
  CC       bgpd/bgp_encap_tlv.o
  CC       bgpd/bgp_errors.o
  CC       bgpd/bgp_evpn.o
  CLIPPY   bgpd/bgp_evpn_vty_clippy.c
  CC       bgpd/bgp_evpn_vty.o
  CC       bgpd/bgp_filter.o
  CC       bgpd/bgp_flowspec.o
  CC       bgpd/bgp_flowspec_util.o

Ubuntu 18.04 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/U1804AMD64/config.status/config.status

Debian 9 amd64 build: Failed (click for details)

Make failed for Debian 9 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/CI021BUILD/ErrorLog/log_make.txt)

  CC       bgpd/bgp_ecommunity.o
  CC       bgpd/bgp_encap_tlv.o
  CC       bgpd/bgp_errors.o
  CC       bgpd/bgp_evpn.o
  CLIPPY   bgpd/bgp_evpn_vty_clippy.c
  CC       bgpd/bgp_evpn_vty.o
  CC       bgpd/bgp_filter.o
  CC       bgpd/bgp_flowspec.o
  CC       bgpd/bgp_flowspec_util.o

Debian 9 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/CI021BUILD/config.status/config.status

Ubuntu 18.04 ppc64le build: Failed (click for details) Ubuntu 18.04 ppc64le build: config.log output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/U1804PPC64LEBUILD/config.log/ Ubuntu 18.04 ppc64le build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/U1804PPC64LEBUILD/config.status/config.status

Make failed for Ubuntu 18.04 ppc64le build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/U1804PPC64LEBUILD/ErrorLog/log_make.txt)

  CC       bgpd/bgp_ecommunity.o
  CC       bgpd/bgp_encap_tlv.o
  CC       bgpd/bgp_errors.o
  CC       bgpd/bgp_evpn.o
  CC       bgpd/bgp_filter.o
  CC       bgpd/bgp_flowspec.o
  CC       bgpd/bgp_flowspec_util.o
  CC       bgpd/bgp_flowspec_vty.o
  CC       bgpd/bgp_fsm.o
Fedora 29 amd64 build: Failed (click for details) Fedora 29 amd64 build: config.status output from configure script can be found at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/F29BUILD/config.status/config.status

Make failed for Fedora 29 amd64 build:
(see full Make log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10176/artifact/F29BUILD/ErrorLog/log_make.txt)

  CC       lib/json.lo
  CC       lib/keychain.lo
  CC       lib/lib_errors.lo
  CC       lib/libfrr.lo
  CC       lib/linklist.lo
  CC       lib/log.lo
  CLIPPY   lib/log_vty_clippy.c
  CC       lib/log_vty.lo
  CC       lib/md5.lo
Successful on other platforms
  • NetBSD 6 amd64 build
  • CentOS 7 amd64 build
  • Debian 8 amd64 build
  • Ubuntu 14.04 amd64 build
  • OpenBSD 6 amd64 build
  • NetBSD 8 amd64 build
  • Ubuntu 16.04 amd64 build
  • Ubuntu 12.04 amd64 build
  • Ubuntu 16.04 i386 build

@LabN-CI
Copy link
Collaborator

LabN-CI commented Dec 20, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 3485d15
Date 12/20/2019
Start 02:05:23
Finish 02:31:13
Run-Time 25:50
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-12-20-02:05:23.txt
Log autoscript-2019-12-20-02:06:16.log.bz2
Memory 434 436 356

For details, please contact louberger

@LabN-CI
Copy link
Collaborator

LabN-CI commented Dec 20, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 a8d27b2
Date 12/20/2019
Start 04:30:24
Finish 04:56:13
Run-Time 25:49
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-12-20-04:30:24.txt
Log autoscript-2019-12-20-04:31:17.log.bz2
Memory 431 436 360

For details, please contact louberger

@NetDEF-CI
Copy link
Collaborator

Continuous Integration Result: FAILED

See below for issues.
CI System Testrun URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10179/

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.

Get source / Pull Request: Successful

Building Stage: Successful

Basic Tests: Failed

Topotest tests on Ubuntu 16.04 i386: Failed (click for details) Topotest tests on Ubuntu 16.04 i386: Unknown Log URL: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10179/artifact/TOPOI386/ErrorLog/ Topotest tests on Ubuntu 16.04 i386: No useful log found
Successful on other platforms
  • Topology tests on Ubuntu 16.04 amd64
  • IPv4 protocols on Ubuntu 14.04
  • Debian 9 deb pkg check
  • Fedora 29 rpm pkg check
  • IPv4 ldp protocol on Ubuntu 16.04
  • Ubuntu 14.04 deb pkg check
  • Ubuntu 12.04 deb pkg check
  • Static analyzer (clang)
  • Topology tests on Ubuntu 18.04 amd64
  • IPv6 protocols on Ubuntu 14.04
  • Ubuntu 16.04 deb pkg check
  • Debian 10 deb pkg check
  • CentOS 7 rpm pkg check
  • Addresssanitizer topotest
  • Debian 8 deb pkg check

Topology Tests memory analysis: https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10179/artifact/TOPOI386/MemoryLeaks/

CLANG Static Analyzer Summary

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

1 Static Analyzer issues remaining.

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

@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-10191/

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.


CLANG Static Analyzer Summary

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

1 Static Analyzer issues remaining.

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

@NaveenThanikachalam NaveenThanikachalam force-pushed the rmap branch 4 times, most recently from aed2f26 to b00f495 Compare December 22, 2019 01:47
@LabN-CI
Copy link
Collaborator

LabN-CI commented Dec 22, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result 0
Date 0
Start 0
Finish vncregress-2019-12-21-20:30:23.txt
Run-Time autoscript-2019-12-21-20:31:17.log.bz2
Total 431 420 360
Pass SUCCESS git merge/4808 c802e65
Fail 08/08/2019
Valgrind-Errors 20:30:25
Valgrind-Loss 20:52:11
Details 21:46
Log 1815
Memory 1814
SUCCESS git merge/5270 d0ff06b 1
12/21/2019 0
20:30:23 0
20:56:18 vncregress-2019-08-08-20:30:25.txt
25:55 autoscript-2019-08-08-20:31:18.log.bz2
1815 428 434 360
1815

For details, please contact louberger

@LabN-CI
Copy link
Collaborator

LabN-CI commented Dec 22, 2019

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 b00f495
Date 12/21/2019
Start 21:00:23
Finish 21:26:08
Run-Time 25:45
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2019-12-21-21:00:23.txt
Log autoscript-2019-12-21-21:01:16.log.bz2
Memory 421 436 360

For details, please contact louberger

@riw777
Copy link
Member

riw777 commented Dec 22, 2019

These changes look good to me, but it would be good to get either @donaldsharp or @eqvinox to take a look before committing.

@qlyoung
Copy link
Member

qlyoung commented Feb 11, 2020

We'll leave this until Friday to see if David comes back around to it then have another look at it.

* This commit introduces the building blocks.
    A per-route-map prefix tree is introduced.
    This tree will consist of the prefixes defined within the prefix-lists
    that are added to the match clause of that route-map.

Signed-off-by: NaveenThanikachalam <nthanikachal@vmware.com>
This commit introduces the logic that computes the best-match route-map index
for a given prefix.

Signed-off-by: NaveenThanikachalam <nthanikachal@vmware.com>
* This commit implements the code style suggestions from Polychaeta.
* This commit also introduces a CLI to toggle the optimization and, a hidden
  CLI to display the contents of the constructed prefix tree.

Signed-off-by: NaveenThanikachalam <nthanikachal@vmware.com>
The commit includes the documentation for the newly introduced
commands to enable/disable the optimization.

Signed-off-by: NaveenThanikachalam <nthanikachal@vmware.com>
@LabN-CI
Copy link
Collaborator

LabN-CI commented Feb 18, 2020

💚 Basic BGPD CI results: SUCCESS, 0 tests failed

Results table
_ _
Result SUCCESS git merge/5270 009d25a
Date 02/18/2020
Start 05:10:24
Finish 05:36:28
Run-Time 26:04
Total 1815
Pass 1815
Fail 0
Valgrind-Errors 0
Valgrind-Loss 0
Details vncregress-2020-02-18-05:10:24.txt
Log autoscript-2020-02-18-05:11:21.log.bz2
Memory 488 490 418

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-10762/

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:

Debian 10 amd64 build: Successful with additional warnings

Debian Package lintian failed for Debian 10 amd64 build:
(see full package build log at https://ci1.netdef.org/browse/FRR-FRRPULLREQ-10762/artifact/DEB10BUILD/ErrorLog/log_lintian.txt)

W: frr source: pkg-js-tools-test-is-missing
W: frr source: pkg-js-tools-test-is-missing
W: frr-pythontools: changelog-file-missing-explicit-entry 6.0-2 -> 7.4-dev-20200218-05-g009d25a06-0 (missing) -> 7.4-dev-20200218-05-g009d25a06-0~deb10u1
W: frr-doc: changelog-file-missing-explicit-entry 6.0-2 -> 7.4-dev-20200218-05-g009d25a06-0 (missing) -> 7.4-dev-20200218-05-g009d25a06-0~deb10u1
W: frr-rpki-rtrlib: changelog-file-missing-explicit-entry 6.0-2 -> 7.4-dev-20200218-05-g009d25a06-0 (missing) -> 7.4-dev-20200218-05-g009d25a06-0~deb10u1
W: frr-snmp: changelog-file-missing-explicit-entry 6.0-2 -> 7.4-dev-20200218-05-g009d25a06-0 (missing) -> 7.4-dev-20200218-05-g009d25a06-0~deb10u1
W: frr: changelog-file-missing-explicit-entry 6.0-2 -> 7.4-dev-20200218-05-g009d25a06-0 (missing) -> 7.4-dev-20200218-05-g009d25a06-0~deb10u1
<TITLE>clang_check</TITLE>

clang_check

@donaldsharp donaldsharp merged commit 64c0f43 into FRRouting:master Feb 25, 2020
@NaveenThanikachalam NaveenThanikachalam deleted the rmap branch April 7, 2020 06:23
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.

8 participants