sharpd: Allow route install/removal of v6 routes.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2019-01-09 18:58:36 -05:00
parent 6a923ca462
commit dbc1bf462b
2 changed files with 44 additions and 13 deletions

View File

@ -90,11 +90,12 @@ DEFPY(watch_nexthop_v4, watch_nexthop_v4_cmd,
DEFPY (install_routes, DEFPY (install_routes,
install_routes_cmd, install_routes_cmd,
"sharp install routes A.B.C.D$start <nexthop <A.B.C.D$nexthop4|X:X::X:X$nexthop6>|nexthop-group NAME$nexthop_group> (1-1000000)$routes [instance (0-255)$instance] [repeat (2-1000)$rpt]", "sharp install routes <A.B.C.D$start4|X:X::X:X$start6> <nexthop <A.B.C.D$nexthop4|X:X::X:X$nexthop6>|nexthop-group NAME$nexthop_group> (1-1000000)$routes [instance (0-255)$instance] [repeat (2-1000)$rpt]",
"Sharp routing Protocol\n" "Sharp routing Protocol\n"
"install some routes\n" "install some routes\n"
"Routes to install\n" "Routes to install\n"
"Address to start /32 generation at\n" "v4 Address to start /32 generation at\n"
"v6 Address to start /32 generation at\n"
"Nexthop to use(Can be an IPv4 or IPv6 address)\n" "Nexthop to use(Can be an IPv4 or IPv6 address)\n"
"V4 Nexthop address to use\n" "V4 Nexthop address to use\n"
"V6 Nexthop address to use\n" "V6 Nexthop address to use\n"
@ -119,9 +120,15 @@ DEFPY (install_routes,
memset(&nhop, 0, sizeof(nhop)); memset(&nhop, 0, sizeof(nhop));
memset(&nhop_group, 0, sizeof(nhop_group)); memset(&nhop_group, 0, sizeof(nhop_group));
prefix.family = AF_INET; if (start4.s_addr != 0) {
prefix.prefixlen = 32; prefix.family = AF_INET;
prefix.u.prefix4 = start; prefix.prefixlen = 32;
prefix.u.prefix4 = start4;
} else {
prefix.family = AF_INET6;
prefix.prefixlen = 128;
prefix.u.prefix6 = start6;
}
orig_prefix = prefix; orig_prefix = prefix;
if (nexthop_group) { if (nexthop_group) {
@ -185,7 +192,7 @@ DEFPY(vrf_label, vrf_label_cmd,
DEFPY (remove_routes, DEFPY (remove_routes,
remove_routes_cmd, remove_routes_cmd,
"sharp remove routes A.B.C.D$start (1-1000000)$routes [instance (0-255)$instance]", "sharp remove routes <A.B.C.D$start4|X:X::X:X$start6> (1-1000000)$routes [instance (0-255)$instance]",
"Sharp Routing Protocol\n" "Sharp Routing Protocol\n"
"Remove some routes\n" "Remove some routes\n"
"Routes to remove\n" "Routes to remove\n"
@ -199,9 +206,15 @@ DEFPY (remove_routes,
memset(&prefix, 0, sizeof(prefix)); memset(&prefix, 0, sizeof(prefix));
prefix.family = AF_INET; if (start4.s_addr != 0) {
prefix.prefixlen = 32; prefix.family = AF_INET;
prefix.u.prefix4 = start; prefix.prefixlen = 32;
prefix.u.prefix4 = start4;
} else {
prefix.family = AF_INET6;
prefix.prefixlen = 128;
prefix.u.prefix6 = start6;
}
inst = instance; inst = instance;
rts = routes; rts = routes;

View File

@ -142,13 +142,22 @@ void sharp_install_routes_helper(struct prefix *p, uint8_t instance,
uint32_t routes) uint32_t routes)
{ {
uint32_t temp, i; uint32_t temp, i;
bool v4 = false;
zlog_debug("Inserting %u routes", routes); zlog_debug("Inserting %u routes", routes);
temp = ntohl(p->u.prefix4.s_addr); if (p->family == AF_INET) {
v4 = true;
temp = ntohl(p->u.prefix4.s_addr);
} else
temp = ntohl(p->u.val32[3]);
for (i = 0; i < routes; i++) { for (i = 0; i < routes; i++) {
route_add(p, (uint8_t)instance, nhg); route_add(p, (uint8_t)instance, nhg);
p->u.prefix4.s_addr = htonl(++temp); if (v4)
p->u.prefix4.s_addr = htonl(++temp);
else
p->u.val32[3] = htonl(++temp);
} }
} }
@ -156,13 +165,22 @@ void sharp_remove_routes_helper(struct prefix *p, uint8_t instance,
uint32_t routes) uint32_t routes)
{ {
uint32_t temp, i; uint32_t temp, i;
bool v4 = false;
zlog_debug("Removing %u routes", routes); zlog_debug("Removing %u routes", routes);
temp = ntohl(p->u.prefix4.s_addr); if (p->family == AF_INET) {
v4 = true;
temp = ntohl(p->u.prefix4.s_addr);
} else
temp = ntohl(p->u.val32[3]);
for (i = 0; i < routes; i++) { for (i = 0; i < routes; i++) {
route_delete(p, (uint8_t)instance); route_delete(p, (uint8_t)instance);
p->u.prefix4.s_addr = htonl(++temp); if (v4)
p->u.prefix4.s_addr = htonl(++temp);
else
p->u.val32[3] = htonl(++temp);
} }
} }