]> git.puffer.fish Git - matthieu/frr.git/log
matthieu/frr.git
3 years agoMerge pull request #9144 from FRRouting/mergify/bp/stable/8.0/pr-9004
Donald Sharp [Fri, 23 Jul 2021 12:31:28 +0000 (08:31 -0400)]
Merge pull request #9144 from FRRouting/mergify/bp/stable/8.0/pr-9004

staticd: fix bug of Null0 wrongly converted into blackhole in running config (backport #9004)

3 years agoMerge pull request #9142 from FRRouting/mergify/bp/stable/8.0/pr-8958
Donald Sharp [Fri, 23 Jul 2021 12:31:05 +0000 (08:31 -0400)]
Merge pull request #9142 from FRRouting/mergify/bp/stable/8.0/pr-8958

bgpd: nht unresolved with global address next-hop (backport #8958)

3 years agoMerge pull request #9140 from FRRouting/mergify/bp/stable/8.0/pr-8950
Donald Sharp [Fri, 23 Jul 2021 12:30:33 +0000 (08:30 -0400)]
Merge pull request #9140 from FRRouting/mergify/bp/stable/8.0/pr-8950

ospf6d: use per-vrf router id instead of one global (backport #8950)

3 years agoMerge pull request #9139 from FRRouting/mergify/bp/stable/8.0/pr-8909
Donald Sharp [Fri, 23 Jul 2021 12:29:20 +0000 (08:29 -0400)]
Merge pull request #9139 from FRRouting/mergify/bp/stable/8.0/pr-8909

isisd: fix extra space in the mpls-te config output (backport #8909)

3 years agoMerge pull request #9137 from FRRouting/mergify/bp/stable/8.0/pr-8902
Donald Sharp [Fri, 23 Jul 2021 12:28:42 +0000 (08:28 -0400)]
Merge pull request #9137 from FRRouting/mergify/bp/stable/8.0/pr-8902

isisd: fix uninitialized variable when searching for LSP (backport #8902)

3 years agoMerge pull request #9136 from FRRouting/mergify/bp/stable/8.0/pr-8869
Donald Sharp [Fri, 23 Jul 2021 12:27:33 +0000 (08:27 -0400)]
Merge pull request #9136 from FRRouting/mergify/bp/stable/8.0/pr-8869

bgpd: Force process networks on VRF creation (backport #8869)

3 years agoMerge pull request #9135 from FRRouting/mergify/bp/stable/8.0/pr-8557
Donald Sharp [Fri, 23 Jul 2021 12:26:53 +0000 (08:26 -0400)]
Merge pull request #9135 from FRRouting/mergify/bp/stable/8.0/pr-8557

ospfd: External lsa handling in opaque capabilities enable/disable (backport #8557)

3 years agoMerge pull request #9134 from FRRouting/mergify/bp/stable/8.0/pr-8334
Donald Sharp [Fri, 23 Jul 2021 12:26:31 +0000 (08:26 -0400)]
Merge pull request #9134 from FRRouting/mergify/bp/stable/8.0/pr-8334

ospf6d: Release last dbdesc packet after router dead interval (backport #8334)

3 years agoMerge pull request #9132 from FRRouting/mergify/bp/stable/8.0/pr-8892
Donald Sharp [Fri, 23 Jul 2021 12:26:01 +0000 (08:26 -0400)]
Merge pull request #9132 from FRRouting/mergify/bp/stable/8.0/pr-8892

fabricd: fix running config (backport #8892)

3 years agoMerge pull request #9131 from FRRouting/mergify/bp/stable/8.0/pr-8822
Donald Sharp [Fri, 23 Jul 2021 12:24:52 +0000 (08:24 -0400)]
Merge pull request #9131 from FRRouting/mergify/bp/stable/8.0/pr-8822

tools: add mac access-list context to frr-reload.py (backport #8822)

3 years agoMerge pull request #9130 from FRRouting/mergify/bp/stable/8.0/pr-8955
Donald Sharp [Fri, 23 Jul 2021 12:24:31 +0000 (08:24 -0400)]
Merge pull request #9130 from FRRouting/mergify/bp/stable/8.0/pr-8955

ospfd: show ip ospf route json does not shown metric and tag (backport #8955)

3 years agostaticd: fix late initialization of blackhole type
anlan_cs [Thu, 8 Jul 2021 09:57:37 +0000 (05:57 -0400)]
staticd: fix late initialization of blackhole type

If a static route is added to a not-yet-existing VRF, the blackhole type
is not initialized. Initialization must be done before the VRF existence
check.

Signed-off-by: anlan_cs <anlan_cs@tom.com>
(cherry picked from commit 7ea5c53477164104121550365557afac84df03bd)

3 years agobgpd: nht unresolved with global address next-hop
Philippe Guibert [Wed, 30 Jun 2021 12:07:52 +0000 (14:07 +0200)]
bgpd: nht unresolved with global address next-hop

When bgp peers with ipv6 link local addresses, it may receive a
BGP update with next-hop containing both LL and GA information.
By default, nexthop tracking applies to GA, and ignores presence
of LL, when both addresses are present. This is a problem for
resolving GA as next-hop as the next-hop information can be solved
by using the LL address only.

The solution consists in defaulting the nexthop ipv6 choice to LL
when available, and moving back to GA if a route-map is locally
configured at inbound.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
(cherry picked from commit 17ef5a934355a718caf64f2fd5cac5e252977890)

3 years agoospf6d: use per-vrf router id instead of one global
Igor Ryzhov [Tue, 29 Jun 2021 15:10:41 +0000 (18:10 +0300)]
ospf6d: use per-vrf router id instead of one global

This code was not fully completed when adding support for VRFs.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 3c5122c5a7245f703bab3aec098a0f28822eb903)

3 years agoisisd: fix extra space in the mpls-te config output
Igor Ryzhov [Wed, 23 Jun 2021 12:39:56 +0000 (15:39 +0300)]
isisd: fix extra space in the mpls-te config output

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit dab1fb8dc8613378b7b6aec0c75a35fd7e807bd4)

3 years agoisisd: fix uninitialized variable when searching for LSP
Igor Ryzhov [Tue, 22 Jun 2021 14:53:26 +0000 (17:53 +0300)]
isisd: fix uninitialized variable when searching for LSP

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 9ff7c74bdd9c88644a6313aebce004518cbac5b7)

3 years agobgpd: Force process networks on VRF creation
Xiao Liang [Thu, 17 Jun 2021 04:33:59 +0000 (12:33 +0800)]
bgpd: Force process networks on VRF creation

Force the processing of existing network configurations when VRF is
created, otherwise will be skipped in bgp_static_update().

Signed-off-by: Xiao Liang <shaw.leon@gmail.com>
(cherry picked from commit 47fc62610cc6c4228e7775b531e1a3281b98107a)

3 years agoospfd: External lsa handling in opaque capabilities enable/disable
rgirada [Sun, 25 Apr 2021 05:40:33 +0000 (22:40 -0700)]
ospfd: External lsa handling in opaque capabilities enable/disable

Description:
When opaque capability disabled/enabled , all the self-originated lsa will be
flushed and it will make the neighbours to renegotiate.
But here, external lsas are not being re-originated after negotiation
Fix:
Refresh/re-originate external lsas(Type-5 and Type-7) explicitly after
re-negotiation.

Signed-off-by: Rajesh Girada <rgirada@vmware.com>
(cherry picked from commit a4d9009d47eec3df039938fc4cad6c0ffb8e9bf2)

3 years agoospf6d: Release last dbdesc packet after router dead interval
Yash Ranjan [Tue, 16 Mar 2021 07:45:23 +0000 (00:45 -0700)]
ospf6d: Release last dbdesc packet after router dead interval

During the database description exchange process, the slave
releases the last dbdesc packet after router_dead_interval.
This was not implemented in the code.
I have written the function ospf6_neighbor_last_dbdesc_release,
which releases the last dbdesc packet after router_dead_interval.
This change was required as per the conformance test 13.11:

In state Full reception of a Database Description packet from
the master after this interval (RouterDeadInterval) will
generate a SeqNumberMismatch neighbor event.

Associated Parameters
  ICMPv6 Packet Listen Time
  ICMPv6 Packet Tolerance Factor
  ICMPv6 Packet Tolerance Time
  OSPFV3 DUT Interface Transmit Delay
  OSPF Reset Adjacencies Timeout
Test Actions
1.
2. 3.
ANVL: Establish full adjacency with DUT for neighbor Rtr-0-A on DIface-0, with DUT as slave.
ANVL: Wait (for <RouterDeadInterval> seconds).
ANVL: Send <OSPF-DD> packet from neighbor Rtr-0-A to DIface-0 con- taining:
• •
I-bit field not set M-bit field not set
MS-bit field set
DD sequence number same as the one last sent by ANVL.

. ANVL: Listen (for upto 2 * <RxmtInterval> seconds) on DIface-0.
5. DUT: Trigger the event SeqNumberMismatch and set the neighbor state for neighbor Rtr-0-A to ExStart.
6. DUT: Send <OSPF-DD> packet.
7. ANVL: Verify that the received <OSPF-DD> packet contains:
• I-bit field set
• M-bit field set
• MS-bit field set.

Test Reference
• RFC 5340, s4.2.1.2 p19 Sending Database Description Packets
  RFC 2328, s10.8 p104 Sending Database Description Packets.

Signed-off-by: Yash Ranjan <ranjany@vmware.com>
(cherry picked from commit bc09f3e6bbd9df931e259b16da4e7b7593d141c6)

3 years agofabricd: fix running config
Igor Ryzhov [Mon, 21 Jun 2021 15:12:45 +0000 (18:12 +0300)]
fabricd: fix running config

Daemons should not output warnings into the running config.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit b0f8f4d23eaecde6cf9650bf986e2c5bef82b065)

3 years agotools: add mac access-list context to frr-reload.py
Don Slice [Wed, 9 Jun 2021 21:17:21 +0000 (14:17 -0700)]
tools: add mac access-list context to frr-reload.py

Problem reported that frr-reload.py didn't handle the mac access-list
command correctly, causing reloads to fail.  This fix adds the
support for the command as a single line context.

Signed-off-by: Don Slice <dslice@nvidia.com>
(cherry picked from commit 1443e2314837a659adafdf04e41a768b40ec6850)

3 years agoospfd: show ip ospf route json does not shown metric and tag
Mobashshera Rasool [Wed, 30 Jun 2021 07:17:58 +0000 (07:17 +0000)]
ospfd: show ip ospf route json does not shown metric and tag

Problem Statement:
==================
[FRR OSPF] show ip ospf route json does not shown metric and tag.

Root Cause Analysis:
===================
In function show_ip_ospf_route_external, type 2 cost is not added in json.
Hence it is not displayed.

Fix:
=================
1. Add type2cost in the json display
2. Tag was also missing, added that as well

Issue: #8729

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
(cherry picked from commit 67df36493d3cfad01fbd2847b7cfe4a416701b2a)

3 years agoMerge pull request #9125 from FRRouting/mergify/bp/stable/8.0/pr-9016
Martin Winter [Fri, 23 Jul 2021 07:38:54 +0000 (09:38 +0200)]
Merge pull request #9125 from FRRouting/mergify/bp/stable/8.0/pr-9016

ospf6d: fix backlink check (backport #9016)

3 years agoMerge pull request #9124 from FRRouting/mergify/bp/stable/8.0/pr-8868
Martin Winter [Fri, 23 Jul 2021 07:33:33 +0000 (09:33 +0200)]
Merge pull request #9124 from FRRouting/mergify/bp/stable/8.0/pr-8868

ospf6d: redistribute command minor fixes (backport #8868)

3 years agoMerge pull request #9123 from FRRouting/mergify/bp/stable/8.0/pr-8841
Martin Winter [Fri, 23 Jul 2021 07:32:55 +0000 (09:32 +0200)]
Merge pull request #9123 from FRRouting/mergify/bp/stable/8.0/pr-8841

ospf6: Drop LSA with bad seqnumber (backport #8841)

3 years agoMerge pull request #9122 from FRRouting/mergify/bp/stable/8.0/pr-8891
Martin Winter [Fri, 23 Jul 2021 07:31:53 +0000 (09:31 +0200)]
Merge pull request #9122 from FRRouting/mergify/bp/stable/8.0/pr-8891

lib: remove vrf-interface config when removing the VRF (backport #8891)

3 years agoMerge pull request #9121 from FRRouting/mergify/bp/stable/8.0/pr-8878
Martin Winter [Fri, 23 Jul 2021 07:30:52 +0000 (09:30 +0200)]
Merge pull request #9121 from FRRouting/mergify/bp/stable/8.0/pr-8878

ospf6d: fix "show ipv6 ospf6 neighbor" command (backport #8878)

3 years agoMerge pull request #9119 from FRRouting/mergify/bp/stable/8.0/pr-8850
Martin Winter [Thu, 22 Jul 2021 23:54:46 +0000 (01:54 +0200)]
Merge pull request #9119 from FRRouting/mergify/bp/stable/8.0/pr-8850

ospf6d: consistent checksum JSON output (backport #8850)

3 years agoMerge pull request #9118 from FRRouting/mergify/bp/stable/8.0/pr-8954
Martin Winter [Thu, 22 Jul 2021 23:53:28 +0000 (01:53 +0200)]
Merge pull request #9118 from FRRouting/mergify/bp/stable/8.0/pr-8954

ospf6d: route-map config changed, not getting applied on all types of… (backport #8954)

3 years agoMerge pull request #9117 from FRRouting/mergify/bp/stable/8.0/pr-8919
Martin Winter [Thu, 22 Jul 2021 23:52:12 +0000 (01:52 +0200)]
Merge pull request #9117 from FRRouting/mergify/bp/stable/8.0/pr-8919

ospf6d: Max aged LSAs are not getting deleted from DB (backport #8919)

3 years agoospf6d: fix backlink check
Christian Hopps [Fri, 9 Jul 2021 07:58:02 +0000 (03:58 -0400)]
ospf6d: fix backlink check

This code has been wrong ~ever (according to git history). There are 3
conditional blocks with the added assertion that both the LSA and the
vertex being checked can't both be network LSAs.

The third block is clearly assuming both LSA and vertex are router
LSAs b/c it is accessing the backlink and lsdesc as router lsdesc's also
making sure both are p2p links (which they would have to be to point at
each other).

The programming error here is that (A && B) == False does NOT imply !A,
but the code is written that way.

So we end up in the third block one of LSA or vertex being network LSAs
rather easily (whenever that is the case and the desc isn't the backlink
being sought).

This was caught by ASAN b/c the lsdesc and backlinks are being accessed
(> 4 byte field offsets) as if they were router lsdesc's in the third
block, when in fact one of them is a network lsdesc which is only 4
bytes long -- so ASAN flags the access beyond bounds.

Signed-off-by: Christian Hopps <chopps@labn.net>
(cherry picked from commit ff2052eefc7d99604c4480398c86163f2255ff73)

3 years agotests: use correct metric type and value for OSPFv3 redistributed routes
Igor Ryzhov [Fri, 18 Jun 2021 13:05:01 +0000 (16:05 +0300)]
tests: use correct metric type and value for OSPFv3 redistributed routes

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 80fb1cf4460023483540947397231ba11422857d)

3 years agoospf6d: Set metric from default values when route-map metric not present
Yash Ranjan [Wed, 2 Jun 2021 12:45:18 +0000 (05:45 -0700)]
ospf6d: Set metric from default values when route-map metric not present

For redistribute commands if route map is set, then route takes it's metric
values from the route map. But in the case that routemap is set but the
metric for the route map is not, then the route metric is set to type-1.

Check if the metric is set for the routemap. If not then set it as per
redistributed default values (type 2)

Signed-off-by: Yash Ranjan <ranjany@vmware.com>
(cherry picked from commit f84504e686aa52591e0a3c211cfd1b5afe324756)

3 years agoospf6d: Change the default metric parameter for redistribute
Yash Ranjan [Mon, 24 May 2021 10:44:12 +0000 (03:44 -0700)]
ospf6d: Change the default metric parameter for redistribute

The default values will be set at the time of ospf6_redist_add
similar to ospfv2. Hence the default values will change as well.
Default metric type = E2
Default metic value = 20

Signed-off-by: Yash Ranjan <ranjany@vmware.com>
(cherry picked from commit a5bc334beb2f976d7cf3f0d6250086f435e17b7f)

3 years agoospf6: Drop LSA with bad seqnumber
lynne [Fri, 11 Jun 2021 14:38:42 +0000 (10:38 -0400)]
ospf6: Drop LSA with bad seqnumber

In RFC 2328 seqnumber 0x80000000 is reserved and not used.   If an LSA
is received with seqnumber the LSA is now dropped and a debug error log
is printed.

Signed-off-by: Lynne Morrison <lynne@voltanet.io>
(cherry picked from commit c5467a12ea002f4fbedf179e826445d9e3dbd4b8)

3 years agolib: remove vrf-interface config when removing the VRF
Igor Ryzhov [Mon, 21 Jun 2021 15:04:46 +0000 (18:04 +0300)]
lib: remove vrf-interface config when removing the VRF

If we have the following configuration:
```
vrf red
 smth
 exit-vrf
!
interface red vrf red
 smth
```
And we delete the VRF using "no vrf red" command, we end up with:
```
interface red
 smth
```
Interface config is preserved but moved to the default VRF.

This is not an expected behavior. We should remove the interface config
when the VRF is deleted.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit f5eef2d5a8a471fe6e4ec4f6acfa3dbf190eda5d)

3 years agoospf6d: fix "show ipv6 ospf6 neighbor" command
Igor Ryzhov [Fri, 18 Jun 2021 19:42:49 +0000 (22:42 +0300)]
ospf6d: fix "show ipv6 ospf6 neighbor" command

Simplify the logic and fix processing of "detail" and "drchoice"
arguments.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit ee3e6d7ff3eb39536ac5aaea02180943bac698a3)

3 years agoospf6d: consistent checksum json output
David Schweizer [Mon, 14 Jun 2021 06:21:42 +0000 (08:21 +0200)]
ospf6d: consistent checksum json output

Changed LSA checksum JSON output variable name from "checkSum" to
"checksum" to maintain consistency.

Signed-off-by: David Schweizer <dschweizer@opensourcerouting.org>
(cherry picked from commit d6265808f46eca787f6816ed2e4c684caf05e75b)

3 years agoospf6d: route-map config changed, not getting applied on all types of routes
Mobashshera Rasool [Wed, 30 Jun 2021 06:13:19 +0000 (06:13 +0000)]
ospf6d: route-map config changed, not getting applied on all types of routes

Problem Statement:
==================
when route-map config is changed from permit to deny, it is not getting
applied to both connected and static and vice versa

RCA:
==================
When route-map changes from permit to deny or vice versa, a notification is
sent to ospf6 daemon via ospf6_asbr_routemap_update. In this function, a thread
is scheduled after 5 seconds to apply the route-map changes. In this thread
(ospf6_asbr_routemap_update_timer), only the first type is passed as argument
and only the first type i.e "connected" is passed and hence in callback only
on this type of route route-map gets applied.

Fix:
====
Need to loop through all the route-types in the call back and process
the route-map changes. Added a flag to mark which all route-types needs
to be processed.

Test Executed:
===============
1. Change route-map from permit to deny.
2. Change route-map from deny to permit.
3. Add new route and checked.
4. Verified summarised routes.

Risk:
============
Low

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
(cherry picked from commit 2f43e34de15b61b8e9a8398c18172d9e485e2f2c)

3 years agoospf6d: Max aged LSAs are not getting deleted from DB
Mobashshera Rasool [Thu, 24 Jun 2021 11:10:04 +0000 (11:10 +0000)]
ospf6d: Max aged LSAs are not getting deleted from DB

Problem Statement:
==================
Max aged LSAs are not getting deleted from DB when there are multiple
neighbors in a LAN.

Root Cause Analysis:
====================
When the LSA is added to the neighbor's retransmit list, the LSA retrans count
is incremented but it is not checked if the LSA is already present in the
retransmit list leading to the count being incremented multiple times
untill the ack is not received and when the ack is received the count is
decremented once and hence the count never becomes 0 and
it remains in the DB forever.

Fix:
====================
Do not increment the retrans count multiple times if the LSA is already
present in the retransmit list of the neighbor. Also do not add the LSA
in the retransmit List if already present.

Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
(cherry picked from commit c1e4c0dcf876ff6b352800402ff24254f8962238)

3 years agoFRR Release 8.0 frr-8.0
Martin Winter [Wed, 21 Jul 2021 13:06:19 +0000 (15:06 +0200)]
FRR Release 8.0

Major changes:
* A new daemon, `pathd`, has been added. This daemon implements support
  for segment routing.
* EVPN Multihoming is now fully supported
* OSPFv3 now supports VRFs
* TI-LFA has been implemented in IS-IS and OSPF
* Zebra now has the ability to dump netlink messages in a human-friendly format
* LDP gained SNMP support
* Minimum libyang version is now 2.0

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
3 years agoMerge pull request #9057 from FRRouting/mergify/bp/dev/8.0/pr-9051
Donatas Abraitis [Thu, 15 Jul 2021 07:58:20 +0000 (10:58 +0300)]
Merge pull request #9057 from FRRouting/mergify/bp/dev/8.0/pr-9051

bgpd: fix crash during configuration removal (backport #9051)

3 years agobgpd: fix crash during configuration removal
Rafael Zalamena [Wed, 14 Jul 2021 01:46:40 +0000 (22:46 -0300)]
bgpd: fix crash during configuration removal

Test the BFD config pointer before trying to free the session as it
might not exist.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
(cherry picked from commit 373de4b5b05837bc5768084fae824d9d68ce3a7c)

3 years agoMerge pull request #9043 from FRRouting/mergify/bp/dev/8.0/pr-9015
Donatas Abraitis [Wed, 14 Jul 2021 04:57:49 +0000 (07:57 +0300)]
Merge pull request #9043 from FRRouting/mergify/bp/dev/8.0/pr-9015

bgpd: Inconsistency in Local BGP GR state. (backport #9015)

3 years agoMerge pull request #8999 from ton31337/fix/check_only_ebgp_peer_8.0
Russ White [Tue, 13 Jul 2021 15:42:55 +0000 (11:42 -0400)]
Merge pull request #8999 from ton31337/fix/check_only_ebgp_peer_8.0

bgpd: [8.0] Parse as withdrawal if AS-PATH contains 0 within the path

3 years agobgpd: Inconsistency in Local BGP GR state.
prerana [Fri, 9 Jul 2021 07:20:15 +0000 (00:20 -0700)]
bgpd: Inconsistency in Local BGP GR state.

Problem: Sometimes the configured Local GR state is not reflected in
show command and peer node. This is causing failures in few of the
BGP-GR topotests.

RCA: This problem is seen when the configuration of local GR state
happens when the BGP session is in OpenSent state and  moves to
Established after the configuration is complete.
When the session gets established, we move the GR state value from stub peer
to the config peer. This will result in overriding the GR state to
previous value.

Fix: The local GR state is modified only through CLI configuration and
does not change during BGP FSM transition. In this case it is not necessary
to transfer the GR state value from stub peer to config peer. This way we
can ensure that always the most recent config value is present in peer
datastructure.

Signed-off-by: Prerana-GB <prerana@vmware.com>
(cherry picked from commit 3f98a750c29bfce5e5d7ffa36fe5c0b1554d7b7a)

3 years agoMerge pull request #9042 from FRRouting/mergify/bp/dev/8.0/pr-9037
Donald Sharp [Tue, 13 Jul 2021 15:08:06 +0000 (11:08 -0400)]
Merge pull request #9042 from FRRouting/mergify/bp/dev/8.0/pr-9037

ospf6d: fix freebsd mcast group issues (backport #9037)

3 years agoMerge pull request #8998 from ton31337/fix/bgp_extended_msg_support_8.0
Russ White [Tue, 13 Jul 2021 14:46:10 +0000 (10:46 -0400)]
Merge pull request #8998 from ton31337/fix/bgp_extended_msg_support_8.0

bgpd: [8.0] Fixes for BGP extended message support

3 years agoMerge pull request #9000 from ton31337/fix/bgp_dest_lock_unlock_8.0
Russ White [Tue, 13 Jul 2021 14:41:39 +0000 (10:41 -0400)]
Merge pull request #9000 from ton31337/fix/bgp_dest_lock_unlock_8.0

bgpd: [8.0] Make sure we don't miss to unlock for bgp_dest before returning

3 years agoospf6d: fix freebsd mcast group issues
Igor Ryzhov [Mon, 12 Jul 2021 19:51:49 +0000 (22:51 +0300)]
ospf6d: fix freebsd mcast group issues

There's a delay in FreeBSD between issuing a command to leave a
multicast group and an actual leave. If we execute "no router ospf6" and
"router ospf6" fast enough, we can end up in a situation when OS
performs the leave later than it performs the join and the interface
remains without a multicast group.

Instead of counting on a one second delay, we must wait until the
interface actually leaves the group.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 93828a99232cfa5ab00ee7ec8003a6b22b6975e9)

3 years agoMerge pull request #9003 from FRRouting/mergify/bp/dev/8.0/pr-8997
Donald Sharp [Thu, 8 Jul 2021 13:44:28 +0000 (09:44 -0400)]
Merge pull request #9003 from FRRouting/mergify/bp/dev/8.0/pr-8997

lib: Allow ZAPI_MESSAGE_OPAQUE_LENGTH length of data (backport #8997)

3 years agolib: Allow ZAPI_MESSAGE_OPAQUE_LENGTH length of data
Donald Sharp [Wed, 7 Jul 2021 20:00:12 +0000 (16:00 -0400)]
lib: Allow ZAPI_MESSAGE_OPAQUE_LENGTH length of data

We are sending up to ZAPI_MESSAGE_OPAQUE_LENGTH but checking
for one less.  We know the data will fit in it to that size.
Also we have asserts on the write to ensure we don't go over
it

Fixes: #8995
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 3b1849be3211bdc7c53bdeb0d982863dfe0284d0)

3 years agoMerge pull request #8996 from FRRouting/mergify/bp/dev/8.0/pr-7674
Martin Winter [Thu, 8 Jul 2021 01:35:16 +0000 (03:35 +0200)]
Merge pull request #8996 from FRRouting/mergify/bp/dev/8.0/pr-7674

Convert the packaging to use git-buildpackage (backport #7674)

3 years agobgpd: Make sure we don't miss to unlock for bgp_dest before returning
Donatas Abraitis [Tue, 22 Jun 2021 20:14:47 +0000 (23:14 +0300)]
bgpd: Make sure we don't miss to unlock for bgp_dest before returning

bgp_node_lookup() increases `lock` which is not decreased on return.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agotests: Treat as withdraw if AS-PATH contains 0 within the path
Donatas Abraitis [Tue, 29 Jun 2021 14:17:55 +0000 (17:17 +0300)]
tests: Treat as withdraw if AS-PATH contains 0 within the path

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agotests: Add a test case for BGP AS-PATH 0 in the path
Donatas Abraitis [Tue, 29 Jun 2021 13:25:21 +0000 (16:25 +0300)]
tests: Add a test case for BGP AS-PATH 0 in the path

We should withdraw prefixes with ASN 0 within the path.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agobgpd: Parse as withdrawal if AS-PATH contains 0 within the path
Donatas Abraitis [Tue, 29 Jun 2021 13:10:50 +0000 (16:10 +0300)]
bgpd: Parse as withdrawal if AS-PATH contains 0 within the path

Process this a bit later instead of bgp_attr_parse() which is causing
the session to be shutdown upon receiving a prefix with AS number 0 inside.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agobgpd: Set 4096 instead of 65535 as new max packet size for a new peer
Donatas Abraitis [Fri, 2 Jul 2021 13:50:39 +0000 (16:50 +0300)]
bgpd: Set 4096 instead of 65535 as new max packet size for a new peer

New peers should be initialized with a usual max packet size and later
determined on OPEN messages.

Testing with different peers supporting/not supporting extended support.

2021/07/02 13:48:00 BGP: [WEV7K-2GAQ5] u2:s2 send UPDATE len 8991 (max message len: 65535) numpfx 1788
2021/07/02 13:48:03 BGP: [WEV7K-2GAQ5] u3:s3 send UPDATE len 4096 (max message len: 4096) numpfx 809
2021/07/02 13:48:03 BGP: [WEV7K-2GAQ5] u3:s3 send UPDATE len 4096 (max message len: 4096) numpfx 809

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agobgpd: Create another update-group depending on max bgp packet size
Donatas Abraitis [Fri, 2 Jul 2021 13:48:11 +0000 (16:48 +0300)]
bgpd: Create another update-group depending on max bgp packet size

This should be garuanteed that we create a separate update-group if
bgp max packet size differs.

Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
3 years agodebian: Merge the official Debian changelog into d/changelog
Ondřej Surý [Mon, 17 May 2021 18:20:33 +0000 (20:20 +0200)]
debian: Merge the official Debian changelog into d/changelog

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 4ebb9e9d2019e0c250cf606377b399db3498074c)

3 years agotools: Simplify the script to build Debian binary package
Igor Ryzhov [Mon, 17 May 2021 18:18:01 +0000 (20:18 +0200)]
tools: Simplify the script to build Debian binary package

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit c54e2a8144074f36f185f6a21fe57896488c3bf5)

3 years agodebian: Update the upstream version to 7.7~dev-1
Ondřej Surý [Tue, 4 May 2021 20:53:33 +0000 (22:53 +0200)]
debian: Update the upstream version to 7.7~dev-1

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 1b3fe7ab548b990f31d96c50f52f380f56df4af8)

3 years agodoc: Use dpkg-buildpackage to build packages (add note about debuild)
Ondřej Surý [Mon, 15 Feb 2021 07:43:26 +0000 (08:43 +0100)]
doc: Use dpkg-buildpackage to build packages (add note about debuild)

The debuild command fails when we are doing source package only build
because it expects the arch-dependent .changes file to be present.  Thus
in the instructions we switch to using dpkg-buildpackage directly and
add a note about using debuild in more complicated scenarios.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit c4783c325a03545255b9da5deca7b5a9f05772a3)

3 years agodoc: Add instructions on how to build only source packages
Ondřej Surý [Mon, 15 Feb 2021 07:40:08 +0000 (08:40 +0100)]
doc: Add instructions on how to build only source packages

In the CI, it's better to build the source package only once and then
instead of checking out the whole repository, only distribute the source
packages to the individual jobs.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 4c65fb08f7a6b3bfafdadc6cd8b6dc0e95e13649)

3 years agodoc: Update debian packaging instructions
Ondřej Surý [Thu, 11 Feb 2021 20:27:49 +0000 (21:27 +0100)]
doc: Update debian packaging instructions

The debian packaging instructions have been updated, so they actually
work.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit f36c3644e7808408433ce90691a6c106008c5315)

3 years agodebian: Add support for Debian bullseye to the packaging script
Ondřej Surý [Thu, 11 Feb 2021 19:53:43 +0000 (20:53 +0100)]
debian: Add support for Debian bullseye to the packaging script

The Debian bullseye is frozen now, so this adds support to this
Debian release to the packaging script.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit dfbc6c046e54ca0f955ae2afeca47b8f6fd5b1fd)

3 years agodebian: Fix the debian packaging script to build on non-default branch
Ondřej Surý [Thu, 11 Feb 2021 19:44:09 +0000 (20:44 +0100)]
debian: Fix the debian packaging script to build on non-default branch

The packaging script would fail to run on non-master branch, fix that
by pulling original branch name.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 9ea548cf3c81452f46cd0f52ff678db242e8d971)

3 years agodebian: Make the autopkgtest more resilient (Closes: #980111)
Ondřej Surý [Sun, 7 Feb 2021 11:52:35 +0000 (12:52 +0100)]
debian: Make the autopkgtest more resilient (Closes: #980111)

The Debian autopkgtest would fail with new PAM introduced in Debian bullseye.
Add a little loop to wait a little longer for the changes to propagate.

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 33ce95cad08d40aca84e254a26547aac5054e232)

3 years agodebian: Update the tools/build-debian-package.sh to be example build script
Ondřej Surý [Sun, 27 Sep 2020 11:17:57 +0000 (13:17 +0200)]
debian: Update the tools/build-debian-package.sh to be example build script

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 223766ead45908e3950b1a7cc85ea2acae7054a0)

3 years agodebian: Remove now obsolete tarsource.sh script
Ondřej Surý [Sun, 27 Sep 2020 10:18:21 +0000 (12:18 +0200)]
debian: Remove now obsolete tarsource.sh script

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit aa1e17f5ca7d47107f74dd8c6815b52c714957a9)

3 years agodebian: Remove the changelog-auto automation in favor of dch
Ondřej Surý [Sun, 27 Sep 2020 09:46:31 +0000 (11:46 +0200)]
debian: Remove the changelog-auto automation in favor of dch

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 06417e9f1803949a620cb37ce79054ddaa804387)

3 years agodebian: Update tools/build-debian-package.sh to use git-buildpackage
Ondřej Surý [Sun, 27 Sep 2020 09:08:13 +0000 (11:08 +0200)]
debian: Update tools/build-debian-package.sh to use git-buildpackage

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit bcd053ee8d75968f03f77c7975c0bbc85de3a4e1)

3 years agodebian: Adjust tarsource.sh to use native debian/changelog
Ondřej Surý [Sat, 26 Sep 2020 16:53:34 +0000 (18:53 +0200)]
debian: Adjust tarsource.sh to use native debian/changelog

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit 25785834afb2dde5e1f6608bc4a1de53b9f4bc4b)

3 years agodebian: Merge various debian changelogs in debian/changelog
Ondřej Surý [Sat, 26 Sep 2020 16:33:06 +0000 (18:33 +0200)]
debian: Merge various debian changelogs in debian/changelog

Signed-off-by: Ondřej Surý <ondrej@sury.org>
(cherry picked from commit b7abcded1a9e08da6e2e7a231d0cffec479c9b69)

3 years agoMerge pull request #8933 from FRRouting/mergify/bp/dev/8.0/pr-8925
Donald Sharp [Tue, 29 Jun 2021 19:49:11 +0000 (15:49 -0400)]
Merge pull request #8933 from FRRouting/mergify/bp/dev/8.0/pr-8925

ospf6d: fix duplicated packet read (backport #8925)

3 years agoMerge pull request #8934 from FRRouting/mergify/bp/dev/8.0/pr-8904
Donald Sharp [Tue, 29 Jun 2021 19:48:55 +0000 (15:48 -0400)]
Merge pull request #8934 from FRRouting/mergify/bp/dev/8.0/pr-8904

ospf6d: Show neighbor displays twice for every neighbor. (backport #8904)

3 years agoospf6d: Show neighbor displays twice for every neighbor.
Abhinay Ramesh [Tue, 22 Jun 2021 16:41:25 +0000 (16:41 +0000)]
ospf6d: Show neighbor displays twice for every neighbor.

Problem Statement:
=================
When show ipv6 ospf6 neighbor is executed each neighbor gets
displayed twice.

frr# show ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime    State/IfState         Duration I/F[State]
1.1.1.1           1    00:00:39     Full/DR              00:00:10 ens192[BDR]
1.1.1.1           1    00:00:39     Full/DR              00:00:10 ens192[BDR]

RCA:
====
Since ospf6_interface gets added twice to if_list we see multiple
display output.

Fix:
====
add ospf6_interface to if_list only when newly area gets attached
to the interface. If its already added no need to add it again.

Risk:
=====
Low

Tests Executed:
===============
Have tested the defect scenario.

frr# show ipv6 ospf6 neighbor
Neighbor ID     Pri    DeadTime    State/IfState         Duration I/F[State]
1.1.1.1           1    00:00:35     Full/DR              00:36:04 ens192[BDR]
frr#

Signed-off-by: Abhinay Ramesh <rabhinay@vmware.com>
(cherry picked from commit 40699728315d3c7a79059e55a7921308c80eb23d)

3 years agoospf6d: fix duplicated packet read
Igor Ryzhov [Fri, 25 Jun 2021 11:59:28 +0000 (14:59 +0300)]
ospf6d: fix duplicated packet read

When OSPFv3 router is configured in both default and non-default VRFs,
every packet destined to a non-default VRF is read twice. This makes it
impossible to establish neighborship because every DbDesc packet is
treated as duplicated and we end up infinitely exchanging DbDescs.

We should drop packets received in the default VRF if an interface we
received it on is bound to another VRF.

Same thing was done for OSPFv2 in 555691e.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 709bd204214c9d31592e4c2ccbb78b6b3f79a99b)

3 years agoMerge pull request #8929 from FRRouting/mergify/bp/dev/8.0/pr-8907
Donald Sharp [Mon, 28 Jun 2021 11:43:51 +0000 (07:43 -0400)]
Merge pull request #8929 from FRRouting/mergify/bp/dev/8.0/pr-8907

Fix ISIS config batching (backport #8907)

3 years agoisisd: fix interface ldp-sync configuration
Igor Ryzhov [Tue, 22 Jun 2021 21:27:55 +0000 (00:27 +0300)]
isisd: fix interface ldp-sync configuration

There are two checks done when configuring ldp-sync on an interface:
- interface is not a loopback
- interface is in the default VRF
Both checks are incorrectly done using the operational data.

The second check can be done using only config data - do that.

The first check can't be done using only configurational data, but it's
not necessary. LDP sync code doesn't operate on loopback interfaces
already. There's no harm in allowing this to be configured.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit e432649280b47b55723ca3ce6b39bacc039b6e18)

3 years agoisisd: fix instance ldp-sync configuration
Igor Ryzhov [Tue, 22 Jun 2021 21:23:18 +0000 (00:23 +0300)]
isisd: fix instance ldp-sync configuration

Don't rely on operational data to validate that configuration is applied
to the default VRF. The VRF name is stored in the config - use it instead.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 80ab95b134b00a115175adc46b82a3f69f58ec87)

3 years agoisisd: fix NET NB configuration
Igor Ryzhov [Tue, 22 Jun 2021 21:21:24 +0000 (00:21 +0300)]
isisd: fix NET NB configuration

Don't rely on operational data to check for system ID consistency. This
is purely configurational data thing.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 0a156eecf2d4db42e3f21b35fbc09e2516898c53)

3 years agoMerge pull request #8882 from idryzhov/8.0-backports-06-18
Donald Sharp [Sat, 19 Jun 2021 19:46:33 +0000 (15:46 -0400)]
Merge pull request #8882 from idryzhov/8.0-backports-06-18

8.0 backports

3 years agoMerge pull request #8879 from FRRouting/mergify/bp/dev/8.0/pr-8876
Donald Sharp [Sat, 19 Jun 2021 19:45:52 +0000 (15:45 -0400)]
Merge pull request #8879 from FRRouting/mergify/bp/dev/8.0/pr-8876

lib: remove pure attribute from functions that modify memory (backport #8876)

3 years agolib: remove pure attribute from functions that modify memory
Igor Ryzhov [Fri, 18 Jun 2021 10:06:13 +0000 (13:06 +0300)]
lib: remove pure attribute from functions that modify memory

Almost all functions currently marked with pure attribute acquire a
route_node lock. By marking them pure we allow compiler to optimize the
code and not call them when it already knows the return value. This is
completely incorrect.

Only two of eleven functions can be marked as pure. And they still won't
be optimized because they are never called from the same function twice.
Let's remove the ext_pure macro completely to reduce the chance of
repeating this mistake in the future.

Fixes #8866, #8809, #8595, #6992.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
(cherry picked from commit 4f08c715db6893ff439d0a39bf4506cd26256d13)

3 years agolib: cleanup and stop grpc pthread
Mark Stapp [Mon, 7 Jun 2021 17:55:11 +0000 (13:55 -0400)]
lib: cleanup and stop grpc pthread

At shutdown, try to stop the grpc module and its
dedicated pthread cleanly.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
3 years agodocker: Use tini unilaterally and stop tailing /dev/null
Wesley Coakley [Wed, 9 Jun 2021 03:50:43 +0000 (23:50 -0400)]
docker: Use tini unilaterally and stop tailing /dev/null

tini is a hyper-minimal PID 0 which spawns a child process (watchfrr.sh
in our case), reaps zombies and forwards signals to the script. Starting
watchfrr.sh directly instead of through the old `tail /dev/null` or
`sleep 365d` helps keep things clean too :)

While tini was previously only used in the Alpine container it is useful
to apply this PID 0 to all containers except the special CI ones.

Fixes: #8788
Signed-off-by: Wesley Coakley <w@wesleycoakley.com>
3 years agobgpd: fix routemap update with disabled delay timer
Igor Ryzhov [Thu, 10 Jun 2021 17:21:51 +0000 (20:21 +0300)]
bgpd: fix routemap update with disabled delay timer

- vnc_routemap_update is called only for the last bgp instance
- vpn_policy_routemap_event is not called at all
- unguarded debug (there's already a debug inside the called function)

Make the code consistent with the callback code that is used when the
delay timer is enabled.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoisisd: per-instance dynamic hostname cache
Igor Ryzhov [Fri, 11 Jun 2021 15:27:46 +0000 (18:27 +0300)]
isisd: per-instance dynamic hostname cache

Currently, the dynamic hostname cache is global. It is incorrect because
neighbors in different VRFs may have the same system ID and different
hostnames.

This also fixes a memory leak - when the instance is deleted, the cache
must be cleaned up and the cleanup thread must be cancelled.

Fixes #8832.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoisis: fix double-adding a circuit to the area
Igor Ryzhov [Wed, 16 Jun 2021 12:54:17 +0000 (15:54 +0300)]
isis: fix double-adding a circuit to the area

isis_circuit_enable can be called for an already enabled circuit. In this
case we would add the circuit to the area multiple times.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoisisd: fix adding a circuit to the wrong area
Igor Ryzhov [Wed, 16 Jun 2021 12:52:14 +0000 (15:52 +0300)]
isisd: fix adding a circuit to the wrong area

When creating a new area, we're adding all circuits in the same VRF to
this area. We should only add circuits configured with the same tag.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoospfd: fix routemap update
Igor Ryzhov [Thu, 17 Jun 2021 16:31:03 +0000 (19:31 +0300)]
ospfd: fix routemap update

Currently, if the routemap already exists, we delete the pointer to it
when it is updated. We should delete the pointer only if the route-map
is actually deleted.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agodoc: add a note of domainname
anlancs [Thu, 10 Jun 2021 01:36:19 +0000 (09:36 +0800)]
doc: add a note of domainname

Signed-off-by: anlancs <anlan_cs@tom.com>
3 years agolib: terminate default vrf last
Stephen Worley [Thu, 10 Jun 2021 20:52:35 +0000 (16:52 -0400)]
lib: terminate default vrf last

Always terminate default VRF last during FRR shutdown.

On shutdown we were simply looping over the RB tree and terminating
VRFs from the ROOT. This is not guaranteed to be the default last ever.

Instead switch to RB_SAFE and skip the default VRF till the very end.

Signed-off-by: Stephen Worley <sworley@nvidia.com>
3 years agoMerge pull request #8858 from FRRouting/mergify/bp/dev/8.0/pr-8838
Donald Sharp [Fri, 18 Jun 2021 12:06:28 +0000 (08:06 -0400)]
Merge pull request #8858 from FRRouting/mergify/bp/dev/8.0/pr-8838

lib: do not attempt to create default nodes from NULL tree node (backport #8838)

3 years agoMerge pull request #8827 from idryzhov/8.0-backports-06-10
Mark Stapp [Wed, 16 Jun 2021 20:01:29 +0000 (16:01 -0400)]
Merge pull request #8827 from idryzhov/8.0-backports-06-10

8.0 backports

3 years agolib: do not attempt to create default nodes from NULL tree node
Christian Hopps [Fri, 11 Jun 2021 13:18:24 +0000 (13:18 +0000)]
lib: do not attempt to create default nodes from NULL tree node

Perform same NULL check for dependent node creation code too.

Signed-off-by: Christian Hopps <chopps@labn.net>
(cherry picked from commit 4da08e016b5753558ffe61db532af8a2f9b6a8a5)

3 years agotests: replace "interface IFNAME area" with "ipv6 ospf6 area"
Igor Ryzhov [Mon, 7 Jun 2021 19:58:30 +0000 (22:58 +0300)]
tests: replace "interface IFNAME area" with "ipv6 ospf6 area"

Only one test is modified yet, to have both new and deprecated commands
tested by the CI.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agodoc: replace "interface IFNAME area" with "ipv6 ospf6 area"
Igor Ryzhov [Tue, 25 May 2021 23:05:11 +0000 (02:05 +0300)]
doc: replace "interface IFNAME area" with "ipv6 ospf6 area"

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
3 years agoospf6d: fix interface area configuration
Igor Ryzhov [Tue, 25 May 2021 22:49:30 +0000 (01:49 +0300)]
ospf6d: fix interface area configuration

Currently the interface area is configured from the router node using
"interface IFNAME area ID" command. There are multiple problems with
this command:
- it is not in line with all other interface-related commands - other
  parameters are configured from the interface node using "ipv6 ospf6"
  prefix
- it is not in line with OSPFv2 - area is configured from the interface
  node using "ip ospf area" command
- most importantly, it doesn't work correctly when the interface is in
  a different VRF - instead of configuring the interface, it creates a
  new fake interface and configuring it instead

To fix all the problems, this commit adds a new command to the interface
configuration node - "ipv6 ospf6 area ID". The purpose of the command is
completely the same, but it works correctly in a multi-VRF environment.

The old command is preserved for the backward compatibility, but the
warning is added that it is deprecated because it doesn't work correctly
with VRFs.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>