diff options
author | Martin Mares <mj@ucw.cz> | 1999-08-03 21:36:06 +0200 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1999-08-03 21:36:06 +0200 |
commit | dce267832a0468ed5e596f0b0733b926af7ead3a (patch) | |
tree | 76de529a85a81b12bd04ed150db208b76b0b17b1 /conf | |
parent | 707ef833783ef731c56baae1c0dc7b7a9e7321ff (diff) | |
download | bird-dce267832a0468ed5e596f0b0733b926af7ead3a.tar bird-dce267832a0468ed5e596f0b0733b926af7ead3a.zip |
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.
Diffstat (limited to 'conf')
-rw-r--r-- | conf/cf-lex.l | 18 | ||||
-rw-r--r-- | conf/conf.c | 4 | ||||
-rw-r--r-- | conf/confbase.Y | 2 |
3 files changed, 23 insertions, 1 deletions
diff --git a/conf/cf-lex.l b/conf/cf-lex.l index 94c2b2a..21727a9 100644 --- a/conf/cf-lex.l +++ b/conf/cf-lex.l @@ -65,9 +65,25 @@ WHITE [ \t] %% {DIGIT}+\.{DIGIT}+\.{DIGIT}+\.{DIGIT}+ { +#ifdef IPV6 + if (ipv4_pton_u32(yytext, &cf_lval.i32)) + return RTRID; + cf_error("Invalid IPv4 address %s", yytext); +#else if (ip_pton(yytext, &cf_lval.a)) return IPA; - cf_error("Invalid IP address"); + cf_error("Invalid IP address %s", yytext); +#endif +} + +({XIGIT}*::|({XIGIT}*:){3,})({XIGIT}*|{DIGIT}+\.{DIGIT}+\.{DIGIT}+\.{DIGIT}+) { +#ifdef IPV6 + if (ip_pton(yytext, &cf_lval.a)) + return IPA; + cf_error("Invalid IP address %s", yytext); +#else + cf_error("This is an IPv4 router, therefore IPv6 addresses are not supported"); +#endif } 0x{DIGIT}+ { diff --git a/conf/conf.c b/conf/conf.c index 0ce593c..d9bf9d8 100644 --- a/conf/conf.c +++ b/conf/conf.c @@ -54,6 +54,10 @@ config_parse(struct config *c) cf_parse(); filters_postconfig(); /* FIXME: Do we really need this? */ protos_postconfig(c); +#ifdef IPV6 + if (!c->router_id) + cf_error("Router ID must be configured manually on IPv6 routers"); +#endif return 1; } diff --git a/conf/confbase.Y b/conf/confbase.Y index f9293a4..a6eb876 100644 --- a/conf/confbase.Y +++ b/conf/confbase.Y @@ -22,6 +22,7 @@ CF_DECLS %union { int i; + u32 i32; ip_addr a; struct symbol *s; char *t; @@ -35,6 +36,7 @@ CF_DECLS %token END %token <i> NUM +%token <i32> RTRID %token <a> IPA %token <s> SYM %token <t> TEXT |