Paul Jakma paul

paul pushed to next at Quagga/quagga

  • 8390b96efd lib/thread: Use a normally acquired thread for thread_execute * lib/thread.c: (funcname_thread_execute) Obtain a normally allocated thread from thread_get, instead of faking one on the struct. To be robust against functions under the thread_execute'd thread taking the (on stack allocated) thread and calling other thread functions on it. (thread_add_unuse) THREAD_EXECUTEs are now real/heap and can go on the unused list. See https://bugzilla.quagga.net/show_bug.cgi?id=977. Defensive measure. Not known if it will actually fix the bug#977 issues.
  • daacbe54cd lib/thread: set type THREAD_EXECUTE to avoid thread_cancel issues * lib/thread.c: (funcname_thread_execute) Set the type to THREAD_EXECUTE to avoid crash or corruption if a dummy stack thread somehow ends up being passed to thread_cancel. This should never happen, it is never valid for code to thread_cancel a thread setup that way. However, lib/thread should try to be robust. See bug#877: https://bugzilla.quagga.net/show_bug.cgi?id=977
  • c8e555b76d tests: Add thread_execute unit test * tests/test_thread_execute.c: Exercise thread_execute. Test that the thread.c code is robust to caller errors with EXECUTE threads, e.g. that thread_cancel copes with being passed a thread_execute thread.
  • View comparison for these 3 commits »

1 year ago

paul pushed to next at Quagga/quagga

  • 1f918980c0 lib/thread: Address other paths from thread_execute to thread_add_unuse * lib/thread.c: There are further paths from thread_execute to thread_add_unuse, beyond that from bugzilla bug#975. Make the paths from thread_execute to thread_add_unuse, inc. thread_add_unuse itself, tolerant to the "dummy" threads of thread_execute. Another option would be to have thread_execute properly obtain a thread struct, rather than fake one on its heap. (thread_add_unuse) Be tolerant of NULL master threads passed in, that /ought/ to be dummy/non-heap threads, and just ignore. Don't assert. (thread_call) no point checking for NULL master here anymore. See https://bugzilla.quagga.net/show_bug.cgi?id=977 With thanks to John Hay, john@sanren.ac.za, for testing and verifying the fix.
  • ddece19766 release: Quagga 1.2.4 Brown paper bag release.
  • 9d7a49f609 lib: Fix assert in thread_add_unuse if thread_execute was used * thread.c: (thread_call) thread_execute passes in a dummy thread, on its stack, with a NULL thread master. Those shouldn't be added to the unuse list or thread_add_unuse rightly asserts. Fix this very dumb bug. See https://bugzilla.quagga.net/show_bug.cgi?id=975 With thanks to Sergey Popov, admin@pinkbyte.ru, and Andreas Nilsson, andrnils@resilans.se, for help with diagnosis and testing.
  • fed50218de lib: Avoid re-definition of IPPROTO_IP with some versions of Linux * Starting from linux-4.11 [commit bcb41c6bced1ee778d23c53a6b4807fb08cf5540], linux/mroute.h includes linux/in.h , that makes gcc roar a lot of things like "error: redeclaration of enumerator 'IPPROTO_IP'" when compiling quagga-1.2.2 lib/zebra.h includes sys/capability.h first, then includes netinet/in.h . In sys/capability.h, it includes linux/xattr.h, and that includes linux/libc-compat.h . Since at that time netinet/in.h is not included yet, _NETINET_IN_H is not defined, causing libc-compat.h set __UAPI_DEF_IN_IPPROTO to 1. Then, a include of netinet/in.h defines IPPROTO_IP. Later a include of linux/mroute.h includes linux/in.h. Because __UAPI_DEF_IN_IPPROTO is set to non zero, IPPROTO_IP is redeclared. * lib/zebra.h: Move the privs/capabilities include block to after the network block.
  • 472e7083ae release/scripts: Add short subject log location to print out * The short, by subject log is useful too, include its location in summary
  • View comparison for these 15 commits »

1 year ago

paul pushed to master at Quagga/quagga

  • 1f918980c0 lib/thread: Address other paths from thread_execute to thread_add_unuse * lib/thread.c: There are further paths from thread_execute to thread_add_unuse, beyond that from bugzilla bug#975. Make the paths from thread_execute to thread_add_unuse, inc. thread_add_unuse itself, tolerant to the "dummy" threads of thread_execute. Another option would be to have thread_execute properly obtain a thread struct, rather than fake one on its heap. (thread_add_unuse) Be tolerant of NULL master threads passed in, that /ought/ to be dummy/non-heap threads, and just ignore. Don't assert. (thread_call) no point checking for NULL master here anymore. See https://bugzilla.quagga.net/show_bug.cgi?id=977 With thanks to John Hay, john@sanren.ac.za, for testing and verifying the fix.

1 year ago

paul pushed to rd-dns at paul/quagga-test-pub

  • d7028a39bb zebra: make come rtadv function arguments const * rtadv_recv_packet() * rtadv_send_packet() * rtadv_process_solicit() * rtadv_process_packet() * rtadv_prefix_lookup() * rtadv_prefix_get() * rtadv_dns_lifetime_fits() * rtadv_event()
  • a280410ef2 zebra: implement connected prefixes for ND RA Zebra rtadv so far required an explicit "ipv6 nd prefix ..." statement for each IPv6 prefix to be announced through Prefix Information TLVs in ND RA messages. This change adds an option for an automatic mapping of connected IPv6 prefixes into PI TLVs ("ipv6 nd prefix connected-all" et al.) * rtadv.h: add struct rtadv_connprefix, extend struct rtadvconf * rtadv.c * struct rtadv: extend with new fields * rtadv_new(): update to do more initialization * rtadv_cp_enabled(): new helper function * rtadv_append_connprefix_tlvs(): new helper function * rtadv_send_packet(): update to use the helper * rtadv_set_if_cp_none(): new helper function * rtadv_set_if_cp_auto(): new helper function * rtadv_set_if_cp_all(): new helper function * rtadv_set_top_enable_cp(): new helper function * rtadv_parse_connprefix(): new helper function * if_ipv6_nd_prefix_connectedall: new DEFUN * if_ipv6_nd_prefix_connectednone: new DEFUN * if_no_ipv6_nd_prefix_connectedval: new DEFUN * top_ipv6_nd_prefix_connectedall: new DEFUN * top_ipv6_nd_prefix_connectednone: new DEFUN * rtadv_print_connprefix(): new helper function * rtadv_config_write(): update to use the helper * top_rtadv_config_write(): update to use the helper * rtadv_init(): list new commands * rtadv_refresh_connected(): new exported function * rtadv_if_new_hook(): update initialization * connected.c: update connected_withdraw() and connected_announce() to call rtadv_refresh_connected() after connected prefixes list is changed * interface.c: idem for if_delete_update(), ipv6_address_install(), ipv6_address_uninstall(), ipv6_address_uninstall() * doc/ipv6.texi: list new commands By Paul Jakma: * rtadv.h: (struct rtadv.h) Move back to here, more logical. rtadv doesn't need a complete knowledge of rib.h structs, so quite possible.
  • 98a1433242 zebra: refine suppress-ra management The recent "ipv6 nd" improvement did not have suppress-ra parameter reliably coupled between router and interface scopes. Copying router-scope value to interface-scope parameter behaved differently depending on the time of interface creation event. The problem is addressed with a new "default" state for interface-scope suppress-ra parameter and additional code. * interface.c:if_zebra_new_hook(): set ifp->info before calling rtadv_if_new_hook(), not after, otherwise an attempt to iterate over iflist made from the latter will cause a crash * rtadv_ra_enabled(): a new function to replace direct access to interface-scope AdvSendAdvertisements parameter * rtadv_timer(): use rtadv_ra_enabled() * rtadv_process_packet(): idem * rtadv_update_counters(): incremental updates to adv_if_count and adv_msec_if_count become cumbersome since the introduction of "default" state, the new function does it better * ipv6_nd_ra_interval_msec(): update to use the helper * ipv6_nd_ra_interval(): idem * no_ipv6_nd_ra_interval(): idem * top_ipv6_nd_suppress_ra(): idem * top_no_ipv6_nd_suppress_ra(): idem * rtadv_set_if_enable_ra(): new function to manage interface-scope AdvSendAdvertisements and associated multicast/thread tasks * rtadv_set_top_enable_ra(): likewise, for router-scope AdvSendAdvertisements * ipv6_nd_suppress_ra(): update to use the helper * no_ipv6_nd_suppress_ra(): idem * ipv6_nd_suppress_ra_auto(): new DEFUN to set the default mode * rtadv_config_write(): update for the new "on/off/default" semantics * top_rtadv_config_write(): articulate both states of router-scope parameter, don't hide default * rtadv_if_dump_vty() change prototype to allow for a loopback test * rtadv_if_new_hook(): update for the new default state and update counters * doc/ipv6.texi: split RA commands into scopes and update descriptions
  • 8c93a8f4b0 fix merge conflict of: zebra: add "ipv6 nd" configuration node
  • d7f7850e3d zebra: use more help string macros

1 year ago

paul created new branch rd-dns at paul/quagga-test-pub

1 year ago

paul created repository paul/quagga-test-pub

1 year ago

paul pushed tag quagga-1.2.4 to Quagga/quagga

1 year ago

paul pushed to master at Quagga/quagga

  • ddece19766 release: Quagga 1.2.4 Brown paper bag release.
  • 9d7a49f609 lib: Fix assert in thread_add_unuse if thread_execute was used * thread.c: (thread_call) thread_execute passes in a dummy thread, on its stack, with a NULL thread master. Those shouldn't be added to the unuse list or thread_add_unuse rightly asserts. Fix this very dumb bug. See https://bugzilla.quagga.net/show_bug.cgi?id=975 With thanks to Sergey Popov, admin@pinkbyte.ru, and Andreas Nilsson, andrnils@resilans.se, for help with diagnosis and testing.
  • fed50218de lib: Avoid re-definition of IPPROTO_IP with some versions of Linux * Starting from linux-4.11 [commit bcb41c6bced1ee778d23c53a6b4807fb08cf5540], linux/mroute.h includes linux/in.h , that makes gcc roar a lot of things like "error: redeclaration of enumerator 'IPPROTO_IP'" when compiling quagga-1.2.2 lib/zebra.h includes sys/capability.h first, then includes netinet/in.h . In sys/capability.h, it includes linux/xattr.h, and that includes linux/libc-compat.h . Since at that time netinet/in.h is not included yet, _NETINET_IN_H is not defined, causing libc-compat.h set __UAPI_DEF_IN_IPPROTO to 1. Then, a include of netinet/in.h defines IPPROTO_IP. Later a include of linux/mroute.h includes linux/in.h. Because __UAPI_DEF_IN_IPPROTO is set to non zero, IPPROTO_IP is redeclared. * lib/zebra.h: Move the privs/capabilities include block to after the network block.
  • 472e7083ae release/scripts: Add short subject log location to print out * The short, by subject log is useful too, include its location in summary
  • View comparison for these 4 commits »

1 year ago

paul pushed to master at Quagga/quagga

  • 88d6516676 release: Quagga 1.2.3
  • cbffa53cc0 doc/security: Security announcements for 4 issues * doc/security/Quagga-2018-0543.txt: attr_endp used for NOTIFY data * doc/security/Quagga-2018-1114.txt: bgpd double free * doc/security/Quagga-2018-1550.txt: debug overrun in notify lookup tables * doc/security/Quagga-2018-1975.txt: BGP capability inf. loop
  • f080b436bb doc/security: Add a doc/security folder and template for announcements * doc/security: New folder to store Quagga security announcements, where they can be revision controlled. * doc/security/template.txt: Template for announcements
  • 621d8174d4 doc: Add commit message template, suitable for commit.template * doc/commit-template.txt: Add git commit template, that can be enabled via: git config --add commit.template doc/commit-template.txt
  • f1ee20c940 bgpd: remove stream_pnt use for notify data * bgp_packet.c: (bgp_open_receive) Remove the stream_pnt introduced in c69698704806a9ac50. stream_pnt / BGP_INPUT_PNT / etc. should be avoided as much possible, and I/O put through the lib/stream checked buffer as much as possible. Not really any functional effect here given the fixed size, other than to remove something that shouldn't be copied.
  • View comparison for these 44 commits »

1 year ago

paul pushed tag quagga-1.2.3 to Quagga/quagga

1 year ago

paul pushed to next at Quagga/quagga

  • 98bdd04e3f zebra/redistribute: Implicit withdraw needs to be explicit if update isn't sent * redistribute.{c,h}: (redistribute_add) update of redistributed route is an implicit withdraw of the old route. The RIB therefore doesn't bother deleting the old route, if doing a redistribute_add. However, if the updated route is /not/ sent to a client that received the previous route, then such a client is left with bogus state. This can happen when the new route is of a type that the client doesn't redistibute. Fix by passing in the old route, and adding an explicit delete of the old route where necessary. * zebra_rib.c: (rib_process) pass on the old route too, as per above. * redistribute_null.c: testing stub See bug #971 Modification to fix the problem at the redistribute layer instead of the RIB suggested by paul@jakma.org.

1 year ago

paul pushed to next at Quagga/quagga

  • 0bb980bbfb doc: 'match aspath' should be 'match as-path'
  • adda534f95 bgpd: fix SIGBUS There is one test failure in the testsuite on sparc: Running ./bgpd.tests/testbgpcap.exp ... failed: testbgpcap ORF: ORF, simple, single entry, single tuple -- testbgpcap aborted! The error is a SIGBUS in bgp_capability_mp_data() because of an unaligned memory access. Use memcpy() instead of direct assignments. Compilers on platforms that support unaligned accesses should be clever enough to optimize the function call away and do the direct store, so this should not hurt there.
  • View comparison for these 2 commits »

1 year ago

paul pushed to master at Quagga/quagga

  • 4f721a713d Bumped up the version to 1.2.2
  • 7a42b78be9 bgpd: Fix AS_PATH size calculation for long paths If you have an AS_PATH with more entries than what can be written into a single AS_SEGMENT_MAX it needs to be broken up. The code that noticed that the AS_PATH needs to be broken up was not correctly calculating the size of the resulting message. This patch addresses this issue.
  • fceb0cfe45 zebra: Fix to set tag for a static route configured. Fixes bug #955. Removed the installation of vrf specific tag and distance command. Reported by: goodman <gbcbooksmj@gmail.com>
  • 44b486f525 nhrpd: use hop count 1 for registration requests Cisco has a bug that it rejects packets with zero hop count. Use one to avoid potential forwarding of registration requests.
  • 1d00f7e16b nhrpd: add example nhrp event processing script (in lua)

1 year ago

paul created new branch master at Quagga/quagga

1 year ago

paul pushed to next at Quagga/quagga

  • 1db1b9baea bgpd: Fix mistake in NHT of connected IPv6 next-hops preventing route advertisement Since quagga-1.2.0, the Next Hop validation for directly connected peers using IPv6 does not work. In this setup, BGP updates contain two next hops: a global IPv6 address and a link-local IPv6 address (a correct behavior according to RFC 2545). This means that the length of the next hop attribute is 32 and not 16. The problem comes from the function "make_prefix()" in "bgpd/bgp_nht.c". It refuses to build a prefix structure for a route when the length of the [Anext hop attribute is different from 16, even if a valid global IPv6 address is available. The route is mistakenly considered invalid and thus, it is not installed in the routing table. Details: "make_prefix()" was not modified in quagga-1.2.0 but its interpretation was changed in commit 3dda6b3eccb9a2a88d607372c83c04c796e7daac. Before this commit, the failure of "make_prefix()" was interpreted as a successful validation of the next hop.
  • 57fd1a3b23 Updated the protocol supported list
  • View comparison for these 2 commits »

1 year ago

paul created repository Quagga/quagga-savannah-mirror

1 year ago

paul created repository Quagga/quagga-github-mirror

1 year ago

paul pushed to next at Quagga/quagga

  • dcfbf4eb45 lib/command: make config file robust more robust and kinder to system * command.c: (config_write_file) Remove two very heavyweights sync()s and replace with an fdatasync of just the freshly writen config file data. Make the move of the new config into place more robust, by using rename instead of unlink/link. This should fix a performance issue on systems with slow storage, where the syncs were disrupting performance, see bugzilla #966. Should also be more robust. Problem diagnosed and reported by: Patrick Kuijvenhoven <patrick.kuijvenhoven@gmail.com> with an initial fix, on which this commit develops, and further work on testing.
  • 8d49cd5af3 doc: Bring documentation on Zserv header up to date.
  • b720729eab bgpd: distance comment
  • fd52235386 doc: Fix small but important logical mistake in community-list example * bgpd.texi: Comm-lists must match all communities specified. The text to accompany the example however says it is an "or" match, which is wrong and very misleading. Fix.
  • 4d942820a8 doc: document that changing bgp distance needs a hard clear of routes

1 year ago

paul created new branch next at Quagga/quagga

1 year ago

paul deleted branch next at Quagga/quagga

1 year ago