case BGP_ERR_PEER_INACTIVE:
str = "Activate the neighbor for the address family first";
break;
- case BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER:
- str = "Invalid command for a peer-group member";
- break;
case BGP_ERR_PEER_GROUP_SHUTDOWN:
str = "Peer-group has been shutdown. Activate the peer-group first";
break;
- case BGP_ERR_PEER_GROUP_HAS_THE_FLAG:
- str = "This peer is a peer-group member. Please change peer-group configuration";
- break;
case BGP_ERR_PEER_FLAG_CONFLICT:
str = "Can't set override-capability and strict-capability-match at the same time";
break;
{
return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- (PEER_FLAG_FORCE_NEXTHOP_SELF |
- PEER_FLAG_NEXTHOP_SELF));
+ PEER_FLAG_FORCE_NEXTHOP_SELF);
}
DEFUN (no_neighbor_nexthop_self,
{
return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- (PEER_FLAG_NEXTHOP_SELF |
- PEER_FLAG_FORCE_NEXTHOP_SELF));
+ PEER_FLAG_NEXTHOP_SELF);
}
-ALIAS (no_neighbor_nexthop_self,
+DEFUN (no_neighbor_nexthop_self_force,
no_neighbor_nexthop_self_force_cmd,
NO_NEIGHBOR_CMD2 "next-hop-self force",
NO_STR
NEIGHBOR_ADDR_STR2
"Disable the next hop calculation for this neighbor\n"
"Set the next hop to self for reflected routes\n")
+{
+ return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
+ bgp_node_safi (vty),
+ PEER_FLAG_FORCE_NEXTHOP_SELF);
+}
/* neighbor as-override */
DEFUN (neighbor_as_override,
NEIGHBOR_ADDR_STR2
"Remove private ASNs in outbound updates\n")
{
- peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL|
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
PEER_FLAG_REMOVE_PRIVATE_AS);
"Remove private ASNs in outbound updates\n"
"Apply to all AS numbers")
{
- peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS|
PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
}
"Remove private ASNs in outbound updates\n"
"Replace private ASNs with our ASN in outbound updates\n")
{
- peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS|
PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
}
{
return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS|
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL|
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
}
DEFUN (no_neighbor_remove_private_as,
{
return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS|
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL|
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+ PEER_FLAG_REMOVE_PRIVATE_AS);
}
-ALIAS (no_neighbor_remove_private_as,
+DEFUN (no_neighbor_remove_private_as_all,
no_neighbor_remove_private_as_all_cmd,
NO_NEIGHBOR_CMD2 "remove-private-AS all",
NO_STR
NEIGHBOR_ADDR_STR2
"Remove private ASNs in outbound updates\n"
"Apply to all AS numbers")
+{
+ return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
+ bgp_node_safi (vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
+}
-ALIAS (no_neighbor_remove_private_as,
+DEFUN (no_neighbor_remove_private_as_replace_as,
no_neighbor_remove_private_as_replace_as_cmd,
NO_NEIGHBOR_CMD2 "remove-private-AS replace-AS",
NO_STR
NEIGHBOR_ADDR_STR2
"Remove private ASNs in outbound updates\n"
"Replace private ASNs with our ASN in outbound updates\n")
+{
+ return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
+ bgp_node_safi (vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+}
-ALIAS (no_neighbor_remove_private_as,
+DEFUN (no_neighbor_remove_private_as_all_replace_as,
no_neighbor_remove_private_as_all_replace_as_cmd,
NO_NEIGHBOR_CMD2 "remove-private-AS all replace-AS",
NO_STR
"Remove private ASNs in outbound updates\n"
"Apply to all AS numbers"
"Replace private ASNs with our ASN in outbound updates\n")
+{
+ return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty),
+ bgp_node_safi (vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
+}
/* neighbor send-community. */
if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
json_object_boolean_true_add(json_addr, "inboundSoftConfigPermit");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
+ if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
+ json_object_boolean_true_add(json_addr, "privateAsNumsAllReplacedInUpdatesToNbr");
+ else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
json_object_boolean_true_add(json_addr, "privateAsNumsReplacedInUpdatesToNbr");
+ else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
+ json_object_boolean_true_add(json_addr, "privateAsNumsAllRemovedInUpdatesToNbr");
else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS))
json_object_boolean_true_add(json_addr, "privateAsNumsRemovedInUpdatesToNbr");
if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
vty_out (vty, " Inbound soft reconfiguration allowed%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
+ if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
+ vty_out (vty, " Private AS numbers (all) replaced in updates to this neighbor%s", VTY_NEWLINE);
+ else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
vty_out (vty, " Private AS numbers replaced in updates to this neighbor%s", VTY_NEWLINE);
+ else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
+ vty_out (vty, " Private AS numbers (all) removed in updates to this neighbor%s", VTY_NEWLINE);
else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS))
vty_out (vty, " Private AS numbers removed in updates to this neighbor%s", VTY_NEWLINE);
return CHECK_FLAG (peer->af_flags[afi][safi], flag);
}
+/* Return true if flag is set for the peer but not the peer-group */
+static int
+peergroup_af_flag_check (struct peer *peer, afi_t afi, safi_t safi, u_int32_t flag)
+{
+ struct peer *g_peer = NULL;
+
+ if (peer_af_flag_check (peer, afi, safi, flag))
+ {
+ if (peer_group_active (peer))
+ {
+ g_peer = peer->group->conf;
+
+ /* If this flag is not set for the peer's peer-group then return true */
+ if (!peer->af_group[afi][safi] || !peer_af_flag_check (g_peer, afi, safi, flag))
+ {
+ return 1;
+ }
+ }
+
+ /* peer is not in a peer-group but the flag is set to return true */
+ else
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
/* Reset all address family specific configuration. */
static void
peer_af_flag_reset (struct peer *peer, afi_t afi, safi_t safi)
{ PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED, 0, peer_change_reset_out },
{ PEER_FLAG_FORCE_NEXTHOP_SELF, 1, peer_change_reset_out },
{ PEER_FLAG_AS_OVERRIDE, 1, peer_change_reset_out },
+ { PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE,1, peer_change_reset_out },
{ 0, 0, 0 }
};
if (! found)
return BGP_ERR_INVALID_FLAG;
- /* Not for peer-group member. */
- if (action.not_for_member && peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
/* When unset the peer-group member's flag we have to check
peer-group configuration. */
if (! set && peer_group_active (peer))
{
if (flag == PEER_FLAG_SHUTDOWN)
return BGP_ERR_PEER_GROUP_SHUTDOWN;
- else
- return BGP_ERR_PEER_GROUP_HAS_THE_FLAG;
}
/* Flag conflict check. */
return peer_flag_modify (peer, flag, 0);
}
-static int
-peer_is_group_member (struct peer *peer, afi_t afi, safi_t safi)
-{
- if (peer->af_group[afi][safi])
- return 1;
- return 0;
-}
-
static int
peer_af_flag_modify (struct peer *peer, afi_t afi, safi_t safi, u_int32_t flag,
int set)
if (! peer->afc[afi][safi])
return BGP_ERR_PEER_INACTIVE;
- /* Not for peer-group member. */
- if (action.not_for_member && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
/* Spcecial check for reflector client. */
if (flag & PEER_FLAG_REFLECTOR_CLIENT
&& peer_sort (peer) != BGP_PEER_IBGP)
&& peer_sort (peer) == BGP_PEER_IBGP)
return BGP_ERR_AS_OVERRIDE;
- /* When unset the peer-group member's flag we have to check
- peer-group configuration. */
- if (! set && peer->af_group[afi][safi])
- if (CHECK_FLAG (peer->group->conf->af_flags[afi][safi], flag))
- return BGP_ERR_PEER_GROUP_HAS_THE_FLAG;
-
/* When current flag configuration is same as requested one. */
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
{
if (! peer->afc[afi][safi])
return BGP_ERR_PEER_INACTIVE;
- /* Default originate can't be used for peer group memeber. */
- if (peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (! CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE)
|| (rmap && ! peer->default_rmap[afi][safi].name)
|| (rmap && strcmp (rmap, peer->default_rmap[afi][safi].name) != 0))
if (! peer->afc[afi][safi])
return BGP_ERR_PEER_INACTIVE;
- /* Default originate can't be used for peer group memeber. */
- if (peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE))
{
UNSET_FLAG (peer->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE);
struct peer_group *group;
struct listnode *node, *nnode;
- /* Not for peer group memeber. */
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
/* keepalive value check. */
if (keepalive > 65535)
return BGP_ERR_INVALID_VALUE;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
/* Clear configuration. */
UNSET_FLAG (peer->config, PEER_CONFIG_TIMER);
peer->keepalive = 0;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (connect > 65535)
return BGP_ERR_INVALID_VALUE;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
/* Clear configuration. */
UNSET_FLAG (peer->config, PEER_CONFIG_CONNECT);
peer->connect = 0;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (routeadv > 600)
return BGP_ERR_INVALID_VALUE;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
UNSET_FLAG (peer->config, PEER_CONFIG_ROUTEADV);
peer->routeadv = 0;
if (bgp->as == as)
return BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (peer->as == as)
return BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS_REMOTE_AS;
struct peer_group *group;
struct listnode *node, *nnode;
- if (peer_group_active (peer))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
if (! peer->change_local_as)
return 0;
if (!CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
{
- if (peer_group_active (peer)
- && peer->group->conf->password
- && strcmp (peer->group->conf->password, peer->password) == 0)
- return BGP_ERR_PEER_GROUP_HAS_THE_FLAG;
-
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->status))
bgp_notify_send (peer, BGP_NOTIFY_CEASE, BGP_NOTIFY_CEASE_CONFIG_CHANGE);
else
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->plist[direct].name)
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
/* apply peer-group filter */
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->dlist[direct].name)
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
/* apply peer-group filter */
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->aslist[direct].name)
if (direct != FILTER_IN && direct != FILTER_OUT)
return BGP_ERR_INVALID_VALUE;
- if (direct == FILTER_OUT && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
/* apply peer-group filter */
direct != RMAP_IMPORT && direct != RMAP_EXPORT)
return BGP_ERR_INVALID_VALUE;
- if ( (direct == RMAP_OUT || direct == RMAP_IMPORT)
- && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->map[direct].name)
direct != RMAP_IMPORT && direct != RMAP_EXPORT)
return BGP_ERR_INVALID_VALUE;
- if ( (direct == RMAP_OUT || direct == RMAP_IMPORT)
- && peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
/* apply peer-group filter */
if (! peer->afc[afi][safi])
return BGP_ERR_PEER_INACTIVE;
- if (peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->usmap.name)
if (! peer->afc[afi][safi])
return BGP_ERR_PEER_INACTIVE;
- if (peer_is_group_member (peer, afi, safi))
- return BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER;
-
filter = &peer->filter[afi][safi];
if (filter->usmap.name)
vty_out (vty, " neighbor %s activate%s", addr, VTY_NEWLINE);
/* ORF capability. */
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_SM)
- || CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_RM))
- if (! peer->af_group[afi][safi])
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_ORF_PREFIX_SM) ||
+ peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_ORF_PREFIX_RM))
{
vty_out (vty, " neighbor %s capability orf prefix-list", addr);
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_SM)
- && CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_RM))
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_ORF_PREFIX_SM) &&
+ peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_ORF_PREFIX_RM))
vty_out (vty, " both");
- else if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ORF_PREFIX_SM))
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_ORF_PREFIX_SM))
vty_out (vty, " send");
else
vty_out (vty, " receive");
}
/* Route reflector client. */
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REFLECTOR_CLIENT)
- && ! peer->af_group[afi][safi])
- vty_out (vty, " neighbor %s route-reflector-client%s", addr,
- VTY_NEWLINE);
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_REFLECTOR_CLIENT))
+ vty_out (vty, " neighbor %s route-reflector-client%s", addr, VTY_NEWLINE);
+
+ /* next-hop-self force */
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_FORCE_NEXTHOP_SELF))
+ vty_out (vty, " neighbor %s next-hop-self force%s", addr, VTY_NEWLINE);
- /* Nexthop self. */
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_FORCE_NEXTHOP_SELF)
- && ! peer->af_group[afi][safi])
- vty_out (vty, " neighbor %s next-hop-self force%s",
- addr, VTY_NEWLINE);
- else if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_SELF)
- && ! peer->af_group[afi][safi])
+ /* next-hop-self */
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_SELF))
vty_out (vty, " neighbor %s next-hop-self%s", addr, VTY_NEWLINE);
/* remove-private-AS */
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS) && !peer->af_group[afi][safi])
- {
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_ALL) &&
- peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
- vty_out (vty, " neighbor %s remove-private-AS all replace-AS%s", addr, VTY_NEWLINE);
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
+ vty_out (vty, " neighbor %s remove-private-AS all replace-AS%s", addr, VTY_NEWLINE);
- else if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
- vty_out (vty, " neighbor %s remove-private-AS replace-AS%s", addr, VTY_NEWLINE);
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
+ vty_out (vty, " neighbor %s remove-private-AS replace-AS%s", addr, VTY_NEWLINE);
- else if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
- vty_out (vty, " neighbor %s remove-private-AS all%s", addr, VTY_NEWLINE);
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
+ vty_out (vty, " neighbor %s remove-private-AS all%s", addr, VTY_NEWLINE);
- else
- vty_out (vty, " neighbor %s remove-private-AS%s", addr, VTY_NEWLINE);
- }
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_REMOVE_PRIVATE_AS))
+ vty_out (vty, " neighbor %s remove-private-AS%s", addr, VTY_NEWLINE);
/* as-override */
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_AS_OVERRIDE) &&
- !peer->af_group[afi][safi])
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_AS_OVERRIDE))
vty_out (vty, " neighbor %s as-override%s", addr, VTY_NEWLINE);
/* send-community print. */
- if (! peer->af_group[afi][safi])
+ if (bgp_option_check (BGP_OPT_CONFIG_CISCO))
{
- if (bgp_option_check (BGP_OPT_CONFIG_CISCO))
- {
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY)
- && peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
- vty_out (vty, " neighbor %s send-community both%s", addr, VTY_NEWLINE);
- else if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
- vty_out (vty, " neighbor %s send-community extended%s",
- addr, VTY_NEWLINE);
- else if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY))
- vty_out (vty, " neighbor %s send-community%s", addr, VTY_NEWLINE);
- }
- else
- {
- if (! peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY)
- && ! peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
- vty_out (vty, " no neighbor %s send-community both%s",
- addr, VTY_NEWLINE);
- else if (! peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
- vty_out (vty, " no neighbor %s send-community extended%s",
- addr, VTY_NEWLINE);
- else if (! peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY))
- vty_out (vty, " no neighbor %s send-community%s",
- addr, VTY_NEWLINE);
- }
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY)
+ && peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
+ vty_out (vty, " neighbor %s send-community both%s", addr, VTY_NEWLINE);
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
+ vty_out (vty, " neighbor %s send-community extended%s",
+ addr, VTY_NEWLINE);
+ else if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY))
+ vty_out (vty, " neighbor %s send-community%s", addr, VTY_NEWLINE);
+ }
+ else
+ {
+ if (!peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY) &&
+ peer_af_flag_check (g_peer, afi, safi, PEER_FLAG_SEND_COMMUNITY) &&
+ !peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY) &&
+ peer_af_flag_check (g_peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
+ vty_out (vty, " no neighbor %s send-community both%s", addr, VTY_NEWLINE);
+ else if (!peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY) &&
+ peer_af_flag_check (g_peer, afi, safi, PEER_FLAG_SEND_EXT_COMMUNITY))
+ vty_out (vty, " no neighbor %s send-community extended%s", addr, VTY_NEWLINE);
+ else if (!peer_af_flag_check (peer, afi, safi, PEER_FLAG_SEND_COMMUNITY) &&
+ peer_af_flag_check (g_peer, afi, safi, PEER_FLAG_SEND_COMMUNITY))
+ vty_out (vty, " no neighbor %s send-community%s", addr, VTY_NEWLINE);
}
/* Default information */
- if (peer_af_flag_check (peer, afi, safi, PEER_FLAG_DEFAULT_ORIGINATE)
- && ! peer->af_group[afi][safi])
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_DEFAULT_ORIGINATE) ||
+ (g_peer &&
+ ((peer->default_rmap[afi][safi].name && !g_peer->default_rmap[afi][safi].name) ||
+ (!peer->default_rmap[afi][safi].name && g_peer->default_rmap[afi][safi].name) ||
+ (peer->default_rmap[afi][safi].name &&
+ strcmp(peer->default_rmap[afi][safi].name, g_peer->default_rmap[afi][safi].name)))))
{
vty_out (vty, " neighbor %s default-originate", addr);
if (peer->default_rmap[afi][safi].name)
- vty_out (vty, " route-map %s", peer->default_rmap[afi][safi].name);
+ vty_out (vty, " route-map %s", peer->default_rmap[afi][safi].name);
vty_out (vty, "%s", VTY_NEWLINE);
}
/* Soft reconfiguration inbound. */
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
- if (! peer->af_group[afi][safi] ||
- ! CHECK_FLAG (g_peer->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_SOFT_RECONFIG))
vty_out (vty, " neighbor %s soft-reconfiguration inbound%s", addr,
VTY_NEWLINE);
}
/* Route server client. */
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT)
- && ! peer->af_group[afi][safi])
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_RSERVER_CLIENT))
vty_out (vty, " neighbor %s route-server-client%s", addr, VTY_NEWLINE);
/* Nexthop-local unchanged. */
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED)
- && ! peer->af_group[afi][safi])
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED))
vty_out (vty, " neighbor %s nexthop-local unchanged%s", addr, VTY_NEWLINE);
/* Allow AS in. */
bgp_config_write_filter (vty, peer, afi, safi);
/* atribute-unchanged. */
- if ((CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)
+ if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)
|| CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED)
|| CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
- && ! peer->af_group[afi][safi])
{
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)
- && CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED)
- && CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
+ if (peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_AS_PATH_UNCHANGED)
+ && peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_UNCHANGED)
+ && peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_MED_UNCHANGED))
vty_out (vty, " neighbor %s attribute-unchanged%s", addr, VTY_NEWLINE);
else
vty_out (vty, " neighbor %s attribute-unchanged%s%s%s%s", addr,
- (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED)) ?
+ peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_AS_PATH_UNCHANGED) ?
" as-path" : "",
- (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED)) ?
+ peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_NEXTHOP_UNCHANGED) ?
" next-hop" : "",
- (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED)) ?
+ peergroup_af_flag_check (peer, afi, safi, PEER_FLAG_MED_UNCHANGED) ?
" med" : "", VTY_NEWLINE);
}
}