Commit graph

234 commits

Author SHA1 Message Date
Ondrej Zajicek
60fd666b79 Fixes missing header. 2011-11-10 09:22:38 +01:00
Ondrej Zajicek
a7f23f581f Implements protocol templates.
Based on the patch from Alexander V. Chernikov.
Extended to support almost all protocols.
Uses 'protocol bgp NAME from TEMPLATE { ... }' syntax.
2011-11-07 00:31:23 +01:00
Ondrej Zajicek
9b7fdfc84a Fixes for include. 2011-10-10 01:41:08 +02:00
Ondrej Filip
48ec367aab Configuration can include other files. 2011-09-11 21:21:47 +02:00
Ondrej Zajicek
b8cc390e7e Fixes several problems in filter syntax.
- Fixes several conflicts in the grammar.
 - Fixes a bug in (a..b, c) pair patterns.
 - Makes pair patterns orthogonal.
 - Allows term expressions in pair patterns without additional ( ).
 - Allows several comma separated values in switch cases.
2011-05-06 22:00:54 +02:00
Ondrej Zajicek
26d92bb892 A hack to distinguish if..else from else: in case.
The old BIRD grammar needs two lookaheads to distinguish if..else from
else: in case, which caused the parser to fail on some combinations of
both expressions.

This patch replaces two tokens 'else' ':' by one token 'else:' to fix
that.
2011-03-23 12:49:53 +01:00
Ondrej Zajicek
93e868c730 Implements Router Advertisement protocol. 2011-03-13 11:33:50 +01:00
Ondrej Zajicek
112d71a73f Fixes syntactic priority of '.' .
Dot in expressions like net.len definitely should have the highhest
priority.
2010-10-08 14:25:53 +02:00
Ondrej Zajicek
506fa1a73e Merge several fixes suggested by Joakim Tjernlund. 2010-05-02 22:41:40 +02:00
Ondrej Zajicek
44d4ab7a96 Configurable syslog name.
Also fixes a bug in syslog initialization.
2010-04-07 15:34:45 +02:00
Ondrej Zajicek
97e46d28ff 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.
- Fixes socket name path check and other error handling in CLI init.
2010-03-17 12:19:22 +01:00
Ondrej Zajicek
e81b440f68 Fix configure to enable warnings and fix most of them. 2010-02-21 14:34:53 +01:00
Ondrej Zajicek
e304fd4bcf Implements pattern match for 'show protocols' command.
And generally consolidates protocol commands.
2010-02-20 00:08:07 +01:00
Ondrej Filip
0efd646278 Define symbols as text between ''. 2010-02-10 12:30:14 +01:00
Ondrej Zajicek
76b53a4e20 Adds some log messages related to configure.
Also fixes a bug in the previous patch.
2010-02-06 22:57:51 +01:00
Ondrej Zajicek
c37e78510f Makes date/time formats configurable. 2010-02-03 00:19:24 +01:00
Ondrej Filip
1960d20350 Priority for '||' and '&&' fixed. 2010-01-27 23:45:36 +01:00
Ondrej Filip
7515dafc00 Allow multiple || and && statements. 2010-01-27 22:26:45 +01:00
Ondrej Zajicek
cf31112f0d Implements MRTdump feature. 2010-01-03 12:17:52 +01:00
Ondrej Zajicek
e75d3c74a8 Flex does not need the output of Bison. 2009-08-10 14:36:30 +02:00
Ondrej Zajicek
ea9097eaad Fixes parallel runs of Bison.
Previous version of Makefile executed Bison two times (in parallel),
because of two specified targets. I am not sure wheter this is the best
fix.

Previon
2009-08-10 14:13:28 +02:00
Ondrej Zajicek
5b1f877e6e Fixes typo in Makefile 2009-08-10 12:04:25 +02:00
Ondrej Filip
0ac39033c7 Missing dependency added. 2009-08-09 19:43:15 +02:00
Ondrej Zajicek
d72cdff411 Replace 'bind' option with 'listen' option.
To be consistent with other daemons.
2009-06-23 11:08:30 +02:00
Ondrej Zajicek
bf1aec970e Adds support for soft reconfiguration. 2009-06-19 23:49:34 +02:00
Ondrej Zajicek
789772ed45 Implements option that changes BGP listening socket parametres. 2009-06-18 19:20:07 +02:00
Ondrej Zajicek
874b868544 Implements primary address selection base on 'primary' option. 2009-05-29 22:49:30 +02:00
Ondrej Zajicek
b1a597e0c3 Reimplementation of prefix sets.
Prefix sets were broken beyond any repair and have to be reimplemented.
They are reimplemented using a trie with bitmasks in nodes.
There is also change in the interpretation of minus prefix pattern,
but the old interpretation was already inconsistent with
the documentation and broken.

There is also some bugfixes in filter code related to set variables.
2009-03-31 12:55:57 +02:00
Ondrej Zajicek
cf18603491 New syntax for bgp_path 2009-03-14 12:43:10 +01:00
Ondrej Zajicek
f949163039 New syntax for bgp_path 2009-01-27 17:35:00 +01:00
Ondrej Zajicek
083c43e22e fixes some 64-bit related bugs.
Filter code used 'aux' integer field of 'symbol' struct to store ptr
to next symbol and both 'aux2' and 'def' fields for value.
Changed to just 'def' for value and 'aux2' for ptr to next symbol.
Also another minor bugfix.
2008-12-25 11:55:27 +01:00
Ondrej Zajicek
1567edea8d Bugfix for routing table breaking bug.
Here is a patch fixing a bug that causes breakage of a local routing
table during shutdown of Bird. The problem was caused by shutdown
of 'device' protocol before shutdown of 'kernel' protocol.  When
'device' protocol went down, the route (with local network prefix)
From different protocol (BGP or OSPF) became preferred and installed
to the kernel routing table. Such routes were broken (like
192.168.1.0/24 via 192.168.1.2). I think it is also the cause
of problem reported by Martin Kraus.

The patch disables updating of kernel routing table during shutdown of
Bird. I am not sure whether this is the best way to fix it, I would
prefer to forbid 'kernel' protocol to overwrite routes with
'proto kernel'.

The patch also fixes a problem that during shutdown sometimes routes
created by Bird remained in the kernel routing table.
2008-10-26 23:09:46 +01:00
Ondrej Filip
a456788bce New version of flex needs argument separated. 2007-06-20 12:32:39 +00:00
Ondrej Filip
0d3effcf8c Time added in password management. 2005-02-12 22:27:55 +00:00
Martin Mares
7c103b1ee1 Marked unused parameters in core code as such. 2004-06-05 09:10:56 +00:00
Martin Mares
725270cb1d Fixes for the programmer's manual. 2000-06-08 12:37:21 +00:00
Martin Mares
58f7d004fd Fixes to the progdoc. 2000-06-07 13:25:53 +00:00
Martin Mares
2e9b24211a Spelling fixes to progdoc. 2000-06-07 12:29:08 +00:00
Martin Mares
04dc62a011 Nested scopes could never have worked. My fault I wrote such a buggy code,
Pavel's fault that he's never tested shadowing of declarations in the filters.

cf_define_symbol() has been modified to check the scope of the symbol it's
given and it if it's an already defined symbol, but in a different scope,
a copy is created in the current scope and redefined to the new meaning,
the consequence being that it cf_define_symbol() now returns the new symbol
you need to use when assigning aux and aux2.
2000-06-04 19:30:13 +00:00
Martin Mares
58f9453776 Moved parser docs to cf-lex.l, so that the parser compiles. 2000-06-04 15:22:20 +00:00
Martin Mares
06607335ef Documentation. 2000-06-03 18:23:00 +00:00
Martin Mares
c0b2f6463f cf_symbol_class_name now recognizes SYM_IPA. 2000-06-03 16:56:00 +00:00
Pavel Machek
5f4aee76a2 Added && and ||. 2000-06-01 08:43:29 +00:00
Martin Mares
fcb5f4a725 Updated all the Doc files to new format. 2000-05-31 11:30:18 +00:00
Martin Mares
69a20d2eff Recognize `!'. 2000-05-30 21:46:21 +00:00
Martin Mares
4761efdb43 Tracing of CLI connections/commands can be now controlled
by `debug commands <level>' in the configuration. Level 0 means
no tracing, 1 means connections only, 2 includes all commands.
2000-05-29 22:10:18 +00:00
Pavel Machek
9a09a64bb4 Use ? in path matching to avoid /* trap. 2000-05-25 14:58:38 +00:00
Pavel Machek
60de3356ab Resolved shift/reduce conflict 2000-05-16 14:24:33 +00:00
Martin Mares
cc590a11a7 Changed syntax of expressions. Each `expr' can be now either a numeric literal
or a symbol or parenthesised filter expression.
2000-05-15 12:15:18 +00:00
Martin Mares
e3f2d5fce3 Cleanup of configuration.
o  Use `expr' instead of `NUM' and `ipa' instead of `IPA',
   so that defined symbols work everywhere.
o  `define' now accepts both numbers and IP addresses.
o  Renamed `ipa' in filters to `fipa'.

Pavel, please update filters to accept define'd symbols as well.
2000-05-15 11:48:23 +00:00
Martin Mares
3b1c523d79 Got rid of startup functions and filters_postconfig().
By the way, how do you expect pointers to fit in an int?
2000-05-15 10:53:56 +00:00
Martin Mares
d3abfbc68d Added prefix_or_ipa. 2000-05-13 11:41:26 +00:00
Martin Mares
758458be05 Unified parsing of prefixes.
Had to rename `prefix' in filters to `fprefix'.
2000-05-13 11:17:49 +00:00
Martin Mares
ab1129c1bd Added skeleton Doc files for the whole developer's documentation. 2000-05-05 17:17:42 +00:00
Martin Mares
6db8c5a63b pxlen works even in IPv6 mode. 2000-05-04 20:02:19 +00:00
Martin Mares
a412f01ea8 Include CF_HDR section in keywords.h as well, so that protocol symbols
can be used in definition of ENUM's.
2000-04-28 15:12:03 +00:00
Martin Mares
2edb31b097 Split CF_HDR section to CF_HDR (only includes) and CF_DEFINES (defines,
C declarations etc.).
2000-04-28 15:11:10 +00:00
Martin Mares
8f6accb5bb Event handlers no longer return re-queue flag. Instead of using it, just
call ev_schedule() on the same handler which should work perfectly now.
2000-04-27 22:28:49 +00:00
Pavel Machek
dcab789047 Renamed f_path to f_path_mask -- which is what it really is. Use
linklist instead of array of signed integers for path mask.
2000-04-12 13:07:53 +00:00
Pavel Machek
c3edb89ec1 Path masks are needed for filters. 2000-04-12 12:49:53 +00:00
Martin Mares
221135d6bf Include "lib/string.h" instead of <string.h>. It should give us bzero()
and other non-portable functions on all systems.
2000-03-31 23:30:21 +00:00
Martin Mares
abf2be7d0c Add internal commands of the client to the command list. 2000-03-12 23:04:04 +00:00
Martin Mares
4327090276 Made `show status' show uptime and time of last reconfiguration. 2000-03-12 22:44:54 +00:00
Martin Mares
6b9fa32080 Great cleanup of debug messages. LOCAL_DEBUG turned off in most modules,
several debug() calls converted to DBG().
2000-03-12 21:01:38 +00:00
Pavel Machek
c8d5ffafb7 Fix <=, >=, != 2000-03-10 20:21:12 +00:00
Martin Mares
f30b86f9d5 Added configuration of default protocol debugging flags. 2000-03-07 21:50:03 +00:00
Martin Mares
16c07e3d51 Removed bogus comment. 2000-03-04 21:27:57 +00:00
Martin Mares
a58dad6238 Please *think* when defining operator priorities.
(-: num_of_parser_conflicts -= 42 :-)
2000-03-04 21:19:10 +00:00
Martin Mares
aee539f241 Made `datetime' more user friendly. Now it should be a quoted string
of type "dd-mm-yyyy".
2000-03-01 11:42:13 +00:00
Martin Mares
2ca3d9a8fc Defined INVALID_TOKEN which is a token guaranteed to be never generated. 2000-03-01 11:30:16 +00:00
Martin Mares
0223d4fff1 Client: Online help works (Cisco style: just press `?' at the end of a line). 2000-02-17 22:00:13 +00:00
Martin Mares
f50b9e48b9 Generate a list of all commands and their help texts for the client to use. 2000-01-19 14:37:56 +00:00
Martin Mares
4b87e256eb Split off general commands to cmds.c.
Added `show symbols' command which dumps whole symbol table together
with symbol types etc.
2000-01-19 12:30:19 +00:00
Martin Mares
d272fe22dd Separated `official protocol names' used in status dumps from name templates
used for automatic generation of instance names.

	protocol->name is the official name
	protocol->template is the name template (usually "name%d"),
		should be all lowercase.

Updated all protocols to define the templates, checked that their configuration
grammar includes proto_name which generates the name and interns it in the
symbol table.
2000-01-17 11:52:50 +00:00
Martin Mares
ca0edc5395 When a quoted string is encountered, don't forget to copy it to the
config pool before passing it to the parser.
2000-01-16 23:36:53 +00:00
Martin Mares
bf8558bc9c Converted shutdown to a kind of reconfiguration, it's no more handled
as a exception in protocol state machines. Introduced a `shutdown'
CLI command. Killed few reconfiguration bugs.
2000-01-16 17:40:26 +00:00
Martin Mares
50fe90edf3 First attempt on dynamic reconfiguration. There are still lots of bugs
and problems to solve, but the hardest part works.
2000-01-16 16:44:50 +00:00
Martin Mares
4ab5331c63 Added type `g' for void (general) pointer. 1999-12-06 13:50:50 +00:00
Martin Mares
7c0cc76ed7 Moved initialization of protocol list to proto.c.
Added sysdep configuration hooks.
1999-12-06 13:44:45 +00:00
Martin Mares
f2c6c80a24 I tried to turn on the YYERROR_VERBOSE switch, but bison is buggy as hell,
so it doesn't even compile. Turned it again off and added a comment on it.
1999-12-02 14:03:25 +00:00
Martin Mares
efe51e3863 Avoid `default rule can be matched' warning in CLI state. 1999-12-02 12:04:39 +00:00
Martin Mares
730f2e2c8c Added dumping of routing tables (`show route'). This includes filtering. 1999-12-01 15:10:21 +00:00
Martin Mares
c9aae7f47f Lexer supports fallback symbol tables and uses them to recognize
symbols from global config when parsing CLI commands.

cf_lex_init_tables() is now called automatically inside the lexer.
1999-11-30 14:03:36 +00:00
Martin Mares
3579376927 cli_msg() moved to cli.h, so that it can be used outside the parser. 1999-11-25 15:34:51 +00:00
Martin Mares
ffb59d243a Command line interface now works. 1999-11-17 12:00:21 +00:00
Martin Mares
944f008af7 Defined CF_ENUM. 1999-11-15 11:35:41 +00:00
Martin Mares
cbc3183007 SYM_STAT is gone. 1999-11-15 11:34:51 +00:00
Pavel Machek
f453665704 Enumerational types, defined keyword added. 1999-11-10 12:44:07 +00:00
Martin Mares
df8b85e33f Silly bug. 1999-11-04 13:53:47 +00:00
Martin Mares
c8f61a01ea Symbols are not scoped. 1999-11-04 13:51:52 +00:00
Pavel Machek
e5005be2b4 You should not follow next two times. 1999-11-03 22:21:26 +00:00
Martin Mares
bc2fb68098 Parse CLI commands. We use the same parser as for configuration files (because
we want to allow filter and similar complex constructs to be used in commands
and we should avoid code duplication), only with CLI_MARKER token prepended
before the whole input.

Defined macro CF_CLI(cmd, args, help) for defining CLI commands in .Y files.
The first argument specifies the command itself, the remaining two arguments
are copied to the help file (er, will be copied after the help file starts
to exist). This macro automatically creates a skeleton rule for the command,
you only need to append arguments as in:

	CF_CLI(STEAL MONEY, <$>, [[Steal <$> US dollars or equivalent in any other currency]]): NUM {
		cli_msg(0, "%d$ stolen", $3);
	} ;

Also don't forget to reset lexer state between inputs.
1999-10-31 17:47:47 +00:00
Pavel Machek
41be4444f2 switch() { } done right. 1999-10-28 21:03:36 +00:00
Martin Mares
dce267832a Basic support for IPv6. The system-dependent part doesn't work yet,
but the core routines are there and seem to be working.

   o  lib/ipv6.[ch] written
   o  Lexical analyser recognizes IPv6 addresses and when in IPv6
      mode, treats pure IPv4 addresses as router IDs.
   o  Router ID must be configured manually on IPv6 systems.
   o  Added SCOPE_ORGANIZATION for org-scoped IPv6 multicasts.
   o  Fixed few places where ipa_(hton|ntoh) was called as a function
      returning converted address.
1999-08-03 19:36:06 +00:00
Pavel Machek
6542ece91a Function calling in filters works - somehow. Calling syntax is
currently very ugly, beware. Variables are not really local - that
needs to be fixed.
1999-07-01 09:11:21 +00:00
Pavel Machek
9d79fec8dc Added notion of datetime 1999-05-26 14:24:32 +00:00
Martin Mares
0e02abfd57 From now we support multiple tables. The master_table variable is
definitely gone. Both rte_update() and rte_discard() have an additional
argument telling which table should they modify.

Also, rte_update() no longer walks the whole protocol list -- each table
has a list of all protocols connected to this table and having the
rt_notify hook set. Each protocol can also freely decide (by calling
proto_add_announce_hook) to connect to any other table, but it will
be probably used only by the table-to-table protocol.

The default debugging dumps now include all routing tables and also
all their connections.
1999-05-17 20:14:52 +00:00
Martin Mares
4107df1d1b Implemented two new symbol handling functions:
o  cf_define_symbol() -- it assigns a meaning to a symbol, bailing
     out if it already has one.
  o  cf_find_symbol() -- finds symbol by name and creates it if not found.

Also modified filter/config.Y to make use of the first function.
1999-05-17 20:06:19 +00:00
Pavel Machek
36bbfc704c Updated filters: they now actually see IP/pxlen of net being filtered,
gateway, and who told us, so they can do usefull jobs from now on.
1999-04-19 18:41:56 +00:00
Pavel Machek
38506f71b0 Sets of integers now actually work. Sets of IP will work as soon as
compare function is ready.
1999-04-12 19:58:18 +00:00
Pavel Machek
23b1539bf9 Filters upgraded - a bit. Moved code to filter.c because it is where
it belongs. (f-util.c stays there for auxiliary and non-important things.)
1999-04-07 12:11:08 +00:00
Martin Mares
d4ff748224 Use a more reasonable pool chunk size: 4080 bytes seem to be a good
approximation of a integral fraction of page size even if both malloc
overhead and chunk header space is counted.
1999-04-05 20:06:02 +00:00
Pavel Machek
ba92164871 Update of filters towards new interface. 1999-03-29 20:21:28 +00:00
Martin Mares
7f400d1c62 After today's lengthy discussions about filter syntax, let's clean up
whitespace/semicolon rules for whole config file:

   o  All non-zero amounts of whitespace are equivalent to single space
      (aka `all the whitespace has been born equal' ;-)).
   o  Comments count as whitespace.
   o  Whitespace has no syntactic signifance (it can only separate lexical
      elements).
   o  Consequence: line ends are no longer treated as `;'s.
   o  Every declaration must be terminated by an explicit `;' unless
      or by a group enclosed in `{' and `}'.
1999-03-29 19:04:14 +00:00
Martin Mares
4ba84ebc82 Slightly better generator of default protocol instance names. 1999-03-26 21:37:29 +00:00
Martin Mares
e0f2e42f4f A couple of filter tweaks:
o  Introduced struct filter which serves as an external reference
      to filter. Using struct symbol for this is unwise since it doesn't
      allow extra information attached to the filter and it also forces
      all filters to be named.
   o  Implemented config rule 'filter' which matches either named filter
      or an embedded unnamed filter (`{ <filter> }').
   o  Fixed totally bogus comment at the top of filter.h.
   o  Added a missing prototype for f_run() to filter.h.
1999-03-17 14:29:39 +00:00
Pavel Machek
1aa5cf1c61 Added '=' to operator list 1999-03-09 14:44:43 +00:00
Pavel Machek
b700582445 Filters are now a tiny bit stronger (if is actually working ;-) 1999-03-08 20:30:06 +00:00
Pavel Machek
3d8ef0c9ef I just don't like files enclosed in <>. 1999-03-02 13:15:35 +00:00
Martin Mares
726141746b '#' comments in config files are equivalent to end of line, therefore
also to implicit ';'.
1999-02-13 21:34:33 +00:00
Martin Mares
4e9498cbb1 config->router_id works again. 1999-02-13 18:42:00 +00:00
Martin Mares
31b3e1bbf5 Implemented new configuration/reconfiguration interface and defined protocol
state machines. Full explanation will follow soon.
1999-02-05 21:37:34 +00:00
Martin Mares
c9b6670608 Original expr' is back, filter expressions renamed to term'.
In the future, we'll allow any filter term in place of `expr' and we'll
just evaluate it immediately, but not now as we have no evaluation
routines.
1999-01-15 18:04:28 +00:00
Martin Mares
e3a39a9ee7 Killed duplicate %type for expr. 1999-01-15 16:59:26 +00:00
Pavel Machek
b9d70dc84e Filters, second try. This time they have their own directory. 1999-01-15 16:49:17 +00:00
Pavel Machek
489b6b5e00 #if 1 that creeped into cvs killed. 1999-01-15 16:13:51 +00:00
Pavel Machek
72380a3447 Filters added. They are unable to do anything interesting for now
(with exception of printing integers to screen), but they exist.
1999-01-15 14:41:51 +00:00
Martin Mares
49e7e5ee0b New makefiles. Includes support for out-of-source-tree builds. 1999-01-10 00:18:32 +00:00
Martin Mares
89d2355d3d Added new rule for prefix length / netmask. 1998-12-06 23:10:45 +00:00
Martin Mares
cc12cf05c7 cf_error() now accepts any format strings instead of just an error
message. Also added extra kludge to get rid of collisions of REJECT
symbols.
1998-12-06 23:10:28 +00:00
Martin Mares
0846203e89 Fixed bug in CF_ADDTO. How it's possible it has ever worked? 1998-12-06 17:39:08 +00:00
Martin Mares
166b9c4912 Added rule "bool" for boolean switches. 1998-12-06 17:38:42 +00:00
Martin Mares
b35d72ac66 Name cleanups as suggested by Pavel:
- cfg_strcpy() -> cfg_strdup()
- mempool -> linpool, mp_* -> lp_*  [to avoid confusion with memblock, mb_*]

Anyway, it might be better to stop ranting about names and do some *real* work.
1998-12-06 11:59:18 +00:00
Martin Mares
50d8424ad1 Added configuration of the device internal protocol. This is primarily
intended to serve as an example of interface pattern list use. As a side
effect, you can disable generating of device routes by disabling
this protocol.
1998-11-29 22:03:58 +00:00
Martin Mares
49e4a4d1fd Created new functions for allocating configuration data:
o  cfg_alloc(size) -- generic memory allocation
   o  cfg_allocu(size) -- unaligned memory allocation
   o  cfg_allocz(size) -- zeroed memory allocation
   o  cfg_strcpy(str) -- allocate a copy of a string

Also fixed a bug in lexing of string literals.
1998-11-29 21:59:37 +00:00
Martin Mares
0b62c3a7c7 Trivial 15-line bison excercise: Implemented expressions including
user-defined numeric symbols. Whenever possible, use `expr' instead
of `NUM' to get full express ion power :-)
1998-11-27 21:32:45 +00:00
Martin Mares
c74c0e3cdf First attempt at protocol configuration (now done only for RIP). 1998-11-27 21:09:57 +00:00
Martin Mares
8450be97d6 Added generator of default names. 1998-11-27 21:07:02 +00:00
Martin Mares
70591fa064 Compile and use the new configuration code by default. 1998-11-27 19:37:07 +00:00
Martin Mares
f142750d34 Base of the parser. 1998-11-27 19:36:06 +00:00
Martin Mares
82fc7be7bb Lexical analyser. 1998-11-27 19:35:50 +00:00
Martin Mares
fe7cec12e8 Replaced nest/confile.h by conf/conf.h, added a lot of new definitions. 1998-11-27 19:35:10 +00:00
Martin Mares
ce6ca80926 This script takes configuration fragments and generates full Bison grammar
from them.
1998-11-27 19:33:53 +00:00
Martin Mares
882c588a40 This script takes configuration fragments and extracts keyword list
from them.
1998-11-27 19:33:26 +00:00