mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 17:51:53 +00:00
MPLS: Handle compatibility with old configs
Old configs do not define MPLS domains and may use a static protocol to define static MPLS routes. When MPLS channel is the only channel of static protocol, handle it as a main channel. Also, define implicit MPLS domain if needed and none is defined.
This commit is contained in:
parent
de09fda5dc
commit
ba01a6f2e6
@ -99,7 +99,11 @@ mpls_channel_start: MPLS
|
|||||||
$$ = this_channel = channel_config_get(&channel_mpls, net_label[NET_MPLS], NET_MPLS, this_proto);
|
$$ = this_channel = channel_config_get(&channel_mpls, net_label[NET_MPLS], NET_MPLS, this_proto);
|
||||||
|
|
||||||
if (EMPTY_LIST(new_config->mpls_domains))
|
if (EMPTY_LIST(new_config->mpls_domains))
|
||||||
cf_error("No MPLS domain defined");
|
{
|
||||||
|
int counter = 0;
|
||||||
|
mpls_domain_config_new(cf_default_name(new_config, "mpls%d", &counter));
|
||||||
|
cf_warn("No MPLS domain defined");
|
||||||
|
}
|
||||||
|
|
||||||
/* Default values for new channel */
|
/* Default values for new channel */
|
||||||
if (!MPLS_CC->domain)
|
if (!MPLS_CC->domain)
|
||||||
|
@ -624,7 +624,7 @@ struct channel_config *proto_cf_find_channel(struct proto_config *p, uint net_ty
|
|||||||
static inline struct channel_config *proto_cf_main_channel(struct proto_config *pc)
|
static inline struct channel_config *proto_cf_main_channel(struct proto_config *pc)
|
||||||
{ return proto_cf_find_channel(pc, pc->net_type); }
|
{ return proto_cf_find_channel(pc, pc->net_type); }
|
||||||
static inline struct channel_config *proto_cf_mpls_channel(struct proto_config *pc)
|
static inline struct channel_config *proto_cf_mpls_channel(struct proto_config *pc)
|
||||||
{ return proto_cf_find_channel(pc, NET_MPLS); }
|
{ return (pc->net_type != NET_MPLS) ? proto_cf_find_channel(pc, NET_MPLS) : NULL; }
|
||||||
|
|
||||||
struct channel *proto_find_channel_by_table(struct proto *p, struct rtable *t);
|
struct channel *proto_find_channel_by_table(struct proto *p, struct rtable *t);
|
||||||
struct channel *proto_find_channel_by_name(struct proto *p, const char *n);
|
struct channel *proto_find_channel_by_name(struct proto *p, const char *n);
|
||||||
|
@ -472,6 +472,10 @@ static_postconfig(struct proto_config *CF)
|
|||||||
struct static_config *cf = (void *) CF;
|
struct static_config *cf = (void *) CF;
|
||||||
struct static_route *r;
|
struct static_route *r;
|
||||||
|
|
||||||
|
/* If there is just a MPLS channel, use it as a main channel */
|
||||||
|
if (!CF->net_type && proto_cf_mpls_channel(CF))
|
||||||
|
CF->net_type = NET_MPLS;
|
||||||
|
|
||||||
if (! proto_cf_main_channel(CF))
|
if (! proto_cf_main_channel(CF))
|
||||||
cf_error("Channel not specified");
|
cf_error("Channel not specified");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user