mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 14:27:36 +00:00
sharpd: Allow route install/removal of v6 routes.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
6a923ca462
commit
dbc1bf462b
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user