From aac4b6d15ec0c07b435d4354b905b1230bad9a5d Mon Sep 17 00:00:00 2001 From: Maxim Kontorschikov Date: Mon, 20 Feb 2017 18:17:29 +0300 Subject: [PATCH 1/2] MERAprojects/ops-build#35 BGP command "neighbor advertisement-interval" doesn't work with peer-groups "neighbor advertisement-interval" command rework. Change-Id: I78fae534a328c9345fa631a824228a6bb9c10b85 --- vtysh/bgp_vty.c | 65 +++++++++++++++++++++++++++++++++++++++---------- vtysh/bgp_vty.h | 2 +- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/vtysh/bgp_vty.c b/vtysh/bgp_vty.c index aa84d19..206a09c 100755 --- a/vtysh/bgp_vty.c +++ b/vtysh/bgp_vty.c @@ -3520,6 +3520,14 @@ cli_neighbor_set_peer_group_cmd_execute(char *vrf_name, const char *ip_addr, (int64_t *)&tim_val, ovs_bgp_peer_group->n_timers); } + /* Inherit minimum advertisement interval */ + if (ovs_bgp_peer_group->advertisement_interval){ + ovsrec_bgp_neighbor_set_advertisement_interval(ovs_bgp_neighbor, + ovs_bgp_peer_group->advertisement_interval, 1); + } else { + ovsrec_bgp_neighbor_set_advertisement_interval(ovs_bgp_neighbor, NULL, 0); + } + /* Make this peer bound to the peer group. */ ovsrec_bgp_neighbor_set_bgp_peer_group(ovs_bgp_neighbor, ovs_bgp_peer_group); @@ -5222,7 +5230,7 @@ cli_neighbor_timers_execute(char *vrf_name, int argc, const char *argv[]) if (ovs_bgp_neighbor) { if (ovs_bgp_neighbor->bgp_peer_group) { - ERRONEOUS_DB_TXN(txn, BGP_ERR_UNABLE_TO_SET_TIMERS); + ERRONEOUS_DB_TXN(txn, BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER); } else { /* To write to ovsdb nbr table. */ neighbor_set_timers(ovs_bgp_neighbor, &tim_val, 2); @@ -5286,7 +5294,7 @@ DEFUN(no_neighbor_timers, if (ovs_bgp_neighbor) { if (ovs_bgp_neighbor->bgp_peer_group) { - ERRONEOUS_DB_TXN(txn, BGP_ERR_UNABLE_TO_SET_TIMERS); + ERRONEOUS_DB_TXN(txn, BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER); } else { tim_val.keepalive = 0; tim_val.holdtime = 0; @@ -5336,6 +5344,27 @@ ALIAS(no_neighbor_timers_connect, "BGP connect timer\n" "Connect timer\n") +static void +neighbor_set_advertisement_interval(const struct ovsrec_bgp_neighbor *bgpn, + int64_t *advertisement_interval, size_t n_advertisement_interval) +{ + const struct ovsrec_bgp_neighbor *bgpn_cur, *bgpn_next; + + ovsrec_bgp_neighbor_set_advertisement_interval(bgpn, + advertisement_interval, + n_advertisement_interval); + + if (object_is_bgp_peer_group(bgpn)) { + bgpn_cur = bgpn; + OVSREC_BGP_NEIGHBOR_FOR_EACH_SAFE(bgpn_cur, bgpn_next, idl) { + if (object_is_neighbor(bgpn_cur) && + (bgpn_cur->bgp_peer_group == bgpn)) { + ovsrec_bgp_neighbor_set_advertisement_interval(bgpn_cur, + advertisement_interval, n_advertisement_interval); + } + } + } +} static int cli_neighbor_advertisement_interval_cmd_execute(int argc, const char *argv[]) @@ -5364,11 +5393,16 @@ cli_neighbor_advertisement_interval_cmd_execute(int argc, const char *argv[]) ovs_bgp_neighbor = get_bgp_neighbor_with_bgp_router_and_ipaddr(bgp_router_context, ip_addr); + if (ovs_bgp_neighbor) { - /* To write to ovsdb nbr table. */ - ovsrec_bgp_neighbor_set_advertisement_interval(ovs_bgp_neighbor, &advertisement_interval, 1); - } - else { + if (ovs_bgp_neighbor->bgp_peer_group) { + ERRONEOUS_DB_TXN(txn, BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER); + } else { + /* To write to ovsdb nbr table. */ + neighbor_set_advertisement_interval(ovs_bgp_neighbor, + &advertisement_interval, 1); + } + } else { ABORT_DB_TXN(txn, BGP_ERR_NEIGHBOR_IS_NOT_CONFIGURED); } @@ -5378,9 +5412,9 @@ cli_neighbor_advertisement_interval_cmd_execute(int argc, const char *argv[]) /*Neighbor advertisement interval*/ DEFUN(neighbor_advertise_interval, neighbor_advertise_interval_cmd, - NEIGHBOR_CMD "advertisement-interval <0-600>", + NEIGHBOR_CMD2 "advertisement-interval <0-600>", NEIGHBOR_STR - NEIGHBOR_ADDR_STR + NEIGHBOR_ADDR_STR2 "Minimum interval between sending BGP routing updates\n" "time in seconds\n") { @@ -5392,10 +5426,10 @@ DEFUN(neighbor_advertise_interval, /*No neighbor advertisement interval*/ DEFUN(no_neighbor_advertise_interval, no_neighbor_advertise_interval_cmd, - NO_NEIGHBOR_CMD "advertisement-interval", + NO_NEIGHBOR_CMD2 "advertisement-interval", NO_STR NEIGHBOR_STR - NEIGHBOR_ADDR_STR + NEIGHBOR_ADDR_STR2 "Minimum interval between sending BGP routing updates\n") { const char *ip_addr = argv[0]; @@ -5421,10 +5455,15 @@ DEFUN(no_neighbor_advertise_interval, ovs_bgp_neighbor = get_bgp_neighbor_with_bgp_router_and_ipaddr(bgp_router_context, ip_addr); + if (ovs_bgp_neighbor) { - ovsrec_bgp_neighbor_set_advertisement_interval(ovs_bgp_neighbor, NULL, 0); - } - else { + if (ovs_bgp_neighbor->bgp_peer_group) { + ERRONEOUS_DB_TXN(txn, BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER); + } else { + /* To write to ovsdb nbr table. */ + neighbor_set_advertisement_interval(ovs_bgp_neighbor, NULL, 0); + } + } else { ABORT_DB_TXN(txn, BGP_ERR_NEIGHBOR_IS_NOT_CONFIGURED); } diff --git a/vtysh/bgp_vty.h b/vtysh/bgp_vty.h index 06029a8..7f9a7c6 100644 --- a/vtysh/bgp_vty.h +++ b/vtysh/bgp_vty.h @@ -47,7 +47,7 @@ #define BGP_ERR_PEER_GROUP_ALREADY_CREATED "% Peer group already exists" #define BGP_ERR_NEIGHBOR_CREATION_FAILED "% BGP neighbor/peer group object creation failed" #define BGP_ERR_NEIGHBOR_NOT_IN_PEER_GROUP "% Neighbor is not in a peer group" -#define BGP_ERR_UNABLE_TO_SET_TIMERS "% Unable to set timers. Neighbor already has been assigned to the peer group" +#define BGP_ERR_INVALID_FOR_PEER_GROUP_MEMBER "% Invalid command for a peer-group member" #define BGP_ERR_UNSPECIFIED_REMOTE_AS "% Specify peer remote AS or peer-group remote AS first" #define BGP_ERR_REMOVE_PRIVATE_AS "% Private AS cannot be removed for IBGP peers" #define BGP_ERR_NO_PREFIX_LIST "% Prefix List is not found" From 33738f1cbff7b79579cdf11537f49ab58cd9fb3e Mon Sep 17 00:00:00 2001 From: Maxim Kontorschikov Date: Tue, 21 Feb 2017 18:48:58 +0300 Subject: [PATCH 2/2] MERAprojects/ops-build#35 Don't show config entries for peer-group members Change-Id: Idf3c66fee9a12e3818d5a05a3cc3a5acaf378c52 --- vtysh/vtysh_ovsdb_router_context.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/vtysh/vtysh_ovsdb_router_context.c b/vtysh/vtysh_ovsdb_router_context.c index bff2c99..1899739 100644 --- a/vtysh/vtysh_ovsdb_router_context.c +++ b/vtysh/vtysh_ovsdb_router_context.c @@ -87,11 +87,14 @@ static void vtysh_router_context_bgp_print_nbr_cfg(vtysh_ovsdb_cbmsg_ptr p_msg, } } - if (nbr_table->n_advertisement_interval) - vtysh_ovsdb_cli_print(p_msg,"%4s %s %s %s %d", "", "neighbor", - neighbor, - "advertisement-interval", *(nbr_table-> - advertisement_interval)); + if (nbr_table->n_advertisement_interval) { + if (!pgroup_ptr) { + vtysh_ovsdb_cli_print(p_msg,"%4s %s %s %s %d", "", "neighbor", + neighbor, + "advertisement-interval", *(nbr_table-> + advertisement_interval)); + } + } if (nbr_table->n_timers > 0) { /* Invalid command for peer-group member so values are inherited from peer-group */