Minor code cleanups
Build: switch on -Wextra, get rid of most of the warnings
There are several unresolved -Wmissing-field-initializers on olderversions of GCC than 5.1, all of them false positive.
Main: Improve BIRD help messages
Main: Add local option
Add option that changes default paths for config file and control socketto the current working directory.
IO: Replace RX priority heuristic with explicit mark
In BIRD, RX has lower priority than TX with the exception of RX fromcontrol socket. The patch replaces heuristic based on socket type withexplicit mark and uses it for both control socket and BGP session waiting...
Conf: Fixes bug in symbol lookup during reconfiguration
Symbol lookup by cf_find_symbol() not only did the lookup but also addednew void symbols allocated from cfg_mem linpool, which gets broken whenlookups are done outside of config parsing, which may lead to crashes...
unsigned [int] -> uint
Implement latency tracking, internal event log and watchdog
IPv4/IPv6 integrated socket code.
BGP graceful restart support.
Also significant core protocol state changes needed for that,global graceful restart recovery state and kernel proto supportfor recovery.
Workaround thread-unsafeness of cli_echo().
Merge commit 'origin/bfd'
Flag -f "run in foreground" added as requested by a package maintainter.
Fixes some BFD bugs and makes logging thread-safe.
Implements PID file support.
Thanks to Thierry Fournier for the original patch.
Allows to define constants of all filter types.
Implements undo command and optional timeout for configuration
Several new configure command variants:
configure undo - undo last reconfigurationconfigure timeout - configure with scheduled undo if not confirmed in timeoutconfigure confirm - confirm last configuration...
Implements wildcard matching in config file include.
Also fixes some minor bugs in include.
Thanks Kelly Cochran for suggestion and draft patch.
Implements build options to specify socket dir and suffix.
Small bugfix in error message related to reconfiguration.
Adds krt_source route attribute.
Thanks Jeremie Dimino for the original patch.
Fixes problem with dirname().
Thanks Henrique de Moraes Holschuh for the original patch.
Route Origin Authorization basics.
- ROA tables, which are used as a basic part for RPKI. - Commands for examining and modifying ROA tables. - Filter operators based on ROA tables consistent with RFC 6483.
Fixes for include.
Configuration can include other files.
The generalized TTL security mechanism (RFC 5082) support.
Thanks to Alexander V. Chernikov for the patch.
Update and document the privilege restriction.
Allows run with restricted privileges.
Adds option -u and -g to specify user and group.When different user (than root) is specified,linux capabilities CAP_NET_* are kept.
Use constants from /etc/iproute2/rt_* files.
Configurable syslog name.
Also fixes a bug in syslog initialization.
Adds check for no protocol and some minor CLI fixes.
- Adds check to deny config file with no specified protocol to prevent loading of empty config file.- Moves CLI init before config parse to receive immediate error message when cannot open control socket....
Restricted read-only CLI.
Also adds support for executing commands using birdc <cmd>.
Adds some log messages related to configure.
Also fixes a bug in the previous patch.
Fix -p option.
Implement option to exit after config file parsing.
After shutdown, BIRD should have exit code 0.
Fixes BIRD socket unlink.
Fixes bug in CLI TX buffer management.
Adds support for soft reconfiguration.
Close fd of config file after reconfiguration.
Detach from the TTY properly.
Test old instance of BIRD.
Marked unused parameters in sysdep code as such.
Deleted useless rfree. (Socked was freed by cli_free())
Move CLI socket to the newly created CLI's pool.
(thanks to Andreas for the original idea)
Rewritten the I/O loop. All socket operations are now safe, meaning thatyou can delete the socket from anywhere in the hooks and nothing should break.Also, the receive/transmit buffers are now regular xmalloc()'ed buffers,not separate resources which would need shuffling around between pools....
Fix handling on full pipe to client in bird. Prevent packet overflowsfor even only medium sized route table output. Fix a strange garbledoutput problem in the client. The latter seems to be caused by somelibrary doing tcflush while there is still command output pending. So...
*BSD port added. (Tested on FreeBSD and NetBSD)
If compiled with --enable-debug, don't even try to log to syslog unlessthe user forces it in the config file.
During initialization, log to both syslog and stderr. When a configurationfile has been read and it doesn't specify any logging, log to syslog only(if syslog is not available, then stderr).
Tracing of CLI connections/commands can be now controlledby `debug commands <level>' in the configuration. Level 0 meansno tracing, 1 means connections only, 2 includes all commands.
Support --version and --help.
Fixed type in daemonization code.
When not debugging, daemonize automatically.
#ifdef out lots of debugging information.
The long resource/routing table dump printed upon startup is gone nowand if you wish to see it, just send bird SIGUSR1 or use the `debug'commands.
Fixed a couple of nasty CLI bugs which were triggered on long or multi-partoutputs. It took a whole evening to hunt them down, but now the CLI seemsto work fine.
Now I run three BGP connections with several thousand routes!
Changed handling of incoming connections, so that we can send datafrom the send hook without worrying about existence of socket buffers.
Also, don't forget to copy peer addresses.
Changed initialization of protocol list -- now we call proto_build() insteadof calling the protocols manually.
Implemented printing of dynamic attributes in `show route all'.
Each protocol can now register its own attribute class (protocol->attr_class,...
Include "lib/string.h" instead of <string.h>. It should give us bzero()and other non-portable functions on all systems.
Defined sk_close() which closes the socket safely even if called fromsocket hook. Replaces the SK_DELETED hack.
Squashed a couple of bugs in handling of TCP sockets.
Fixed a bunch of FIXME's by removing them :)
Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,several debug() calls converted to DBG.
Converted shutdown to a kind of reconfiguration, it's no more handledas a exception in protocol state machines. Introduced a `shutdown'CLI command. Killed few reconfiguration bugs.
First attempt on dynamic reconfiguration. There are still lots of bugsand problems to solve, but the hardest part works.
Added universal locking mechanism which will solve problemswith protocols wanting to use the same port on the same interfaceduring reconfiguration time.
How to use locks: In the if_notify hook, just order locks for theinterfaces you want to work with and do the real socket opening after the...
- Path to control socket is selectable via command-line option.- die() when control socket open failed.
Logging is now configurable. You can define multiple log outputs (to bothfiles and syslog) and assign lists of message categories to each of them.
The CLI I/O functions work as desired.
First steps of the Command Line Interface: I/O routines.
Believe it or not, printf()'s does not work too much without this one.
Clarify resource dumps and include them in the main debugging dump.
Moved to a much more systematic way of configuring kernel protocols.
o Nothing is configured automatically. You need to specify the kernel syncer in config file in order to get it started. o Syncing has been split to route syncer (protocol "Kernel") and...
Use dmalloc instead of EFence when available (dmalloc has lot of improvementsover EFence and also hopefully smaller memory overhead, but sadly it's non-freefor commercial use).
If the DMALLOC_OPTIONS environment variable is not set, switch on `reasonable'...
Rewrote the kernel syncer. The old layering was horrible.
The new kernel syncer is cleanly split between generic UNIX moduleand OS dependent submodules:
- krt.c (the generic part) - krt-iface (low-level functions for interface handling) - krt-scan (low-level functions for routing table scanning)...
Perform gracious shutdown upon receipt of SIGTERM. Finally we cantest the whole protocol shutdown code... :)
Synchronize signals to the main select/event/timer loop.
Parse command line options.
Run the event queue before writing SIGUSR dumps.
Implemented new configuration/reconfiguration interface and defined protocolstate machines. Full explanation will follow soon.
filters_init() renamed to filters_postconfig().
Filters, second try. This time they have their own directory.
Properly initialize filters. Also bumped version to 0.0.0 as itactually does something.
die() -> bug() where appropriate.
Kernel syncer is now configurable. It will probably need some moreoptions, but at least basic tuning is possible now.
First attempt at protocol configuration (now done only for RIP).
Compile and use the new configuration code by default.
Generate router_id automatically if possible (standard "smallest of localregular interface addresses" rule).
Protocols should NOT rely on router_id existence -- when router ID is notavailable, the router_id variable is set to zero and protocols requiring...
Since almost every UNIX system requires different techniques for readingthe kernel routing table as opposed to modifying it which is approximatelythe same on non-netlink systems, I've split the kernel routing tableroutines to read and write parts. To be implemented later ;-)
Split protocol init to building of protocol list and real protocol init.Added kernel route table syncer skeleton.
Solve chicken-and-egg problems with protocol startup. We now queue all inactiveprotocols and don't send route/interface updates to them and when they come up,we resend the whole route/interface tables privately.
Removed the "scan interface list after protocol start" work-around.
Moved scanning of interfaces, so that they get initialized after allrouting protocol instances.
Making SIGUSR1 dump also all protocols.
Killed socket debug code. Initialize config pool and protocols.More to come later...
Synced to new interface code.
Implemented scanning of network interfaces. Mostly very ugly code due toterrible kernel interface (SIOGIFCONF and friends).
Added UNIX implementation of both timers and sockets. Timers should work,sockets were tested only in TCP mode. main.c now contains some testcases for socket code.
Added routing table and routing attribute code.
The library is now glued together from generic and OS-dependent partsby the `mergedirs' script. Few more IP address manipulation functionsand some fixes.