+// 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>
#include "plist.h"
#include "lib_errors.h"
#include "network.h"
+#include "if.h"
#include "babel_main.h"
#include "babeld.h"
#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 int babel_init_routing_process(struct thread *thread);
+static void babel_init_routing_process(struct thread *thread);
static void babel_get_myid(void);
static void babel_initial_noise(void);
-static int babel_read_protocol (struct thread *thread);
-static int babel_main_loop(struct thread *thread);
+static void babel_read_protocol(struct thread *thread);
+static void babel_main_loop(struct thread *thread);
static void babel_set_timer(struct timeval *timeout);
static void babel_fill_with_next_timeout(struct timeval *tv);
static void
}
/* Threads. */
- thread_add_read(master, &babel_read_protocol, NULL, protocol_socket, &babel_routing_process->t_read);
+ thread_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);
}
/* thread reading entries form others babel daemons */
-static int
-babel_read_protocol (struct thread *thread)
+static void babel_read_protocol(struct thread *thread)
{
int rc;
struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
/* re-add thread */
thread_add_read(master, &babel_read_protocol, NULL, protocol_socket, &babel_routing_process->t_read);
- return 0;
}
/* 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 int
-babel_init_routing_process(struct thread *thread)
+static void babel_init_routing_process(struct thread *thread)
{
myseqno = (frr_weak_random() & 0xFFFF);
babel_get_myid();
debugf(BABEL_DEBUG_COMMON, "My ID is : %s.", format_eui64(myid));
babel_initial_noise();
babel_main_loop(thread);/* this function self-add to the t_update thread */
- return 0;
}
/* fill "myid" with an unique id (only if myid != {0}). */
/* 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)
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
}
/* Function used with timeout. */
-static int
-babel_main_loop(struct thread *thread)
+static void babel_main_loop(struct thread *thread)
{
struct timeval tv;
struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
/* it happens often to have less than 1 ms, it's bad. */
timeval_add_msec(&tv, &tv, 300);
babel_set_timer(&tv);
- return 0;
- }
+ return;
+ }
gettime(&babel_now);
}
assert(0); /* this line should never be reach */
- return 0;
}
static void
}
/* [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;
}