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.