Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
labs
BIRD Internet Routing Daemon
Commits
ea7ada38
Commit
ea7ada38
authored
Dec 20, 2009
by
Ondřej Zajíček
Browse files
Fixes a new bug in the pipe protocol soft reconfiguration.
Also updates route reload for pipes.
parent
1a517858
Changes
2
Hide whitespace changes
Inline
Side-by-side
doc/bird.sgml
View file @
ea7ada38
...
...
@@ -513,7 +513,9 @@ This argument can be omitted if there exists only a single instance.
Re-export always succeeds, but re-import is protocol-dependent
and might fail (for example, if BGP neighbor does not support
route-refresh extension). In that case, re-export is also
skipped.
skipped. Note that for the pipe protocol, both directions are
always reloaded together (<cf/in/ or <cf/out/ options are
ignored in that case).
<tag/down/
Shut BIRD down.
...
...
proto/pipe/pipe.c
View file @
ea7ada38
...
...
@@ -113,6 +113,19 @@ pipe_import_control(struct proto *P, rte **ee, ea_list **ea UNUSED, struct linpo
return
0
;
}
static
int
pipe_reload_routes
(
struct
proto
*
P
)
{
/*
* Because the pipe protocol feeds routes from both routing tables
* together, both directions are reloaded during refeed and 'reload
* out' command works like 'reload' command. For symmetry, we also
* request refeed when 'reload in' command is used.
*/
proto_request_feeding
(
P
);
return
1
;
}
static
int
pipe_start
(
struct
proto
*
P
)
{
...
...
@@ -183,6 +196,7 @@ pipe_init(struct proto_config *C)
P
->
accept_ra_types
=
(
p
->
mode
==
PIPE_OPAQUE
)
?
RA_OPTIMAL
:
RA_ANY
;
P
->
rt_notify
=
pipe_rt_notify_pri
;
P
->
import_control
=
pipe_import_control
;
P
->
reload_routes
=
pipe_reload_routes
;
return
P
;
}
...
...
@@ -206,12 +220,18 @@ pipe_get_status(struct proto *P, byte *buf)
}
static
int
pipe_reconfigure
(
struct
proto
*
p
,
struct
proto_config
*
new
)
pipe_reconfigure
(
struct
proto
*
P
,
struct
proto_config
*
new
)
{
struct
pipe_config
*
o
=
(
struct
pipe_config
*
)
p
->
cf
;
struct
pipe_proto
*
p
=
(
struct
pipe_proto
*
)
P
;
struct
pipe_config
*
o
=
(
struct
pipe_config
*
)
P
->
cf
;
struct
pipe_config
*
n
=
(
struct
pipe_config
*
)
new
;
return
(
o
->
peer
->
table
==
n
->
peer
->
table
)
&&
(
o
->
mode
==
n
->
mode
);
if
((
o
->
peer
->
table
!=
n
->
peer
->
table
)
||
(
o
->
mode
!=
n
->
mode
))
return
0
;
/* Update also the filter in the phantom protocol */
p
->
phantom
->
p
.
out_filter
=
new
->
in_filter
;
return
1
;
}
struct
protocol
proto_pipe
=
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment