mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
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.
This commit is contained in:
@@ -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}+ {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user