mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
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.
This commit is contained in:
parent
f7fcb75252
commit
d272fe22dd
3
TODO
3
TODO
@ -26,9 +26,7 @@ Core
|
|||||||
- config: executable config files
|
- config: executable config files
|
||||||
- config: when parsing prefix, check zero bits
|
- config: when parsing prefix, check zero bits
|
||||||
- config: useless rules when protocols disabled
|
- config: useless rules when protocols disabled
|
||||||
- config: remove protocol startup priority hacks?
|
|
||||||
- config: better datetime format
|
- config: better datetime format
|
||||||
- config: avoid upper case in default protocol names
|
|
||||||
|
|
||||||
- krt: rescan interfaces when route addition fails?
|
- krt: rescan interfaces when route addition fails?
|
||||||
- krt: does PERSIST mode have any sense if kernel syncer is shut down as last?
|
- krt: does PERSIST mode have any sense if kernel syncer is shut down as last?
|
||||||
@ -79,6 +77,7 @@ Cleanup
|
|||||||
- does everybody test return value of sk_open?
|
- does everybody test return value of sk_open?
|
||||||
- add references to RFC's we did follow
|
- add references to RFC's we did follow
|
||||||
- protocols: implement CLI hooks
|
- protocols: implement CLI hooks
|
||||||
|
- protocols: implement reconfigure hook
|
||||||
- protocols: use locking
|
- protocols: use locking
|
||||||
|
|
||||||
Various ideas
|
Various ideas
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BIRD -- Configuration Lexer
|
* BIRD -- Configuration Lexer
|
||||||
*
|
*
|
||||||
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
@ -19,6 +19,7 @@
|
|||||||
#include "filter/filter.h"
|
#include "filter/filter.h"
|
||||||
#include "conf/conf.h"
|
#include "conf/conf.h"
|
||||||
#include "conf/cf-parse.tab.h"
|
#include "conf/cf-parse.tab.h"
|
||||||
|
#include "lib/string.h"
|
||||||
|
|
||||||
static struct keyword {
|
static struct keyword {
|
||||||
byte *name;
|
byte *name;
|
||||||
@ -231,19 +232,24 @@ cf_find_symbol(byte *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct symbol *
|
struct symbol *
|
||||||
cf_default_name(char *prefix, int *counter)
|
cf_default_name(char *template, int *counter)
|
||||||
{
|
{
|
||||||
char buf[32];
|
char buf[32];
|
||||||
struct symbol *s;
|
struct symbol *s;
|
||||||
|
char *perc = strchr(template, '%');
|
||||||
|
|
||||||
do
|
for(;;)
|
||||||
{
|
{
|
||||||
sprintf(buf, "%s%d", prefix, ++(*counter));
|
bsprintf(buf, template, ++(*counter));
|
||||||
s = cf_find_sym(buf, cf_hash(buf));
|
s = cf_find_sym(buf, cf_hash(buf));
|
||||||
if (!s) cf_error("Unable to generate default name");
|
if (!s)
|
||||||
|
break;
|
||||||
|
if (s->class == SYM_VOID)
|
||||||
|
return s;
|
||||||
|
if (!perc)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
while (s->class != SYM_VOID);
|
cf_error("Unable to generate default name");
|
||||||
return s;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -90,7 +90,7 @@ extern int conf_lino;
|
|||||||
int cf_lex(void);
|
int cf_lex(void);
|
||||||
void cf_lex_init(int is_cli);
|
void cf_lex_init(int is_cli);
|
||||||
struct symbol *cf_find_symbol(byte *c);
|
struct symbol *cf_find_symbol(byte *c);
|
||||||
struct symbol *cf_default_name(char *prefix, int *counter);
|
struct symbol *cf_default_name(char *template, int *counter);
|
||||||
void cf_define_symbol(struct symbol *symbol, int type, void *def);
|
void cf_define_symbol(struct symbol *symbol, int type, void *def);
|
||||||
void cf_push_scope(struct symbol *);
|
void cf_push_scope(struct symbol *);
|
||||||
void cf_pop_scope(void);
|
void cf_pop_scope(void);
|
||||||
|
@ -76,7 +76,7 @@ proto_start: PROTOCOL
|
|||||||
|
|
||||||
proto_name:
|
proto_name:
|
||||||
/* EMPTY */ {
|
/* EMPTY */ {
|
||||||
struct symbol *s = cf_default_name(this_proto->protocol->name, &this_proto->protocol->name_counter);
|
struct symbol *s = cf_default_name(this_proto->protocol->template, &this_proto->protocol->name_counter);
|
||||||
s->class = SYM_PROTO;
|
s->class = SYM_PROTO;
|
||||||
s->def = this_proto;
|
s->def = this_proto;
|
||||||
this_proto->name = s->name;
|
this_proto->name = s->name;
|
||||||
|
@ -33,6 +33,7 @@ struct symbol;
|
|||||||
struct protocol {
|
struct protocol {
|
||||||
node n;
|
node n;
|
||||||
char *name;
|
char *name;
|
||||||
|
char *template; /* Template for automatic generation of names */
|
||||||
unsigned debug; /* Default debugging flags */
|
unsigned debug; /* Default debugging flags */
|
||||||
int priority; /* Protocol priority (usually 0) */
|
int priority; /* Protocol priority (usually 0) */
|
||||||
int name_counter; /* Counter for automatic name generation */
|
int name_counter; /* Counter for automatic name generation */
|
||||||
|
@ -88,6 +88,7 @@ dev_reconfigure(struct proto *p, struct proto_config *new)
|
|||||||
|
|
||||||
struct protocol proto_device = {
|
struct protocol proto_device = {
|
||||||
name: "Direct",
|
name: "Direct",
|
||||||
|
template: "direct%d",
|
||||||
priority: 90,
|
priority: 90,
|
||||||
init: dev_init,
|
init: dev_init,
|
||||||
reconfigure: dev_reconfigure
|
reconfigure: dev_reconfigure
|
||||||
|
@ -90,6 +90,7 @@ ospf_postconfig(struct proto_config *c)
|
|||||||
|
|
||||||
struct protocol proto_ospf = {
|
struct protocol proto_ospf = {
|
||||||
name: "OSPF",
|
name: "OSPF",
|
||||||
|
template: "ospf%d",
|
||||||
init: ospf_init,
|
init: ospf_init,
|
||||||
dump: ospf_dump,
|
dump: ospf_dump,
|
||||||
start: ospf_start,
|
start: ospf_start,
|
||||||
|
@ -163,6 +163,7 @@ pipe_reconfigure(struct proto *p, struct proto_config *new)
|
|||||||
|
|
||||||
struct protocol proto_pipe = {
|
struct protocol proto_pipe = {
|
||||||
name: "Pipe",
|
name: "Pipe",
|
||||||
|
template: "pipe%d",
|
||||||
postconfig: pipe_postconfig,
|
postconfig: pipe_postconfig,
|
||||||
init: pipe_init,
|
init: pipe_init,
|
||||||
start: pipe_start,
|
start: pipe_start,
|
||||||
|
@ -789,6 +789,7 @@ rip_postconfig(struct proto_config *c)
|
|||||||
|
|
||||||
struct protocol proto_rip = {
|
struct protocol proto_rip = {
|
||||||
name: "RIP",
|
name: "RIP",
|
||||||
|
template: "rip%d",
|
||||||
preconfig: rip_preconfig,
|
preconfig: rip_preconfig,
|
||||||
postconfig: rip_postconfig,
|
postconfig: rip_postconfig,
|
||||||
get_route_info: rip_get_route_info,
|
get_route_info: rip_get_route_info,
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BIRD -- Static Route Generator
|
* BIRD -- Static Route Generator
|
||||||
*
|
*
|
||||||
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
@ -175,11 +175,19 @@ static_init(struct proto_config *c)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
static_reconfigure(struct proto *p, struct proto_config *new)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct protocol proto_static = {
|
struct protocol proto_static = {
|
||||||
name: "Static",
|
name: "Static",
|
||||||
|
template: "static%d",
|
||||||
init: static_init,
|
init: static_init,
|
||||||
dump: static_dump,
|
dump: static_dump,
|
||||||
start: static_start,
|
start: static_start,
|
||||||
|
reconfigure: static_reconfigure,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BIRD -- Static Route Generator
|
* BIRD -- Static Route Generator
|
||||||
*
|
*
|
||||||
* (c) 1998 Martin Mares <mj@ucw.cz>
|
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* BIRD -- UNIX Kernel Syncer Configuration
|
* BIRD -- UNIX Kernel Syncer Configuration
|
||||||
*
|
*
|
||||||
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
* (c) 1998--2000 Martin Mares <mj@ucw.cz>
|
||||||
*
|
*
|
||||||
* Can be freely distributed and used under the terms of the GNU GPL.
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
*/
|
*/
|
||||||
@ -70,7 +70,7 @@ kif_proto_start: proto_start DEVICE {
|
|||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
CF_ADDTO(kif_proto, kif_proto_start '{')
|
CF_ADDTO(kif_proto, kif_proto_start proto_name '{')
|
||||||
CF_ADDTO(kif_proto, kif_proto proto_item ';')
|
CF_ADDTO(kif_proto, kif_proto proto_item ';')
|
||||||
CF_ADDTO(kif_proto, kif_proto kif_item ';')
|
CF_ADDTO(kif_proto, kif_proto kif_item ';')
|
||||||
|
|
||||||
|
@ -160,6 +160,7 @@ kif_reconfigure(struct proto *p, struct proto_config *new)
|
|||||||
|
|
||||||
struct protocol proto_unix_iface = {
|
struct protocol proto_unix_iface = {
|
||||||
name: "Device",
|
name: "Device",
|
||||||
|
template: "device%d",
|
||||||
priority: 100,
|
priority: 100,
|
||||||
preconfig: kif_preconfig,
|
preconfig: kif_preconfig,
|
||||||
init: kif_init,
|
init: kif_init,
|
||||||
@ -786,6 +787,7 @@ krt_init(struct proto_config *c)
|
|||||||
|
|
||||||
struct protocol proto_unix_kernel = {
|
struct protocol proto_unix_kernel = {
|
||||||
name: "Kernel",
|
name: "Kernel",
|
||||||
|
template: "kernel%d",
|
||||||
priority: 80,
|
priority: 80,
|
||||||
preconfig: krt_preconfig,
|
preconfig: krt_preconfig,
|
||||||
postconfig: krt_postconfig,
|
postconfig: krt_postconfig,
|
||||||
|
Loading…
Reference in New Issue
Block a user