Commit Graph

8420 Commits

Author SHA1 Message Date
David Lamparter
9cdce038c5 Merge branch 'stable/3.0'
... with a lot of fixups.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 14:35:17 +02:00
David Lamparter
0e236c6cd7 Merge branch 'stable/3.0' into tmp-3.0-master-merge
Marker (--strategy=ours) merge to record which point in history master
is in sync with related to stable/3.0.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 13:13:01 +02:00
David Lamparter
69965f533a zebra: fix pseudowire code re. upstream changes
- VTY_NEWLINE is out
- thread API changed with the extra arg
- struct rib got renamed to struct route_entry
- MPLS_NO_LABEL was removed
- RB-tree implementation has some extra args

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 13:03:39 +02:00
Renato Westphal
2dd0d72624 zebra: add support for static pseudowires
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 13:03:36 +02:00
David Lamparter
c47b10cae1 release: FRR 3.0-rc1 2017-08-09 12:56:09 +02:00
Renato Westphal
b4fcca6bf2 ldpd: fix missing label mappings
In some scenarios, it's possible to send a Label Withdraw to a neighbor
and not receive a corresponding Label Release right away. This can happen
during reconvergence after a network failure or configuration change.

When this happens, the list of upstream mappings of a given FEC might
not be empty even after sending a Label Withdraw to all neighbors. This
situation holds until all neighbors either send a Label Release or are
torn down (e.g. keepalive timeout).

With that said, we shouldn't check for 'RB_EMPTY(&fn->upstream)'
in lde_kernel_update() because it can prevent ldpd from sending label
mappings in such circumstances. This check was introduced to avoid sending
the same label mapping more than once to the same neighbor, but we need
to remove this optimization for now until we find a better solution (which
probably involves refactoring the whole zebra<->ldpd communication).

While here, add a new debug message in lde_send_labelmapping() which
can aid in troubleshooting label problems in the future.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:16 +02:00
Renato Westphal
d42127daf3 zebra: add support to openbsd's mpw(4) for pseudowires
Thanks to rzalamena@ for writing mpw(4) :)

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:16 +02:00
Renato Westphal
87b5f1b77b ldpd: integrate with the pseudowire manager in zebra
If we receive a notification from zebra indicating that the installation
of a pseudowire has failed (e.g. no reachability), send a PW Status
notification to the remote peer (or a Label Withdraw if the remote peer
doesn't support the PW Status TLV).

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:16 +02:00
Renato Westphal
332ad71388 zebra: add new flag to detect nexthop label updates
With the introduction of the pseudowire manager, the NHT tracking code
needs to detect label updates as well.

Create a specific nexthop flag for that. We can't reuse the
RIB_ENTRY_NEXTHOPS_CHANGED flag for this porpose because this flag is
always cleared and reevaluated in rib_process(), setting it outside that
function is a nop.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
Renato Westphal
731a75fef1 zebra: add nexthop tracking for pseudowires
If the remote end of a pseudowire becomes unreachable (no route or an
unlabeled route), then it must be uninstalled. In the same way, when
the remote end becomes reachable, the pseudowire must be installed.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
ßingen
6833ae01bc zebra: add pseudowire manager
Base framework for supporting MPLS pseudowires in FRR.

A consistent zserv interface is provided so that any client daemon
(e.g. ldpd, bgpd) can install/uninstall pseudowires in a standard
way. Static pseudowires can also be implemented by using the same
interface.

When zebra receives a request to install a pseudowire and the installation
in the kernel or hardware fails, a notification is sent back to the
client daemon and a new install attempt is made every 60 seconds (until
it succeeds).

Support for external dataplanes is provided by the use of hooks to
install/uninstall pseudowires.

Signed-off-by: ßingen <bingen@voltanet.io>
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
Renato Westphal
2f9c59f031 zebra: add implicit-null labels to the rib
Implicit-null labels are never installed in the FIB but we need to keep
track of them because of L2/L3 VPN nexthop resolution.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:35:15 +02:00
David Lamparter
211ee93ffb Merge commit '78986c0' into tmp-3.0-master-merge
Marker (--strategy=ours) merge to record which point in history master
is in sync with related to stable/3.0.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 12:09:04 +02:00
ßingen
ea4ecfb351 ospf: Fix segfault if compiled with DEBUG
If OSPF_LS_REFRESH_TIME is 60, min_delay in ospf_refresher_register_lsa
function (ospf_lsa.c) would be negative, so index (which is unsigned)
would be out of range, causing a segfault.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-08-09 12:07:58 +02:00
ßingen
c811f101e7 ospf6: Fix DEBUG compiling error
struct ospf6_lsa doesn't have next nor prev, so it was raising a
compiling error if DEBUG is set.

Signed-off-by: ßingen <bingen@voltanet.io>
2017-08-09 12:07:34 +02:00
Renato Westphal
6e4762e1cc ldpd: fix bug with dual-stack neighbors
We were assuming that a neighbor can be deleted only when all of its
adjacencies are dead. This is not the case for dual-stack neighbors. If
the transport-preference is IPv4 and all adjacencies are IPv6 (or
vice-versa), then it should be deleted and everything cleaned-up
accordingly.

Bug exposed by the new RB tree implementation on master, but the fix
also applies to stable/3.0.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:06:13 +02:00
Renato Westphal
04427fcb48 zebra: fetch interface speed on *BSD
Fixes #407 for FreeBSD and NetBSD.

OpenBSD uses ioctl to fetch interface information on startup and the
SIOCGIFMEDIA command is just too cumbersome to use.

The best way to fix the problem for OpenBSD is probably to stop treating
it differently from the other BSDs for no apparent reason.  There should
be nothing preventing us to make OpenBSD use the routing socket to fetch
interface information on startup (we already do it to detect runtime
changes). This is something that should be done in a separate commit
after a careful analysis.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2017-08-09 12:06:06 +02:00
whitespace / reindent
ac4d0be587 *: reindent
indent.py `git ls-files | pcregrep '\.[ch]$' | pcregrep -v '^(ldpd|babeld|nhrpd)/'`

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-09 12:03:17 +02:00
Lou Berger
11f3bfdd71 Merge pull request #930 from qlyoung/fix-masters-list-reachable
lib: fix still reachable linked list in thread.c
2017-08-08 13:58:06 -04:00
Donald Sharp
76a8685418 Merge pull request #920 from opensourcerouting/static-routes-ifindex-update-3.0
[3.0] fixup static routes' ifindexes when interfaces (dis)appear
2017-08-08 13:39:38 -04:00
Donald Sharp
d3d9c86f54 Merge pull request #919 from opensourcerouting/static-routes-ifindex-update
fixup static routes' ifindexes when interfaces (dis)appear
2017-08-08 13:39:19 -04:00
Quentin Young
eff09c66a4
lib: fix still reachable linked list in thread.c
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-08 12:54:28 -04:00
David Lamparter
d178328163 Merge pull request #927 from donaldsharp/one_day_second
*: Define the number of seconds in a Day, Week and year
2017-08-08 16:19:29 +02:00
Donald Sharp
99a6a31e50 *: Define the number of seconds in a Day, Week and year
The defines:

ONE_DAY_SECOND
ONE_WEEK_SECOND
ONE_YEAR_SECOND

were being defined all over the system, move the
define to a central location.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-08 09:06:22 -04:00
Donald Sharp
f66e92bc48 Merge pull request #783 from opensourcerouting/pw-manager-2
Add Pseudowire management in Zebra
2017-08-08 07:54:32 -04:00
David Lamparter
00857b241e Merge pull request #924 from qlyoung/deprecate-ospf-lsa-min-arrival
ospfd: deprecate `timers lsa arrival ...`
2017-08-08 04:17:00 +02:00
David Lamparter
e8a53dbc52 Merge pull request #923 from devicenull/master
rhel: Don't obsolete bird
2017-08-08 04:16:08 +02:00
Renato Westphal
9074ba8423 Merge pull request #925 from qlyoung/ldpd-no-str
ldpd: use NO_STR
2017-08-07 18:27:52 -03:00
Quentin Young
455066581f
ldpd: use NO_STR
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-07 16:22:59 -04:00
Quentin Young
0e88de35b9
ospfd: deprecate timers lsa arrival ...
Don't need two of these that do the exact same thing.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-07 16:11:10 -04:00
Brian Rak
5d82c57b76 rhel: Don't obsolete bird
The FRR RPM was obsoleting BIRD, which meant that as soon as you added a FRR RPM to a repository, you could no longer install BIRD.  This patch switches it over to Conflicts instead, which should be much nicer behavior
2017-08-07 14:37:21 -04:00
Jafar Al-Gharaibeh
68b39ad41b Merge pull request #922 from qlyoung/pim-cli
pimd: some pim cli fixes
2017-08-07 13:19:11 -05:00
Quentin Young
9643e2c75b
pimd: some pim cli fixes
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2017-08-07 12:42:05 -04:00
Jafar Al-Gharaibeh
ac3da8fa5b Merge pull request #916 from donaldsharp/eigrp_various
Eigrp various
2017-08-07 11:22:36 -05:00
Jafar Al-Gharaibeh
497c6ae075 Merge pull request #903 from donaldsharp/pimble
Pimble
2017-08-07 11:20:38 -05:00
Quentin Young
f36f135e73 Merge pull request #921 from opensourcerouting/vty-varname-end-tkn
lib: cli: don't run off graph "pre-end"
2017-08-07 10:33:15 -04:00
David Lamparter
5225e155d3 lib: cli: don't run off graph "pre-end"
Behind END_TKN, there is another graph node whose data pointer is
actually struct cmd_element instead of struct cmd_token.  Don't try to
interpret that as cmd_token.  This causes very interesting crashes when
ASLR decides to give one of the strings of a command definition a lower
32-bit value that is a valid cmd_token_type (e.g. FORK_TKN).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-07 15:05:34 +02:00
Donald Sharp
a1ea626ef9 Merge pull request #918 from opensourcerouting/vtysh-miss-newline
vtysh: add missing \n on warning message
2017-08-07 08:39:08 -04:00
David Lamparter
06e0a0cb3c zebra: vrf: remove VRF-move static route updating
This was incorrectly implemented to begin with (it only re-added routes,
but didn't remove them) and is now covered in static_ifindex_update.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-07 03:17:47 +02:00
David Lamparter
6201e30b57 zebra: vrf: remove VRF-move static route updating
This was incorrectly implemented to begin with (it only re-added routes,
but didn't remove them) and is now covered in static_ifindex_update.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 07:50:18 +02:00
David Lamparter
a3358cacb8 zebra: static: update on ifindex changes
Whenever an interface is created or deleted in the system, we need to
check whether we have static routes referencing that interface by name.
If so, we need to [un]install these routes.

This has the unfortunate side effect of making static routes with
non-existent interfaces disappear from "show ip route", but I think
that's acceptable (and I don't see a "good" fix for that).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 05:42:54 +02:00
David Lamparter
7569827e30 zebra: static: rename IFINDEX -> IFNAME
Static routes are really held by ifname, not ifindex.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 05:22:49 +02:00
David Lamparter
c3c0406378 zebra: static: update on ifindex changes
Whenever an interface is created or deleted in the system, we need to
check whether we have static routes referencing that interface by name.
If so, we need to [un]install these routes.

This has the unfortunate side effect of making static routes with
non-existent interfaces disappear from "show ip route", but I think
that's acceptable (and I don't see a "good" fix for that).

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 05:17:09 +02:00
David Lamparter
23443030d3 zebra: static: rename IFINDEX -> IFNAME
Static routes are really held by ifname, not ifindex.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 05:17:09 +02:00
David Lamparter
b4e197b521 vtysh: add missing \n on warning message
Oops, missed this in review.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2017-08-06 04:17:13 +02:00
David Lamparter
9b0a8efa46 Merge pull request #912 from chiragshah6/mdev
Fix Multi-Instance OSPF configurations CLIs
2017-08-06 03:55:10 +02:00
Chirag Shah
64ac44f6f0 ospfd: Handle multi instance router ospf command
Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-04 22:59:40 -07:00
David Lamparter
c053ff8bff Merge pull request #899 from donaldsharp/ETH_ALEN
Fix Crash and Convert to ETH_ALEN
2017-08-05 05:19:01 +02:00
Chirag Shah
ac28e4ecaf ospfd: Fix MI-OSPF CLIs
Handle all instance base clis calling ospf_lookup_instance()
to return CMD_NOT_MY_INSTANCE in case of ospf is not found.

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
2017-08-04 18:03:45 -07:00
Donald Sharp
7ecf0a4d37 eigrpd: Fix crash and attempt to send data
This code fixes a crash in EIGRP when on initial
neighbor formation we need to send more than 1 packet
of data to the nbr.

I was testing this by redistributing connected
and just adding a bunch of /32 address to
an interface.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2017-08-04 19:29:03 -04:00