forked from Mirror/frr
commit
3d3c38b1d4
|
@ -769,7 +769,7 @@ static void _bfd_session_update(struct bfd_session *bs,
|
||||||
* Apply profile last: it also calls `bfd_set_shutdown`.
|
* Apply profile last: it also calls `bfd_set_shutdown`.
|
||||||
*
|
*
|
||||||
* There is no problem calling `shutdown` twice if the value doesn't
|
* There is no problem calling `shutdown` twice if the value doesn't
|
||||||
* change or if it is overriden by peer specific configuration.
|
* change or if it is overridden by peer specific configuration.
|
||||||
*/
|
*/
|
||||||
if (bpc->bpc_has_profile)
|
if (bpc->bpc_has_profile)
|
||||||
bfd_profile_apply(bpc->bpc_profile, bs);
|
bfd_profile_apply(bpc->bpc_profile, bs);
|
||||||
|
|
|
@ -724,7 +724,7 @@ void bfd_profile_free(struct bfd_profile *bp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply a profile configuration to an existing BFD session. The non default
|
* Apply a profile configuration to an existing BFD session. The non default
|
||||||
* values will not be overriden.
|
* values will not be overridden.
|
||||||
*
|
*
|
||||||
* NOTE: if the profile doesn't exist yet, then the profile will be applied
|
* NOTE: if the profile doesn't exist yet, then the profile will be applied
|
||||||
* once it begins to exist.
|
* once it begins to exist.
|
||||||
|
|
|
@ -544,7 +544,7 @@ static void aspath_make_str_count(struct aspath *as, bool make_json)
|
||||||
|
|
||||||
seg = as->segments;
|
seg = as->segments;
|
||||||
|
|
||||||
/* ASN takes 5 to 10 chars plus seperator, see below.
|
/* ASN takes 5 to 10 chars plus separator, see below.
|
||||||
* If there is one differing segment type, we need an additional
|
* If there is one differing segment type, we need an additional
|
||||||
* 2 chars for segment delimiters, and the final '\0'.
|
* 2 chars for segment delimiters, and the final '\0'.
|
||||||
* Hopefully this is large enough to avoid hitting the realloc
|
* Hopefully this is large enough to avoid hitting the realloc
|
||||||
|
@ -560,17 +560,17 @@ static void aspath_make_str_count(struct aspath *as, bool make_json)
|
||||||
|
|
||||||
while (seg) {
|
while (seg) {
|
||||||
int i;
|
int i;
|
||||||
char seperator;
|
char separator;
|
||||||
|
|
||||||
/* Check AS type validity. Set seperator for segment */
|
/* Check AS type validity. Set separator for segment */
|
||||||
switch (seg->type) {
|
switch (seg->type) {
|
||||||
case AS_SET:
|
case AS_SET:
|
||||||
case AS_CONFED_SET:
|
case AS_CONFED_SET:
|
||||||
seperator = ',';
|
separator = ',';
|
||||||
break;
|
break;
|
||||||
case AS_SEQUENCE:
|
case AS_SEQUENCE:
|
||||||
case AS_CONFED_SEQUENCE:
|
case AS_CONFED_SEQUENCE:
|
||||||
seperator = ' ';
|
separator = ' ';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
XFREE(MTYPE_AS_STR, str_buf);
|
XFREE(MTYPE_AS_STR, str_buf);
|
||||||
|
@ -584,7 +584,7 @@ static void aspath_make_str_count(struct aspath *as, bool make_json)
|
||||||
|
|
||||||
/* We might need to increase str_buf, particularly if path has
|
/* We might need to increase str_buf, particularly if path has
|
||||||
* differing segments types, our initial guesstimate above will
|
* differing segments types, our initial guesstimate above will
|
||||||
* have been wrong. Need 10 chars for ASN, a seperator each and
|
* have been wrong. Need 10 chars for ASN, a separator each and
|
||||||
* potentially two segment delimiters, plus a space between each
|
* potentially two segment delimiters, plus a space between each
|
||||||
* segment and trailing zero.
|
* segment and trailing zero.
|
||||||
*
|
*
|
||||||
|
@ -607,7 +607,7 @@ static void aspath_make_str_count(struct aspath *as, bool make_json)
|
||||||
if (make_json)
|
if (make_json)
|
||||||
jseg_list = json_object_new_array();
|
jseg_list = json_object_new_array();
|
||||||
|
|
||||||
/* write out the ASNs, with their seperators, bar the last one*/
|
/* write out the ASNs, with their separators, bar the last one*/
|
||||||
for (i = 0; i < seg->length; i++) {
|
for (i = 0; i < seg->length; i++) {
|
||||||
if (make_json)
|
if (make_json)
|
||||||
json_object_array_add(
|
json_object_array_add(
|
||||||
|
@ -619,7 +619,7 @@ static void aspath_make_str_count(struct aspath *as, bool make_json)
|
||||||
|
|
||||||
if (i < (seg->length - 1))
|
if (i < (seg->length - 1))
|
||||||
len += snprintf(str_buf + len, str_size - len,
|
len += snprintf(str_buf + len, str_size - len,
|
||||||
"%c", seperator);
|
"%c", separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (make_json) {
|
if (make_json) {
|
||||||
|
@ -1917,7 +1917,7 @@ static const char *aspath_gettoken(const char *buf, enum as_token *token,
|
||||||
{
|
{
|
||||||
const char *p = buf;
|
const char *p = buf;
|
||||||
|
|
||||||
/* Skip seperators (space for sequences, ',' for sets). */
|
/* Skip separators (space for sequences, ',' for sets). */
|
||||||
while (isspace((unsigned char)*p) || *p == ',')
|
while (isspace((unsigned char)*p) || *p == ',')
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
|
|
|
@ -847,7 +847,7 @@ struct attr *bgp_attr_intern(struct attr *attr)
|
||||||
struct lcommunity *lcomm = NULL;
|
struct lcommunity *lcomm = NULL;
|
||||||
struct community *comm = NULL;
|
struct community *comm = NULL;
|
||||||
|
|
||||||
/* Intern referenced strucutre. */
|
/* Intern referenced structure. */
|
||||||
if (attr->aspath) {
|
if (attr->aspath) {
|
||||||
if (!attr->aspath->refcnt)
|
if (!attr->aspath->refcnt)
|
||||||
attr->aspath = aspath_intern(attr->aspath);
|
attr->aspath = aspath_intern(attr->aspath);
|
||||||
|
|
|
@ -300,7 +300,7 @@ void bgp_conditional_adv_enable(struct peer *peer, afi_t afi, safi_t safi)
|
||||||
*/
|
*/
|
||||||
peer->advmap_config_change[afi][safi] = true;
|
peer->advmap_config_change[afi][safi] = true;
|
||||||
|
|
||||||
/* advertise-map is already configured on atleast one of its
|
/* advertise-map is already configured on at least one of its
|
||||||
* neighbors (AFI/SAFI). So just increment the counter.
|
* neighbors (AFI/SAFI). So just increment the counter.
|
||||||
*/
|
*/
|
||||||
if (++bgp->condition_filter_count > 1) {
|
if (++bgp->condition_filter_count > 1) {
|
||||||
|
|
|
@ -210,7 +210,7 @@ ecommunity_uniq_sort_internal(struct ecommunity *ecom,
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function takes pointer to Extended Communites strucutre then
|
/* This function takes pointer to Extended Communites structure then
|
||||||
* create a new Extended Communities structure by uniq and sort each
|
* create a new Extended Communities structure by uniq and sort each
|
||||||
* Extended Communities value.
|
* Extended Communities value.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -103,7 +103,7 @@ static bool lcommunity_add_val(struct lcommunity *lcom,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function takes pointer to Large Communites strucutre then
|
/* This function takes pointer to Large Communites structure then
|
||||||
create a new Large Communities structure by uniq and sort each
|
create a new Large Communities structure by uniq and sort each
|
||||||
Large Communities value. */
|
Large Communities value. */
|
||||||
struct lcommunity *lcommunity_uniq_sort(struct lcommunity *lcom)
|
struct lcommunity *lcommunity_uniq_sort(struct lcommunity *lcom)
|
||||||
|
|
|
@ -323,7 +323,7 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop,
|
||||||
pi->extra->igpmetric = 0;
|
pi->extra->igpmetric = 0;
|
||||||
} else if (peer) {
|
} else if (peer) {
|
||||||
/*
|
/*
|
||||||
* Let's not accidently save the peer data for a peer
|
* Let's not accidentally save the peer data for a peer
|
||||||
* we are going to throw away in a second or so.
|
* we are going to throw away in a second or so.
|
||||||
* When we come back around we'll fix up this
|
* When we come back around we'll fix up this
|
||||||
* data properly in replace_nexthop_by_peer
|
* data properly in replace_nexthop_by_peer
|
||||||
|
|
|
@ -1253,10 +1253,10 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 13. Router-ID comparision. */
|
/* 13. Router-ID comparison. */
|
||||||
/* If one of the paths is "stale", the corresponding peer router-id will
|
/* If one of the paths is "stale", the corresponding peer router-id will
|
||||||
* be 0 and would always win over the other path. If originator id is
|
* be 0 and would always win over the other path. If originator id is
|
||||||
* used for the comparision, it will decide which path is better.
|
* used for the comparison, it will decide which path is better.
|
||||||
*/
|
*/
|
||||||
if (newattr->flag & ATTR_FLAG_BIT(BGP_ATTR_ORIGINATOR_ID))
|
if (newattr->flag & ATTR_FLAG_BIT(BGP_ATTR_ORIGINATOR_ID))
|
||||||
new_id.s_addr = newattr->originator_id.s_addr;
|
new_id.s_addr = newattr->originator_id.s_addr;
|
||||||
|
@ -1285,7 +1285,7 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 14. Cluster length comparision. */
|
/* 14. Cluster length comparison. */
|
||||||
new_cluster = BGP_CLUSTER_LIST_LENGTH(new->attr);
|
new_cluster = BGP_CLUSTER_LIST_LENGTH(new->attr);
|
||||||
exist_cluster = BGP_CLUSTER_LIST_LENGTH(exist->attr);
|
exist_cluster = BGP_CLUSTER_LIST_LENGTH(exist->attr);
|
||||||
|
|
||||||
|
@ -1309,7 +1309,7 @@ static int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 15. Neighbor address comparision. */
|
/* 15. Neighbor address comparison. */
|
||||||
/* Do this only if neither path is "stale" as stale paths do not have
|
/* Do this only if neither path is "stale" as stale paths do not have
|
||||||
* valid peer information (as the connection may or may not be up).
|
* valid peer information (as the connection may or may not be up).
|
||||||
*/
|
*/
|
||||||
|
@ -1598,7 +1598,7 @@ static int bgp_input_modifier(struct peer *peer, const struct prefix *p,
|
||||||
/* Route map apply. */
|
/* Route map apply. */
|
||||||
if (rmap) {
|
if (rmap) {
|
||||||
memset(&rmap_path, 0, sizeof(struct bgp_path_info));
|
memset(&rmap_path, 0, sizeof(struct bgp_path_info));
|
||||||
/* Duplicate current value to new strucutre for modification. */
|
/* Duplicate current value to new structure for modification. */
|
||||||
rmap_path.peer = peer;
|
rmap_path.peer = peer;
|
||||||
rmap_path.attr = attr;
|
rmap_path.attr = attr;
|
||||||
rmap_path.extra = &extra;
|
rmap_path.extra = &extra;
|
||||||
|
@ -1655,7 +1655,7 @@ static int bgp_output_modifier(struct peer *peer, const struct prefix *p,
|
||||||
|
|
||||||
memset(&rmap_path, 0, sizeof(struct bgp_path_info));
|
memset(&rmap_path, 0, sizeof(struct bgp_path_info));
|
||||||
/* Route map apply. */
|
/* Route map apply. */
|
||||||
/* Duplicate current value to new strucutre for modification. */
|
/* Duplicate current value to new structure for modification. */
|
||||||
rmap_path.peer = peer;
|
rmap_path.peer = peer;
|
||||||
rmap_path.attr = attr;
|
rmap_path.attr = attr;
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ elif test "$host" != "$build"; then
|
||||||
|
|
||||||
AC_MSG_NOTICE([...])
|
AC_MSG_NOTICE([...])
|
||||||
AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
|
AC_MSG_NOTICE([... cross-compilation: creating hosttools directory and self-configuring for build platform tools])
|
||||||
AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if neccessary])
|
AC_MSG_NOTICE([... use HOST_CPPFLAGS / HOST_CFLAGS / HOST_LDFLAGS if necessary])
|
||||||
AC_MSG_NOTICE([...])
|
AC_MSG_NOTICE([...])
|
||||||
|
|
||||||
(
|
(
|
||||||
|
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -989,7 +989,7 @@ quagga (0.98.3-6) testing-proposed-updates; urgency=high
|
||||||
quagga (0.98.3-5) unstable; urgency=high
|
quagga (0.98.3-5) unstable; urgency=high
|
||||||
|
|
||||||
* The patch which tried to remove the OpenSSL dependency, which is
|
* The patch which tried to remove the OpenSSL dependency, which is
|
||||||
not only unneccessary but also a violation of the licence and thus RC,
|
not only unnecessary but also a violation of the licence and thus RC,
|
||||||
stopped working a while ago, since autoreconf is no longer run before
|
stopped working a while ago, since autoreconf is no longer run before
|
||||||
building the binaries. So now ./configure is patched directly (thanks
|
building the binaries. So now ./configure is patched directly (thanks
|
||||||
to Faidon Liambotis for reporting). Closes: #306840
|
to Faidon Liambotis for reporting). Closes: #306840
|
||||||
|
@ -1370,7 +1370,7 @@ quagga (0.96.4x-3) unstable; urgency=low
|
||||||
* Made the directory (but not the config/log files!) world accessible
|
* Made the directory (but not the config/log files!) world accessible
|
||||||
again on user request (thanks to Anand Kumria)). Closes: #213129
|
again on user request (thanks to Anand Kumria)). Closes: #213129
|
||||||
* No longer providing sample configuration in /etc/quagga/. They are
|
* No longer providing sample configuration in /etc/quagga/. They are
|
||||||
now only available in /usr/share/doc/quagga/ to avoid accidently
|
now only available in /usr/share/doc/quagga/ to avoid accidentally
|
||||||
using them without changing the adresses (thanks to Marc Haber).
|
using them without changing the adresses (thanks to Marc Haber).
|
||||||
Closes: #215918
|
Closes: #215918
|
||||||
|
|
||||||
|
@ -1430,7 +1430,7 @@ quagga (0.96.3-1) unstable; urgency=medium
|
||||||
|
|
||||||
quagga (0.96.2-9) unstable; urgency=medium
|
quagga (0.96.2-9) unstable; urgency=medium
|
||||||
|
|
||||||
* Removed /usr/share/info/dir.* which were accidently there and prevented
|
* Removed /usr/share/info/dir.* which were accidentally there and prevented
|
||||||
the installation by dpkg (thanks to Simon Raven). Closes: #212614
|
the installation by dpkg (thanks to Simon Raven). Closes: #212614
|
||||||
* Reworded package description (thanks to Anand Kumria). Closes: #213125
|
* Reworded package description (thanks to Anand Kumria). Closes: #213125
|
||||||
* Added french debconf translation (thanks to Christian Perrier).
|
* Added french debconf translation (thanks to Christian Perrier).
|
||||||
|
|
|
@ -81,7 +81,7 @@ content:
|
||||||
MPLS must be invidividually enabled on each interface that requires it. See
|
MPLS must be invidividually enabled on each interface that requires it. See
|
||||||
the example in the config block above.
|
the example in the config block above.
|
||||||
|
|
||||||
Load the modifed sysctls on the system:
|
Load the modified sysctls on the system:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ content:
|
||||||
MPLS must be invidividually enabled on each interface that requires it. See
|
MPLS must be invidividually enabled on each interface that requires it. See
|
||||||
the example in the config block above.
|
the example in the config block above.
|
||||||
|
|
||||||
Load the modifed sysctls on the system:
|
Load the modified sysctls on the system:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ in the future:
|
||||||
The APIs are all designed to be as type-safe as possible. This means that
|
The APIs are all designed to be as type-safe as possible. This means that
|
||||||
there will be a compiler warning when an item doesn't match the container, or
|
there will be a compiler warning when an item doesn't match the container, or
|
||||||
the return value has a different type, or other similar situations. **You
|
the return value has a different type, or other similar situations. **You
|
||||||
should never use casts with these APIs.** If a cast is neccessary in relation
|
should never use casts with these APIs.** If a cast is necessary in relation
|
||||||
to these APIs, there is probably something wrong with the overall design.
|
to these APIs, there is probably something wrong with the overall design.
|
||||||
|
|
||||||
Only the following pieces use dynamically allocated memory:
|
Only the following pieces use dynamically allocated memory:
|
||||||
|
@ -143,7 +143,7 @@ Each of the data structures has a ``PREDECL_*`` and a ``DECLARE_*`` macro to
|
||||||
set up an "instantiation" of the container. This works somewhat similar to C++
|
set up an "instantiation" of the container. This works somewhat similar to C++
|
||||||
templating, though much simpler.
|
templating, though much simpler.
|
||||||
|
|
||||||
**In all following text, the Z prefix is replaced with a name choosen
|
**In all following text, the Z prefix is replaced with a name chosen
|
||||||
for the instance of the datastructure.**
|
for the instance of the datastructure.**
|
||||||
|
|
||||||
The common setup pattern will look like this:
|
The common setup pattern will look like this:
|
||||||
|
@ -650,7 +650,7 @@ Atomic lists
|
||||||
`atomlist.h` provides an unsorted and a sorted atomic single-linked list.
|
`atomlist.h` provides an unsorted and a sorted atomic single-linked list.
|
||||||
Since atomic memory accesses can be considerably slower than plain memory
|
Since atomic memory accesses can be considerably slower than plain memory
|
||||||
accessses (depending on the CPU type), these lists should only be used where
|
accessses (depending on the CPU type), these lists should only be used where
|
||||||
neccessary.
|
necessary.
|
||||||
|
|
||||||
The following guarantees are provided regarding concurrent access:
|
The following guarantees are provided regarding concurrent access:
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ like this:
|
||||||
Hopefully you get a nice, usable, PIC ``libpcre.a``.
|
Hopefully you get a nice, usable, PIC ``libpcre.a``.
|
||||||
|
|
||||||
So now we have to link all these static libraries into FRR. Rather than modify
|
So now we have to link all these static libraries into FRR. Rather than modify
|
||||||
FRR to accomodate this, the best option is to create an archive with all of
|
FRR to accommodate this, the best option is to create an archive with all of
|
||||||
libyang's dependencies. Then to avoid making any changes to FRR build foo,
|
libyang's dependencies. Then to avoid making any changes to FRR build foo,
|
||||||
rename this ``libyang.a`` and copy it over the usual static library location.
|
rename this ``libyang.a`` and copy it over the usual static library location.
|
||||||
Ugly but it works. To do this, go into your libyang build directory, which
|
Ugly but it works. To do this, go into your libyang build directory, which
|
||||||
|
|
|
@ -471,7 +471,7 @@ recommendations apply in regards to upgrades:
|
||||||
for differences against your old configuration. If any defaults changed
|
for differences against your old configuration. If any defaults changed
|
||||||
that affect your setup, lines may appear or disappear. If a new line
|
that affect your setup, lines may appear or disappear. If a new line
|
||||||
appears, it was previously the default (or not supported) and is now
|
appears, it was previously the default (or not supported) and is now
|
||||||
neccessary to retain previous behavior. If a line disappears, it
|
necessary to retain previous behavior. If a line disappears, it
|
||||||
previously wasn't the default, but now is, so it is no longer necessary.
|
previously wasn't the default, but now is, so it is no longer necessary.
|
||||||
|
|
||||||
3. Check the log files for deprecation warnings by using ``grep -i deprecat``.
|
3. Check the log files for deprecation warnings by using ``grep -i deprecat``.
|
||||||
|
|
|
@ -236,7 +236,7 @@ BFD Peer Specific Commands
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- Profile configurations can be overriden on a peer basis by specifying
|
- Profile configurations can be overridden on a peer basis by specifying
|
||||||
non-default parameters in peer configuration node.
|
non-default parameters in peer configuration node.
|
||||||
- Non existing profiles can be configured and they will only be applied
|
- Non existing profiles can be configured and they will only be applied
|
||||||
once they start to exist.
|
once they start to exist.
|
||||||
|
|
|
@ -58,7 +58,7 @@ The documentation for :ref:`on-rib-process-dplane-results` tells us its
|
||||||
arguments. Here, the destination prefix for a route is being logged out.
|
arguments. Here, the destination prefix for a route is being logged out.
|
||||||
|
|
||||||
Scripts live in :file:`/etc/frr/scripts/` by default. This is configurable at
|
Scripts live in :file:`/etc/frr/scripts/` by default. This is configurable at
|
||||||
compile time via ``--with-scriptdir``. It may be overriden at runtime with the
|
compile time via ``--with-scriptdir``. It may be overridden at runtime with the
|
||||||
``--scriptdir`` daemon option.
|
``--scriptdir`` daemon option.
|
||||||
|
|
||||||
The documentation for :ref:`on-rib-process-dplane-results` indicates that the
|
The documentation for :ref:`on-rib-process-dplane-results` indicates that the
|
||||||
|
|
|
@ -301,7 +301,7 @@ Administrative distance allows FRR to make decisions about what routes
|
||||||
should be installed in the rib based upon the originating protocol.
|
should be installed in the rib based upon the originating protocol.
|
||||||
The lowest Admin Distance is the route selected. This is purely a
|
The lowest Admin Distance is the route selected. This is purely a
|
||||||
subjective decision about ordering and care has been taken to choose
|
subjective decision about ordering and care has been taken to choose
|
||||||
the same distances that other routing suites have choosen.
|
the same distances that other routing suites have chosen.
|
||||||
|
|
||||||
+------------+-----------+
|
+------------+-----------+
|
||||||
| Protocol | Distance |
|
| Protocol | Distance |
|
||||||
|
@ -361,7 +361,7 @@ has multiple routes for the same prefix from multiple sources. An example
|
||||||
here would be if someone else was running another routing suite besides
|
here would be if someone else was running another routing suite besides
|
||||||
FRR at the same time, the kernel must choose what route to use to forward
|
FRR at the same time, the kernel must choose what route to use to forward
|
||||||
on. FRR choose the value of 20 because of two reasons. FRR wanted a
|
on. FRR choose the value of 20 because of two reasons. FRR wanted a
|
||||||
value small enough to be choosen but large enough that the operator could
|
value small enough to be chosen but large enough that the operator could
|
||||||
allow route prioritization by the kernel when multiple routing suites are
|
allow route prioritization by the kernel when multiple routing suites are
|
||||||
being run and FRR wanted to take advantage of Route Replace semantics that
|
being run and FRR wanted to take advantage of Route Replace semantics that
|
||||||
the linux kernel offers. In order for Route Replacement semantics to
|
the linux kernel offers. In order for Route Replacement semantics to
|
||||||
|
@ -552,7 +552,7 @@ via a ``ip route show X`` command:
|
||||||
nexthop via 192.168.161.9 dev enp39s0 weight 1
|
nexthop via 192.168.161.9 dev enp39s0 weight 1
|
||||||
|
|
||||||
Once installed into the FIB, FRR currently has little control over what
|
Once installed into the FIB, FRR currently has little control over what
|
||||||
nexthops are choosen to forward packets on. Currently the Linux kernel
|
nexthops are chosen to forward packets on. Currently the Linux kernel
|
||||||
has a ``fib_multipath_hash_policy`` sysctl which dictates how the hashing
|
has a ``fib_multipath_hash_policy`` sysctl which dictates how the hashing
|
||||||
algorithm is used to forward packets.
|
algorithm is used to forward packets.
|
||||||
|
|
||||||
|
@ -1193,7 +1193,7 @@ zebra Terminal Mode Commands
|
||||||
|
|
||||||
Display statistics about clients that are connected to zebra. This is
|
Display statistics about clients that are connected to zebra. This is
|
||||||
useful for debugging and seeing how much data is being passed between
|
useful for debugging and seeing how much data is being passed between
|
||||||
zebra and it's clients. If the summary form of the command is choosen
|
zebra and it's clients. If the summary form of the command is chosen
|
||||||
a table is displayed with shortened information.
|
a table is displayed with shortened information.
|
||||||
|
|
||||||
.. clicmd:: show zebra router table summary
|
.. clicmd:: show zebra router table summary
|
||||||
|
|
|
@ -479,7 +479,7 @@ void isis_if_ldp_sync_enable(struct isis_circuit *circuit)
|
||||||
struct isis_area *area = circuit->area;
|
struct isis_area *area = circuit->area;
|
||||||
|
|
||||||
/* called when setting LDP-SYNC at the global level:
|
/* called when setting LDP-SYNC at the global level:
|
||||||
* specifed on interface overrides global config
|
* specified on interface overrides global config
|
||||||
* if ptop link send msg to LDP indicating ldp-sync enabled
|
* if ptop link send msg to LDP indicating ldp-sync enabled
|
||||||
*/
|
*/
|
||||||
if (if_is_loopback(circuit->interface))
|
if (if_is_loopback(circuit->interface))
|
||||||
|
@ -541,7 +541,7 @@ void isis_if_set_ldp_sync_holddown(struct isis_circuit *circuit)
|
||||||
struct isis_area *area = circuit->area;
|
struct isis_area *area = circuit->area;
|
||||||
|
|
||||||
/* called when setting LDP-SYNC at the global level:
|
/* called when setting LDP-SYNC at the global level:
|
||||||
* specifed on interface overrides global config.
|
* specified on interface overrides global config.
|
||||||
*/
|
*/
|
||||||
if (if_is_loopback(circuit->interface))
|
if (if_is_loopback(circuit->interface))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -2103,7 +2103,7 @@ void send_hello_sched(struct isis_circuit *circuit, int level, long delay)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Count the maximum number of lsps that can be accomodated by a given size.
|
* Count the maximum number of lsps that can be accommodated by a given size.
|
||||||
*/
|
*/
|
||||||
#define LSP_ENTRIES_LEN (10 + ISIS_SYS_ID_LEN)
|
#define LSP_ENTRIES_LEN (10 + ISIS_SYS_ID_LEN)
|
||||||
static uint16_t get_max_lsp_count(uint16_t size)
|
static uint16_t get_max_lsp_count(uint16_t size)
|
||||||
|
|
|
@ -142,7 +142,7 @@ struct isis_lsp_hdr {
|
||||||
/*
|
/*
|
||||||
* Since the length field of LSP Entries TLV is one byte long, and each LSP
|
* Since the length field of LSP Entries TLV is one byte long, and each LSP
|
||||||
* entry is LSP_ENTRIES_LEN (16) bytes long, the maximum number of LSP entries
|
* entry is LSP_ENTRIES_LEN (16) bytes long, the maximum number of LSP entries
|
||||||
* can be accomodated in a TLV is
|
* can be accommodated in a TLV is
|
||||||
* 255 / 16 = 15.
|
* 255 / 16 = 15.
|
||||||
*
|
*
|
||||||
* Therefore, the maximum length of the LSP Entries TLV is
|
* Therefore, the maximum length of the LSP Entries TLV is
|
||||||
|
|
|
@ -443,7 +443,7 @@ void isis_route_delete(struct isis_area *area, struct route_node *rode,
|
||||||
if (rinfo == NULL) {
|
if (rinfo == NULL) {
|
||||||
if (IS_DEBUG_RTE_EVENTS)
|
if (IS_DEBUG_RTE_EVENTS)
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
"ISIS-Rte: tried to delete non-existant route %s",
|
"ISIS-Rte: tried to delete non-existent route %s",
|
||||||
buff);
|
buff);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1790,7 +1790,7 @@ merge_l2vpn(struct ldpd_conf *xconf, struct l2vpn *l2vpn, struct l2vpn *xl)
|
||||||
previous_pw_type = l2vpn->pw_type;
|
previous_pw_type = l2vpn->pw_type;
|
||||||
previous_mtu = l2vpn->mtu;
|
previous_mtu = l2vpn->mtu;
|
||||||
|
|
||||||
/* merge intefaces */
|
/* merge interfaces */
|
||||||
RB_FOREACH_SAFE(lif, l2vpn_if_head, &l2vpn->if_tree, ftmp) {
|
RB_FOREACH_SAFE(lif, l2vpn_if_head, &l2vpn->if_tree, ftmp) {
|
||||||
/* find deleted interfaces */
|
/* find deleted interfaces */
|
||||||
if (l2vpn_if_find(xl, lif->ifname) == NULL) {
|
if (l2vpn_if_find(xl, lif->ifname) == NULL) {
|
||||||
|
|
|
@ -267,7 +267,7 @@ static void atomsort_del_core(struct atomsort_head *h,
|
||||||
memory_order_consume);
|
memory_order_consume);
|
||||||
|
|
||||||
/* track the beginning of a chain of deleted items
|
/* track the beginning of a chain of deleted items
|
||||||
* this is neccessary to make this lock-free; we can
|
* this is necessary to make this lock-free; we can
|
||||||
* complete deletions started by other threads.
|
* complete deletions started by other threads.
|
||||||
*/
|
*/
|
||||||
if (!atomptr_l(prevval)) {
|
if (!atomptr_l(prevval)) {
|
||||||
|
|
|
@ -684,7 +684,7 @@ void zprivs_init(struct zebra_privs_t *zprivs)
|
||||||
|
|
||||||
#else /* !HAVE_CAPABILITIES */
|
#else /* !HAVE_CAPABILITIES */
|
||||||
/* we dont have caps. we'll need to maintain rid and saved uid
|
/* we dont have caps. we'll need to maintain rid and saved uid
|
||||||
* and change euid back to saved uid (who we presume has all neccessary
|
* and change euid back to saved uid (who we presume has all necessary
|
||||||
* privileges) whenever we are asked to raise our privileges.
|
* privileges) whenever we are asked to raise our privileges.
|
||||||
*
|
*
|
||||||
* This is not worth that much security wise, but all we can do.
|
* This is not worth that much security wise, but all we can do.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# Used to construct route_types.c and route_types.h
|
# Used to construct route_types.c and route_types.h
|
||||||
#
|
#
|
||||||
# comma-seperated fields of either 2 fields (help strings) or 7 fields.
|
# comma-seperated fields of either 2 fields (help strings) or 7 fields.
|
||||||
# White space before and after the comma seperators is stripped.
|
# White space before and after the comma separators is stripped.
|
||||||
# Lines /beginning/ with # are comments.
|
# Lines /beginning/ with # are comments.
|
||||||
#
|
#
|
||||||
####
|
####
|
||||||
|
|
|
@ -588,7 +588,7 @@ DISTCLEANFILES += lib/route_types.h
|
||||||
|
|
||||||
if GIT_VERSION
|
if GIT_VERSION
|
||||||
# bit of a trick here to always have up-to-date git stamps without triggering
|
# bit of a trick here to always have up-to-date git stamps without triggering
|
||||||
# unneccessary rebuilds. .PHONY causes the .tmp file to be rebuilt always,
|
# unnecessary rebuilds. .PHONY causes the .tmp file to be rebuilt always,
|
||||||
# but if we use that on gitversion.h it'll ripple through the .c file deps.
|
# but if we use that on gitversion.h it'll ripple through the .c file deps.
|
||||||
# (even if gitversion.h's file timestamp doesn't change, make will think it
|
# (even if gitversion.h's file timestamp doesn't change, make will think it
|
||||||
# did, because of .PHONY...)
|
# did, because of .PHONY...)
|
||||||
|
|
|
@ -158,7 +158,7 @@ static uint32_t ospf6_interface_get_cost(struct ospf6_interface *oi)
|
||||||
ospf6 = oi->interface->vrf->info;
|
ospf6 = oi->interface->vrf->info;
|
||||||
refbw = ospf6 ? ospf6->ref_bandwidth : OSPF6_REFERENCE_BANDWIDTH;
|
refbw = ospf6 ? ospf6->ref_bandwidth : OSPF6_REFERENCE_BANDWIDTH;
|
||||||
|
|
||||||
/* A specifed ip ospf cost overrides a calculated one. */
|
/* A specified ip ospf cost overrides a calculated one. */
|
||||||
if (CHECK_FLAG(oi->flag, OSPF6_INTERFACE_NOAUTOCOST))
|
if (CHECK_FLAG(oi->flag, OSPF6_INTERFACE_NOAUTOCOST))
|
||||||
cost = oi->cost;
|
cost = oi->cost;
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -71,7 +71,7 @@ extern struct ospf6_lsa *ospf6_lsdb_next(const struct route_node *iterend,
|
||||||
* Since we are locking the lsa in ospf6_lsdb_head
|
* Since we are locking the lsa in ospf6_lsdb_head
|
||||||
* and then unlocking it in ospf6_lsa_unlock, when
|
* and then unlocking it in ospf6_lsa_unlock, when
|
||||||
* we cache the next pointer we need to increment
|
* we cache the next pointer we need to increment
|
||||||
* the lock for the lsa so we don't accidently free
|
* the lock for the lsa so we don't accidentally free
|
||||||
* it really early.
|
* it really early.
|
||||||
*/
|
*/
|
||||||
#define ALL_LSDB(lsdb, lsa, lsanext) \
|
#define ALL_LSDB(lsdb, lsa, lsanext) \
|
||||||
|
|
|
@ -102,7 +102,7 @@ int ospf_if_get_output_cost(struct ospf_interface *oi)
|
||||||
: OSPF_DEFAULT_BANDWIDTH;
|
: OSPF_DEFAULT_BANDWIDTH;
|
||||||
refbw = oi->ospf->ref_bandwidth;
|
refbw = oi->ospf->ref_bandwidth;
|
||||||
|
|
||||||
/* A specifed ip ospf cost overrides a calculated one. */
|
/* A specified ip ospf cost overrides a calculated one. */
|
||||||
if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(oi->ifp), output_cost_cmd)
|
if (OSPF_IF_PARAM_CONFIGURED(IF_DEF_PARAMS(oi->ifp), output_cost_cmd)
|
||||||
|| OSPF_IF_PARAM_CONFIGURED(oi->params, output_cost_cmd))
|
|| OSPF_IF_PARAM_CONFIGURED(oi->params, output_cost_cmd))
|
||||||
cost = OSPF_IF_PARAM(oi, output_cost_cmd);
|
cost = OSPF_IF_PARAM(oi, output_cost_cmd);
|
||||||
|
|
|
@ -141,7 +141,7 @@ void ospf_ldp_sync_if_init(struct ospf_interface *oi)
|
||||||
|
|
||||||
ldp_sync_info = params->ldp_sync_info;
|
ldp_sync_info = params->ldp_sync_info;
|
||||||
|
|
||||||
/* specifed on interface overrides global config. */
|
/* specified on interface overrides global config. */
|
||||||
if (!CHECK_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_HOLDDOWN))
|
if (!CHECK_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_HOLDDOWN))
|
||||||
ldp_sync_info->holddown = oi->ospf->ldp_sync_cmd.holddown;
|
ldp_sync_info->holddown = oi->ospf->ldp_sync_cmd.holddown;
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ void ospf_if_set_ldp_sync_enable(struct ospf *ospf, struct interface *ifp)
|
||||||
struct ldp_sync_info *ldp_sync_info;
|
struct ldp_sync_info *ldp_sync_info;
|
||||||
|
|
||||||
/* called when setting LDP-SYNC at the global level:
|
/* called when setting LDP-SYNC at the global level:
|
||||||
* specifed on interface overrides global config
|
* specified on interface overrides global config
|
||||||
* if ptop link send msg to LDP indicating ldp-sync enabled
|
* if ptop link send msg to LDP indicating ldp-sync enabled
|
||||||
*/
|
*/
|
||||||
if (if_is_loopback(ifp))
|
if (if_is_loopback(ifp))
|
||||||
|
@ -479,7 +479,7 @@ void ospf_if_set_ldp_sync_holddown(struct ospf *ospf, struct interface *ifp)
|
||||||
struct ldp_sync_info *ldp_sync_info;
|
struct ldp_sync_info *ldp_sync_info;
|
||||||
|
|
||||||
/* called when setting LDP-SYNC at the global level:
|
/* called when setting LDP-SYNC at the global level:
|
||||||
* specifed on interface overrides global config.
|
* specified on interface overrides global config.
|
||||||
*/
|
*/
|
||||||
if (if_is_loopback(ifp))
|
if (if_is_loopback(ifp))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -450,7 +450,7 @@ char link_info_set(struct stream **s, struct in_addr id, struct in_addr data,
|
||||||
/* LSA stream is initially allocated to OSPF_MAX_LSA_SIZE, suits
|
/* LSA stream is initially allocated to OSPF_MAX_LSA_SIZE, suits
|
||||||
* vast majority of cases. Some rare routers with lots of links need
|
* vast majority of cases. Some rare routers with lots of links need
|
||||||
* more.
|
* more.
|
||||||
* we try accomodate those here.
|
* we try accommodate those here.
|
||||||
*/
|
*/
|
||||||
if (STREAM_WRITEABLE(*s) < OSPF_ROUTER_LSA_LINK_SIZE) {
|
if (STREAM_WRITEABLE(*s) < OSPF_ROUTER_LSA_LINK_SIZE) {
|
||||||
size_t ret = OSPF_MAX_LSA_SIZE;
|
size_t ret = OSPF_MAX_LSA_SIZE;
|
||||||
|
@ -2858,7 +2858,7 @@ struct ospf_lsa *ospf_lsa_install(struct ospf *ospf, struct ospf_interface *oi,
|
||||||
update is needed */
|
update is needed */
|
||||||
old = ospf_lsdb_lookup(lsdb, lsa);
|
old = ospf_lsdb_lookup(lsdb, lsa);
|
||||||
|
|
||||||
/* Do comparision and record if recalc needed. */
|
/* Do comparison and record if recalc needed. */
|
||||||
rt_recalc = 0;
|
rt_recalc = 0;
|
||||||
if (old == NULL || ospf_lsa_different(old, lsa, false)) {
|
if (old == NULL || ospf_lsa_different(old, lsa, false)) {
|
||||||
/* Ref rfc3623 section 3.2.3
|
/* Ref rfc3623 section 3.2.3
|
||||||
|
|
|
@ -3515,7 +3515,7 @@ static int ospf_make_ls_req_func(struct stream *s, uint16_t *length,
|
||||||
/* LS Request packet overflows interface MTU
|
/* LS Request packet overflows interface MTU
|
||||||
* delta is just number of bytes required for 1 LS Req
|
* delta is just number of bytes required for 1 LS Req
|
||||||
* ospf_packet_max will return the number of bytes can
|
* ospf_packet_max will return the number of bytes can
|
||||||
* be accomodated without ospf header. So length+delta
|
* be accommodated without ospf header. So length+delta
|
||||||
* can be compared to ospf_packet_max
|
* can be compared to ospf_packet_max
|
||||||
* to check if it can fit another lsreq in the same packet.
|
* to check if it can fit another lsreq in the same packet.
|
||||||
*/
|
*/
|
||||||
|
@ -3601,7 +3601,7 @@ static int ospf_make_ls_upd(struct ospf_interface *oi, struct list *update,
|
||||||
zlog_debug("%s: List Iteration %d LSA[%s]", __func__,
|
zlog_debug("%s: List Iteration %d LSA[%s]", __func__,
|
||||||
count, dump_lsa_key(lsa));
|
count, dump_lsa_key(lsa));
|
||||||
|
|
||||||
/* Will it fit? Minimum it has to fit atleast one */
|
/* Will it fit? Minimum it has to fit at least one */
|
||||||
if ((length + delta + ntohs(lsa->data->length) > size_noauth) &&
|
if ((length + delta + ntohs(lsa->data->length) > size_noauth) &&
|
||||||
(count > 0))
|
(count > 0))
|
||||||
break;
|
break;
|
||||||
|
@ -3649,7 +3649,7 @@ static int ospf_make_ls_ack(struct ospf_interface *oi, struct list *ack,
|
||||||
/* LS Ack packet overflows interface MTU
|
/* LS Ack packet overflows interface MTU
|
||||||
* delta is just number of bytes required for
|
* delta is just number of bytes required for
|
||||||
* 1 LS Ack(1 LS Hdr) ospf_packet_max will return
|
* 1 LS Ack(1 LS Hdr) ospf_packet_max will return
|
||||||
* the number of bytes can be accomodated without
|
* the number of bytes can be accommodated without
|
||||||
* ospf header. So length+delta can be compared
|
* ospf header. So length+delta can be compared
|
||||||
* against ospf_packet_max to check if it can fit
|
* against ospf_packet_max to check if it can fit
|
||||||
* another ls header in the same packet.
|
* another ls header in the same packet.
|
||||||
|
@ -3966,7 +3966,7 @@ void ospf_ls_upd_send_lsa(struct ospf_neighbor *nbr, struct ospf_lsa *lsa,
|
||||||
list_delete(&update);
|
list_delete(&update);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine size for packet. Must be at least big enough to accomodate next
|
/* Determine size for packet. Must be at least big enough to accommodate next
|
||||||
* LSA on list, which may be bigger than MTU size.
|
* LSA on list, which may be bigger than MTU size.
|
||||||
*
|
*
|
||||||
* Return pointer to new ospf_packet
|
* Return pointer to new ospf_packet
|
||||||
|
|
|
@ -678,7 +678,7 @@ static void ospf_spf_flush_parents(struct vertex *w)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Consider supplied next-hop for inclusion to the supplied list of
|
* Consider supplied next-hop for inclusion to the supplied list of
|
||||||
* equal-cost next-hops, adjust list as neccessary.
|
* equal-cost next-hops, adjust list as necessary.
|
||||||
*/
|
*/
|
||||||
static void ospf_spf_add_parent(struct vertex *v, struct vertex *w,
|
static void ospf_spf_add_parent(struct vertex *v, struct vertex *w,
|
||||||
struct vertex_nexthop *newhop,
|
struct vertex_nexthop *newhop,
|
||||||
|
|
|
@ -849,9 +849,9 @@ static bool pim_bsm_frag_send(uint8_t *buf, uint32_t len, struct interface *ifp,
|
||||||
this_pkt_rem = pim_mtu - (PIM_BSM_HDR_LEN
|
this_pkt_rem = pim_mtu - (PIM_BSM_HDR_LEN
|
||||||
+ PIM_MSG_HEADER_LEN);
|
+ PIM_MSG_HEADER_LEN);
|
||||||
|
|
||||||
/* If pkt can't accomodate next group + atleast
|
/* If pkt can't accommodate next group + at
|
||||||
* one rp, we must break out of this inner loop
|
* least one rp, we must break out of this inner
|
||||||
* and process next RP
|
* loop and process next RP
|
||||||
*/
|
*/
|
||||||
if (total_rp_cnt == this_rp_cnt)
|
if (total_rp_cnt == this_rp_cnt)
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1525,7 +1525,7 @@ void pim_if_update_assert_tracking_desired(struct interface *ifp)
|
||||||
/*
|
/*
|
||||||
* PIM wants to have an interface pointer for everything it does.
|
* PIM wants to have an interface pointer for everything it does.
|
||||||
* The pimreg is a special interface that we have that is not
|
* The pimreg is a special interface that we have that is not
|
||||||
* quite an inteface but a VIF is created for it.
|
* quite an interface but a VIF is created for it.
|
||||||
*/
|
*/
|
||||||
void pim_if_create_pimreg(struct pim_instance *pim)
|
void pim_if_create_pimreg(struct pim_instance *pim)
|
||||||
{
|
{
|
||||||
|
|
|
@ -668,7 +668,7 @@ static int igmp_v1_recv_report(struct gm_sock *igmp, struct in_addr from,
|
||||||
if (pim_is_group_filtered(ifp->info, &group_addr))
|
if (pim_is_group_filtered(ifp->info, &group_addr))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -516,7 +516,7 @@ static void allow(struct gm_sock *igmp, struct in_addr from,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return;
|
return;
|
||||||
|
@ -669,7 +669,7 @@ void igmpv3_report_isex(struct gm_sock *igmp, struct in_addr from,
|
||||||
if (pim_is_group_filtered(ifp->info, &group_addr))
|
if (pim_is_group_filtered(ifp->info, &group_addr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return;
|
return;
|
||||||
|
@ -790,7 +790,7 @@ void igmpv3_report_toin(struct gm_sock *igmp, struct in_addr from,
|
||||||
* entry is present, the request is ignored.
|
* entry is present, the request is ignored.
|
||||||
*/
|
*/
|
||||||
if (num_sources) {
|
if (num_sources) {
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return;
|
return;
|
||||||
|
@ -944,7 +944,7 @@ void igmpv3_report_toex(struct gm_sock *igmp, struct in_addr from,
|
||||||
|
|
||||||
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
|
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
|
||||||
|
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return;
|
return;
|
||||||
|
@ -1465,7 +1465,7 @@ void igmpv3_report_block(struct gm_sock *igmp, struct in_addr from,
|
||||||
|
|
||||||
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
|
on_trace(__func__, ifp, from, group_addr, num_sources, sources);
|
||||||
|
|
||||||
/* non-existant group is created as INCLUDE {empty} */
|
/* non-existent group is created as INCLUDE {empty} */
|
||||||
group = igmp_add_group_by_addr(igmp, group_addr);
|
group = igmp_add_group_by_addr(igmp, group_addr);
|
||||||
if (!group) {
|
if (!group) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1015,7 +1015,7 @@ void pim_if_configure_mlag_dualactive(struct pim_interface *pim_ifp)
|
||||||
|
|
||||||
if (router->pim_mlag_intf_cnt == 1) {
|
if (router->pim_mlag_intf_cnt == 1) {
|
||||||
/*
|
/*
|
||||||
* atleast one Interface is configured for MLAG, send register
|
* at least one Interface is configured for MLAG, send register
|
||||||
* to Zebra for receiving MLAG Updates
|
* to Zebra for receiving MLAG Updates
|
||||||
*/
|
*/
|
||||||
pim_mlag_register();
|
pim_mlag_register();
|
||||||
|
|
|
@ -260,7 +260,7 @@ Group: System Environment/Daemons
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
The frr-devel package contains the header and object files neccessary for
|
The frr-devel package contains the header and object files necessary for
|
||||||
developing OSPF-API and frr applications.
|
developing OSPF-API and frr applications.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ struct rip_offset_list *rip_offset_list_lookup(struct rip *rip,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If metric is modifed return 1. */
|
/* If metric is modified return 1. */
|
||||||
int rip_offset_list_apply_in(struct prefix_ipv4 *p, struct interface *ifp,
|
int rip_offset_list_apply_in(struct prefix_ipv4 *p, struct interface *ifp,
|
||||||
uint32_t *metric)
|
uint32_t *metric)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +115,7 @@ int rip_offset_list_apply_in(struct prefix_ipv4 *p, struct interface *ifp,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If metric is modifed return 1. */
|
/* If metric is modified return 1. */
|
||||||
int rip_offset_list_apply_out(struct prefix_ipv4 *p, struct interface *ifp,
|
int rip_offset_list_apply_out(struct prefix_ipv4 *p, struct interface *ifp,
|
||||||
uint32_t *metric)
|
uint32_t *metric)
|
||||||
{
|
{
|
||||||
|
|
|
@ -526,7 +526,7 @@ extern void rip_cli_init(void);
|
||||||
extern struct zebra_privs_t ripd_privs;
|
extern struct zebra_privs_t ripd_privs;
|
||||||
extern struct rip_instance_head rip_instances;
|
extern struct rip_instance_head rip_instances;
|
||||||
|
|
||||||
/* Master thread strucutre. */
|
/* Master thread structure. */
|
||||||
extern struct thread_master *master;
|
extern struct thread_master *master;
|
||||||
|
|
||||||
DECLARE_HOOK(rip_ifaddr_add, (struct connected * ifc), (ifc));
|
DECLARE_HOOK(rip_ifaddr_add, (struct connected * ifc), (ifc));
|
||||||
|
|
|
@ -85,7 +85,7 @@ struct ripng_offset_list *ripng_offset_list_lookup(struct ripng *ripng,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If metric is modifed return 1. */
|
/* If metric is modified return 1. */
|
||||||
int ripng_offset_list_apply_in(struct ripng *ripng, struct prefix_ipv6 *p,
|
int ripng_offset_list_apply_in(struct ripng *ripng, struct prefix_ipv6 *p,
|
||||||
struct interface *ifp, uint8_t *metric)
|
struct interface *ifp, uint8_t *metric)
|
||||||
{
|
{
|
||||||
|
@ -123,7 +123,7 @@ int ripng_offset_list_apply_in(struct ripng *ripng, struct prefix_ipv6 *p,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If metric is modifed return 1. */
|
/* If metric is modified return 1. */
|
||||||
int ripng_offset_list_apply_out(struct ripng *ripng, struct prefix_ipv6 *p,
|
int ripng_offset_list_apply_out(struct ripng *ripng, struct prefix_ipv6 *p,
|
||||||
struct interface *ifp, uint8_t *metric)
|
struct interface *ifp, uint8_t *metric)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
* - The Router-ID is 10.0.255.X, where X is the node number;
|
* - The Router-ID is 10.0.255.X, where X is the node number;
|
||||||
* - The default link metric is 10;
|
* - The default link metric is 10;
|
||||||
* - When SR is enabled, Adj-SIDs and Prefix-SIDs are generated automatically;
|
* - When SR is enabled, Adj-SIDs and Prefix-SIDs are generated automatically;
|
||||||
* - When SR is enabled, the default SRGB is [16000-23999] (can be overriden).
|
* - When SR is enabled, the default SRGB is [16000-23999] (can be overridden).
|
||||||
*
|
*
|
||||||
* Test topology 1:
|
* Test topology 1:
|
||||||
* ================
|
* ================
|
||||||
|
|
|
@ -382,7 +382,7 @@ static void verify_prefix_iter_cmp(const char *p1, const char *p2,
|
||||||
assert(exp_result == result);
|
assert(exp_result == result);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Also check the reverse comparision.
|
* Also check the reverse comparison.
|
||||||
*/
|
*/
|
||||||
result = route_table_prefix_iter_cmp((struct prefix *)&p2_pfx,
|
result = route_table_prefix_iter_cmp((struct prefix *)&p2_pfx,
|
||||||
(struct prefix *)&p1_pfx);
|
(struct prefix *)&p1_pfx);
|
||||||
|
@ -398,7 +398,7 @@ static void verify_prefix_iter_cmp(const char *p1, const char *p2,
|
||||||
/*
|
/*
|
||||||
* test_prefix_iter_cmp
|
* test_prefix_iter_cmp
|
||||||
*
|
*
|
||||||
* Tests comparision of prefixes according to order of iteration.
|
* Tests comparison of prefixes according to order of iteration.
|
||||||
*/
|
*/
|
||||||
static void test_prefix_iter_cmp(void)
|
static void test_prefix_iter_cmp(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -158,7 +158,7 @@ def setup_module(mod):
|
||||||
# This is a sample of configuration loading.
|
# This is a sample of configuration loading.
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(TopoRouter.RD_ZEBRA, "zebra.conf")
|
router.load_config(TopoRouter.RD_ZEBRA, "zebra.conf")
|
||||||
router.load_config(TopoRouter.RD_OSPF)
|
router.load_config(TopoRouter.RD_OSPF)
|
||||||
|
|
|
@ -371,7 +371,7 @@ def test_bgp_timers_functionality(request):
|
||||||
# Creating configuration from JSON
|
# Creating configuration from JSON
|
||||||
reset_config_on_routers(tgen)
|
reset_config_on_routers(tgen)
|
||||||
|
|
||||||
# Api call to modfiy BGP timerse
|
# Api call to modify BGP timerse
|
||||||
input_dict = {
|
input_dict = {
|
||||||
"r1": {
|
"r1": {
|
||||||
"bgp": {
|
"bgp": {
|
||||||
|
|
|
@ -192,7 +192,7 @@ def setup_module(mod):
|
||||||
pe.cmd_raises("sysctl -w net.ipv4.udp_l3mdev_accept={}".format(l3mdev_accept))
|
pe.cmd_raises("sysctl -w net.ipv4.udp_l3mdev_accept={}".format(l3mdev_accept))
|
||||||
pe.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept={}".format(l3mdev_accept))
|
pe.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept={}".format(l3mdev_accept))
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for (name, router) in tgen.routers().items():
|
for (name, router) in tgen.routers().items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(name))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(name))
|
||||||
|
|
|
@ -118,7 +118,7 @@ def setup_module(mod):
|
||||||
# This is a sample of configuration loading.
|
# This is a sample of configuration loading.
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||||
|
|
|
@ -1041,7 +1041,7 @@ def test_BGP_GR_15_p2(request):
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 2] : Test Setup "
|
"[Step 2] : Test Setup "
|
||||||
"[Helper Mode]R6-----R1[Restart Mode]"
|
"[Helper Mode]R6-----R1[Restart Mode]"
|
||||||
"--------R2[Helper Mode] Initilized"
|
"--------R2[Helper Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
|
|
@ -456,7 +456,7 @@ def test_BGP_GR_20_p1(request):
|
||||||
reset_config_on_routers(tgen)
|
reset_config_on_routers(tgen)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 1] : Test Setup " "[Restart Mode]R3-----R1[Restart Mode] Initilized"
|
"[Step 1] : Test Setup " "[Restart Mode]R3-----R1[Restart Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
@ -602,7 +602,7 @@ def test_BGP_GR_21_p2(request):
|
||||||
reset_config_on_routers(tgen)
|
reset_config_on_routers(tgen)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 1] : Test Setup " "[Helper Mode]R6-----R1[Restart Mode] Initilized"
|
"[Step 1] : Test Setup " "[Helper Mode]R6-----R1[Restart Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
@ -676,7 +676,7 @@ def test_BGP_GR_21_p2(request):
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 2] : Test Setup "
|
"[Step 2] : Test Setup "
|
||||||
"[Restart Mode]R2-----[Helper Mode]R1[Disable Mode]"
|
"[Restart Mode]R2-----[Helper Mode]R1[Disable Mode]"
|
||||||
"--------R6[Helper Mode] Initilized"
|
"--------R6[Helper Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
@ -821,7 +821,7 @@ def test_BGP_GR_22_p2(request):
|
||||||
reset_config_on_routers(tgen)
|
reset_config_on_routers(tgen)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 1] : Test Setup " "[Helper Mode]R3-----R1[Restart Mode] Initilized"
|
"[Step 1] : Test Setup " "[Helper Mode]R3-----R1[Restart Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
@ -901,7 +901,7 @@ def test_BGP_GR_22_p2(request):
|
||||||
logger.info(
|
logger.info(
|
||||||
"[Step 2] : Test Setup "
|
"[Step 2] : Test Setup "
|
||||||
"[Restart Mode]R2-----[Helper Mode]R1[Disable Mode]"
|
"[Restart Mode]R2-----[Helper Mode]R1[Disable Mode]"
|
||||||
"--------R3[Helper Mode] Initilized"
|
"--------R3[Helper Mode] Initialized"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Configure graceful-restart
|
# Configure graceful-restart
|
||||||
|
|
|
@ -92,7 +92,7 @@ def setup_module(mod):
|
||||||
# This is a sample of configuration loading.
|
# This is a sample of configuration loading.
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||||
|
|
|
@ -1224,7 +1224,7 @@ def test_shut_noshut_p1(request):
|
||||||
result = create_router_bgp(tgen, topo, input_dict_3)
|
result = create_router_bgp(tgen, topo, input_dict_3)
|
||||||
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
step("Api call to modfiy BGP timers")
|
step("Api call to modify BGP timers")
|
||||||
|
|
||||||
input_dict_4 = {
|
input_dict_4 = {
|
||||||
"r1": {
|
"r1": {
|
||||||
|
@ -1757,7 +1757,7 @@ def test_vrf_vlan_routing_table_p1(request):
|
||||||
tc_name, result
|
tc_name, result
|
||||||
)
|
)
|
||||||
|
|
||||||
step("Api call to modfiy BGP timers")
|
step("Api call to modify BGP timers")
|
||||||
|
|
||||||
input_dict_4 = {
|
input_dict_4 = {
|
||||||
"r3": {
|
"r3": {
|
||||||
|
@ -2422,7 +2422,7 @@ def test_delete_and_re_add_vrf_p1(request):
|
||||||
result = verify_rib(tgen, addr_type, dut, input_dict_2)
|
result = verify_rib(tgen, addr_type, dut, input_dict_2)
|
||||||
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
||||||
|
|
||||||
step("Api call to modfiy BGP timers")
|
step("Api call to modify BGP timers")
|
||||||
|
|
||||||
input_dict_4 = {
|
input_dict_4 = {
|
||||||
"r1": {
|
"r1": {
|
||||||
|
@ -3034,7 +3034,7 @@ def test_vrf_name_significance_p1(request):
|
||||||
result = verify_rib(tgen, addr_type, dut, input_dict_4)
|
result = verify_rib(tgen, addr_type, dut, input_dict_4)
|
||||||
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error {}".format(tc_name, result)
|
||||||
|
|
||||||
step("Api call to modfiy BGP timers")
|
step("Api call to modify BGP timers")
|
||||||
|
|
||||||
input_dict_4 = {
|
input_dict_4 = {
|
||||||
"r3": {
|
"r3": {
|
||||||
|
@ -3437,7 +3437,7 @@ def test_vrf_name_significance_p1(request):
|
||||||
result = create_router_bgp(tgen, topo_modify["routers"])
|
result = create_router_bgp(tgen, topo_modify["routers"])
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
step("Api call to modfiy BGP timers")
|
step("Api call to modify BGP timers")
|
||||||
|
|
||||||
input_dict_4 = {
|
input_dict_4 = {
|
||||||
"r3": {
|
"r3": {
|
||||||
|
|
|
@ -154,7 +154,7 @@ def setup_module(mod):
|
||||||
|
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||||
|
|
|
@ -122,7 +122,7 @@ def test_get_config(tgen):
|
||||||
nrepeat = 5
|
nrepeat = 5
|
||||||
r1 = tgen.gears["r1"]
|
r1 = tgen.gears["r1"]
|
||||||
|
|
||||||
step("'GET' inteface config 10 times, once per invocation")
|
step("'GET' interface config 10 times, once per invocation")
|
||||||
|
|
||||||
for i in range(0, nrepeat):
|
for i in range(0, nrepeat):
|
||||||
output = run_grpc_client(r1, GRPCP_ZEBRA, "GET,/frr-interface:lib")
|
output = run_grpc_client(r1, GRPCP_ZEBRA, "GET,/frr-interface:lib")
|
||||||
|
|
|
@ -93,7 +93,7 @@ class LTemplate:
|
||||||
# This is a sample of configuration loading.
|
# This is a sample of configuration loading.
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
logger.info("Setting up %s" % rname)
|
logger.info("Setting up %s" % rname)
|
||||||
for rd_val in TopoRouter.RD:
|
for rd_val in TopoRouter.RD:
|
||||||
|
|
|
@ -443,7 +443,7 @@ class Topogen(object):
|
||||||
def start_router(self, router=None):
|
def start_router(self, router=None):
|
||||||
"""
|
"""
|
||||||
Call the router startRouter method.
|
Call the router startRouter method.
|
||||||
If no router is specified it is called for all registred routers.
|
If no router is specified it is called for all registered routers.
|
||||||
"""
|
"""
|
||||||
if router is None:
|
if router is None:
|
||||||
# pylint: disable=r1704
|
# pylint: disable=r1704
|
||||||
|
|
|
@ -746,7 +746,7 @@ def proto_name_to_number(protocol):
|
||||||
def ip4_route(node):
|
def ip4_route(node):
|
||||||
"""
|
"""
|
||||||
Gets a structured return of the command 'ip route'. It can be used in
|
Gets a structured return of the command 'ip route'. It can be used in
|
||||||
conjuction with json_cmp() to provide accurate assert explanations.
|
conjunction with json_cmp() to provide accurate assert explanations.
|
||||||
|
|
||||||
Return example:
|
Return example:
|
||||||
{
|
{
|
||||||
|
@ -787,7 +787,7 @@ def ip4_route(node):
|
||||||
def ip4_vrf_route(node):
|
def ip4_vrf_route(node):
|
||||||
"""
|
"""
|
||||||
Gets a structured return of the command 'ip route show vrf {0}-cust1'.
|
Gets a structured return of the command 'ip route show vrf {0}-cust1'.
|
||||||
It can be used in conjuction with json_cmp() to provide accurate assert explanations.
|
It can be used in conjunction with json_cmp() to provide accurate assert explanations.
|
||||||
|
|
||||||
Return example:
|
Return example:
|
||||||
{
|
{
|
||||||
|
@ -831,7 +831,7 @@ def ip4_vrf_route(node):
|
||||||
def ip6_route(node):
|
def ip6_route(node):
|
||||||
"""
|
"""
|
||||||
Gets a structured return of the command 'ip -6 route'. It can be used in
|
Gets a structured return of the command 'ip -6 route'. It can be used in
|
||||||
conjuction with json_cmp() to provide accurate assert explanations.
|
conjunction with json_cmp() to provide accurate assert explanations.
|
||||||
|
|
||||||
Return example:
|
Return example:
|
||||||
{
|
{
|
||||||
|
@ -871,7 +871,7 @@ def ip6_route(node):
|
||||||
def ip6_vrf_route(node):
|
def ip6_vrf_route(node):
|
||||||
"""
|
"""
|
||||||
Gets a structured return of the command 'ip -6 route show vrf {0}-cust1'.
|
Gets a structured return of the command 'ip -6 route show vrf {0}-cust1'.
|
||||||
It can be used in conjuction with json_cmp() to provide accurate assert explanations.
|
It can be used in conjunction with json_cmp() to provide accurate assert explanations.
|
||||||
|
|
||||||
Return example:
|
Return example:
|
||||||
{
|
{
|
||||||
|
@ -913,7 +913,7 @@ def ip6_vrf_route(node):
|
||||||
def ip_rules(node):
|
def ip_rules(node):
|
||||||
"""
|
"""
|
||||||
Gets a structured return of the command 'ip rule'. It can be used in
|
Gets a structured return of the command 'ip rule'. It can be used in
|
||||||
conjuction with json_cmp() to provide accurate assert explanations.
|
conjunction with json_cmp() to provide accurate assert explanations.
|
||||||
|
|
||||||
Return example:
|
Return example:
|
||||||
[
|
[
|
||||||
|
|
|
@ -34,7 +34,7 @@ Tests covered in this suite
|
||||||
3.2 Verify if no forwarding bit is set , FRR is not forwarding the
|
3.2 Verify if no forwarding bit is set , FRR is not forwarding the
|
||||||
BSM to other PIM nbrs
|
BSM to other PIM nbrs
|
||||||
3.3 Verify multicast BSM is sent to new router when unicast BSM is disabled
|
3.3 Verify multicast BSM is sent to new router when unicast BSM is disabled
|
||||||
4.1 Verfiy BSM arrived on non bsm capable interface is dropped and
|
4.1 Verify BSM arrived on non bsm capable interface is dropped and
|
||||||
not processed
|
not processed
|
||||||
4.2 Verify group to RP info updated correctly in FRR node, after shut and
|
4.2 Verify group to RP info updated correctly in FRR node, after shut and
|
||||||
no-shut of BSM enable interfaces
|
no-shut of BSM enable interfaces
|
||||||
|
@ -865,7 +865,7 @@ def test_new_router_fwd_p0(request):
|
||||||
|
|
||||||
def test_int_bsm_config_p1(request):
|
def test_int_bsm_config_p1(request):
|
||||||
"""
|
"""
|
||||||
1. Verfiy BSM arrived on non bsm capable interface is dropped and
|
1. Verify BSM arrived on non bsm capable interface is dropped and
|
||||||
not processed
|
not processed
|
||||||
2. Verify group to RP info updated correctly in FRR node, after shut and
|
2. Verify group to RP info updated correctly in FRR node, after shut and
|
||||||
no-shut of BSM enable interfaces
|
no-shut of BSM enable interfaces
|
||||||
|
|
|
@ -69,7 +69,7 @@ TC_18 : Verify RPF interface updated in mroute when higher preferred RP gets
|
||||||
deleted
|
deleted
|
||||||
TC_19 : Verify IIF and OIL in "show ip pim state" updated when higher
|
TC_19 : Verify IIF and OIL in "show ip pim state" updated when higher
|
||||||
preferred overlapping RP is deleted
|
preferred overlapping RP is deleted
|
||||||
TC_20 : Verfiy PIM upstream IIF updated when higher preferred overlapping RP
|
TC_20 : Verify PIM upstream IIF updated when higher preferred overlapping RP
|
||||||
deleted
|
deleted
|
||||||
TC_21_1 : Verify OIF and RFP for (*,G) and (S,G) when static RP configure in
|
TC_21_1 : Verify OIF and RFP for (*,G) and (S,G) when static RP configure in
|
||||||
LHR router
|
LHR router
|
||||||
|
@ -94,7 +94,7 @@ TC_30 : Verify IIF and OIL change to other path after shut the primary path
|
||||||
TC_31 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
|
TC_31 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
|
||||||
shut the RPF interface.
|
shut the RPF interface.
|
||||||
TC_32 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
|
TC_32 : Verify RP info and (*,G) mroute after deleting the RP and shut / no
|
||||||
shut the RPF inteface
|
shut the RPF interface
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -1157,7 +1157,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
|
||||||
gets deleted
|
gets deleted
|
||||||
TC_19_P1 : Verify IIF and OIL in "show ip pim state" updated when higher
|
TC_19_P1 : Verify IIF and OIL in "show ip pim state" updated when higher
|
||||||
preferred overlapping RP is deleted
|
preferred overlapping RP is deleted
|
||||||
TC_20_P1 : Verfiy PIM upstream IIF updated when higher preferred
|
TC_20_P1 : Verify PIM upstream IIF updated when higher preferred
|
||||||
overlapping RP deleted
|
overlapping RP deleted
|
||||||
|
|
||||||
Topology used:
|
Topology used:
|
||||||
|
@ -1354,7 +1354,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
|
||||||
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
|
||||||
|
|
||||||
step(
|
step(
|
||||||
"r1 : Verfiy upstream IIF updated when higher preferred overlapping"
|
"r1 : Verify upstream IIF updated when higher preferred overlapping"
|
||||||
"RP deleted"
|
"RP deleted"
|
||||||
)
|
)
|
||||||
result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
|
result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
|
||||||
|
@ -3820,7 +3820,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
|
||||||
def test_delete_RP_shut_noshut_RP_interface_p1(request):
|
def test_delete_RP_shut_noshut_RP_interface_p1(request):
|
||||||
"""
|
"""
|
||||||
TC_32_P1: Verify RP info and (*,G) mroute after deleting the RP and shut/
|
TC_32_P1: Verify RP info and (*,G) mroute after deleting the RP and shut/
|
||||||
no shut the RPF inteface
|
no shut the RPF interface
|
||||||
|
|
||||||
Topology used:
|
Topology used:
|
||||||
________r2_____
|
________r2_____
|
||||||
|
|
|
@ -79,7 +79,7 @@ def setup_module(mod):
|
||||||
# This is a sample of configuration loading.
|
# This is a sample of configuration loading.
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra and ospf configuration file
|
# For all registered routers, load the zebra and ospf configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||||
|
|
|
@ -69,7 +69,7 @@ def setup_module(mod):
|
||||||
|
|
||||||
router_list = tgen.routers()
|
router_list = tgen.routers()
|
||||||
|
|
||||||
# For all registred routers, load the zebra configuration file
|
# For all registered routers, load the zebra configuration file
|
||||||
for rname, router in router_list.items():
|
for rname, router in router_list.items():
|
||||||
router.load_config(
|
router.load_config(
|
||||||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
|
||||||
|
|
|
@ -175,7 +175,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
|
||||||
)
|
)
|
||||||
|
|
||||||
for addr_type in ADDR_TYPES:
|
for addr_type in ADDR_TYPES:
|
||||||
# Api call to modfiy BGP timerse
|
# Api call to modify BGP timerse
|
||||||
input_dict = {
|
input_dict = {
|
||||||
"r2": {
|
"r2": {
|
||||||
"bgp": {
|
"bgp": {
|
||||||
|
|
|
@ -958,7 +958,7 @@ void if_nbr_mac_to_ipv4ll_neigh_update(struct interface *ifp,
|
||||||
/*
|
/*
|
||||||
* We need to note whether or not we originated a v6
|
* We need to note whether or not we originated a v6
|
||||||
* neighbor entry for this interface. So that when
|
* neighbor entry for this interface. So that when
|
||||||
* someone unwisely accidently deletes this entry
|
* someone unwisely accidentally deletes this entry
|
||||||
* we can shove it back in.
|
* we can shove it back in.
|
||||||
*/
|
*/
|
||||||
zif->v6_2_v4_ll_neigh_entry = !!add;
|
zif->v6_2_v4_ll_neigh_entry = !!add;
|
||||||
|
|
|
@ -3802,7 +3802,7 @@ static int netlink_ipneigh_change(struct nlmsghdr *h, int len, ns_id_t ns_id)
|
||||||
* interface
|
* interface
|
||||||
* and is linked to the bridge
|
* and is linked to the bridge
|
||||||
* (b) In the case of a VLAN-unaware bridge, the SVI is the bridge
|
* (b) In the case of a VLAN-unaware bridge, the SVI is the bridge
|
||||||
* inteface
|
* interface
|
||||||
* itself
|
* itself
|
||||||
*/
|
*/
|
||||||
if (IS_ZEBRA_IF_VLAN(ifp)) {
|
if (IS_ZEBRA_IF_VLAN(ifp)) {
|
||||||
|
|
|
@ -2679,7 +2679,7 @@ done:
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dplane_ctx_intf_init() - Initialize a context block for a inteface update
|
* dplane_ctx_intf_init() - Initialize a context block for a interface update
|
||||||
*
|
*
|
||||||
* @ctx: Dataplane context to init
|
* @ctx: Dataplane context to init
|
||||||
* @op: Operation being performed
|
* @op: Operation being performed
|
||||||
|
|
|
@ -398,7 +398,7 @@ static int netlink_route_info_encode(struct netlink_route_info *ri,
|
||||||
req->r.rtm_family = ri->af;
|
req->r.rtm_family = ri->af;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rtm_table field is a uchar field which can accomodate table_id less
|
* rtm_table field is a uchar field which can accommodate table_id less
|
||||||
* than 256.
|
* than 256.
|
||||||
* To support table id greater than 255, if the table_id is greater than
|
* To support table id greater than 255, if the table_id is greater than
|
||||||
* 255, set rtm_table to RT_TABLE_UNSPEC and add RTA_TABLE attribute
|
* 255, set rtm_table to RT_TABLE_UNSPEC and add RTA_TABLE attribute
|
||||||
|
|
Loading…
Reference in a new issue