Commit Graph

4498 Commits

Author SHA1 Message Date
Donald Sharp
31303c3e82 bgpd: Reduce json memory usage.
When running 'show bgp ipv4 uni summ' (or any variation thereof)
If you have a large # of routes, the json package starts taking
up a tremendous amount of memory and processing power.

Modify the code to output the json as we go instead of gathering
it all up and outputting at the end.

Ticket: CM-13060
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-10-10 10:51:54 -04:00
Don Slice
61a091c544 zebra: add support for ipv6 static to null0
Added the capability of defining an ipv6 static route to null0,
similar to the support previously in ipv4 only.

Ticket: CM-5794
Signed-off-by: Don Slice
Reviewed By: CCR-5223
Testing Done: Manual tested added to the ticket and bgp and ospf smoke
successfully completed
2016-10-06 13:58:30 -07:00
Don Slice
a452df33aa ospfd: Display all ospf peers with show ip ospf neighbor detail all
Problem reported that no peers are displayed when the command "show
ip ospf neighbor detail all" is entered.  Determined that the problem
was actually that the function only displayed NBMA peers, and since
we rarely (if ever) define NBMA peers, nothing is normally displayed.
Changed the code to display both NBMA and non-NBMA peers, in both the
up and down state.  Manual testing attached to the jira ticket.

Ticket: CM-5878
Signed-off-by: Don Slice
Reviewed-by: Daniel Walton
2016-10-06 13:50:36 -04:00
Daniel Walton
8d62b1417e tools: quagga-reload should raise Exception instead of exiting
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

NCLU imports quagga-reload.py and uses its Config class to parse
Quagga.conf.  The Config class will call 'vtysh -m -f Quagga.conf" and
if that exited with an error Config would call sys.exit(1) which in my
cases causes the NCLU daemon to exit which is bad.  The fix is to have
the Config class raise an exception instead of exiting, then NCLU can
catch the exception, log it and move on.

(cherry picked from commit 276887bb1c)
2016-09-27 16:00:47 +00:00
Don Slice
b6df409032 bgpd: resolve memory leaks in "show ip bgp neighbor json"
Found several leaks in bgp_show_peer and bgp_show_peer_afi where
json objects are created and then not attached to the parent, causing
them to be leaked.  If not attaching them, freeing the created objects.
Manual testing performed successfully. Fix  tested succesfully by the
submitter and bgp-smoke completed with same failures as base.

Ticket: CM-12846
Signed-off-by: Don Slice
Reviewed-by: CCR-5181
2016-09-19 05:19:32 -07:00
Donald Sharp
87aea55d34 ospfd: Fix crash with usage of incorrect command
Entering 'show ip ospf interface json' causes ospf
to crash.

Entering 'show ip ospf interface <intf> json' causes
ospf to crash if intf has no neighbors on the otherside

Modify the code to not crash in these cases.

Ticket: CM-12776
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-09-13 14:12:41 -04:00
Don Slice
ddb13fd374 lib: apply mask to prefix in prefix-list
A crash occurred if a prefix was defined in a prefix-list that
contained bits in the prefix but a /0 mask.  Resolving that crash
and improving usability by applying the mask to the supplied prefix
and notifying the user if the prefix was modified.

Ticket: CM-12744
Signed-off-by: Don Slice
Reviewed_By:
Testing Done: Manual testing attached to the ticket, bgp-min, bgp-smoke
ospf-min, and ospf-smoke all completed before commit
2016-09-12 06:32:11 -07:00
Donald Sharp
e544fa8509 debian: Update release information
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-09-09 14:42:59 -04:00
Don Slice
f81e127ed1 bgpd: Display interface next-hop for "show ip bgp" with unnumbered
Found that the logic had been changed to determine whether the next-hop
is a v4 or v6 address.  This caused an unnumbered interface to be seen
as ipv4 instead of ipv6 so the swp port was not correctly displayed.
Changed it back. Manual testing attaced to the ticket and bgp-min will
be run before committing.

Ticket: CM-12759
Signed-off-by: Don Slice
Reviewed-by: CCR-5166
2016-09-09 08:00:56 -07:00
Daniel Walton
dcaf0c593f quagga-reload.py fails for "net add debug ospf6 lsa as-ext"
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12773

- change "as-ext" to "as-external"
- drop "grp-mbr" option, it does not have a handler
- drop "type7" option, it does not have a handler

(cherry picked from commit 51f2d198c2)
2016-09-08 19:14:19 +00:00
vivek
8c4f63817a bgpd: Process directly connected IBGP peers upon interface down
When we have a single-hop BFD session for any peering, it really means
that the peering is directly connected (maybe over a L2 network), whether
it is IBGP or EBGP. In such a case, upon link down, immediately process
IBGP peers too (and bring them down), not just EBGP peers.

This change eliminates some peculiar state transitions in specific IBGP
topologies, thus getting rid of the problem of nexthops remaining inactive
in the zebra RIB.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5156
Testing Done: Manual, bgp-smoke
2016-09-08 10:03:30 -07:00
vivek
80c2442a9b lib, bgpd: Log next hops
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5156
Testing Done: Manual
2016-09-08 09:53:26 -07:00
vivek
72a5e63bad bgpd: Enhance path selection logs
Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5136
Testing Done: Manual

(cherry picked from commit a6086ad408)
2016-09-06 12:38:21 -07:00
vivek
a60b9a3718 bgpd: Fix route install upon multipath nexthop change
In multipath selection, there can be a scenario where the set of route
entries selected as multipath can be the same (i.e., from the same peers)
but one or more of these may have a change to the BGP next hop. In this
case, the route needs to be installed again in zebra even if the best
route entry selected has not changed, otherwise the zebra RIB may have
a different set of next hops (and first hops) than what the routing
protocol selected.

This patch handles this scenario by re-installing the route if any BGP
attribute has changed for any of the multipaths. Not all BGP attributes
are of relevance to the zebra RIB, but this approach follows existing
logic used in the code (e.g., when BGP attributes for the best route
entry has changed).

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Sid Khot <sidkhot@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5135
Testing Done: Manual, bgp-smoke

(cherry picked from commit e10720512e)
2016-09-06 12:38:09 -07:00
vivek
f4b6d7e9bf bgpd: Fix route install upon non-best nexthop change
After BGP path selection, even if the best route entry selected has not
changed, ensure that the route is installed again in zebra if any non-best
but multipath route entry has a nexthop resolution change.

In the absence of this fix, if a non-best multipath route entry had a
nexthop resolution change (such as being resolved over two first hops instead
of one), the route would get reinstalled into zebra only in some situations
(i.e., when the best route entry had its IGP change flag set). If the route
does not get reinstalled by BGP, the corresponding route in the zebra RIB
would not have all the first hops.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Sid Khot <sidkhot@cumulusnetworks.com>

Ticket: CM-12390
Reviewed By: CCR-5134
Testing Done: Manual, bgp-smoke

(cherry picked from commit 3064bf43a7)
2016-09-06 12:37:43 -07:00
Daniel Walton
9374cd9b5b Quagga won't advertise 0.0.0.0/0 with network statement
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12561
(cherry picked from commit 337299a936)
2016-09-06 19:33:35 +00:00
Daniel Walton
c80266bea2 json support for "show ip route" for "show ipv6 route"
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12633
(cherry picked from commit 18a4ded2a7)
2016-09-06 19:29:50 +00:00
Daniel Walton
5abe0c9519 quagga-reload.py should be importable
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>

Ticket: CM-12686
(cherry picked from commit a782e613dd)
2016-09-01 19:44:51 +00:00
David Lamparter
6a98e6a916 zebra: stack overrun in IPv6 RA receive code (CVE ##TBA##)
The IPv6 RA code also receives ICMPv6 RS and RA messages.
Unfortunately, by bad coding practice, the buffer size specified on
receiving such messages mixed up 2 constants that in fact have different
values.

The code itself has:
 #define RTADV_MSG_SIZE 4096
While BUFSIZ is system-dependent, in my case (x86_64 glibc):
 /usr/include/_G_config.h:#define _G_BUFSIZ 8192
 /usr/include/libio.h:#define _IO_BUFSIZ _G_BUFSIZ
 /usr/include/stdio.h:# define BUFSIZ _IO_BUFSIZ

As the latter is passed to the kernel on recvmsg(), it's possible to
overwrite 4kB of stack -- with ICMPv6 packets that can be globally sent
to any of the system's addresses (using fragmentation to get to 8k).

(The socket has filters installed limiting this to RS and RA packets,
but does not have a filter for source address or TTL.)

Issue discovered by trying to test other stuff, which randomly caused
the stack to be smaller than 8kB in that code location, which then
causes the kernel to report EFAULT (Bad address).

Ticket: CM-12687
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-08-31 09:37:07 -04:00
root
3aef921925 bgpd: Add fix for multiple set commands with prefer-global
In further testing, found that if there were multiple set commands in
the route-map with one being prefer-global, the removal of the prefer-global
was not recognized and reacted to correctly.  This small addition includes
that support

Ticket: CM-11480
Signed-off-by: Don Slice
Reviewed By: Donald Sharp
Testing Done: Manual testing, bgp-min and bgp-smoke completed
2016-08-30 08:59:08 -04:00
Christian Franke
83cd1f1aab isisd: warn if there is an MTU issue on circuits
Instead of later tripping over an assert, add a proper warning for
interfaces whose MTU is too low.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:59 -04:00
David Lamparter
f1d489ea29 isisd: fold up isis_circuit_is_type_set()
see previous commit.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:51 -04:00
David Lamparter
791ffe38a5 isisd: fix is_type_set
Code's "is_type" is "circuit-type" in CLI, "circuit_type" is "network"
(type) in CLI, and the function to change is_type is
isis_event_circuit_type_change()... *headdesk*

Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:42 -04:00
Christian Franke
6f32c890cb isisd: fix network-type configuration
Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:32 -04:00
David Lamparter
aa11f85082 isisd: fix isis_circuit_af_set() on fresh circuit
A newly-created circuit will be in enabled state but have neither IPv4
nor IPv6 configured.  The logic in isis_circuit_af_set assumed that
"enabled" is equivalent to "ip || ipv6".

This is the only place where this distinction is currently relevant, as
the CLI won't allow enabling an interface without enabling either IPv4
or IPv6;  and it will also disable a circuit when both are deconfigured.

Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:19 -04:00
David Lamparter
139c1f36d4 isisd: fix isis_circuit_create()
Between the awkwardly managed CSM and the tacked-on IPv6 support, the
simplified logic to setup a circuit wasn't quite right.

Note that the API essentially allows creating a circuit without enabling
either IPv4 or IPv6.  This wasn't possible before and probably breaks
isisd in 'interesting' ways.  The CLI won't do this, so it's only an
issue when adding on other configuration mechanisms.

Reported-by: Martin Winter <mwinter@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-08-19 13:33:08 -04:00
vivek
e5d1e72daa bgpd: Upon interface up (update) only kick-off non-Established peers
Any interface flags/parameter change (e.g., MTU, PROMISC flag change) is
notified by zebra to clients as an "up" event. BGP literally treats this
as the interface coming up and kicks all neighbors on that interface (i.e.,
directly connected peers). When doing so for IPv4 peers on the interface
(numbered or unnumbered /30-/31) or IPv6 numbered peers, peers that may
already be Established are also flapped; when doing so for IPv6 unnumbered
peers (classic 'neighbor swpX interface' scenario with no configured IP
address on interface), only peers not in Established state are processed.

This patch fixes the code to ensure that in all cases, only non-Established
peers are kicked.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Don Slice <dslice@cumulusnetworks.com>
Reviewed-by:   Chris Cormier <chriscormier@cumulusnetworks.com>

Ticket: CM-12526
Reviewed By: CCR-5119
Testing Done: Manual, bgp-min
2016-08-18 16:50:09 -07:00
Daniel Walton
926ea62e0b quagga-reload.py should not restart quagga if bgp ASN changes
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Dinesh Dutt<ddutt@cumulusnetworks.com>

Ticket: CM-12521
2016-08-18 18:03:46 +00:00
Daniel Walton
a5b89524bc vtysh --markfile needs to ignore the "end" lines
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12515
2016-08-18 17:47:01 +00:00
Sid Khot
c05795b16b Fix for CM-12450 Ensure quagga logs at startup are sent to syslog (until log configuration is processed)
Ticket: CM-12450
Reviewed By: CCR-5112
Testing Done: Manual
2016-08-17 19:36:54 -07:00
Daniel Walton
a94d98ae98 BGP: neighbor activate lines for ipv4 unicast are not in the sub context
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12080
2016-08-17 00:22:12 +00:00
Sid Khot
8ca1689f19 bgpd: Fix for CM-11777 Need Quagga.conf created at quagga install
Ticket: CM-11777
Reviewed By: CCR-5110
Testing Done: Manual
2016-08-16 16:27:34 -07:00
Sid Khot
9bb3897b9c Revert "Remove individual daemon conf files and replace with Quagga.conf"
This reverts commit f04605f4e5.
2016-08-15 17:59:47 -07:00
Daniel Walton
6d9e66dce7 "No such peer-groupr" should be "No such peer-group"
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12191
2016-08-15 19:25:02 +00:00
Donald Sharp
352534ac21 zebra: Fix usage of accidental NULL pointer
NS_DEFAULT is #defined to 0, We are passing it
in to a function that is taking 'struct zebra_ns *'
which is translating into a NULL pointer.  Which
in some situations will cause a crash.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
             Daniel Walton <dwalton@cumulusnetworks.com>
             Nikolay Aleksandrov <nikolay@cumulusnetworks.com>

(cherry picked from commit 1e9fa2763953adc603c3acc4ed2a46c9e72cbb29)
(cherry picked from commit e33efc8aa8)
2016-08-15 12:52:05 -04:00
vivek
911ad1e2f9 zebra: Fix interface lookup for RA statistics
Ensure we lookup interface across VRFs, not just in the default VRF.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Reviewed-by:   Dinesh Dutt <ddutt@cumulusnetworks.com>

Ticket: CM-12357
Reviewed By: CCR-5097
Testing Done: Manual, bgp-min
2016-08-13 13:25:56 -07:00
Dinesh G Dutt
f04605f4e5 Remove individual daemon conf files and replace with Quagga.conf
Ticket: CM-11777
Reviewed By: CCR-5096
Testing Done:

The recommended, and in many ways the only supported, model for
the configuration file of quagga is to use a single Quagga.conf
configuration file. However, we weren't shipping with this model,
which led to some confusion amongst users. This patch fixes this
by removing all individual daemon configuration files and replacing
it with the single Quagga.conf file.
2016-08-13 00:55:07 -07:00
Sid Khot
e018c7cc9a bgpd: Reverting fix for CM-5040: BGP and OSPF should accept "router-id use-loopback"
ospfd: Reverting fix for CM-5040: BGP and OSPF should accept "router-id use-loopback"

This reverts commit cdb805bc9e.

Conflicts:
	bgpd/bgp_vty.c
2016-08-12 17:09:27 -07:00
Sid Khot
eb117f29e1 bgpd: Fix for CM-11982 bgp failed to redistribute connected in vrf table
Made fix to update the redistribute vrf bitmap when vrf goes down and comes up.

Ticket: CM-11982
Reviewed By: CCR-5032
Testing Done: bgp-min passed, manual
2016-08-05 16:49:39 -07:00
Daniel Walton
7fe9687b08 'debug ospf' print a garbage character
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   sidkhot@cumulusnetworks.com

Ticket: CM-12271
2016-08-05 21:47:42 +00:00
John Berezovik
a79fb1aa76 Fix changelog to add maintainer info, build fails without it 2016-08-04 09:08:37 -07:00
Donald Sharp
473b996bfc quagga: Set version strings appropriately
Set the version strings to be correct for the upcoming
3.1 release of Quagga.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-08-02 04:54:45 -04:00
Donald Sharp
c152e0c131 lib: Arm build breakage with MAX_INT macro issues
The VTY_GET_INTEGER_RANGE macro is failing on arm
with a warning->error issue where we are passing in
a unsigned MAXINT to this macro and it is complaining
that the comparison of (TMPL) > MAXINT is always going
to be false because of data structure size.

I've changed the tmp variable to a unsigned long long
which alleviates this issue.

Ticket: CM-12187
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
2016-08-03 15:11:44 -04:00
Don Slice
161995ea54 bgpd: Add command to prefer global ipv6 address
There are cases where customers desire the ability to override the
default behavior of installing ipv6 prefixes with a link-local next-hop
if both a link-local and global ipv6 next-op is present in the bgp table.
This fix provides this ability and will allow the global to be used as the
next-hop.  This also retains the ability to manually set the ipv6 next-hop
global value as before, and if so, this manual entry will be used for the
next-hop.

Ticket: CM-11480
Signed-off-by: Don Slice
Reviewed By: CCR-4983
Testing Done: Manual testing results attached to the ticket. bgp-min and
bgp-smoke will be completed before committing.
2016-08-03 06:49:09 -07:00
Donald Sharp
ca492402ab bgpd: Add the no form of some dump bgp commands
Ticket: CM-9432
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:
2016-08-01 15:15:34 -04:00
Daniel Walton
7ef817d951 BGP displays "keepalive" instead of "keepalives" for debugs
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-12101
2016-08-01 12:15:28 +00:00
Donald Sharp
9994130f1d vtysh: Do not run extract.pl over protocols that are not configured
Dynamically figure out the list of .c files that we need to scan
based upon whether or not the daemon is --enabled via configure.

Ticket: CM-12081
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-28 14:28:22 -04:00
Donald Sharp
daa2bc7068 lib: 'show commandtree' is not a CLI command
The 'show commandtree' command was added to the CONFIG_NODE.

We have a basic assumption that CONFIG_NODE commands actually
change state.  'show commandtree' doesn't meet this requirement.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-07-28 14:02:52 -04:00
David Lamparter
47a928fb85 isisd: drop unused per-type metric values
Expense, Error and Delay metrics never quite made it into the real
world.  Either way isisd does nothing useful with them, so let's drop
them from the code.  If someone wants to implement them, this patch can
still be reverted.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 11:08:49 -04:00
Christian Franke
9093b23046 isisd: API: area (L1), domain (L2) passwords
Last isisd CLI cleanup for now.  This also folds L1 & L2 configs into
common functions, reducing CLI function bloat by a bit.

(This patch contains changes authored by both Christian Franke and David
Lamparter.)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 11:08:49 -04:00