summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/user/installation.rst5
-rw-r--r--doc/user/zebra.rst14
-rw-r--r--isisd/isis_circuit.c15
-rw-r--r--zebra/zebra_netns_notify.c3
-rw-r--r--zebra/zebra_pbr.c2
5 files changed, 19 insertions, 20 deletions
diff --git a/doc/user/installation.rst b/doc/user/installation.rst
index a9fceee556..e50eb88406 100644
--- a/doc/user/installation.rst
+++ b/doc/user/installation.rst
@@ -117,11 +117,6 @@ customize the build to include or exclude specific features and dependencies.
Enable Traffic Engineering Extension for ISIS (RFC5305)
-.. option:: --enable-multipath <ARG>
-
- Enable support for Equal Cost Multipath. `ARG` is the maximum number
- of ECMP paths to allow, set to 0 to allow unlimited number of paths.
-
.. option:: --enable-realms
Enable the support of Linux Realms. Convert tag values from 1-255 into a
diff --git a/doc/user/zebra.rst b/doc/user/zebra.rst
index 417723919a..96162cb0a6 100644
--- a/doc/user/zebra.rst
+++ b/doc/user/zebra.rst
@@ -42,11 +42,10 @@ Besides the common invocation options (:ref:`common-invocation-options`), the
When *Zebra* starts with this option, the VRF backend is based on Linux
network namespaces. That implies that all network namespaces discovered by
- ZEBRA will create an associated VRF. The other daemons will operate on the VRF
- VRF defined by *Zebra*, as usual. More information in the :ref:`VRF Commands`
- chapter.
+ ZEBRA will create an associated VRF. The other daemons will operate on the
+ VRF defined by *Zebra*, as usual.
-.. program:: configure
+ .. seealso:: :ref:`zebra-vrf`
.. _interface-commands:
@@ -388,7 +387,7 @@ default) should the specified gateways not be reachable. E.g.:
and later). After setting TABLENO with this command,
static routes defined after this are added to the specified table.
-.. _multicast-rib-commands:
+.. _zebra-vrf:
VRF (Virtual Routing and Forwarding)
====================================
@@ -476,7 +475,7 @@ commands in relationship to VRF. Here is an extract of some of those commands:
on configuration mode, this applies to default VRF. Otherwise, this command
applies to the VRF of the vrf configuration mode. This command is used to
configure a vrf route leak across 2 VRFs. This command is only available when
- *Zebra* is launched without :option:`-n` option.
+ *Zebra* is launched without :option:`-n` option.
.. index:: ip route NETWORK NETMASK GATEWAY table TABLENO
.. clicmd:: ip route NETWORK NETMASK GATEWAY table TABLENO
@@ -514,6 +513,7 @@ commands in relationship to VRF. Here is an extract of some of those commands:
ip route 10.0.0.0 255.255.255.0 10.0.0.2 vrf r1-cust1 table 43
show ip table vrf r1-cust1 table 43
+.. _multicast-rib-commands:
Multicast RIB Commands
======================
@@ -683,6 +683,8 @@ The FIB push interface comprises of a TCP connection between zebra and
the FPM. The connection is initiated by zebra -- that is, the FPM acts
as the TCP server.
+.. program:: configure
+
The relevant zebra code kicks in when zebra is configured with the
:option:`--enable-fpm` flag. Zebra periodically attempts to connect to
the well-known FPM port. Once the connection is up, zebra starts
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 6f4d72cb1f..41723f7316 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -638,7 +638,7 @@ int isis_circuit_up(struct isis_circuit *circuit)
thread_add_timer(master, isis_run_dr_l2, circuit,
2 * circuit->hello_interval[1],
&circuit->u.bc.t_run_dr[1]);
- } else {
+ } else if (circuit->circ_type == CIRCUIT_T_P2P) {
/* initializing the hello send threads
* for a ptp IF
*/
@@ -682,9 +682,6 @@ int isis_circuit_up(struct isis_circuit *circuit)
void isis_circuit_down(struct isis_circuit *circuit)
{
- if (circuit->state != C_STATE_UP)
- return;
-
/* Clear the flags for all the lsps of the circuit. */
isis_circuit_update_all_srmflags(circuit, 0);
@@ -756,10 +753,12 @@ void isis_circuit_down(struct isis_circuit *circuit)
}
/* send one gratuitous hello to spead up convergence */
- if (circuit->is_type & IS_LEVEL_1)
- send_hello(circuit, IS_LEVEL_1);
- if (circuit->is_type & IS_LEVEL_2)
- send_hello(circuit, IS_LEVEL_2);
+ if (circuit->state == C_STATE_UP) {
+ if (circuit->is_type & IS_LEVEL_1)
+ send_hello(circuit, IS_LEVEL_1);
+ if (circuit->is_type & IS_LEVEL_2)
+ send_hello(circuit, IS_LEVEL_2);
+ }
circuit->upadjcount[0] = 0;
circuit->upadjcount[1] = 0;
diff --git a/zebra/zebra_netns_notify.c b/zebra/zebra_netns_notify.c
index 30f850597c..b41d17df8c 100644
--- a/zebra/zebra_netns_notify.c
+++ b/zebra/zebra_netns_notify.c
@@ -80,6 +80,8 @@ static void zebra_ns_notify_create_context_from_entry_name(const char *name)
ns_id = zebra_ns_id_get(netnspath);
if (zserv_privs.change(ZPRIVS_LOWER))
zlog_err("Can't lower privileges");
+ if (ns_id == NS_UNKNOWN)
+ return;
ns_id_external = ns_map_nsid_with_external(ns_id, true);
/* if VRF with NS ID already present */
vrf = vrf_lookup_by_id((vrf_id_t)ns_id_external);
@@ -103,6 +105,7 @@ static void zebra_ns_notify_create_context_from_entry_name(const char *name)
if (ret != CMD_SUCCESS) {
zlog_warn("NS notify : failed to create NS %s", netnspath);
ns_map_nsid_with_external(ns_id, false);
+ vrf_delete(vrf);
return;
}
zlog_info("NS notify : created VRF %s NS %s", name, netnspath);
diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c
index 86e054795b..1fad6e0cd3 100644
--- a/zebra/zebra_pbr.c
+++ b/zebra/zebra_pbr.c
@@ -135,7 +135,7 @@ void zebra_pbr_rules_free(void *arg)
rule = (struct zebra_pbr_rule *)arg;
- kernel_del_pbr_rule(rule);
+ (void)kernel_del_pbr_rule(rule);
XFREE(MTYPE_TMP, rule);
}