]> git.proxmox.com Git - mirror_frr.git/blobdiff - babeld/babeld.c
*: Convert struct thread_master to struct event_master and it's ilk
[mirror_frr.git] / babeld / babeld.c
index a1e00bfb85de1438a9191a853b3b17363629b068..4ce92c520472603d1013ea470f852b9ba57985a7 100644 (file)
@@ -1,23 +1,6 @@
+// SPDX-License-Identifier: MIT
 /*
 Copyright 2011 by Matthieu Boutier and Juliusz Chroboczek
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
 */
 
 #include <zebra.h>
@@ -31,6 +14,7 @@ THE SOFTWARE.
 #include "plist.h"
 #include "lib_errors.h"
 #include "network.h"
+#include "if.h"
 
 #include "babel_main.h"
 #include "babeld.h"
@@ -46,14 +30,18 @@ THE SOFTWARE.
 #include "babel_zebra.h"
 #include "babel_errors.h"
 
+#ifndef VTYSH_EXTRACT_PL
+#include "babeld/babeld_clippy.c"
+#endif
+
 DEFINE_MGROUP(BABELD, "babeld");
 DEFINE_MTYPE_STATIC(BABELD, BABEL, "Babel Structure");
 
-static void babel_init_routing_process(struct thread *thread);
+static void babel_init_routing_process(struct event *thread);
 static void babel_get_myid(void);
 static void babel_initial_noise(void);
-static void babel_read_protocol(struct thread *thread);
-static void babel_main_loop(struct thread *thread);
+static void babel_read_protocol(struct event *thread);
+static void babel_main_loop(struct event *thread);
 static void babel_set_timer(struct timeval *timeout);
 static void babel_fill_with_next_timeout(struct timeval *tv);
 static void
@@ -160,9 +148,11 @@ babel_create_routing_process (void)
     }
 
     /* Threads. */
-    thread_add_read(master, &babel_read_protocol, NULL, protocol_socket, &babel_routing_process->t_read);
+    event_add_read(master, babel_read_protocol, NULL, protocol_socket,
+                  &babel_routing_process->t_read);
     /* wait a little: zebra will announce interfaces, addresses, routes... */
-    thread_add_timer_msec(master, babel_init_routing_process, NULL, 200L, &babel_routing_process->t_update);
+    event_add_timer_msec(master, babel_init_routing_process, NULL, 200L,
+                        &babel_routing_process->t_update);
 
     /* Distribute list install. */
     babel_routing_process->distribute_ctx = distribute_list_ctx_create (vrf_lookup_by_id(VRF_DEFAULT));
@@ -175,7 +165,7 @@ fail:
 }
 
 /* thread reading entries form others babel daemons */
-static void babel_read_protocol(struct thread *thread)
+static void babel_read_protocol(struct event *thread)
 {
     int rc;
     struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
@@ -205,13 +195,14 @@ static void babel_read_protocol(struct thread *thread)
     }
 
     /* re-add thread */
-    thread_add_read(master, &babel_read_protocol, NULL, protocol_socket, &babel_routing_process->t_read);
+    event_add_read(master, &babel_read_protocol, NULL, protocol_socket,
+                  &babel_routing_process->t_read);
 }
 
 /* Zebra will give some information, especially about interfaces. This function
  must be call with a litte timeout wich may give zebra the time to do his job,
  making these inits have sense. */
-static void babel_init_routing_process(struct thread *thread)
+static void babel_init_routing_process(struct event *thread)
 {
     myseqno = (frr_weak_random() & 0xFFFF);
     babel_get_myid();
@@ -251,7 +242,7 @@ babel_get_myid(void)
     /* We failed to get a global EUI64 from the interfaces we were given.
      Let's try to find an interface with a MAC address. */
     for(i = 1; i < 256; i++) {
-        char buf[IF_NAMESIZE], *ifname;
+        char buf[INTERFACE_NAMSIZ], *ifname;
         unsigned char eui[8];
         ifname = if_indextoname(i, buf);
         if(ifname == NULL)
@@ -272,7 +263,7 @@ babel_get_myid(void)
         exit(1);
     }
     /* Clear group and global bits */
-    myid[0] &= ~3;
+    UNSET_FLAG (myid[0], 3);
 }
 
 /* Make some noise so that others notice us, and send retractions in
@@ -315,15 +306,15 @@ babel_clean_routing_process(void)
     babel_interface_close_all();
 
     /* cancel events */
-    thread_cancel(&babel_routing_process->t_read);
-    thread_cancel(&babel_routing_process->t_update);
+    event_cancel(&babel_routing_process->t_read);
+    event_cancel(&babel_routing_process->t_update);
 
     distribute_list_delete(&babel_routing_process->distribute_ctx);
     XFREE(MTYPE_BABEL, babel_routing_process);
 }
 
 /* Function used with timeout. */
-static void babel_main_loop(struct thread *thread)
+static void babel_main_loop(struct event *thread)
 {
     struct timeval tv;
     struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
@@ -494,8 +485,9 @@ static void
 babel_set_timer(struct timeval *timeout)
 {
     long msecs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000;
-    thread_cancel(&(babel_routing_process->t_update));
-    thread_add_timer_msec(master, babel_main_loop, NULL, msecs, &babel_routing_process->t_update);
+    event_cancel(&(babel_routing_process->t_update));
+    event_add_timer_msec(master, babel_main_loop, NULL, msecs,
+                        &babel_routing_process->t_update);
 }
 
 void
@@ -661,50 +653,42 @@ DEFUN (no_babel_diversity,
 }
 
 /* [Babel Command] */
-DEFUN (babel_diversity_factor,
+DEFPY (babel_diversity_factor,
        babel_diversity_factor_cmd,
-       "babel diversity-factor (1-256)",
+       "[no] babel diversity-factor (1-256)$factor",
+       NO_STR
        "Babel commands\n"
        "Set the diversity factor.\n"
        "Factor in units of 1/256.\n")
 {
-    int factor;
-
-    factor = strtoul(argv[2]->arg, NULL, 10);
-
-    diversity_factor = factor;
+    diversity_factor = no ? BABEL_DEFAULT_DIVERSITY_FACTOR : factor;
     return CMD_SUCCESS;
 }
 
 /* [Babel Command] */
-DEFUN (babel_set_resend_delay,
+DEFPY (babel_set_resend_delay,
        babel_set_resend_delay_cmd,
-       "babel resend-delay (20-655340)",
+       "[no] babel resend-delay (20-655340)$delay",
+       NO_STR
        "Babel commands\n"
        "Time before resending a message\n"
        "Milliseconds\n")
 {
-    int interval;
-
-    interval = strtoul(argv[2]->arg, NULL, 10);
-
-    resend_delay = interval;
+    resend_delay = no ? BABEL_DEFAULT_RESEND_DELAY : delay;
     return CMD_SUCCESS;
 }
 
 /* [Babel Command] */
-DEFUN (babel_set_smoothing_half_life,
+DEFPY (babel_set_smoothing_half_life,
        babel_set_smoothing_half_life_cmd,
-       "babel smoothing-half-life (0-65534)",
+       "[no] babel smoothing-half-life (0-65534)$seconds",
+       NO_STR
        "Babel commands\n"
        "Smoothing half-life\n"
        "Seconds (0 to disable)\n")
 {
-    int seconds;
-
-    seconds = strtoul(argv[2]->arg, NULL, 10);
-
-    change_smoothing_half_life(seconds);
+    change_smoothing_half_life(no ? BABEL_DEFAULT_SMOOTHING_HALF_LIFE
+        : seconds);
     return CMD_SUCCESS;
 }