summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix BGP's use of restart bit.Vipin Kumar2014-11-114-10/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | bgpd-restart-bit-fix.patch ISSUE: Quagga BGP doesn't send or use the restart-bit via the Graceful-Restart(GR) capability. GR capability implementation isn't complete as per the RFC. PATCH: Patch uses BGP instance creation as the beginning of the startup period, and 'restart_time' is taken as the startup period. As a result, BGP will set the restart bit in the GR capability of the OPEN messages during the startup period. As an indication of quagga implementation's capability of sending End-Of-RIB, helping a restarting neighbor, quagga BGP will now send global GR capability irrespective of the graceful-restart config in BGP and the address-family specific GR capability will be sent only if the GR config is present. Forwarding bit is not set assuming its not preserved. Incorporated feedback from David Lamparter via the quagga-dev mailing list. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Pradosh Mohapatra <pmohapat@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* bgpd: remove unused variablesPaul Jakma2014-11-111-3/+0
|
* Fix to take care of ordering between interface and router ospf command.Vipin Kumar2014-11-111-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | SYMPTOM: Interface mode OSPF area configuration is not retained after restarting quagga. Example - quagga(config)# interface swp49 quagga(config-if)# ip ospf area 0.0.0.0 quagga# sh run <snip> interface swp49 ip ospf area 0.0.0.0 ipv6 nd suppress-ra link-detect ! quagga# write memory * Restart quagga at this point* quagga# sh run <snip> interface swp49 ipv6 nd suppress-ra link-detect ! ISSUE: The issue is that the interface mode commands can reach the OSPF process even before 'router ospf' command that initializes the default OSPF instance, this is not getting handled properly in OSPF process. FIX: Initialize the default OSPF instance during OSPF process initializations, which is before 'router ospf' command is received in OSPF process. So, when interface mode command is received, it is guaranteed to have ospf instance to work with. Other way could be to call ospf_get() instead of ospf_lookup() while processing the config command callbacks, although OSPF needs to have at least one instance structure anyways, therefore calling it unconditionally in OSPF initializations should be fine too. There could be more elaborate fix(es) possible to handle this, like adding some ordering mechanism for commands as they are read by a process, or storing the received command and applying it after the commands its dependent upon are processed. For the issue at hand, initializing the default instance in main() serves the purpose well. Signed-off-by: Vipin Kumar <vipin@cumulusnetworks.com> Reviewed-by: Dinesh Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* Add set ipv6 next-hop peer-address command.Dinesh G Dutt2014-11-111-1/+121
| | | | | | | | | | IPv4 has the ability to specify the peer address with the keyword peer-address. IPv6 mandates the use of a specific global or local address only in setting the next-hop in routemaps. This makes it cumbersome to configure some large networks with BGP and IPv6. This patch fixes that deficiency. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* OSPFd: Update timestamps when we MaxAge LSAs.Dinesh G Dutt2014-11-111-0/+10
| | | | | | | | | | | When an LSA is flushed we need to update the timestamps for them. This allows for the node to give the neighbor sufficient time to send back an acknowledgement before retransmission kicks in. Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma@cumulusnetworks.com> Reviewed-by: James Li <jli@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* ospfd: Tweak previous iface RR write patch to avoid free/malloc & redundant logPaul Jakma2014-11-113-10/+10
| | | | | | | | | * linklist.{c,h}: (listnode_move_to_tail) new unction to move a listnode to tail of list. * ospf_packet.c: (ospf_write) remove debug that seemed to be mostly covered by existing debug. Use listnode_move_to_tail to just move the list node to the end of the tail, rather than freeing the one to hand and allocing a new one.
* Avoid timing out of adjacencies by serving all interfaces in round-robin.Dinesh G Dutt2014-11-111-3/+15
| | | | | | | | | | | Ensure that all interfaces are served in a round robin fashion during write. This prevents adjacencies from timing out when you have a lot of LSAs to be sent out each adjacency. This is essentially a scalability improvement. Signed-off-by: Ayan Banerjee <ayan@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* Added show command to display only the routes in the RIB that does not count ↵Dinesh G Dutt2014-11-111-0/+124
| | | | | | | | ECMPs Signed-off-by: Ayan Banerjee <ayan@cumulusnetworks.com> Reviewed-by: JR Rivers <jrrivers@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* Make static IPv6 routes respect non-default routing tables.Dinesh G Dutt2014-11-111-0/+1
| | | | | | Signed-off-by: Nolan Leake <nolan@cumulusnetworks.com> Reviewed-by: Shrijeet Mukherjee <shm@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* ospfd: Some small tweaks to the SPF execution reason patchPaul Jakma2014-11-117-70/+64
| | | | | | | | | | * ospf_spf.h: use an enum for the reason, and have it as a new argument to ospf_spf_calculate_schedule, no need for additional call, and let compiler do the checking. * ospf_spf.c: format changes - Quagga coding style places function names at the start of a new line, for easy grepping for definition. (ospf_spf_calculate_timer) Change the log format of SPF execution time to avoid ginormous line, and make logging conditional, as is the norm.
* Compute and display SPF execution statisticsDinesh G Dutt2014-11-1111-27/+161
| | | | | | | | | | | | | | | | Detailed SPF statistics, all around time spent executing various pieces of SPF such as the SPF algorithm itself, installing routes, pruning unreachable networks etc. Reason codes for firing up SPF are: R - Router LSA, N - Network LSA, S - Summary LSA, ABR - ABR status change, ASBR - ASBR Status Change, AS - ASBR Summary, M - MaxAge Signed-off-by: Dinesh G Dutt <ddutt@cumulusnetworks.com> Reviewed-by: JR Rivers <jrrivers@cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma@cumulusnetworks.com> Reviewed-by: Ayan Banerjee <ayan@cumulusnetworks.com> Reviewed-by: Paul Jakma <paul@opensourcerouting.org>
* make some structures constant.Stephen Hemminger2014-11-032-2/+2
| | | | | | | These pre-initialized arrays are not modified. Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Feng Lu <lu.feng@6wind.com>
* zebra: MBGP routes should not be installed in the kernelBalaji2014-10-301-2/+8
| | | | | | | | | | | MBGP routes are used only for PIM RPF checks and hence should not be installed in the kernel's FIB. Ignore route node set to Multicast SAFI. Signed-off-by: Balaji.G <balajig81@gmail.com> Acked-by: Everton Marques <everton.marques@gmail.com> [pushed down rn->table->info assignment below assert] Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* tests: fix tests for 055086f (well-known attr check)David Lamparter2014-10-301-28/+48
| | | | | | | | | | | | | Fix tests/aspathtest.c by including an ORIGIN attribute in the testcases. After 055086f "bgpd: well-known attr check only run for v4/uni, which could cause a crash," we're now checking for it and tests are failing due to that. Note that test #11 ("4b AS4_PATH w/o AS_PATH") is no longer accepted as OK since the function now checks for the existence of an AS_PATH attr. Fixes: 055086f ("bgpd: well-known attr check only run for v4/uni"...) Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* build: fix 9562a77... (mrlg removal)David Lamparter2014-10-301-1/+1
| | | | | | | | mrlg.cgi was removed in 9562a77 "mrlg: Remove obsolete version." but the file was still listed in Makefile.am. Fixes: 9562a77 ("mrlg: Remove obsolete version.") Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* Revert "zebra: Set link-detect on by default"David Lamparter2014-10-281-3/+0
| | | | | | | | | This reverts commit 773224404cb33b2dbd3d8d8d2572013603995ce4. This patch is nontrivial but wasn't passed along on the mailing list; this is a revert purely on procedural reasons. Signed-off-by: David Lamparter <equinox@diac24.net>
* zebra: Set link-detect on by defaultDinesh G Dutt2014-10-281-0/+3
| | | | | | Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com> Reviewed-by: Dinesh G Dutt <ddutt at cumulusnetworks.com> Reviewed-by: Scott Feldman <sfeldma at cumulusnetworks.com>
* bgpd: Fixes for recent well-known-attr check patch.Paul Jakma2014-10-281-6/+27
| | | | | | | | | | | | | | * 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.
* mrlg: Remove obsolete version.Paul Jakma2014-10-282-395/+5
| | | | | * mrlg.cgi: The version we shipped was very much out of date, remove it. * mrlg.txt: Add file pointing to the official MRLG site.
* Handy guidelines to contributeVincent JARDIN2014-10-271-0/+62
| | | | | | | Explain how to be a nice contributor in a handy way. Signed-off-by: Vincent JARDIN <vincent.jardin@6wind.com> Acked-by: Paul Jakma <paul@jakma.org>
* ospfd: Don't leave stale RouterLSA's when changing areaIDJoakim Tjernlund2014-10-271-1/+4
| | | | | Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> Acked-by: Feng Lu <lu.feng@6wind.com>
* stream: remove unused stream_read_unblockStephen Hemminger2014-10-272-30/+0
| | | | | | The one place this was being used in BGP is now gone, can remove deprecated interface. Acked-by: Feng Lu <lu.feng@6wind.com>
* Bug in ospf6_lsa_compare()Yasuhiro Ohara2014-10-271-3/+3
| | | | | | | | | | | | | | | | | | This fix is probably correct on 32bit systems, but i think it will not work on 64bit systems. sizeof(signed long) would be 8 and therefore the cast from u_int32_t will map all the values to non-negative part of long int. You would like to use int (like in ospfd) and change the type of seqnuma, seqnumb to that. The type int32_t would be even more proper, but sizeof(int) is 4 on relevant platforms. Signed-off: Ondrej Zajicek <santiago@crfreenet.org> Acked-by: Feng Lu <lu.feng@6wind.com> Acked-by: Yasuhiro Ohara <yasu@jaist.ac.jp>
* ospfd: invalid MD5 auth_key?Joakim Tjernlund2014-10-271-2/+2
| | | | | | | | | | | | | | | This looks fishy in ospf_make_md5_digest() if (list_isempty (OSPF_IF_PARAM (oi, auth_crypt))) auth_key = (const u_int8_t *) ""; ... MD5Update(&ctx, auth_key, OSPF_AUTH_MD5_SIZE); auth_key points to a "" string of len 1 which is a lot smaller that OSPF_AUTH_MD5_SIZE. Is this intentional to get some random data or just a plain bug? Anyone using MD5 should have a closer look and decide what to do. Acked-by: Feng Lu <lu.feng@6wind.com>
* zebra: route_unlock_node is missing in "show ip[v6] route <prefix>" commandsLu Feng2014-10-271-0/+4
| | | | | Signed-off-by: Feng Lu <lu.feng@6wind.com> Acked-by: Vincent Jardin <vincent.jardin@6wind.com>
* docs: defines.texi include seems to want to be after setfilenamePaul Jakma2014-10-171-4/+3
| | | | | | | * quagga.texi: I'm getting warnings about stuff in defines.texi not being defined when building quagga.info. Seems to be fixed by moving the include of defines.texi to the end of the header. Also, the Texinfo docs suggest setfilename must go first.
* zebra: Build the test client, can be useful, and add IPv6 to testrib.confPaul Jakma2014-10-172-4/+24
|
* FreeBSD has changed its SOCK_RAW for being truly raw.Olivier Cochard-Labbé2014-10-171-1/+2
|
* bgpd: well-known attr check only run for v4/uni, which could cause a crash.Paul Jakma2014-10-173-54/+59
| | | | | | | | | | | | | | | | | | | | | | * 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.
* [lib] Add support for backtrace on more platformsJoakim Tjernlund2014-10-172-4/+40
| | | | | * lib/sigevent.c: (program_counter) extend to support more platforms. Joint effort with Paul Jakma.
* lib/plist: Add some required parentheses, according to clang-analyzerPaul Jakma2014-10-171-4/+4
|
* ripng_nexthop: remove unused store to variablePaul Jakma2014-09-231-1/+0
|
* ospf6_lsdb: trivial, make it clear that showfunc is set before deref.Paul Jakma2014-09-232-15/+25
|
* bgpd.c: Remove unused store to variablePaul Jakma2014-09-231-2/+2
|
* Fix most compiler warnings in default GCC build.Paul Jakma2014-09-2338-211/+156
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Add missing GPL headers, and copyright claims that certainly apply.Paul Jakma2014-09-1917-1/+342
| | | | | | | | | | | | | * Fix (a subset of)? files with non-trivial code that are missing GPL headers. * A few copyright claims added which I am certain apply, but which I had missed out on the original commits. NB: Copyright claims are not exclusive and the addition of any copyright claim should not be read as implying a lack of any further claims, or denying the validity of any other claims. All those with claims of copyright over any portion of Quagga are welcome to submit them, ideally as patches to update copyright strings in files.
* lib: Improve error reporting from broken config filesSteve Hill2014-09-193-9/+20
| | | | | | | | * command.h: (config_from_file) Add variable to interface for line number reporting. * command.c: (config_from_file) Set & increment 'line_num' while parsing. * vty.c: (vty_read_file) Report parse errors in the correct order to stderr, with added line numbers.
* HACKING: remove an unneeded escapePaul Jakma2014-09-191-1/+1
|
* lib: include thread information in backtracesDavid Lamparter2014-09-154-0/+55
| | | | | | | now that we know what thread we're currently executing, let's add that information to SEGV / assert backtraces. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* lib: unstupidify thread debug informationDavid Lamparter2014-09-152-67/+58
| | | | | | | | | | | | | | | | | the 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 information on crashes. Ripping out useless stuff: -64 bytes in the thread structure Re-add as const ptr: +8 bytes Extra debug info: +12 bytes Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* zebra: fix rtnh_len in the rt_netlink messages for multipath caseLu Feng2014-09-151-1/+2
| | | | | | | | | | | | | | In _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.com> Reviewed-by: Alain Ritoux <alain.ritoux@6wind.com> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
* ripd: allow to enable/disable the ECMP featureLu Feng2014-09-153-5/+102
| | | | | | | | | | | | | | | | | | | | | | Introduce 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 allowed and some entry already exists. A new configurable command "allow-ecmp" is added to control whether ECMP is allowed. When ECMP is disabled, rip_ecmp_disable() is called to remove the multiple nexthops. * ripd.h: Add a new member "ecmp" to "struct rip", indicating whether ECMP is allowed or not. 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>
* ripd: add ECMP supportLu Feng2014-09-154-355/+442
| | | | | | | | | | | | | | | | | | | | | | * 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 are used to maintain the ECMP list. And hence rip_rte_process(), rip_redistribute_add() and rip_timeout() are significantly simplified. * rip_zebra_ipv4_add() and rip_zebra_ipv4_delete() now can share the common code. The common part is moved to rip_zebra_ipv4_send(). 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>
* *: merge branch stable/0.99.23David Lamparter2014-08-198-22/+116
|\ | | | | | | Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * lib: unset ZEBRA_IFA_PEER if no dst addr present (BZ#801)David Lamparter2014-08-181-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 band-aid fix for stable/0.99.23, a long-term solution needs some conceptual improvements on the entire thing. (The usefulness of a PtP-to-0.0.0.0/0 is a separate question; at this point dropping the peer prefix seems the least intrusive solution.) Reported-by: Laurent Lavaud <laurent.lavaud@ladtech.fr> Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * isisd: type mix-up in 28a8cfc "don't require IPv4"David Lamparter2014-08-181-2/+2
| | | | | | | | | | | | | | | | | | | | | | 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 IPv4 for adjacency") Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * bgpd: memmove needed in community_del_valJohn Glotzer2014-08-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 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/memmove of regions that are 4 bytes away from one another. So the code failed while copying an 8 byte region to an address that is 4 bytes lower i.e. overlapping regions. Interestingly, the same architecture had no problems with a 12 byte copy. When the code failed the communities were [200,300,400] and a call was made to delete the 200 community. The result of this was an array that looked like [400,400] which was uniquified to [400]. Of course the expected result should have been [300, 400]. One additional point - in our production environment memmove would not *link* without including <string.h> but in an isolated quagga git repo this #include does not seem to be required and I see memmove is used in vtysh.c without this #include either. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| * build: do not assume glibc on linuxTimo Teräs2014-08-181-2/+3
| | | | | | | | | | | | | | | | | | The 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>
| * zebra: fix struct msghdr initializersTimo Teräs2014-08-181-4/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | struct 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: David Lamparter <equinox@opensourcerouting.org>
| * *: fix detection and usage of sys/cdefs.hTimo Teräs2014-08-183-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | This 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>