OpenSourceRouting
  1. OpenSourceRouting

quagga-snap

Public
AuthorCommitMessageCommit dateIssues
David LamparterDavid Lamparter
3493b7731b7lib: unstupidify thread debug informationthe library's thread scheduling functions keep track of the thread function's name, so far so good. However, copying the compiler-provided constant into a buffer inside the thread structure is plain useless. Also, strip_funcname() was trying to support something that never happens. Instead, let's use some bytes here to track where threads are scheduled from. Another commit will print that in...
Lu FengDavid LamparterLu Feng
621e2aaf33dzebra: fix rtnh_len in the rt_netlink messages for multipath caseIn _netlink_route_build_multipath(): - Each time when appending a IPv4 gateway in the message, rtnh_len is increased by sizeof (struct rtattr) + 4, where we should use "bytelen" instead of the hard coding "4". - As what done for IPv4, we should increase rtnh_len accordingly along with adding a IPv6 gateway, or else the IPv6 gateways will be lost. Signed-off-by: Feng Lu <lu.feng@6wind.c...
Lu FengDavid LamparterLu Feng
0b74a0a5db7ripd: allow to enable/disable the ECMP featureIntroduce a new command "[no] allow-ecmp" to enable/disable the ECMP feature in RIP. By default, ECMP is not allowed. Once ECMP is disabled, only one route entry can exist in the list. * rip_zebra.c: adjust a debugging information, which shows the number of nexthops according to whether ECMP is enabled. * ripd.c: rip_ecmp_add() will reject the new route if ECMP is not ...
Lu FengDavid LamparterLu Feng
b397cf4f0fcripd: add ECMP support* Each node in the routing table is changed into a list, holding the multiple equal-cost paths. * If one of the multiple entries gets less-preferred (greater metric or greater distance), it will be directly deleted instead of starting a garbage-collection timer for it. The garbage-collection timer is started only when the last entry in the list gets INFINITY. * Some new functions ar...
David LamparterDavid Lamparter
1520e474812M*: merge branch stable/0.99.23Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
90444ca35e3lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)On OpenBSD, carp interfaces claim to be PtP interfaces with a 0.0.0.0/0 peer address. We process those in zebra and try to send them to clients, at which point they get encoded as all-0. The client code, however, decodes that to a NULL pointer instead of 0.0.0.0. This later turns into a SEGV when CONNECTED_PREFIX sees that ZEBRA_IFA_PEER is set and tries to access the peer prefix. This is a...
David LamparterDavid Lamparter
ad2f92b6b07isisd: type mix-up in 28a8cfc "don't require IPv4"Whoops, these are in6_addrs, not prefix_ipv6... funnily enough, it does the right thing either way, if it compiles, which it only does on Linux because IN6_IS_ADDR_LINKLOCAL contains a cast to the right type. On BSD there is no such cast, hence it explodes on trying to compile, trying to access struct members of in6_addrs while operating on prefix_ipv6... Fixes: 28a8cfc ("isisd: don't require...
John GlotzerDavid LamparterJohn Glotzer
4c005e3f65abgpd: memmove needed in community_del_valIn bgpd/bgp_community_del_val memcpy is used for potentially overlapping regions which is *not* safe. It may "work" in some cases but is not guaranteed to work in all cases. The case that I saw fail was on an x86_64 architecture with the number of bytes being moved/copied equal to 8. The way the code is written the uint32_t pointers will always differ by 1, which is equivalent to a memcpy/memm...
Timo TeräsDavid LamparterTimo Teräs
3ef0b877f08build: do not assume glibc on linuxThe whole IPv6 stack detection could need refactoring. But this fixes the linux check to not assume glibc. Fixes build against musl c-library. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Timo TeräsDavid LamparterTimo Teräs
c299ed717eezebra: fix struct msghdr initializersstruct msghdr field orders are not strictly specified in POSIX. Improve portability by using designated initializer. This fixes build against musl c-library where struct msghdr is POSIX compliant (Linux kernel and glibc definitions are non-conforming). As the result is also more readable, struct iovec initilizers were also converted. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by...
Timo TeräsDavid LamparterTimo Teräs
16ffb26fbbf*: fix detection and usage of sys/cdefs.hThis header is non-standard (though present on many systems) and there is no standard for what it should or should not define. Remove it where it is not really needed. But add also a configure check, so it can be used if available but otherwise fallback to defining the needed macroes. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
28a8cfcbc3aisisd: don't require IPv4 for adjacencyThis was precluding isisd from IPv6-only operation; no adjacency would come up unless there was IPv4 in parallel. Reported-by: Martin Winter <mwinter@netdef.org> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
8b16ed74fa6tests/bgpd: don't hardcode error number (fix f57000c)f57000c ("bgpd: don't send NOTIFY twice for malformed attrs") introduces BGP_ATTR_PARSE_ERROR_NOTIFYPLS as additional error code that implies the caller should sent a NOTIFY and convert it to BGP_ATTR_PARSE_ERROR. Sadly, the latter was hardcoded in bgp_mp_attr_test.c, which now didn't consider the new value to be an error. Make the testcase treat all nonzero values as error without discern. S...
Lu FengDavid LamparterLu Feng
342a31bfda2ripd: use only one constant for derivationRIP_MAX_RTE is defined in ripd.h as 25 but is in fact the result of a formula. More over it is not used in the code: the code itself includes the fomula. This makes it un-clear for maintenance. Signed-off-by: Feng Lu <lu.feng@6wind.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
052573ee231M*: merge branch stable/0.99.23bgp extcommunity fixes from stable branch Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
f57000c0dbdbgpd: don't send NOTIFY twice for malformed attrsMost of the attribute parsing functions were already sending a notify, let's clean up the code to make it happen only once. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
bb02b82354abgpd: fix IP endianness in debug messageinet_ntop expects network byte order. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
f80f838b2f5bgpd: fix memory leak on malformed attributeWhen bgp_attr_parse returns BGP_ATTR_PARSE_ERROR, it may already have parsed and allocated some attributes before hitting that error. Free the attr's data before returning. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
27bf90a1467bgpd: fix double free after extcommunity set (BZ#799)The route-map extcommunity set code was incorrectly assuming that it owns the intern'd struct ecommunity reference. In reality, the intern'd reference belongs to bgp_update_receive() and we're not supposed to touch it in the route-map code. Instead, like all the other set commands, we use a on-heap but non-intern'd ecommunity to set the new value. This is then either intern'd in bgp_update_m...
David LamparterDavid Lamparter
73d78ea0153bgpd: remove duplicate route-map extcommunity coderoute_set_ecommunity_rt and _soo share almost all of their code. Let's remove one of the redundant copies. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
c460e5720c1bgpd: fix some bgp_update_main() attribute leaksbgp_update_main() wasn't doing anything to release attribute values set from route maps for two of its error paths. To fix, pull up the appropriate cleanup from further down and apply it here. bgp_update_rsclient() doesn't have the issue since it immediately does bgp_attr_intern() on the results from bgp_{export,import}_modifier. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
0ff692ed596Mbgpd: merge branch tteras/master~3 (b304dcb)route-map tidying + next-hop-self all Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Timo TeräsTimo Teräs
b304dcb8abcbgpd: route-map: share aspath object compilation code where possibleSigned-off-by: Timo Teräs <timo.teras@iki.fi>
Timo TeräsTimo Teräs
9e7a53c179fbgpd: implement "next-hop-self all"As specified in: http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_bgp/command/irg-cr-book/bgp-m1.html#wp4972925610 This allows overriding next-hop for ibgp learned routes on an RR for reflected routes. Especially useful for using iBGP in DMVPN setups. See: http://blog.ipspace.net/2014/04/changes-in-ibgp-next-hop-processing.html Signed-off-by: Timo Teräs <timo.teras@iki.fi>
Timo TeräsTimo Teräs
2aa640bd78bbgpd: fix route-map commentsSigned-off-by: Timo Teräs <timo.teras@iki.fi>
David LamparterDavid Lamparter
a4b5665f76drelease: 0.99.23
David LamparterDavid Lamparter
2c32ee5f041doc: update NEWS for 0.99.23 changes
David LamparterDavid Lamparter
6b0655a2519*: nuke ^L (page feed)Quagga sources have inherited a slew of Page Feed (^L, \xC) characters from ancient history. Among other things, these break patchwork's XML-RPC API because \xC is not a valid character in XML documents. Nuke them from high orbit. Patches can be adapted simply by: sed -e 's%^L%%' -i filename.patch (you can type page feeds in some environments with Ctrl-V Ctrl-L) Signed-off-by: David Lampar...
David LamparterDavid LamparterDavid Lamparter
fdb913aedb5build: Quagga 0.99.23-rc1this is not a full release version, so neither release notes nor documentation are updated yet. Also, signing the tag with my private GPG key instead of the Quagga one.
Lu FengDavid LamparterLu Feng
fd6f39a5140isisd: ignore the unrecognized TLVsWhen processing LSPDUs, the unrecognized TLVs/sub-TLVs should be silently ignored. In parse_tlvs(), ISIS_WARNING is returned once an unrecognized TLV exists. It breaks the processing in lsp_authentication_check() and lsp_update_data(). So remove it. Signed-off-by: Feng Lu <lu.feng@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Joachim NilssonDavid LamparterJoachim Nilsson
404fd2974fbripd: fix "show ip rip status" documentationThe command was mis-named in the documentation as "show ip protocols". Signed-off-by: Joachim Nilsson <troglobit@gmail.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Lu FengDavid LamparterLu Feng
7b3b98ae3ecripd & ripngd: avoid the zero interface metricThe interface metric is initialized to 0 in the commit db19c85: zebra: set metric for directly connected routes via netlink to 0 Ripd and ripngd must be aware of it and avoid increase the route metric by 0. Signed-off-by: Feng Lu <lu.feng@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Timo TeräsDavid LamparterTimo Teräs
224e7e51574lib: remove redundant and incorrect sys/fcntl.h includePOSIX defines <fcntl.h>, <sys/fcntl.h> is the same thing. However, it should not be used as it's existence can depend on C-library implementation. E.g. musl gives warning if <sys/fcntl.h> is used. Signed-off-by: Timo Teräs <timo.teras@iki.fi> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Stephen HemmingerDavid LamparterStephen Hemminger
d9d4ae51572bgpd: fix crash when allowas-in is done on inactive peerWhen allowas-in is changed on a peer that is not up, BGP would crash trying to do route_refresh. If peer is not up, there is no need to do notification or send. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Feng Lu <lu.feng@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Pradosh MohapatraDavid LamparterPradosh Mohapatra
8c71e481daebgpd: efficient NLRI packing for AFs != ipv4-unicastISSUE: Currently, for non-ipv4-unicast address families where prefixes are encoded in MP_REACH/MP_UNREACH attributes, BGP ends up sending one prefix per UPDATE message. This is quite inefficient. The patch addresses the issue. PATCH: We introduce a scratch buffer in the peer structure that stores the MP_REACH/MP_UNREACH attributes for non-ipv4-unicast families. This enables us ...
Pradosh MohapatraDavid LamparterPradosh Mohapatra
2c13299a05ebgpd: don't compare next-hop to router-idWhile announcing a path to a peer, the code currently compares the path's next-hop with the peer's router-id. This can lead to problems as the router IDs are unique only within an AS. Suppose AS 1 sends route with next-hop 10.1.1.1. It is possible that the speaker has an established BGP peering with a router in AS 2 with router ID 10.1.1.1. The route will not be advertised to that peer in AS 2....
Sébastien LuttringerDavid LamparterSébastien Luttringer
66d2ead7df2vtysh: fix build against readline 6.3readline 6.3 removes some old deprecated funnily-named types. This updates vtysh to use the new types so it builds again. Reported-by: Joel Teichroeb <klusark@archlinux.invalid> References: https://bugs.archlinux.org/task/39495 Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Michal SekletarDavid LamparterMichal Sekletar
8e998b1eb5fzebra: raise the privileges before calling socket()Because of recent changes when creating AF_NETLINK socket, kernel will cache capabilities of the caller and if file descriptor is used or otherwise handed to another process it will check that current user has necessary capabilities to use the socket. Hence we need to ensure we have necessary capabilities when creating the socket and at the time we use the socket. See: http://www.spinics.net/l...
Milan KocianDavid LamparterMilan Kocian
000e157c852bgpd: Fix condition allowas-in in rsclient codeCurrently when you set neighbour's 'allowas-in' option on route server side you get redistribution of the prefixes from this neighbour's table into all neighbour's tables which have the same AS number. I think that wanted behaviour is to allow import prefixes from neighbour's tables with the same AS num into neighbour which has 'allowas-in' option set. Signed-off-by: Milan Kocian <milon@wq.cz>...
Pradosh MohapatraDavid LamparterPradosh Mohapatra
5d804b439a4bgpd: support TTL-security with iBGPTraditionally, ttl-security feature has been associated with EBGP sessions as those identify directly connected external peers. The GTSM RFC (rfc 5082) does not make any restrictions on type of peering. In fact, it is beneficial to support ttl-security for both EBGP and IBGP sessions. Specifically, in data centers, there are directly connected IBGP peerings that will benefit from the protection...
David LamparterDavid Lamparter
5f9adb5d26dbgpd: factor out eBGP multihop checkThe check for an eBGP multihop configuration is unwieldy; factor it out into a separate function. [DL: originally by Dinesh G Dutt <ddutt@cumulusnetworks.com>, split off from the next commit] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
David LamparterDavid Lamparter
ef0b0c3e95abgpd: factor out TTL settingTTL/min TTL are set from both bgp_accept() and bgp_connect(). Factor them out so the following change to enable iBGP GTSM becomes more readable. [DL: originally by Dinesh G Dutt <ddutt@cumulusnetworks.com>, split off from the next commit] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Pradosh MohapatraDavid LamparterPradosh Mohapatra
8da8689d91abgpd: fix fast external fallover behaviorISSUES 1. When an interface goes down, the zclient callbacks are invoked in the following order: (a) address_delete() that removes the connected address list: ifp->connected, (b) interface_down() that performs "fast external fallover" operation. The operation relies on ifp->connected to look for peers that should be brought down. That's a cyclic dependency. 2. 'ttl-security' co...
Vipin KumarDavid LamparterVipin Kumar
3374bef0412bgpd: increase TCP socket buffer sizeBGP does not respond fairly in high scale. As the number of BGP peers and prefixes increase, triggers like interface flaps which lead to BGP peer flaps, cause blockage in bgp_write. BGP does handle the cases of TCP socket buffer full by queuing a write event back, there is no functional issue there as such. Still, increasing the peer socket buffer size should help reduce event queueing in BGP...
Vipin KumarDavid LamparterVipin Kumar
48fc05fb7e6bgpd: fix O_NONBLOCK on outgoing connectsBGP was setting sockets to be non-blocking only for the accepted passive peers. As a fix, setting the BGP sockets to be non-blocking even for the active peers. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Pradosh Mohapatra <pmohapat@cumulusnetworks.com> Reviewed-by: Dinesh Dutt <ddutt@cumulusnetworks.com> [DL: patch split, this is item 1.] Signed-off-by: David Lamparter...
Vitaliy SenchyshynDavid LamparterVitaliy Senchyshyn
6aa136f1eaebgpd: send notify in OpenSent when stopping manuallyThe issue it fixes is that the notification message is not sent to a second peer when bgp is stopped manually. According to BGP RFC4271, section 8.2.2, regarding the FSM transitions, in OpenSent state: If a ManualStop event (Event 2) is issued in the OpenSent state, the local system: * sends the NOTIFICATION with a Cease, * sets the ConnectRetryTimer to zero, * releases all BGP resourc...
Boian BonevDavid LamparterBoian Bonev
b366b518401bgpd: display multipath status in "show ip bgp"The output of "show ip bg" does not show whether and which routes are installed as multipath routes along the best route: BGP table version is 0, local router ID is 10.10.100.209 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop M...
Pradosh MohapatraDavid LamparterPradosh Mohapatra
689bb66c6a9bgpd: track correct originator-id in reflected routesISSUE: Suppose route1 and route2 received from route-reflector-client1 and client2 respectively have identical attributes. The current logic of creating the adj-rib-out for a peer threads the 'adv' structures for both routes against the same attribute. This results in 'bgp_update_packet()' to pack those routes in the same UPDATE message with one attr structure formatted. The originator-id is t...
Pradosh MohapatraDavid LamparterPradosh Mohapatra
2fdd455cfd1bgpd: add 'bgp bestpath as-path multipath-relax'Compute multipath in BGP based on AS_PATH hop count match. If the knob is turned on, it is not required to have an exact match of AS_PATHs (provided other multipath conditions are met, of course). Signed-off-by: Pradosh Mohapatra <pmohapat at cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt at cumulusnetworks.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Jorge Boncompte [DTI2]David LamparterJorge Boncompte [DTI2]
d92a2f39b46bgpd: use ATTR_FLAG_BIT() for BGP_ATTR_ values* bgp_attr.c: this UNSET_FLAG()s are bogus. I did a quick review and I think that they could not cause any bug anyway. Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net> Acked-by: Feng Lu <lu.feng@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>