summaryrefslogtreecommitdiff
path: root/ripngd
diff options
context:
space:
mode:
authorAvneesh Sachdev <avneesh@opensourcerouting.org>2012-04-09 00:25:15 -0700
committerAvneesh Sachdev <avneesh@opensourcerouting.org>2012-04-09 00:25:15 -0700
commit3cf6c2b4e43f44a977d218c96c26250654ae333e (patch)
treee017cde2015fbf3ef6c250327428d7c6152aa8f7 /ripngd
parent01d7ff0a2166a422c56bd26f04fc22832a9e690b (diff)
parente96b312150d8e376c1ef463793d1929eca3618d5 (diff)
Merge branch 'quagga' into google-bgp-multipath
Conflicts: bgpd/bgp_route.c
Diffstat (limited to 'ripngd')
-rw-r--r--ripngd/.cvsignore14
-rw-r--r--ripngd/ripng_main.c9
-rw-r--r--ripngd/ripng_zebra.c200
-rw-r--r--ripngd/ripngd.c29
4 files changed, 91 insertions, 161 deletions
diff --git a/ripngd/.cvsignore b/ripngd/.cvsignore
deleted file mode 100644
index 48f45cef..00000000
--- a/ripngd/.cvsignore
+++ /dev/null
@@ -1,14 +0,0 @@
-Makefile
-Makefile.in
-*.o
-ripngd
-ripngd.conf
-tags
-TAGS
-.deps
-.nfs*
-*.lo
-*.la
-*.libs
-.arch-inventory
-.arch-ids
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index 85209a15..f4a62440 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -47,6 +47,7 @@ struct option longopts[] =
{ "daemon", no_argument, NULL, 'd'},
{ "config_file", required_argument, NULL, 'f'},
{ "pid_file", required_argument, NULL, 'i'},
+ { "socket", required_argument, NULL, 'z'},
{ "dryrun", no_argument, NULL, 'C'},
{ "help", no_argument, NULL, 'h'},
{ "vty_addr", required_argument, NULL, 'A'},
@@ -112,6 +113,7 @@ Daemon which manages RIPng.\n\n\
-d, --daemon Runs in daemon mode\n\
-f, --config_file Set configuration file name\n\
-i, --pid_file Set process identifier file name\n\
+-z, --socket Set path of zebra socket\n\
-A, --vty_addr Set vty's bind address\n\
-P, --vty_port Set vty's port number\n\
-r, --retain When program terminates, retain added route by ripngd.\n\
@@ -205,7 +207,7 @@ main (int argc, char **argv)
{
int opt;
- opt = getopt_long (argc, argv, "df:i:hA:P:u:g:vC", longopts, 0);
+ opt = getopt_long (argc, argv, "df:i:z:hA:P:u:g:vC", longopts, 0);
if (opt == EOF)
break;
@@ -225,7 +227,10 @@ main (int argc, char **argv)
break;
case 'i':
pid_file = optarg;
- break;
+ break;
+ case 'z':
+ zclient_serv_path_set (optarg);
+ break;
case 'P':
/* Deal with atoi() returning 0 on failure, and ripngd not
listening on ripngd port... */
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 4c444550..8e766062 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -53,6 +53,7 @@ ripng_zebra_ipv6_add (struct prefix_ipv6 *p, struct in6_addr *nexthop,
api.type = ZEBRA_ROUTE_RIPNG;
api.flags = 0;
api.message = 0;
+ api.safi = SAFI_UNICAST;
SET_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP);
api.nexthop_num = 1;
api.nexthop = &nexthop;
@@ -77,6 +78,7 @@ ripng_zebra_ipv6_delete (struct prefix_ipv6 *p, struct in6_addr *nexthop,
api.type = ZEBRA_ROUTE_RIPNG;
api.flags = 0;
api.message = 0;
+ api.safi = SAFI_UNICAST;
SET_FLAG (api.message, ZAPI_MESSAGE_NEXTHOP);
api.nexthop_num = 1;
api.nexthop = &nexthop;
@@ -215,7 +217,8 @@ static struct {
{ZEBRA_ROUTE_CONNECT, 1, "connected"},
{ZEBRA_ROUTE_STATIC, 1, "static"},
{ZEBRA_ROUTE_OSPF6, 1, "ospf6"},
- {ZEBRA_ROUTE_BGP, 1, "bgp"},
+ {ZEBRA_ROUTE_BGP, 2, "bgp"},
+ {ZEBRA_ROUTE_BABEL, 2, "babel"},
{0, 0, NULL}
};
@@ -287,198 +290,147 @@ DEFUN (no_ripng_redistribute_ripng,
DEFUN (ripng_redistribute_type,
ripng_redistribute_type_cmd,
- "redistribute (kernel|connected|static|ospf6|bgp)",
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n")
+ "redistribute " QUAGGA_REDIST_STR_RIPNGD,
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD)
{
- int i;
+ int type;
- for(i = 0; redist_type[i].str; i++)
+ type = proto_redistnum(AFI_IP6, argv[0]);
+
+ if (type < 0)
{
- if (strncmp (redist_type[i].str, argv[0],
- redist_type[i].str_min_len) == 0)
- {
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, redist_type[i].type);
- return CMD_SUCCESS;
- }
+ vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
}
- vty_out(vty, "Invalid type %s%s", argv[0],
- VTY_NEWLINE);
-
- return CMD_WARNING;
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ return CMD_SUCCESS;
}
DEFUN (no_ripng_redistribute_type,
no_ripng_redistribute_type_cmd,
- "no redistribute (kernel|connected|static|ospf6|bgp)",
+ "no redistribute " QUAGGA_REDIST_STR_RIPNGD,
NO_STR
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n")
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD)
{
- int i;
+ int type;
- for (i = 0; redist_type[i].str; i++)
+ type = proto_redistnum(AFI_IP6, argv[0]);
+
+ if (type < 0)
{
- if (strncmp(redist_type[i].str, argv[0],
- redist_type[i].str_min_len) == 0)
- {
- ripng_redistribute_metric_unset (redist_type[i].type);
- ripng_redistribute_routemap_unset (redist_type[i].type);
- return ripng_redistribute_unset (redist_type[i].type);
- }
+ vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
}
- vty_out(vty, "Invalid type %s%s", argv[0],
- VTY_NEWLINE);
-
- return CMD_WARNING;
+ ripng_redistribute_metric_unset (type);
+ ripng_redistribute_routemap_unset (type);
+ return ripng_redistribute_unset (type);
}
DEFUN (ripng_redistribute_type_metric,
ripng_redistribute_type_metric_cmd,
- "redistribute (kernel|connected|static|ospf6|bgp) metric <0-16>",
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "redistribute " QUAGGA_REDIST_STR_RIPNGD " metric <0-16>",
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Metric\n"
"Metric value\n")
{
- int i;
+ int type;
int metric;
metric = atoi (argv[1]);
+ type = proto_redistnum(AFI_IP6, argv[0]);
- for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[0],
- redist_type[i].str_min_len) == 0)
- {
- ripng_redistribute_metric_set (redist_type[i].type, metric);
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, redist_type[i].type);
- return CMD_SUCCESS;
- }
- }
-
- vty_out(vty, "Invalid type %s%s", argv[0],
- VTY_NEWLINE);
+ if (type < 0)
+ {
+ vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return CMD_WARNING;
+ ripng_redistribute_metric_set (type, metric);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ return CMD_SUCCESS;
}
ALIAS (no_ripng_redistribute_type,
no_ripng_redistribute_type_metric_cmd,
- "no redistribute (kernel|connected|static|ospf6|bgp) metric <0-16>",
+ "no redistribute " QUAGGA_REDIST_STR_RIPNGD " metric <0-16>",
NO_STR
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Metric\n"
"Metric value\n")
DEFUN (ripng_redistribute_type_routemap,
ripng_redistribute_type_routemap_cmd,
- "redistribute (kernel|connected|static|ospf6|bgp) route-map WORD",
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "redistribute " QUAGGA_REDIST_STR_RIPNGD " route-map WORD",
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Route map reference\n"
"Pointer to route-map entries\n")
{
- int i;
+ int type;
- for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[0],
- redist_type[i].str_min_len) == 0)
- {
- ripng_redistribute_routemap_set (redist_type[i].type, argv[1]);
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, redist_type[i].type);
- return CMD_SUCCESS;
- }
- }
+ type = proto_redistnum(AFI_IP6, argv[0]);
- vty_out(vty, "Invalid type %s%s", argv[0],
- VTY_NEWLINE);
+ if (type < 0)
+ {
+ vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return CMD_WARNING;
+ ripng_redistribute_routemap_set (type, argv[1]);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ return CMD_SUCCESS;
}
ALIAS (no_ripng_redistribute_type,
no_ripng_redistribute_type_routemap_cmd,
- "no redistribute (kernel|connected|static|ospf6|bgp) route-map WORD",
+ "no redistribute " QUAGGA_REDIST_STR_RIPNGD " route-map WORD",
NO_STR
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Route map reference\n"
"Pointer to route-map entries\n")
DEFUN (ripng_redistribute_type_metric_routemap,
ripng_redistribute_type_metric_routemap_cmd,
- "redistribute (kernel|connected|static|ospf6|bgp) metric <0-16> route-map WORD",
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "redistribute " QUAGGA_REDIST_STR_RIPNGD " metric <0-16> route-map WORD",
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Metric\n"
"Metric value\n"
"Route map reference\n"
"Pointer to route-map entries\n")
{
- int i;
+ int type;
int metric;
+ type = proto_redistnum(AFI_IP6, argv[0]);
metric = atoi (argv[1]);
- for (i = 0; redist_type[i].str; i++) {
- if (strncmp(redist_type[i].str, argv[0],
- redist_type[i].str_min_len) == 0)
- {
- ripng_redistribute_metric_set (redist_type[i].type, metric);
- ripng_redistribute_routemap_set (redist_type[i].type, argv[2]);
- zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, redist_type[i].type);
- return CMD_SUCCESS;
- }
- }
-
- vty_out(vty, "Invalid type %s%s", argv[0],
- VTY_NEWLINE);
+ if (type < 0)
+ {
+ vty_out(vty, "Invalid type %s%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return CMD_WARNING;
+ ripng_redistribute_metric_set (type, metric);
+ ripng_redistribute_routemap_set (type, argv[2]);
+ zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, type);
+ return CMD_SUCCESS;
}
ALIAS (no_ripng_redistribute_type,
no_ripng_redistribute_type_metric_routemap_cmd,
- "no redistribute (kernel|connected|static|ospf6|bgp) metric <0-16> route-map WORD",
+ "no redistribute " QUAGGA_REDIST_STR_RIPNGD " metric <0-16> route-map WORD",
NO_STR
- "Redistribute information from another routing protocol\n"
- "Kernel routes\n"
- "Connected\n"
- "Static routes\n"
- "Open Shortest Path First (OSPFv3)\n"
- "Border Gateway Protocol (BGP)\n"
+ "Redistribute\n"
+ QUAGGA_REDIST_HELP_STR_RIPNGD
"Route map reference\n"
"Pointer to route-map entries\n")
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index 6e32d83c..8e97c2f8 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -117,6 +117,11 @@ ripng_make_socket (void)
ret = setsockopt_ipv6_pktinfo (sock, 1);
if (ret < 0)
return ret;
+#ifdef IPTOS_PREC_INTERNETCONTROL
+ ret = setsockopt_ipv6_tclass (sock, IPTOS_PREC_INTERNETCONTROL);
+ if (ret < 0)
+ return ret;
+#endif
ret = setsockopt_ipv6_multicast_hops (sock, 255);
if (ret < 0)
return ret;
@@ -2480,28 +2485,10 @@ DEFUN (ripng_timers,
unsigned long update;
unsigned long timeout;
unsigned long garbage;
- char *endptr = NULL;
- update = strtoul (argv[0], &endptr, 10);
- if (update == ULONG_MAX || *endptr != '\0')
- {
- vty_out (vty, "update timer value error%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- timeout = strtoul (argv[1], &endptr, 10);
- if (timeout == ULONG_MAX || *endptr != '\0')
- {
- vty_out (vty, "timeout timer value error%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- garbage = strtoul (argv[2], &endptr, 10);
- if (garbage == ULONG_MAX || *endptr != '\0')
- {
- vty_out (vty, "garbage timer value error%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ VTY_GET_INTEGER_RANGE("update timer", update, argv[0], 0, 65535);
+ VTY_GET_INTEGER_RANGE("timeout timer", timeout, argv[1], 0, 65535);
+ VTY_GET_INTEGER_RANGE("garbage timer", garbage, argv[2], 0, 65535);
/* Set each timer value. */
ripng->update_time = update;