Commit Graph

1027 Commits

Author SHA1 Message Date
Renato Westphal
2bb913f5e7 bgpd: fix wrong use of IN6_IS_ADDR_LINKLOCAL
The IN6_IS_ADDR_LINKLOCAL macro expects to receive a pointer to an
in6_addr structure.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-08-07 21:05:26 -04:00
Renato Westphal
60060acc54 bgpd: use utsname.domainname only when available
Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
2016-08-07 21:05:26 -04: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
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
David Lamparter
1c6f50bf2d *: snmp: add a load of "static" specifiers
Make it easier to see which bits in *_snmp.c are actually referenced
from non-SNMP parts of the code.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
cd37dad1b9 bgpd: ditch unused bgp_node_*() functions
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
0e6cb7434f bgpd: divorce router-id logic from CLI & zebra
Logic for determining the router-id was spread out over bgp_zebra.c and
bgp_vty.c.  Move to bgpd/bgpd.c and have these two call more properly
encapsulated functions.

Significant work by Christian Franke <chris@opensourcerouting.org>.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
David Lamparter
4760600f78 bgpd: minor header/API clean up
Adds "const" on:
- peer_update_source_addr_set()
- peer_description_set()
Adds parameter names on:
- bgp_timers_set()
  (really confusing, this one, with 2 unexplained args of same type)
Adds new setter:
- peer_afc_set(), calling peer_activate/peer_deactivate.
  (intended for API consumers, matches peer->afc)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-07-28 07:27:47 -04:00
Don Slice
f31fa00421 bgpd: Pass correct bgp-name for clear command
Found that original fix for CM-10113 had a significant flaw, that
by deriving the bgp instance from the vty->index, if a clear ip bgp
command was entered from a vty index other then bgp, a crash occurred.
This fix passes the bgp->name to the clear functions so the correct
instance can be derived.  Tested manually in both the CM-10113 case
as well as the problem discovered while testing CM-11480.

Ticket: CM-10113
Signed-off-by: Don Slice
Reviewed-by:
2016-07-28 15:47:45 -07:00
vivek
711093b5eb bgpd: Fix attribute handling upon redistribution metric change
When the metric for a redistributed route is changed through configuration,
the path attribute for the route/routes need to be "re-created" as the hash
entry would change. In the absence of this, the entry would have the correct
values but when a hash lookup is done at a later time (e.g., when trying to
free the entry), it would fail. This patch addresses the "re-creation"

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

Ticket: CM-11168
Reviewed By: CCR-4990
Testing Done: Manual, bgp-smoke
2016-07-26 10:45:51 -07:00
Sid Khot
87e8267a83 bgpd: Fix for vtysh -m does not mark "end" of router bgp
There was an exit added at the end of the BGP commands after we pulled the code from upstream. This was causing the reload scripts to fail. Removed this exit.

Ticket: CM-11464 CM-11924
Reviewed By: CCR-4995
Testing Done: Manual

<DETAILED DESCRIPTION (REPLACE)>
2016-07-26 10:23:46 -07:00
Don Slice
46827ae98a bgpd: Print the correct table in "show ip bgp x.x.x.x"
Prior to this change, bgp always identified the routing table used as
the default in the output of "show ip bgp x.x.x.x".  This fix changes
the behavior to use the correct table name.

Ticket: CM-10239
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
2016-07-20 08:02:04 -04:00
Don Slice
849144993d bgpd: Use the correct bgp instance for cli commands issuing clear
Some bgp commands end with doing a bgp_clear_vty, which invalidly
made the assumption that the clear should always be done for the default
instance.  This fix derives the correct instance from the vty-index if
one is supplied, and uses the default instance if it is not.

Ticket: CM-10113
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
2016-07-18 10:32:46 -04:00
Dinesh G Dutt
b3a39dc510 Simplify BGP unnumbered configuration by eliminating the unessential.
To make BGP configuration as simple as possible, assume the capability
extended-nexthop to be default for interface neighbors. Also allow the
ability to specify remote-as on the same line as neighbor interface to
make BGP unnumbered configuration a single line.

One corner case. This is the first feature for which the default for a
member is different from the default for a peer-group. Since advertising
the capability is only done for interface neighbors, the capability is
not set for the peer-group, but is automatically set for interface
neighbors that belong to that peer-group. So, if you want to disable the
advertisement of this capability for an interface neighbor, you must
do it per each interface neighbor.

The patch is more complicated than it needs to be due to the handling
of quagga reload and appropriate updates to the show running output.

Ticket: CM-11830
Reviewed By: CCR-4958
Testing Done: Usual coterie, including manual

(cherry picked from commit 347914a0a7)
2016-07-15 22:17:00 -07:00
Quentin Young
7fb21a9f98 bgpd: Make ASN optional for no router bgp
When there is one BGP router instance, `no router bgp` may be used to
deconfigure it without specifying its ASN

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-14 13:04:47 +00:00
Donald Sharp
275382273b Merge remote-tracking branch 'origin/cmaster' into cmaster-next 2016-07-12 20:24:00 -04:00
Quentin Young
63fa10b595 bgpd: Disallow ebgp-multihop on swpX peers
Disallow setting ebgp-multihop on peers directly
connected via an interface.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
2016-07-12 21:13:24 +00:00
Don Slice
2caa9b3957 all: add default log file if none are defined
Added a default log file named /var/log/quagga/Quagga.log to every daemon
to capture log entries if no log file is defined.  This also allows the
capture of logged information prior to reading each daemon's config file.
If a log file is defined manually, it will override this default file name.

Ticket: CM-10987
Signed-off-by: Don Slice
Reviewed By: Donald Sharp
Testing Done: Manual testing
2016-07-11 12:57:24 -07:00
Dinesh G Dutt
655f79c9d2 Don't print 'neighbor activate' if its default for IPv4 unicast AFI/SAFI
Ticket: CM-11460
Reviewed By: CCR-4927
Testing Done:

Quagga's default "show running" model is to only print the non-default config.
Historically, IPv4 unicast has always had a default 'activate' model unless
its been configured otherwise. In 3.0, we introduced a print of the 'activate'
statement for IPv4 unicast independent of whether it was the default or not.
This causes quagga reload to break as the user doesn't configure 'activate' for
IPv4 unicast, and so any config changes will also not have it. However 'show
running' will display it, causing quagga reload to think that the AFI/SAFI has
been deactivated and bounce the sessions incorrectly.

This patch reverts to the original quagga behavior/model of not printing the
'activate' line for IPv4 unicast if its the default.
2016-07-06 14:51:29 -07:00
Sid Khot
cdb805bc9e bgpd: BGP should accept "router-id IFNAME"
ospfd: OSPF should accept "router-id IFNAME"

Added commands in BGP and OSPF where user can specify interface for router-id.

Ticket: CM-5040
Reviewed By: CCR-4908
Testing Done: Manual
2016-07-01 17:25:30 -07:00
Sid Khot
8cdabf90ad bgpd: "neigbor <interface> ttl-security hops" should reject a hops value greater than 1
"neighbor <interface> disable-connected-check" should not be allowed by the parser

Made changes to not allow hops greater than 1 and disable-connected check for neighbor <interface>

Ticket: CM-5536 CM-5537
Reviewed By: CCR-4865
Testing Done: Manual
2016-07-01 17:06:43 -07:00
Donald Sharp
f4cafc65a3 bgpd: Fix another clang warning
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-21 17:24:19 -04:00
radhika
2376c3f225 bfd: Fix for missing BFD client regs/deregs from quagga clients
Ticket: CM-11256
Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Kanna Rajagopal <kanna@cumulusnetworks.com>
Testing: Unit, PTM smoke, OSPF smoke, BGP Smoke

Issue:
BFD client registrations are not being sent to PTM from BGP/OSPF clients when the quagga clients have no BFD configuration. This can create stale BFD sessions in PTM when BFD is removed from quagga configuration before quagga is restarted.

BFD client de-registrations from BGP/OSPF also go missing sometimes when quagga is restarted. This also will cause stale BFD sessions in PTM.

Root Cause:
BFD client registrations were being sent at the time of BGP/OSPF daemon initialization. But, they were being sent to zebra before the socket connection between zebra and BGP/OSPF was established. This causes the missing BFD client registrations.

BFD client de-registrations are sent from zebra when zebra detects socket close for BGP/OSPF daemons. Based on the timing, the de-registrations may happen after socket between PTM and zebra is closed. This will result in missing de-registrations.

Fix:
Moved sending of BFD client registration messages to zebra connected callback to make sure that they are sent after the BGP/OSPF daemons connect with zebra.

Added BFD client de-registrations for BGP/OSPF to be also sent when zebra daemon gets restart signal. They are sent from the signal handler only if it was not already handled in zebra client socket close callback.
2016-06-21 03:39:58 -07:00
Daniel Walton
353cd37f7d bgp_recalculate_all_bestpaths() should check if rn->info is NULL
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>

Ticket: CM-11444

The bgp table may contain nodes without an 'info' (these nodes are used
for balancing the tree, they are created by route_common() in lib/table.c).
When we call bgp_recalculate_all_bestpaths() we should avoid calling
bgp_process() for these nodes.  bgp_recalculate_all_bestpaths() is only
called when knobs are configured that could have an impact on which
routes are selected as best.
2016-06-17 13:44:35 +00:00
Daniel Walton
69ae646b8d Revert "bgpd: bgp_scan shouldn't queue up route_nodes with no routes for processing"
This reverts commit ff75b6c05b.

lib/table.c's route_common() can create a rn for a prefix that BGP has
never RXed.  For example here we RX 10.1.8.0/24 from neighbor 10.0.0.2,
notice how the 10.1.0.0/20 entry is created.  We would later assert on
this prefix because its info was NULL.

2016/06/16 23:37:21.418426 BGP: 10.0.0.2 rcvd UPDATE w/ attr: nexthop 10.0.0.2, origin i, localpref 100, metric 0, community 99:7, path
2016/06/16 23:37:21.418442 BGP: 10.0.0.2 rcvd UPDATE wlen 0 wpfx 0 attrlen 36 alen 4 apfx 1
2016/06/16 23:37:21.418458 BGP: bgp_node_create called
2016/06/16 23:37:21.418475 BGP: route_node_get called for 10.1.8.0/24, route_node_new 10.1.0.0/20, match (nil)
2016/06/16 23:37:21.418519 BGP: bgp_node_create called
2016/06/16 23:37:21.418536 BGP: route_node_get called for 10.1.8.0/24, route_node_new(2) 10.1.8.0/24, match 0x2013cd0
2016/06/16 23:37:21.418554 BGP: 10.0.0.2 rcvd 10.1.8.0/24

If rn->info is NULL then avoiding the group_announce_route() call in
bgp_proces_main() also feels risky as this code path generates WITHDRAWs
for prefixes that no longer have a bestpath which would be the case if
there are no paths.
2016-06-17 00:49:16 +00:00
Sam Tannous
39e871e6f3 Quagga: bgpd needs extra neighbor and route json attributes for SNMP BGP4 MIB
Ticket: CM-11344
Reviewed By: dwalton, dsharp
Testing Done: built and tested amd64 debs

This patch adds the peerID JSON attribute for routes for show ip bgp json.
It also corrects the bgpTimerLastWrite in show ip bgp neigh json as well
as adds bgpInUpdateElapsedTimeMsecs, lastErrorCodeSubcode, and connectRetryTimer.
These are needed for the bgp4 mib implementation (rfc 4273) from the json
output of vtysh commands.
2016-06-13 15:39:57 -07:00
Lou Berger
8b1fb8be22 bgpd, lib, vtysh: hook up bgp ENCAP CLI node
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a3fda886cdd48b6d8c421ebb1401142fa9ee93b0)

Conflicts:
	bgpd/bgp_vty.c
	bgpd/bgpd.c
	vtysh/vtysh_config.c
2016-06-11 15:52:05 -07:00
Lou Berger
587ff0fd88 bgpd: encap: add encap SAFI (RFC5512)
Adds RFC5512 and Encapsulation Attribute.

Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit 298cc2f688dbadf0a447fcd06ae8e20fa5006ce4)

Conflicts:
	bgpd/Makefile.am
	bgpd/bgp_attr.c
	bgpd/bgp_open.c
	bgpd/bgp_packet.c
	bgpd/bgp_route.c
	bgpd/bgp_vty.c
	bgpd/bgpd.c
2016-06-11 15:36:42 -07:00
vivek
6407da5a24 bgpd: Fixes and updates for VPNv6
VPNv6 changes picked from upstream needed fixes and updates due to some
fundamental changes implemented by Cumulus (BGP update-groups, RFC 5549
and nexthop setting etc.) which aren't present upstream.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Updates: 945c8fe, 8ecd326, bb86c60, 93b73df, f4c8985
2016-06-11 11:36:42 -07:00
Don Slice
d236e0b80a bgpd: remove vrf->iflist deleted to avoid a crash
Ticket: CM-11327
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
Testing Done: Manual testing, bgp-min, vrf-min, bgp-smoke, vrf-smoke all successful

When bgp was configured in a vrf and then deleted, the vrf->iflist
was being deleted from the vrf.  Since the vrf itself was not deleted,
it was assumed in later calls that the vrf->iflist was still there
and when it was referenced, the crash occurred.
2016-06-10 06:58:03 -07:00
radhika
8d78d85194 BGP:Fix for BFD sessions not getting replayed after quagga restart
Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Kanna Rajagopal <kanna@cumulusnetworks.com>

Ticket: CM-11055
Reviewed By: CCR-4773
Testing Done: Unit, PTM smoke, BGP neighbor smoke

Issue: bgpd is not replaying the BFD registrations to PTM after quagga restart.

Root Cause: This problem happens when BFD configuration is part of the peer group template. Currently, the BFD configuration is being copied to the peer from template as part of the AF (address family) configuration. But, when the saved config is used after the quagga restart the peer group template is applied to the peer before the AF configuration is configured for the template. Due to this the BFD configuration never gets copied from the template to the peer and the BGP peers have no BFD configuration after the restart

Sample config which failed:
router bgp 100
bgp router-id 10.10.0.1
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor dpeergrp_2 peer-group
neighbor dpeergrp_2 remote-as 100
neighbor dpeergrp_2 bfd
neighbor dpeergrp_2 advertisement-interval 1
neighbor dpeergrp_2 timers connect 1
neighbor dpeergrp_4 peer-group
neighbor dpeergrp_4 remote-as 400
neighbor dpeergrp_4 bfd
neighbor dpeergrp_4 advertisement-interval 1
neighbor dpeergrp_4 timers connect 1
neighbor swp2s0.1 interface peer-group dpeergrp_2
neighbor swp18s3.1 interface peer-group dpeergrp_4
!
address-family ipv4 unicast
redistribute connected route-map redist
neighbor dpeergrp_2 activate
neighbor dpeergrp_2 next-hop-self
neighbor dpeergrp_2 default-originate
neighbor dpeergrp_2 soft-reconfiguration inbound
neighbor dpeergrp_4 activate
neighbor dpeergrp_4 next-hop-self
neighbor dpeergrp_4 default-originate
neighbor dpeergrp_4 soft-reconfiguration inbound
maximum-paths 14
exit-address-family

Fix: Moved the BFD config copy from the peer group AF config copy function to the main peer group config copy function.
2016-06-10 11:18:58 -04:00
Don Slice
56f70e170d bgpd: remove vrf->iflist deleted to avoid a crash
Ticket: CM-11327
Signed-off-by: Don Slice
Reviewed-by: Donald Sharp
Testing Done: Manual testing, bgp-min, vrf-min, bgp-smoke, vrf-smoke all successful

When bgp was configured in a vrf and then deleted, the vrf->iflist
was being deleted from the vrf.  Since the vrf itself was not deleted,
it was assumed in later calls that the vrf->iflist was still there
and when it was referenced, the crash occurred.
2016-06-10 07:12:17 -07:00
Lou Berger
f4c89855b5 bgpd: encap: add attribute handling
Signed-off-by: Lou Berger <lberger@labn.net>
Reviewed-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit c3741789530ee824693fd606356acac2ad695f83)

Conflicts:
	bgpd/Makefile.am
	bgpd/bgp_attr.c
	bgpd/bgp_attr.h
	lib/memtypes.c
2016-06-09 18:36:40 -07:00
vivek
eaafc874d0 Merge branch 'cmaster-next' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster-next 2016-06-09 18:20:55 -07:00
Lou Berger
93b73dfa17 bgpd: general MP/SAFI improvements
This fixes some minor mixups particularly in MPLS-related SAFIs, as well
as doing some stylistic changes & adding comments.

Signed-off-by: Lou Berger <lberger@labn.net>
Reviewed-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 050defe816e4bd4cac7b028f69e45cb1974ca96d)

Conflicts:
	bgpd/bgp_attr.c
	bgpd/bgp_attr.h
	bgpd/bgp_packet.c
	bgpd/bgp_route.c
	bgpd/bgp_route.h
2016-06-09 18:20:42 -07:00
Sam Tannous
dd9275d641 vtysh json output not JSON for show ip bgp neigh json
Ticket: CM-11350
Reviewed By: dsharp
Testing Done: built amd64 images and tested output of both json and non-json

Upstream patch was applied in wrong section of code so JSON
output contained plain text.   The upstream patch was
commit baa376fc1 (cherry picked from ef757700d0f)

This patch moves the text output to the correct if clause
and also adds a new JSON line for the same data.

Signed-off-by: Sam Tannous <stannous@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-09 12:26:06 -04:00
Feng Lu
322e59645d ospf6d, bgpd: avoid calling if_nametoindex
As the comments in if.h, it is better to call ifname2ifindex()
instead of if_nametoindex().

And ifname2ifindex() can work for VRF by appending a parameter
while if_nametoindex() can not.

Signed-off-by: Feng Lu <lu.feng@6wind.com>
Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Acked-by: Vincent JARDIN <vincent.jardin@6wind.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 395828eea809e8b2b8c5824d3639cefedd7aa9f0)
2016-06-09 09:25:49 -04:00
Timo Teräs
40ee54a740 lib: allow caller to provide prefix storage in sockunion2hostprefix
Avoids a dynamic allocation which is usually freed immediate afterwards.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-09 08:21:40 -04:00
Lou Berger
005b6bc0ab bgpd: tests - add null pointer protection to fix bgp test failures
Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit d5d5e3e04fc41b9a89b7ce9049fd322bdbde2e4d)

Conflicts:
	bgpd/bgp_nexthop.c
2016-06-08 21:49:47 -07:00
vivek
f23a7bf289 bgpd: Do not process workqueue upon instance delete
During instance cleanup, an earlier patch walked the workqueue in order
to process queued routes of the instance. However, since the workqueue
is not per instance, the code walks and immediately processes all routes
across all instances.

This may not be ideal in the presence of VRFs, when multiple instances
will be a fact. Revert that part of the change from earlier patch. This
needs to be revisited later for a better solution.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Updates: bb86c6017e
2016-06-08 18:14:17 -07:00
Lou Berger
bb86c6017e bgpd: improve cleanup in bgp_delete()
Signed-off-by: Lou Berger <lberger@labn.net>
(cherry picked from commit 82dd707988b7481e203cab058c92f0b3041dd558)

Conflicts:
	bgpd/bgp_nexthop.h
	bgpd/bgp_route.c
	bgpd/bgp_routemap.c
	bgpd/bgp_zebra.h
	bgpd/bgpd.c
	bgpd/bgpd.h
2016-06-08 17:58:42 -07:00
David Lamparter
9b6710b406 *: fix more initialisers (for BSD)
FreeBSD and NetBSD spew a few more warnings about variable initialisers.
Found with OSR's/NetDEF's fancy new CI system.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-06-08 15:01:33 -04:00
David Lamparter
6b87f73618 bgpd: speed up "no-hit" withdraws for routeservers
This accelerates handling of incoming Withdraw messages for routes that
don't exist in the table to begin with.  Cisco IOS 12.4(24)T4 has a bug
in this regard - it sends withdraws instead of doing nothing for
prefixes that are filtered.

Pulling up the adj_in removal in Quagga should have no ill effect, but
we can avoid the costly iteration over all rsclients if there was no
adj_in entry.

Performance impact of this change on routeserver with 3 buggy peers,
startup/sync time:

before patch:  143.12 seconds (user cpu)
after patch:     7.01 seconds (user cpu)

Many thanks to Nick Hilliard & INEX for providing real-world test data!

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Paul Jakma <paul@jakma.org>
2016-06-08 14:58:21 -04:00
Donald Sharp
934a4c5975 bgpd: Fix Missing capability codes in data structure
Forward port of a fix from upstream introduced
the need to have data on the new capability codes
that have been introduced.

This commit adds in the missing capabilities.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-06-07 10:49:35 -04:00
vivek
8ecd326693 bgpd, lib, vtysh: hook up bgp VPNv6 CLI node
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 13c378d96a57017f5995b2e0df46cfc31123f0e8)

Conflicts:
	bgpd/bgp_vty.c
	bgpd/bgpd.c
	vtysh/vtysh_config.c
2016-06-06 19:29:05 -07:00
Lou Berger
945c8fe985 bgpd: wire up VPNv6 protocol processing
There wasn't much missing for VPNv6 to begin with; just a few bits of
de- & encoding and a few lists to be updated.

Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>

[Editorial note: Signed-off-by may imply an authorship claim, but need not]

Edited-by: Paul Jakma <paul.jakma@hpe.com> / <paul@jakma.org>
(cherry picked from commit 9da04bca0e994ec92b9242159bf27d89c6743354)

Conflicts:
	bgpd/bgp_attr.c
	bgpd/bgp_mplsvpn.c
	bgpd/bgpd.c
2016-06-06 17:26:17 -07:00
Lou Berger
fe770c888a bgpd: handle AS4 and EOI route distinguishers
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a03bd16eedc5077e98716509b8918ed365227e02)

Conflicts:
	bgpd/bgp_mplsvpn.c
2016-06-06 16:44:12 -07:00
Lou Berger
137446f997 bgpd: make _vpnv4 static handling SAFI-agnostic
This changes the existing _vpnv4 functions for MPLS-VPN into
SAFI-agnostic functions, renaming them from *_vpnv4 to *_safi.

Also adds route-map support while at it.

Signed-off-by: Lou Berger <lberger@labn.net>
Reviewed-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit a76d9ca3584c1751a592457c167c1e146648ceb6)

Conflicts:
	bgpd/bgp_route.c
2016-06-06 16:33:33 -07:00
Lou Berger
f5bb8cfa5b bgpd: Fix graceful restart capability minsize
* bgp_open.c: cap_minsize should be CAPABILITY_CODE_RESTART_LEN for RESTART
  not 6.

(cherry picked from commit 7748fdc757a2181649dd4956f2767545673ef28d)
2016-06-06 14:21:06 -07:00
Donald Sharp
e978e1de98 lib, bgpd: Fixup afi_t to be an enum and cleanup zebra.h
This code change does two things:

1) Removes ZEBRA_AFI_XXX #defines since they were redundant information
2) Switches afi_t to an enumerated type so that the compiler
can do a bit more compile time checking.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit f3cfc46450cccc5ac035a5a97c5a1a5484205705)

Conflicts:
	bgpd/bgp_open.c
	bgpd/bgp_open.h
	bgpd/bgp_routemap.c
2016-06-06 14:20:24 -07:00
Paul Jakma
ff75b6c05b bgpd: bgp_scan shouldn't queue up route_nodes with no routes for processing
* bgp_nexthop.c: (bgp_scan) There is little point queueing an rn with no routing
  information for processing.
* bgp_route.c: (bgp_process) Do nothing on rn's with no routes. Add an assert
  for now, to try catch any other cases, but prob should be removed.
  (bgp_best_selection) rn with no routes == finish early.

(cherry picked from commit 91b9e8547a7c5697d5d7481f9476778077024019)

Conflicts:
	bgpd/bgp_nexthop.c
	bgpd/bgp_route.c
2016-06-06 12:35:29 -07:00
vivek
92c92c455c bgpd: Update error subcode for OPEN message
Updates: 695ef95fd7
2016-06-06 12:14:21 -07:00
Paul Jakma
695ef95fd7 bgpd: Check capability falls on right multiple of size, where possible.
* bgp_open.c: (cap_modsizes) Table of multiple a capability's data size
  should fall on, if applicable.
  (bgp_capability_parse) Check the header lengthcap_modsizes should fall on.

  Inspiration from Cumulus bgpd-capability-cleanup.patch patch, with a
  slightly different approach.

Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
(cherry picked from commit 4078f2eb7a3a94ddb30cfd8b76b054e790aab524)
2016-06-06 12:09:57 -07:00
Timo Teräs
e9a0c65615 bgpd: update rtt on soft clear
rtt is calculated dynamically by the kernel. Refresh it on
soft clear.

Fixes: ef757700d0 "bgpd: allow using rtt in route-map's set metric"
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit 5a2a1ec18c89daec5de6690a9b0f47c0d11a0f2d)

Conflicts:
	bgpd/bgpd.c
2016-06-06 10:41:00 -07:00
Timo Teräs
0cd0d97907 bgpd: check rtt later after the real peer is known
OPEN message handler moves the connection from the temporary
"struct peer" (used to accept it) to the real "struct peer" based
on the configuration. RTT needs to be updated only to the real
struct peer, and this patch moves the RTT query to point where
realpeer is known.

Fixes: ef757700d0 "bgpd: allow using rtt in route-map's set metric"
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit 0edba8b6ad9c83fa0a3cc58765fe9f123f4109ac)

Conflicts:
	bgpd/bgp_packet.c
2016-06-06 09:29:13 -07:00
Timo Teräs
43ed4fe5cb bgpd: Make bgp_info_cmp robust to paths that do not have su_remote info
My original su_remote == NULL check is not correct. It seems that

* bgp_route.c: (bgp_info_cmp) Some bgp_info is compared with su_remote=NULL
  and it's supposed to be perfectly legal.  E.g.  configured subnet announces
  ("network a.b.c.d/n"). Ensure bgp_info_cmp is robust if such a path gets
  as far as the neighbour address comparison step.

(cherry picked from commit 2820a01eed1c616d490ddbfd17793c19597459d1)

Conflicts:
	bgpd/bgp_route.c
2016-06-06 09:14:25 -07:00
Paul Jakma
b4575c00ce bgpd: Compile fix for clearing-completion FSM fix, using workqueue helper.
(cherry picked from commit 782fb0770080d0e2970fc63af8645e82543aa4d0)

Conflicts:
	bgpd/bgp_fsm.c
2016-06-06 09:10:39 -07:00
Timo Teräs
baa376fc1c bgpd: allow using rtt in route-map's set metric
Useful when the BGP neighbors are over tunnels that have large
differences in geographic distances and RTTs. Especially useful
for DMVPN setups to allow preferring closes hub.

The parameter is added as new alias command as otherwise it seems
the command parser is not able to match it properly (it seems
merging is done for the various 'set metric' route-map objects in
different routing engines). For same reason also they are listed
as three separate options: optional +/- seems not possibly easily.

Related research papers:
http://www.pps.univ-paris-diderot.fr/~jch/research/delay-based.pdf
http://arxiv.org/pdf/1309.0632.pdf

Paper on similar extension to Babel:
http://www.pps.univ-paris-diderot.fr/~jch/research/rapport-jonglez-2013.pdf

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit ef757700d0fd51dc0b46df9d3631208919f9b779)
2016-06-06 08:25:42 -07:00
Timo Teräs
76759f4f9b bgpd: refactor route-map objects modifying integer values
Use common code to parse, validate and adjust the route-map
objects that contain a simple integer value. This also allows
compiling the add/sub format metric object.

Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 38f22ab07c8e1f0f12e23c2e2d0a3e1f71bef695)

Conflicts:
	bgpd/bgp_routemap.c
2016-06-06 08:04:57 -07:00
Donald Sharp
69f30024c1 lib, bgpd: Fixup some more compile errors due to warnings
Original cherry-pick done on a fedora box with a completely
different compiler.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-06-04 20:45:43 -04:00
David Lamparter
6c4f4e6e6a *: use void * for printing pointers
On higher warning levels, compilers expect %p printf arguments to be
void *.  Since format string / argument warnings can be useful
otherwise, let's get rid of this noise by sprinkling casts to void *
over printf calls.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
2016-05-29 21:27:26 -04:00
David Lamparter
8f2c16aab0 *: use long long to print time_t
Since we can't assume time_t to be long, int, or even long long, this
consistently uses %lld/long long (or %llu/unsigned long long in a few
cases) to print time_t/susecond_t values.  This should fix a bunch of
warnings, on NetBSD in particular.

(Unfortunately, there seems to be no "PRId64" style printing macro for
time_t...)

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit ef008d2f8dc8f7160d8a3d24a15f2fad79ef3242)
2016-05-29 21:08:04 -04:00
Denil Vira
a3da12a80c bgpd: Fix useless call in bgpd/bgp_mplsvpn.c
Coverity scan ID : 1302528. Calling "decode_label(pnt)" is only useful for its return value, which is
ignored. Removed the call.

Signed-off-by: Denil Vira <denil@cumulusnetworks.com>
(cherry picked from commit 7053d8176ce502aabe39bf167f01354654bde5df)
2016-05-29 20:34:57 -04:00
Donald Sharp
b06fd12526 Quagga: Fix code to use srandom/random
Quagga was using a mix of srand/rand and srandom/random.
Consolidate to use srandom/random which are the POSIX
versions of random number generators

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2016-05-29 20:24:55 -04:00
David Lamparter
63b75cdd34 bgpd: don't use #ifdef inside macro args
Using #ifdef inside preprocessor macro argument lists is not guaranteed
to work.  In reality it mostly does, but we don't need these ifdefs for
HAVE_IPV6 anymore, so let's get rid of the warning nonetheless.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 94bad67cd8fe7ad023a40547a1153a414d70fa0a)

Conflicts:
	bgpd/bgp_route.c
2016-06-03 20:57:54 +00:00
Milan Kocian
4a7ac06c5c bgpd: fix negative values in output
Negative value in output of ecommunities (and as numbers)
seems odd :-). This patch fixes it. And add minor formating
modification, better for big as numbers.

Signed-off-by: Milan Kocian <milon@wq.cz>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit cb4fc59c8a0f9df81109d38acbeaab5627e361f5)

Conflicts:
	bgpd/bgp_vty.c
2016-06-03 20:50:13 +00:00
David Lamparter
9e8da292d1 build: get rid of INCLUDES, use AM_CPPFLAGS
INCLUDES in configure.ac was not used at all, and INCLUDES in
Makefile.am is supposed to be AM_CPPFLAGS these days.

Reduces warnings spewed during bootstrap/autoreconf.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
(cherry picked from commit 237aac56960575f6ad2451ba2796d94bd5ae4b33)
2016-06-03 15:46:59 -04:00
David Lamparter
1cbb5dfc29 build: remove INRIA, NRL and MUSICA IPv6 quirks
Valar dohaeris.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Acked-by: Greg Troxel <gdt@ir.bbn.com>
Acked-by: Feng Lu <lu.feng@6wind.com>
Acked-by: Paul Jakma <paul@jakma.org>
2016-06-03 14:40:03 -04:00
Daniel Walton
52a51fd333 bgpd: resolve merge issues in bgp_attr_check()
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-27 13:31:06 +00:00
Paul Jakma
67495ddb2e bgpd: Fixes for recent well-known-attr check patch.
* bgp_attr.c: Recent patch to tighten well-known attr checks and apply that
  to all AFIs has some breakage with MP-extensions and GR, which needs to be
  fixed.
  (bgp_attr_check) Graceful Restart EoR can be an empty UPDATE for IPv4/uni.
  MP-Ext allow UPDATE with just MP_UNREACH_NLRI. Check for these and return
  proceed.
  NEXT_HOP becomes optional, if MP_REACH_NLRI is present and there's no
  v4 NLTI, update NEXT_HOP check accordingly.
  Print the missing attr in string form in the log message.
  (bgp_attr_parse) AS_PATH need not be there, so
  bgp_attr_munge_as4_attrs call needs to be conditional on that.

(cherry picked from commit aed1b556cf2f55680ae09d7ad1a1f22729dea8c5)

Conflicts:
	bgpd/bgp_attr.c
2016-05-26 20:30:30 +00:00
Paul Jakma
bb7bef1490 bgpd: well-known attr check only run for v4/uni, which could cause a crash.
* ANVL testing by Martin Winter threw up a crash in bgpd in aspath_dup
  called from bgp_packet_attribute, if attr->aspath was NULL, on an IPv6
  UPDATE.

  This root cause is that the checks for well-known, mandatory attributes
  were being applied only if an UPDATE contained the IPv4 NLRI and the
  peer was configured for v4/unicast (i.e. not deconfigured). This is
  something inherited from GNU Zebra, and never noticed before.

* bgp_attr.c: (bgp_attr_parse) Move the well-known mandatory attribute
  check to here, so that it can be run immediately after all attributes
  are parsed, and before any further processing of attributes that might
  assume the existence of WK/M attributes (e.g. AS4-Path).
  (bgp_attr_munge_as4_attrs) Missing AS_PATH shouldn't happen here anymore,
  but retain a check anyway for robustness - it's definitely a hard error
  though.
* bgp_attr.h: (bgp_attr_check) No longer needs to be exported, make static.
* bgp_packet.c: (bgp_update_receive) Responsibility for well-known check
  now in bgp_attr_parse.

(cherry picked from commit 055086f70febc30fdfd94bb4406e9075d6934cd8)

Conflicts:
	bgpd/bgp_attr.c
	bgpd/bgp_attr.h
	bgpd/bgp_packet.c
2016-05-26 20:13:10 +00:00
Paul Jakma
4799375a87 bgpd.c: Remove unused store to variable
(cherry picked from commit b2dd59ee0e74926278e128846624f5c93288223b)

Conflicts:
	bgpd/bgpd.c
2016-05-26 19:01:26 +00:00
Paul Jakma
1f9a9fffc1 Fix most compiler warnings in default GCC build.
Fix lots of warnings. Some const and type-pun breaks strict-aliasing
warnings left but much reduced.

* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to
  (struct fifo), so just use that.  Makes it clearer the beginning of
  (struct bgp_advertise) is compatible with with (struct fifo), which seems
  to be enough for gcc.
  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up
  type-punning breaks strict aliasing warnings.
* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.
  (bgp_route_refresh_receive) fix an interesting logic error in
  (!ok || (ret != BLAH)) where ret is only well-defined if ok.
* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.
* jhash.{c,h}: Can take const on * args without adding issues & fix warnings.
* libospf.h: LSA sequence numbers use the unsigned range of values, and
  constants need to be set to unsigned, or it causes warnings in ospf6d.
* md5.h: signedness of caddr_t is implementation specific, change to an
  explicit (uint_8 *), fix sign/unsigned comparison warnings.
* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going
  to fly given iov_base.
* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always
  true for address of static variable.  Correct but pointless warning in
  this case, but use a 2nd pointer to shut it up.
* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2
  different 32 bit IDs into in (struct ospf6_route), and the resulting
  type-pun strict-alias breakage warnings this causes.  Need to use 2
  different fields to fix that warning?

general:

* remove unused variables, other than a few cases where they serve a
  sufficiently useful documentary purpose (e.g.  for code that needs
  fixing), or they're required dummies.  In those cases, try mark them as
  unused.
* Remove dead code that can't be reached.
* Quite a few 'no ...' forms of vty commands take arguments, but do not
  check the argument matches the command being negated.  E.g., should
  'distance X <prefix>' succeed if previously 'distance Y <prefix>' was set?
  Or should it be required that the distance match the previously configured
  distance for the prefix?
  Ultimately, probably better to be strict about this.  However, changing
  from slack to strict might expose problems in command aliases and tools.
* Fix uninitialised use of variables.
* Fix sign/unsigned comparison warnings by making signedness of types consistent.
* Mark functions as static where their use is restricted to the same compilation
  unit.
* Add required headers
* Move constants defined in headers into code.
* remove dead, unused functions that have no debug purpose.

(cherry picked from commit 7aa9dcef80b2ce50ecaa77653d87c8b84e009c49)

Conflicts:
	bgpd/bgp_advertise.h
	bgpd/bgp_mplsvpn.c
	bgpd/bgp_nexthop.c
	bgpd/bgp_packet.c
	bgpd/bgp_route.c
	bgpd/bgp_routemap.c
	bgpd/bgp_vty.c
	lib/command.c
	lib/if.c
	lib/jhash.c
	lib/workqueue.c
	ospf6d/ospf6_lsa.c
	ospf6d/ospf6_neighbor.h
	ospf6d/ospf6_spf.c
	ospf6d/ospf6_top.c
	ospfd/ospf_api.c
	zebra/router-id.c
	zebra/rt_netlink.c
	zebra/rt_netlink.h
2016-05-26 18:57:39 +00:00
Lou Berger
0014c3011f bgpd: encap: extend extcommunity handling
Add code to print ENCAP communities.

Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 5a81fc9ae610ff343902ebabc12237d6e40d91cb)
2016-05-26 15:33:34 +00:00
Lou Berger
7a0ff1b285 bgpd: kill unused variable in bgp_socket()
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 4d80560a2b064182191371fd7e4304bf829a4d9f)
2016-05-26 15:33:34 +00:00
Lou Berger
95b9c671be bgpd: add nexthop length to AF macro
Signed-off-by: Lou Berger <lberger@labn.net>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 3e841d3b49bdb475ce793eee5d82e5137dff57d3)
2016-05-26 15:33:33 +00:00
David Lamparter
19c3598b92 *: fix in_addr initialisers
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 5181a0296687a6004dd00c7c0874886c9ff0bf60)
2016-05-26 15:33:32 +00:00
Balaji
81304aafbc bgpd: Addition of "show ip bgp dampening" command tree
This patch addresses David's comments and contains:

1.Addition of show ip bgp dampening command tree
2.Addition of show ip bgp dampening parameters to display BGP dampening
  parameters.

Signed-off-by: Balaji.G <balajig81@gmail.com>
(cherry picked from commit 3921cc54445417aa1ca22668063701a626e93098)
2016-05-26 15:33:31 +00:00
David Lamparter
9a8382f15f bgpd: fix SNMP write support
This code - dating back to the initial import in 2002 - probably never
worked.  Calling asn_parse_int seems to always have been wrong, and in
the meantime, there no longer is a "struct variable *" argument for
write_method.  If anyone tried to use it, it'd probably have crashed.
(I didn't try.)

Fix this up so it actually works.  It's the only place in Quagga where a
SNMP write is actually supported, so it's an odd one out anyway, but
heh.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit d689d1a0c69726330d69b2dd412fdb8dcb23394b)
2016-05-26 15:33:29 +00:00
Daniel Walton
29255fa729 bgpd: fix signed vs unsigned compile error in bgp_routemap.c
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-26 15:33:29 +00:00
David Lamparter
37e20390bd bgpd: random() returns long
bgpd was using unsigned to store a probability value to be used with
random().  That, however, returns long, running into some warnings (and
worst case, if RAND_MAX > UINT_MAX, won't work correctly.

Just use long to shuffle the value around.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit 8c9cd85631b77fac0bc30ffb9f23b29c466d31c4)
2016-05-26 15:33:29 +00:00
David Lamparter
ec5044feb9 bgpd: fix ecommunity_token initialiser
This pulls up ecommunity_token_unknown to be the first enum value (at
0), and uses that as initialiser to get rid of the uninitialised use
warning.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit b1672ce858cc9c16fd7cc67b673aa241d9583a59)
2016-05-26 15:33:29 +00:00
Balaji
9914e0224b bgpd: Display of configured dampening parameters
Function to display configured bgp dampening parameters.

Signed-off-by: Balaji.G <balajig81@gmail.com>
[DL: formatting adjustments]
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>

(cherry picked from commit 06bd420d4646333bc7ed9964e348f19a942fcfe2)
2016-05-26 15:26:05 +00:00
David Lamparter
010e1aa65e *: remove stray extra semicolons
Some places had extra semicolons where none belong.  Remove them.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit b7d5021bfa161f797cbfb1e92bf5b94327fb1b71)
2016-05-26 15:25:14 +00:00
Balaji
7ebe974831 bgpd: Configured suppress value cannot be less than the reuse value in bgp dampening
RFC 2439, Section 4.2; the values pair up for hysteresis.

Signed-off-by: Balaji.G <balajig81@gmail.com>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit aa7dbb1067b7d02e1354fe1e5664ccb7d259d649)
2016-05-26 15:25:14 +00:00
Daniel Walton
bc3dd427f2 Author: Timo Teräs <timo.teras@iki.fi>
Date:   Tue Sep 30 11:31:53 2014 +0300

    bgpd: implement route-map set as-path prepend last-as

    It picks up the AS to add from the aspath, or uses the peers
    AS number. Useful mostly in iBGP setups.

    Signed-off-by: Timo Teräs <timo.teras@iki.fi>
    Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
2016-05-26 15:25:11 +00:00
David Lamparter
37da8fa9a2 bgpd: set BGP_ATTR_MP_[UN]REACH_NLRI (fixes 1a211cb)
Unfortunately, the attribute present bits for MP_REACH and MP_UNREACH
which 1a211cb ("bgpd: one more fix"...) tests for are never set in their
corresponding attribute parsing functions.

Reported-by: Martin Winter <mwinter@netdef.org>
Fixes: 1a211cb "bgpd: one more fix for tightening of check for missing well-known attributes"
Cc: Paul Jakma <paul@opensourcerouting.org>
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
(cherry picked from commit daefeb8755e194dd19a5f1910bc78d13c8147efb)
2016-05-26 15:24:50 +00:00
Paul Jakma
4b52acf992 bgpd: trivial, remove unneeded extra variable in bgp_capability_restart
(cherry picked from commit ec98d90767b341877fb7f1547f025b946955899a)
2016-05-26 01:16:54 +00:00
Timo Teräs
374f12f955 bgpd: route-map: share aspath object compilation code where possible
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit b304dcb8ab)
2016-05-26 01:06:16 +00:00
Timo Teräs
515e500c27 bgpd: fix route-map comments
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
(cherry picked from commit 2aa640bd78)
2016-05-26 01:05:56 +00:00
Paul Jakma
95bb83054b build: Remove the old PIC/PIE patch, let libtool sort it out
* Remove the old change from '08 to add in PIE arguments at automake level.
  Versions of libtool since then know how to deal with -fpie and do the right
  thing according to whether its building shared or executable objects.
  So just pass '-fpie' as CFLAG and let libtool do its thing.
2016-05-25 20:38:35 -04:00
radhika
116bd4e9ff BGP:Fix for BFD sessions not getting replayed after quagga restart
Signed-off-by: Radhika Mahankali <radhika@cumulusnetworks.com>
Reviewed-by:   Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by:   Kanna Rajagopal <kanna@cumulusnetworks.com>

Ticket: CM-11055
Reviewed By: CCR-4773
Testing Done: Unit, PTM smoke, BGP neighbor smoke

Issue: bgpd is not replaying the BFD registrations to PTM after quagga restart.

Root Cause: This problem happens when BFD configuration is part of the peer group template. Currently, the BFD configuration is being copied to the peer from template as part of the AF (address family) configuration. But, when the saved config is used after the quagga restart the peer group template is applied to the peer before the AF configuration is configured for the template. Due to this the BFD configuration never gets copied from the template to the peer and the BGP peers have no BFD configuration after the restart

Sample config which failed:
router bgp 100
bgp router-id 10.10.0.1
no bgp default ipv4-unicast
bgp bestpath as-path multipath-relax
neighbor dpeergrp_2 peer-group
neighbor dpeergrp_2 remote-as 100
neighbor dpeergrp_2 bfd
neighbor dpeergrp_2 advertisement-interval 1
neighbor dpeergrp_2 timers connect 1
neighbor dpeergrp_4 peer-group
neighbor dpeergrp_4 remote-as 400
neighbor dpeergrp_4 bfd
neighbor dpeergrp_4 advertisement-interval 1
neighbor dpeergrp_4 timers connect 1
neighbor swp2s0.1 interface peer-group dpeergrp_2
neighbor swp18s3.1 interface peer-group dpeergrp_4
!
address-family ipv4 unicast
redistribute connected route-map redist
neighbor dpeergrp_2 activate
neighbor dpeergrp_2 next-hop-self
neighbor dpeergrp_2 default-originate
neighbor dpeergrp_2 soft-reconfiguration inbound
neighbor dpeergrp_4 activate
neighbor dpeergrp_4 next-hop-self
neighbor dpeergrp_4 default-originate
neighbor dpeergrp_4 soft-reconfiguration inbound
maximum-paths 14
exit-address-family

Fix: Moved the BFD config copy from the peer group AF config copy function to the main peer group config copy function.
2016-05-21 01:16:14 -07:00
Donald Sharp
b068916848 bgpd: Fix more clang compiler warnings
Remove some dead code and fix initialization of the
sockunion.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-20 09:33:57 -04:00
Donald Sharp
5007999a30 bgpd: Fix warnings -> errors issues
Switched to !another! new compiler and a few more
warnings creeped in.  Also noticed a json issue
that caused an error in output.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:38 -04:00
Donald Sharp
d2921c7a53 bgpd: Fix possible api.tag uninitialized usage
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:34 -04:00
Donald Sharp
18f1dc06c5 bgpd: Clean up some static analysis warnings
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:26 -04:00
Donald Sharp
540766e7a3 bgpd: Fix function return
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Don Slice <dslice@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:42:05 -04:00
Paul Jakma
3a6229da17 bgpd: peer_uptime overflows after 1 year
* bgpd.c: (peer_uptime) Wraps after 1 year, and doesn't indicate years.
  Fix. Assume a year is 365 days, for an easy life.

Fixes: Bug #836
Reported-by: Rolf Hanßen
Acked-by: Donald Sharp <sharpd@cumulusnetworks.com>
Reviewed-by: Daniel Walton <dwalton@cumulusnetworks.com>
2016-05-19 10:41:13 -04:00