]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_vty.c
Merge pull request #11981 from proelbtn/add-support-to-change-function-length
[mirror_frr.git] / bgpd / bgp_vty.c
index 79fc7247f9a023ae529f8ed29e2db62438c6de51..89010b61bbb087501f3ba40dba7b85ddbdb8fb67 100644 (file)
@@ -298,7 +298,6 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
        struct srv6_locator_chunk *chunk, *tovpn_sid_locator;
        struct bgp_srv6_function *func;
        struct bgp *bgp_vrf;
-       struct in6_addr *tovpn_sid;
 
        /* release chunk notification via ZAPI */
        ret = bgp_zebra_srv6_manager_release_locator_chunk(
@@ -324,16 +323,12 @@ static int bgp_srv6_locator_unset(struct bgp *bgp)
                        continue;
 
                /* refresh vpnv4 tovpn_sid */
-               tovpn_sid = bgp_vrf->vpn_policy[AFI_IP].tovpn_sid;
-               if (tovpn_sid)
-                       XFREE(MTYPE_BGP_SRV6_SID,
-                             bgp_vrf->vpn_policy[AFI_IP].tovpn_sid);
+               XFREE(MTYPE_BGP_SRV6_SID,
+                     bgp_vrf->vpn_policy[AFI_IP].tovpn_sid);
 
                /* refresh vpnv6 tovpn_sid */
-               tovpn_sid = bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid;
-               if (tovpn_sid)
-                       XFREE(MTYPE_BGP_SRV6_SID,
-                             bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid);
+               XFREE(MTYPE_BGP_SRV6_SID,
+                     bgp_vrf->vpn_policy[AFI_IP6].tovpn_sid);
        }
 
        /* update vpn bgp processes */
@@ -881,9 +876,6 @@ int bgp_vty_return(struct vty *vty, enum bgp_create_error_code ret)
        case BGP_ERR_REMOVE_PRIVATE_AS:
                str = "remove-private-AS cannot be configured for IBGP peers";
                break;
-       case BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP:
-               str = "Local-AS allowed only for EBGP peers";
-               break;
        case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS:
                str = "Cannot have local-as same as BGP AS number";
                break;
@@ -944,9 +936,6 @@ int bgp_vty_return(struct vty *vty, enum bgp_create_error_code ret)
        case BGP_ERR_AF_UNCONFIGURED:
                str = "AFI/SAFI specified is not currently configured.";
                break;
-       case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS_REMOTE_AS:
-               str = "AS specified for local as is the same as the remote as and this is not allowed.";
-               break;
        case BGP_ERR_INVALID_AS:
                str = "Confederation AS specified is the same AS as our AS.";
                break;
@@ -2362,6 +2351,15 @@ void bgp_config_write_coalesce_time(struct vty *vty, struct bgp *bgp)
                vty_out(vty, " coalesce-time %u\n", bgp->coalesce_time);
 }
 
+/* BGP TCP keepalive */
+static void bgp_config_tcp_keepalive(struct vty *vty, struct bgp *bgp)
+{
+       if (bgp->tcp_keepalive_idle) {
+               vty_out(vty, " bgp tcp-keepalive %u %u %u\n",
+                       bgp->tcp_keepalive_idle, bgp->tcp_keepalive_intvl,
+                       bgp->tcp_keepalive_probes);
+       }
+}
 
 DEFUN (bgp_coalesce_time,
        bgp_coalesce_time_cmd,
@@ -2585,6 +2583,38 @@ DEFUN(no_bgp_minimum_holdtime, no_bgp_minimum_holdtime_cmd,
        return CMD_SUCCESS;
 }
 
+DEFPY(bgp_tcp_keepalive, bgp_tcp_keepalive_cmd,
+      "bgp tcp-keepalive (1-65535)$idle (1-65535)$intvl (1-30)$probes",
+      BGP_STR
+      "TCP keepalive parameters\n"
+      "TCP keepalive idle time (seconds)\n"
+      "TCP keepalive interval (seconds)\n"
+      "TCP keepalive maximum probes\n")
+{
+       VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+       bgp_tcp_keepalive_set(bgp, (uint16_t)idle, (uint16_t)intvl,
+                             (uint16_t)probes);
+
+       return CMD_SUCCESS;
+}
+
+DEFPY(no_bgp_tcp_keepalive, no_bgp_tcp_keepalive_cmd,
+      "no bgp tcp-keepalive [(1-65535) (1-65535) (1-30)]",
+      NO_STR
+      BGP_STR
+      "TCP keepalive parameters\n"
+      "TCP keepalive idle time (seconds)\n"
+      "TCP keepalive interval (seconds)\n"
+      "TCP keepalive maximum probes\n")
+{
+       VTY_DECLVAR_CONTEXT(bgp, bgp);
+
+       bgp_tcp_keepalive_unset(bgp);
+
+       return CMD_SUCCESS;
+}
+
 DEFUN (bgp_client_to_client_reflection,
        bgp_client_to_client_reflection_cmd,
        "bgp client-to-client reflection",
@@ -9645,11 +9675,7 @@ DEFPY (show_bgp_srv6,
        struct listnode *node;
        struct srv6_locator_chunk *chunk;
        struct bgp_srv6_function *func;
-       struct in6_addr *tovpn4_sid;
-       struct in6_addr *tovpn6_sid;
        char buf[256];
-       char buf_tovpn4_sid[256];
-       char buf_tovpn6_sid[256];
 
        bgp = bgp_get_default();
        if (!bgp)
@@ -9672,19 +9698,10 @@ DEFPY (show_bgp_srv6,
                vty_out(vty, "- name: %s\n",
                        bgp->name ? bgp->name : "default");
 
-               tovpn4_sid = bgp->vpn_policy[AFI_IP].tovpn_sid;
-               tovpn6_sid = bgp->vpn_policy[AFI_IP6].tovpn_sid;
-               if (tovpn4_sid)
-                       inet_ntop(AF_INET6, tovpn4_sid, buf_tovpn4_sid,
-                                 sizeof(buf_tovpn4_sid));
-               if (tovpn6_sid)
-                       inet_ntop(AF_INET6, tovpn6_sid, buf_tovpn6_sid,
-                                 sizeof(buf_tovpn6_sid));
-
-               vty_out(vty, "  vpn_policy[AFI_IP].tovpn_sid: %s\n",
-                       tovpn4_sid ? buf_tovpn4_sid : "none");
-               vty_out(vty, "  vpn_policy[AFI_IP6].tovpn_sid: %s\n",
-                       tovpn6_sid ? buf_tovpn6_sid : "none");
+               vty_out(vty, "  vpn_policy[AFI_IP].tovpn_sid: %pI6\n",
+                       bgp->vpn_policy[AFI_IP].tovpn_sid);
+               vty_out(vty, "  vpn_policy[AFI_IP6].tovpn_sid: %pI6\n",
+                       bgp->vpn_policy[AFI_IP6].tovpn_sid);
        }
 
        return CMD_SUCCESS;
@@ -14743,7 +14760,7 @@ static int bgp_show_neighbor_vty(struct vty *vty, const char *name,
 
 
 /* "show [ip] bgp neighbors graceful-restart" commands.  */
-DEFUN (show_ip_bgp_neighbors_gracrful_restart,
+DEFUN (show_ip_bgp_neighbors_graceful_restart,
        show_ip_bgp_neighbors_graceful_restart_cmd,
        "show bgp [<ipv4|ipv6>] neighbors [<A.B.C.D|X:X::X:X|WORD>] graceful-restart [json]",
        SHOW_STR
@@ -15001,7 +15018,6 @@ static int bgp_show_route_leak_vty(struct vty *vty, const char *name,
        struct bgp *bgp;
        struct listnode *node;
        char *vname;
-       char buf1[INET6_ADDRSTRLEN];
        char *ecom_str;
        enum vpn_policy_direction dir;
 
@@ -15066,9 +15082,9 @@ static int bgp_show_route_leak_vty(struct vty *vty, const char *name,
                                                json_object_new_string(vname));
                        json_object_object_add(json, "exportToVrfs",
                                               json_export_vrfs);
-                       json_object_string_add(json, "routeDistinguisher",
-                                  prefix_rd2str(&bgp->vpn_policy[afi].tovpn_rd,
-                                                buf1, RD_ADDRSTRLEN));
+                       json_object_string_addf(json, "routeDistinguisher",
+                                               "%pRD",
+                                               &bgp->vpn_policy[afi].tovpn_rd);
 
                        dir = BGP_VPN_POLICY_DIR_TOVPN;
                        if (bgp->vpn_policy[afi].rtlist[dir]) {
@@ -15137,9 +15153,8 @@ static int bgp_show_route_leak_vty(struct vty *vty, const char *name,
                                                node, vname))
                                vty_out(vty, "  %s\n", vname);
 
-                       vty_out(vty, "RD: %s\n",
-                               prefix_rd2str(&bgp->vpn_policy[afi].tovpn_rd,
-                                             buf1, RD_ADDRSTRLEN));
+                       vty_out(vty, "RD: %pRD\n",
+                               &bgp->vpn_policy[afi].tovpn_rd);
 
                        dir = BGP_VPN_POLICY_DIR_TOVPN;
                        if (bgp->vpn_policy[afi].rtlist[dir]) {
@@ -16629,13 +16644,10 @@ static void bgp_vpn_policy_config_write_afi(struct vty *vty, struct bgp *bgp,
                        tovpn_sid_index);
        }
 
-       if (CHECK_FLAG(bgp->vpn_policy[afi].flags,
-                      BGP_VPN_POLICY_TOVPN_RD_SET)) {
-               char buf[RD_ADDRSTRLEN];
-               vty_out(vty, "%*srd vpn export %s\n", indent, "",
-                       prefix_rd2str(&bgp->vpn_policy[afi].tovpn_rd, buf,
-                                     sizeof(buf)));
-       }
+       if (CHECK_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_RD_SET))
+               vty_out(vty, "%*srd vpn export %pRD\n", indent, "",
+                       &bgp->vpn_policy[afi].tovpn_rd);
+
        if (CHECK_FLAG(bgp->vpn_policy[afi].flags,
                       BGP_VPN_POLICY_TOVPN_NEXTHOP_SET)) {
 
@@ -17730,6 +17742,9 @@ int bgp_config_write(struct vty *vty)
                        vty_out(vty,
                                " bgp graceful-restart preserve-fw-state\n");
 
+               /* BGP TCP keepalive */
+               bgp_config_tcp_keepalive(vty, bgp);
+
                /* Stale timer for RIB */
                if (bgp->rib_stale_time != BGP_DEFAULT_RIB_STALE_TIME)
                        vty_out(vty,
@@ -19609,6 +19624,10 @@ void bgp_vty_init(void)
        install_element(BGP_NODE, &neighbor_ttl_security_cmd);
        install_element(BGP_NODE, &no_neighbor_ttl_security_cmd);
 
+       /* "bgp tcp-keepalive" commands */
+       install_element(BGP_NODE, &bgp_tcp_keepalive_cmd);
+       install_element(BGP_NODE, &no_bgp_tcp_keepalive_cmd);
+
        /* "show [ip] bgp memory" commands. */
        install_element(VIEW_NODE, &show_bgp_memory_cmd);