{
int ret;
struct peer *peer;
+ struct route_map *route_map;
peer = peer_and_group_lookup_vty(vty, peer_str);
if (!peer)
return CMD_WARNING_CONFIG_FAILED;
- if (set)
- ret = peer_default_originate_set(peer, afi, safi, rmap);
- else
+ if (set) {
+ route_map = route_map_lookup_warn_noexist(vty, rmap);
+ ret = peer_default_originate_set(peer, afi, safi,
+ rmap, route_map);
+ } else
ret = peer_default_originate_unset(peer, afi, safi);
return bgp_vty_return(vty, ret);
int ret;
struct peer *peer;
int direct = RMAP_IN;
+ struct route_map *route_map;
peer = peer_and_group_lookup_vty(vty, ip_str);
if (!peer)
else if (strncmp(direct_str, "o", 1) == 0)
direct = RMAP_OUT;
- ret = peer_route_map_set(peer, afi, safi, direct, name_str);
+ route_map = route_map_lookup_warn_noexist(vty, name_str);
+ ret = peer_route_map_set(peer, afi, safi, direct, name_str, route_map);
return bgp_vty_return(vty, ret);
}
{
int ret;
struct peer *peer;
+ struct route_map *route_map;
peer = peer_and_group_lookup_vty(vty, ip_str);
if (!peer)
return CMD_WARNING_CONFIG_FAILED;
- ret = peer_unsuppress_map_set(peer, afi, safi, name_str);
+ route_map = route_map_lookup_warn_noexist(vty, name_str);
+ ret = peer_unsuppress_map_set(peer, afi, safi, name_str, route_map);
return bgp_vty_return(vty, ret);
}
bgp->vpn_policy[afi].rmap_name[dir] = XSTRDUP(
MTYPE_ROUTE_MAP_NAME, rmap_str);
bgp->vpn_policy[afi].rmap[dir] =
- route_map_lookup_by_name(rmap_str);
+ route_map_lookup_warn_noexist(vty, rmap_str);
if (!bgp->vpn_policy[afi].rmap[dir])
return CMD_SUCCESS;
} else {
bgp->vpn_policy[afi].rmap_name[dir] =
XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap_str);
bgp->vpn_policy[afi].rmap[dir] =
- route_map_lookup_by_name(rmap_str);
+ route_map_lookup_warn_noexist(vty, rmap_str);
if (!bgp->vpn_policy[afi].rmap[dir])
return CMD_SUCCESS;
} else {
int type;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map = route_map_lookup_warn_noexist(
+ vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
if (type < 0) {
}
red = bgp_redist_add(bgp, AFI_IP, type, 0);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP, type, 0, changed);
}
uint32_t metric;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
if (type < 0) {
metric = strtoul(argv[idx_number]->arg, NULL, 10);
red = bgp_redist_add(bgp, AFI_IP, type, 0);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
changed |= bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
return bgp_redistribute_set(bgp, AFI_IP, type, 0, changed);
}
uint32_t metric;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
if (type < 0) {
red = bgp_redist_add(bgp, AFI_IP, type, 0);
changed = bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
- changed |= bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed |=
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP, type, 0, changed);
}
unsigned short instance;
int protocol;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
protocol = ZEBRA_ROUTE_OSPF;
instance = strtoul(argv[idx_number]->arg, NULL, 10);
red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP, protocol, instance, changed);
}
unsigned short instance;
int protocol;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
protocol = ZEBRA_ROUTE_OSPF;
metric = strtoul(argv[idx_number_2]->arg, NULL, 10);
red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
changed |= bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol,
metric);
return bgp_redistribute_set(bgp, AFI_IP, protocol, instance, changed);
unsigned short instance;
int protocol;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
protocol = ZEBRA_ROUTE_OSPF;
red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
changed = bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol,
metric);
- changed |= bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed |=
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP, protocol, instance, changed);
}
int type;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
if (type < 0) {
}
red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP6, type, 0, changed);
}
uint32_t metric;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
if (type < 0) {
metric = strtoul(argv[idx_number]->arg, NULL, 10);
red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- changed = bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed =
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
changed |= bgp_redistribute_metric_set(bgp, red, AFI_IP6, type,
metric);
return bgp_redistribute_set(bgp, AFI_IP6, type, 0, changed);
uint32_t metric;
struct bgp_redist *red;
bool changed;
+ struct route_map *route_map =
+ route_map_lookup_warn_noexist(vty, argv[idx_word]->arg);
type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
if (type < 0) {
red = bgp_redist_add(bgp, AFI_IP6, type, 0);
changed = bgp_redistribute_metric_set(bgp, red, AFI_IP6, SAFI_UNICAST,
metric);
- changed |= bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ changed |=
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg, route_map);
return bgp_redistribute_set(bgp, AFI_IP6, type, 0, changed);
}
}
int peer_default_originate_set(struct peer *peer, afi_t afi, safi_t safi,
- const char *rmap)
+ const char *rmap, struct route_map *route_map)
{
struct peer *member;
struct listnode *node, *nnode;
peer->default_rmap[afi][safi].name =
XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
- peer->default_rmap[afi][safi].map =
- route_map_lookup_by_name(rmap);
+ peer->default_rmap[afi][safi].map = route_map;
}
} else if (!rmap) {
if (peer->default_rmap[afi][safi].name)
member->default_rmap[afi][safi].name =
XSTRDUP(MTYPE_ROUTE_MAP_NAME, rmap);
- member->default_rmap[afi][safi].map =
- route_map_lookup_by_name(rmap);
+ member->default_rmap[afi][safi].map = route_map;
}
/* Update peer route announcements. */
int peer_route_map_set(struct peer *peer, afi_t afi, safi_t safi, int direct,
- const char *name)
+ const char *name, struct route_map *route_map)
{
struct peer *member;
struct bgp_filter *filter;
if (filter->map[direct].name)
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
- filter->map[direct].map = route_map_lookup_by_name(name);
+ filter->map[direct].map = route_map;
/* Check if handling a regular peer. */
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
if (filter->map[direct].name)
XFREE(MTYPE_BGP_FILTER_NAME, filter->map[direct].name);
filter->map[direct].name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
- filter->map[direct].map = route_map_lookup_by_name(name);
+ filter->map[direct].map = route_map;
/* Process peer route updates. */
peer_on_policy_change(member, afi, safi,
/* Set unsuppress-map to the peer. */
int peer_unsuppress_map_set(struct peer *peer, afi_t afi, safi_t safi,
- const char *name)
+ const char *name, struct route_map *route_map)
{
struct peer *member;
struct bgp_filter *filter;
if (filter->usmap.name)
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
- filter->usmap.map = route_map_lookup_by_name(name);
+ filter->usmap.map = route_map;
/* Check if handling a regular peer. */
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
if (filter->usmap.name)
XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
filter->usmap.name = XSTRDUP(MTYPE_BGP_FILTER_NAME, name);
- filter->usmap.map = route_map_lookup_by_name(name);
+ filter->usmap.map = route_map;
/* Process peer route updates. */
peer_on_policy_change(member, afi, safi, 1);