forked from FRRouting/frr
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
sharpd: Add Super Happy Advanced Routing Protocol
Add a daemon that will allow us to test the zapi as well as test route install/removal times from the kernel. The current commands are: install route <starting ip address> nexthop <nexthop> (1-1000000) This command starts installing at <starting ip address>/32 (1-100000) routes that it auto-increments by 1 Installation start time is noted in the log and finish time is noted as well. remove routes <starting ip address> (1-1000000) This command removes routes at <starting ip address>/32 and removes (1-100000) routes created by the install route command. This code can be considered experimental and *is not* something that should be run in a production environment. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
- Loading branch information
1 parent
ca89087
commit 8a71d93
Showing
22 changed files
with
591 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
/* | ||
* SHARP - main code | ||
* Copyright (C) Cumulus Networks, Inc. | ||
* Donald Sharp | ||
* | ||
* This file is part of FRR. | ||
* | ||
* FRR is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2, or (at your option) any | ||
* later version. | ||
* | ||
* FRR is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License along | ||
* with this program; see the file COPYING; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
#include <zebra.h> | ||
|
||
#include <lib/version.h> | ||
#include "getopt.h" | ||
#include "thread.h" | ||
#include "prefix.h" | ||
#include "linklist.h" | ||
#include "if.h" | ||
#include "vector.h" | ||
#include "vty.h" | ||
#include "command.h" | ||
#include "filter.h" | ||
#include "plist.h" | ||
#include "stream.h" | ||
#include "log.h" | ||
#include "memory.h" | ||
#include "privs.h" | ||
#include "sigevent.h" | ||
#include "zclient.h" | ||
#include "keychain.h" | ||
#include "distribute.h" | ||
#include "libfrr.h" | ||
#include "routemap.h" | ||
|
||
#include "sharp_zebra.h" | ||
#include "sharp_vty.h" | ||
|
||
uint32_t total_routes = 0; | ||
uint32_t installed_routes = 0; | ||
uint32_t removed_routes = 0; | ||
|
||
zebra_capabilities_t _caps_p[] = { | ||
ZCAP_NET_RAW, ZCAP_BIND, ZCAP_NET_ADMIN, | ||
}; | ||
|
||
struct zebra_privs_t sharp_privs = { | ||
#if defined(FRR_USER) && defined(FRR_GROUP) | ||
.user = FRR_USER, | ||
.group = FRR_GROUP, | ||
#endif | ||
#if defined(VTY_GROUP) | ||
.vty_group = VTY_GROUP, | ||
#endif | ||
.caps_p = _caps_p, | ||
.cap_num_p = array_size(_caps_p), | ||
.cap_num_i = 0}; | ||
|
||
struct option longopts[] = {{0}}; | ||
|
||
/* Master of threads. */ | ||
struct thread_master *master; | ||
|
||
/* SIGHUP handler. */ | ||
static void sighup(void) | ||
{ | ||
zlog_info("SIGHUP received"); | ||
} | ||
|
||
/* SIGINT / SIGTERM handler. */ | ||
static void sigint(void) | ||
{ | ||
zlog_notice("Terminating on signal"); | ||
|
||
exit(0); | ||
} | ||
|
||
/* SIGUSR1 handler. */ | ||
static void sigusr1(void) | ||
{ | ||
zlog_rotate(); | ||
} | ||
|
||
struct quagga_signal_t sharp_signals[] = { | ||
{ | ||
.signal = SIGHUP, | ||
.handler = &sighup, | ||
}, | ||
{ | ||
.signal = SIGUSR1, | ||
.handler = &sigusr1, | ||
}, | ||
{ | ||
.signal = SIGINT, | ||
.handler = &sigint, | ||
}, | ||
{ | ||
.signal = SIGTERM, | ||
.handler = &sigint, | ||
}, | ||
}; | ||
|
||
#define SHARP_VTY_PORT 2614 | ||
|
||
FRR_DAEMON_INFO(sharpd, SHARP, .vty_port = SHARP_VTY_PORT, | ||
|
||
.proghelp = "Implementation of a Sharp of routes daemon.", | ||
|
||
.signals = sharp_signals, | ||
.n_signals = array_size(sharp_signals), | ||
|
||
.privs = &sharp_privs, ) | ||
|
||
extern void sharp_vty_init(void); | ||
|
||
int main(int argc, char **argv, char **envp) | ||
{ | ||
frr_preinit(&sharpd_di, argc, argv); | ||
frr_opt_add("", longopts, ""); | ||
|
||
while (1) { | ||
int opt; | ||
|
||
opt = frr_getopt(argc, argv, NULL); | ||
|
||
if (opt == EOF) | ||
break; | ||
|
||
switch (opt) { | ||
case 0: | ||
break; | ||
default: | ||
frr_help_exit(1); | ||
break; | ||
} | ||
} | ||
|
||
master = frr_init(); | ||
|
||
vrf_init(NULL, NULL, NULL, NULL); | ||
|
||
sharp_zebra_init(); | ||
|
||
/* Get configuration file. */ | ||
sharp_vty_init(); | ||
|
||
frr_config_fork(); | ||
frr_run(master); | ||
|
||
/* Not reached. */ | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
/* | ||
* SHARP - vty code | ||
* Copyright (C) Cumulus Networks, Inc. | ||
* Donald Sharp | ||
* | ||
* This file is part of FRR. | ||
* | ||
* FRR is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2, or (at your option) any | ||
* later version. | ||
* | ||
* FRR is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License along | ||
* with this program; see the file COPYING; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
#include <zebra.h> | ||
|
||
#include "vty.h" | ||
#include "command.h" | ||
#include "prefix.h" | ||
#include "nexthop.h" | ||
#include "log.h" | ||
|
||
#include "sharpd/sharp_zebra.h" | ||
#include "sharpd/sharp_vty.h" | ||
#include "sharpd/sharp_vty_clippy.c" | ||
|
||
extern uint32_t total_routes; | ||
extern uint32_t installed_routes; | ||
extern uint32_t removed_routes; | ||
|
||
DEFPY (install_routes, | ||
install_routes_cmd, | ||
"install routes A.B.C.D$start nexthop A.B.C.D$nexthop (1-1000000)$routes", | ||
"install some routes\n" | ||
"Routes to install\n" | ||
"Address to start /32 generation at\n" | ||
"Nexthop to use\n" | ||
"Nexthop address\n" | ||
"How many to create\n") | ||
{ | ||
int i; | ||
struct prefix p; | ||
struct nexthop nhop; | ||
uint32_t temp; | ||
|
||
total_routes = routes; | ||
installed_routes = 0; | ||
|
||
memset(&p, 0, sizeof(p)); | ||
memset(&nhop, 0, sizeof(nhop)); | ||
|
||
p.family = AF_INET; | ||
p.prefixlen = 32; | ||
p.u.prefix4 = start; | ||
|
||
nhop.gate.ipv4 = nexthop; | ||
nhop.type = NEXTHOP_TYPE_IPV4; | ||
|
||
zlog_debug("Inserting %ld routes", routes); | ||
|
||
temp = ntohl(p.u.prefix4.s_addr); | ||
for (i = 0 ; i < routes ; i++) { | ||
route_add(&p, &nhop); | ||
p.u.prefix4.s_addr = htonl(++temp); | ||
} | ||
|
||
return CMD_SUCCESS; | ||
} | ||
|
||
DEFPY (remove_routes, | ||
remove_routes_cmd, | ||
"remove routes A.B.C.D$start (1-1000000)$routes", | ||
"Remove some routes\n" | ||
"Routes to remove\n" | ||
"Starting spot\n" | ||
"Routes to uniinstall\n") | ||
{ | ||
int i; | ||
struct prefix p; | ||
uint32_t temp; | ||
|
||
total_routes = routes; | ||
removed_routes = 0; | ||
|
||
memset(&p, 0, sizeof(p)); | ||
|
||
p.family = AF_INET; | ||
p.prefixlen = 32; | ||
p.u.prefix4 = start; | ||
|
||
zlog_debug("Removing %ld routes", routes); | ||
|
||
temp = ntohl(p.u.prefix4.s_addr); | ||
for (i = 0; i < routes ; i++) { | ||
route_delete(&p); | ||
p.u.prefix4.s_addr = htonl(++temp); | ||
} | ||
|
||
return CMD_SUCCESS; | ||
} | ||
|
||
void sharp_vty_init(void) | ||
{ | ||
install_element(ENABLE_NODE, &install_routes_cmd); | ||
install_element(ENABLE_NODE, &remove_routes_cmd); | ||
return; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/* | ||
* VTY library for SHARP | ||
* Copyright (C) Cumulus Networks, Inc. | ||
* Donald Sharp | ||
* | ||
* This file is part of FRR. | ||
* | ||
* FRR is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the | ||
* Free Software Foundation; either version 2, or (at your option) any | ||
* later version. | ||
* | ||
* FRR is distributed in the hope that it will be useful, but | ||
* WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
* General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License along | ||
* with this program; see the file COPYING; if not, write to the Free Software | ||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
#ifndef __SHARP_VTY_H__ | ||
#define __SHARP_VTY_H__ | ||
|
||
extern void sharp_vty_init(void); | ||
#endif |
Oops, something went wrong.