]> git.proxmox.com Git - mirror_frr.git/blobdiff - ospfd/ospf_vty.c
Merge pull request #13177 from mjstapp/fix_ospf_supoort_typo
[mirror_frr.git] / ospfd / ospf_vty.c
index 9398021e97a37d2c8ce52c6e55a8a6b75dc17cad..edec27fc098fe6ffa02cd867758173d945b4a919 100644 (file)
 #include "ospfd/ospf_spf.h"
 #include "ospfd/ospf_route.h"
 #include "ospfd/ospf_zebra.h"
-/*#include "ospfd/ospf_routemap.h" */
 #include "ospfd/ospf_vty.h"
 #include "ospfd/ospf_dump.h"
 #include "ospfd/ospf_bfd.h"
 #include "ospfd/ospf_ldp_sync.h"
-
+#include "ospfd/ospf_network.h"
 
 FRR_CFG_DEFAULT_BOOL(OSPF_LOG_ADJACENCY_CHANGES,
        { .val_bool = true, .match_profile = "datacenter", },
@@ -3403,6 +3402,23 @@ static int show_ip_ospf_common(struct vty *vty, struct ospf *ospf,
        /* show LDP-Sync status */
        ospf_ldp_sync_show_info(vty, ospf, json_vrf, json ? 1 : 0);
 
+       /* Socket buffer sizes */
+       if (json) {
+               if (ospf->recv_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE)
+                       json_object_int_add(json_vrf, "recvSockBufsize",
+                                           ospf->recv_sock_bufsize);
+               if (ospf->send_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE)
+                       json_object_int_add(json_vrf, "sendSockBufsize",
+                                           ospf->send_sock_bufsize);
+       } else {
+               if (ospf->recv_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE)
+                       vty_out(vty, " Receive socket bufsize: %u\n",
+                               ospf->recv_sock_bufsize);
+               if (ospf->send_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE)
+                       vty_out(vty, " Send socket bufsize: %u\n",
+                               ospf->send_sock_bufsize);
+       }
+
        /* Show each area status. */
        for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
                show_ip_ospf_area(vty, area, json_areas, json ? 1 : 0);
@@ -12503,6 +12519,9 @@ static int ospf_config_write_one(struct vty *vty, struct ospf *ospf)
        if (ospf->fr_configured)
                vty_out(vty, " flood-reduction\n");
 
+       if (!ospf->intf_socket_enabled)
+               vty_out(vty, " no socket-per-interface\n");
+
        /* Redistribute information print. */
        config_write_ospf_redistribute(vty, ospf);
 
@@ -12559,6 +12578,22 @@ static int ospf_config_write_one(struct vty *vty, struct ospf *ospf)
        /* LDP-Sync print */
        ospf_ldp_sync_write_config(vty, ospf);
 
+       /* Socket buffer sizes */
+       if (ospf->recv_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE) {
+               if (ospf->send_sock_bufsize == ospf->recv_sock_bufsize)
+                       vty_out(vty, " socket buffer all %u\n",
+                               ospf->recv_sock_bufsize);
+               else
+                       vty_out(vty, " socket buffer recv %u\n",
+                               ospf->recv_sock_bufsize);
+       }
+
+       if (ospf->send_sock_bufsize != OSPF_DEFAULT_SOCK_BUFSIZE &&
+           ospf->send_sock_bufsize != ospf->recv_sock_bufsize)
+               vty_out(vty, " socket buffer send %u\n",
+                       ospf->send_sock_bufsize);
+
+
        vty_out(vty, "exit\n");
 
        write++;
@@ -13015,6 +13050,71 @@ DEFPY(no_flood_reduction_area, no_flood_reduction_area_cmd,
        return CMD_SUCCESS;
 }
 
+DEFPY(ospf_socket_bufsizes,
+      ospf_socket_bufsizes_cmd,
+      "[no] socket buffer <send$send_val | recv$recv_val | all$all_val> \
+         ![(1-4000000000)$bufsize]",
+      NO_STR
+      "Socket parameters\n"
+      "Buffer size configuration\n"
+      "Send buffer size\n"
+      "Receive buffer size\n"
+      "Both send and receive buffer sizes\n"
+      "Buffer size, in bytes\n")
+{
+       VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf);
+       uint32_t recvsz, sendsz;
+
+       if (no)
+               bufsize = OSPF_DEFAULT_SOCK_BUFSIZE;
+
+       if (all_val) {
+               recvsz = bufsize;
+               sendsz = bufsize;
+       } else if (send_val) {
+               sendsz = bufsize;
+               recvsz = ospf->recv_sock_bufsize;
+       } else if (recv_val) {
+               recvsz = bufsize;
+               sendsz = ospf->send_sock_bufsize;
+       } else
+               return CMD_SUCCESS;
+
+       /* React to a change by modifying existing sockets */
+       ospf_update_bufsize(ospf, recvsz, sendsz);
+
+       return CMD_SUCCESS;
+}
+
+DEFPY (per_intf_socket,
+       per_intf_socket_cmd,
+       "[no] socket-per-interface",
+       NO_STR
+       "Use write socket per interface\n")
+{
+       VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf);
+       struct listnode *node;
+       struct ospf_interface *oi;
+
+       if (no) {
+               if (ospf->intf_socket_enabled) {
+                       ospf->intf_socket_enabled = false;
+
+                       /* Iterate and close any sockets */
+                       for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi))
+                               ospf_ifp_sock_close(oi->ifp);
+               }
+       } else if (!ospf->intf_socket_enabled) {
+               ospf->intf_socket_enabled = true;
+
+               /* Iterate and open sockets */
+               for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi))
+                       ospf_ifp_sock_init(oi->ifp);
+       }
+
+       return CMD_SUCCESS;
+}
+
 void ospf_vty_clear_init(void)
 {
        install_element(ENABLE_NODE, &clear_ip_ospf_interface_cmd);
@@ -13178,6 +13278,9 @@ void ospf_vty_init(void)
        install_element(OSPF_NODE, &flood_reduction_area_cmd);
        install_element(OSPF_NODE, &no_flood_reduction_area_cmd);
 
+       install_element(OSPF_NODE, &ospf_socket_bufsizes_cmd);
+       install_element(OSPF_NODE, &per_intf_socket_cmd);
+
        /* Init interface related vty commands. */
        ospf_vty_if_init();