From 35cadacd2bb9383686753731e31bd7e145fb2506 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 06:24:32 +0200 Subject: Merging upstream version 10.0. Signed-off-by: Daniel Baumann --- ldpd/control.c | 1 + ldpd/init.c | 6 ++++-- ldpd/lde.c | 6 +----- ldpd/ldp.h | 6 ++++++ ldpd/ldp_vty_exec.c | 2 +- ldpd/ldp_zebra.c | 13 +++++++------ ldpd/ldpd.c | 33 ++++++++++----------------------- ldpd/ldpd.h | 22 +++++++++++----------- ldpd/neighbor.c | 15 +++------------ ldpd/socket.c | 1 + 10 files changed, 45 insertions(+), 60 deletions(-) (limited to 'ldpd') diff --git a/ldpd/control.c b/ldpd/control.c index db52d46..a08ce4c 100644 --- a/ldpd/control.c +++ b/ldpd/control.c @@ -6,6 +6,7 @@ */ #include +#include #include #include "ldpd.h" diff --git a/ldpd/init.c b/ldpd/init.c index f0cb98e..ef78247 100644 --- a/ldpd/init.c +++ b/ldpd/init.c @@ -229,9 +229,11 @@ send_capability(struct nbr *nbr, uint16_t capability, int enable) * Announcement Parameter in Capability messages sent to * its peers". */ - /* FALLTHROUGH */ + fatalx("send_capability: An LDP speaker MUST NOT include the Dynamic Capability Announcement Parameter"); + break; default: fatalx("send_capability: unsupported capability"); + break; } if (err) { @@ -333,7 +335,7 @@ recv_capability(struct nbr *nbr, char *buf, uint16_t len) * parameter and process any other Capability Parameters * in the message". */ - /* FALLTHROUGH */ + fallthrough; default: if (!CHECK_FLAG(ntohs(tlv.type), UNKNOWN_FLAG)) send_notification_rtlvs(nbr, S_UNSSUPORTDCAP, diff --git a/ldpd/lde.c b/ldpd/lde.c index c7e915d..ef4aeca 100644 --- a/ldpd/lde.c +++ b/ldpd/lde.c @@ -2135,12 +2135,8 @@ static void zclient_sync_retry(struct event *thread) */ static void zclient_sync_init(void) { - struct zclient_options options = zclient_options_default; - - options.synchronous = true; - /* Initialize special zclient for synchronous message exchanges. */ - zclient_sync = zclient_new(master, &options, NULL, 0); + zclient_sync = zclient_new(master, &zclient_options_sync, NULL, 0); zclient_sync->sock = -1; zclient_sync->redist_default = ZEBRA_ROUTE_LDP; zclient_sync->session_id = 1; /* Distinguish from main session */ diff --git a/ldpd/ldp.h b/ldpd/ldp.h index 33cf93c..1f0fdb5 100644 --- a/ldpd/ldp.h +++ b/ldpd/ldp.h @@ -12,6 +12,12 @@ #ifndef _LDP_H_ #define _LDP_H_ +/* this does not include "%s/", frr_runstatedir because the command-line + * override option specifies a *directory* rather than a full file name. + * Therefore the final part is needed on its own. + */ +#define LDPD_SOCK_NAME "ldpd.sock" + /* misc */ #define LDP_VERSION 1 #define LDP_PORT 646 diff --git a/ldpd/ldp_vty_exec.c b/ldpd/ldp_vty_exec.c index 906b5c1..f3bcd1b 100644 --- a/ldpd/ldp_vty_exec.c +++ b/ldpd/ldp_vty_exec.c @@ -1106,7 +1106,7 @@ show_lib_msg(struct vty *vty, struct imsg *imsg, struct show_params *params) if (params->lib.remote_label != NO_LABEL && params->lib.remote_label != rt->remote_label) return (0); - /* FALLTHROUGH */ + fallthrough; case IMSG_CTL_SHOW_LIB_RCVD: rt = imsg->data; diff --git a/ldpd/ldp_zebra.c b/ldpd/ldp_zebra.c index 0fd5d46..df682a1 100644 --- a/ldpd/ldp_zebra.c +++ b/ldpd/ldp_zebra.c @@ -330,7 +330,6 @@ void kif_redistribute(const char *ifname) { struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT); - struct listnode *cnode; struct interface *ifp; struct connected *ifc; struct kif kif; @@ -343,7 +342,7 @@ kif_redistribute(const char *ifname) ifp2kif(ifp, &kif); main_imsg_compose_both(IMSG_IFSTATUS, &kif, sizeof(kif)); - for (ALL_LIST_ELEMENTS_RO(ifp->connected, cnode, ifc)) { + frr_each (if_connected, ifp->connected, ifc) { ifc2kaddr(ifp, ifc, &ka); main_imsg_compose_ldpe(IMSG_NEWADDR, 0, &ka, sizeof(ka)); } @@ -400,7 +399,6 @@ ldp_ifp_destroy(struct interface *ifp) static int ldp_interface_status_change(struct interface *ifp) { - struct listnode *node; struct connected *ifc; struct kif kif; struct kaddr ka; @@ -411,12 +409,12 @@ ldp_interface_status_change(struct interface *ifp) main_imsg_compose_both(IMSG_IFSTATUS, &kif, sizeof(kif)); if (if_is_operative(ifp)) { - for (ALL_LIST_ELEMENTS_RO(ifp->connected, node, ifc)) { + frr_each (if_connected, ifp->connected, ifc) { ifc2kaddr(ifp, ifc, &ka); main_imsg_compose_ldpe(IMSG_NEWADDR, 0, &ka, sizeof(ka)); } } else { - for (ALL_LIST_ELEMENTS_RO(ifp->connected, node, ifc)) { + frr_each (if_connected, ifp->connected, ifc) { ifc2kaddr(ifp, ifc, &ka); main_imsg_compose_ldpe(IMSG_DELADDR, 0, &ka, sizeof(ka)); } @@ -682,7 +680,10 @@ static zclient_handler *const ldp_handlers[] = { void ldp_zebra_init(struct event_loop *master) { - if_zapi_callbacks(ldp_ifp_create, ldp_ifp_up, ldp_ifp_down, ldp_ifp_destroy); + hook_register_prio(if_real, 0, ldp_ifp_create); + hook_register_prio(if_up, 0, ldp_ifp_up); + hook_register_prio(if_down, 0, ldp_ifp_down); + hook_register_prio(if_unreal, 0, ldp_ifp_destroy); /* Set default values. */ zclient = zclient_new(master, &zclient_options_default, ldp_handlers, diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c index 3c616d4..da29a4f 100644 --- a/ldpd/ldpd.c +++ b/ldpd/ldpd.c @@ -9,6 +9,9 @@ */ #include + +#include +#include #include #include "ldpd.h" @@ -101,7 +104,6 @@ void ldp_agentx_enabled(void) enum ldpd_process ldpd_process; #define LDP_DEFAULT_CONFIG "ldpd.conf" -#define LDP_VTY_PORT 2612 /* Master of threads. */ struct event_loop *master; @@ -194,6 +196,7 @@ static const struct frr_yang_module_info *const ldpd_yang_modules[] = { &frr_vrf_info, }; +/* clang-format off */ FRR_DAEMON_INFO(ldpd, LDP, .vty_port = LDP_VTY_PORT, @@ -207,6 +210,7 @@ FRR_DAEMON_INFO(ldpd, LDP, .yang_modules = ldpd_yang_modules, .n_yang_modules = array_size(ldpd_yang_modules), ); +/* clang-format on */ static void ldp_config_fork_apply(struct event *t) { @@ -229,12 +233,8 @@ main(int argc, char *argv[]) int lflag = 0, eflag = 0; int pipe_parent2ldpe[2], pipe_parent2ldpe_sync[2]; int pipe_parent2lde[2], pipe_parent2lde_sync[2]; - char *ctl_sock_name; bool ctl_sock_used = false; - snprintf(ctl_sock_path, sizeof(ctl_sock_path), LDPD_SOCKET, - "", ""); - ldpd_process = PROC_MAIN; log_procname = log_procnames[ldpd_process]; @@ -260,21 +260,8 @@ main(int argc, char *argv[]) break; case OPTION_CTLSOCK: ctl_sock_used = true; - ctl_sock_name = strrchr(LDPD_SOCKET, '/'); - if (ctl_sock_name) - /* skip '/' */ - ctl_sock_name++; - else - /* - * LDPD_SOCKET configured as relative path - * during config? Should really never happen for - * sensible config - */ - ctl_sock_name = (char *)LDPD_SOCKET; - strlcpy(ctl_sock_path, optarg, sizeof(ctl_sock_path)); - strlcat(ctl_sock_path, "/", sizeof(ctl_sock_path)); - strlcat(ctl_sock_path, ctl_sock_name, - sizeof(ctl_sock_path)); + snprintf(ctl_sock_path, sizeof(ctl_sock_path), + "%s/" LDPD_SOCK_NAME, optarg); break; case 'n': init.instance = atoi(optarg); @@ -292,9 +279,9 @@ main(int argc, char *argv[]) } } - if (ldpd_di.pathspace && !ctl_sock_used) - snprintf(ctl_sock_path, sizeof(ctl_sock_path), LDPD_SOCKET, - "/", ldpd_di.pathspace); + if (!ctl_sock_used) + snprintf(ctl_sock_path, sizeof(ctl_sock_path), + "%s/" LDPD_SOCK_NAME, frr_runstatedir); strlcpy(init.user, ldpd_privs.user, sizeof(init.user)); strlcpy(init.group, ldpd_privs.group, sizeof(init.group)); diff --git a/ldpd/ldpd.h b/ldpd/ldpd.h index 1fec5be..81c6ba3 100644 --- a/ldpd/ldpd.h +++ b/ldpd/ldpd.h @@ -341,7 +341,7 @@ struct iface_ldp_sync { struct iface { RB_ENTRY(iface) entry; - char name[INTERFACE_NAMSIZ]; + char name[IFNAMSIZ]; ifindex_t ifindex; struct if_addr_head addr_list; struct in6_addr linklocal; @@ -447,7 +447,7 @@ struct ldp_entity_stats { struct l2vpn_if { RB_ENTRY(l2vpn_if) entry; struct l2vpn *l2vpn; - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; ifindex_t ifindex; int operative; uint8_t mac[ETH_ALEN]; @@ -464,7 +464,7 @@ struct l2vpn_pw { int af; union ldpd_addr addr; uint32_t pwid; - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; ifindex_t ifindex; bool enabled; uint32_t remote_group; @@ -496,7 +496,7 @@ struct l2vpn { int type; int pw_type; int mtu; - char br_ifname[INTERFACE_NAMSIZ]; + char br_ifname[IFNAMSIZ]; ifindex_t br_ifindex; struct l2vpn_if_head if_tree; struct l2vpn_pw_head pw_tree; @@ -618,7 +618,7 @@ struct kroute { }; struct kaddr { - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; ifindex_t ifindex; int af; union ldpd_addr addr; @@ -627,7 +627,7 @@ struct kaddr { }; struct kif { - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; ifindex_t ifindex; int flags; int operative; @@ -645,7 +645,7 @@ struct acl_check { /* control data structures */ struct ctl_iface { int af; - char name[INTERFACE_NAMSIZ]; + char name[IFNAMSIZ]; ifindex_t ifindex; int state; enum iface_type type; @@ -656,7 +656,7 @@ struct ctl_iface { }; struct ctl_disc_if { - char name[INTERFACE_NAMSIZ]; + char name[IFNAMSIZ]; int active_v4; int active_v6; int no_adj; @@ -672,7 +672,7 @@ struct ctl_adj { int af; struct in_addr id; enum hello_type type; - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; union ldpd_addr src_addr; uint16_t holdtime; uint16_t holdtime_remaining; @@ -712,7 +712,7 @@ struct ctl_rt { struct ctl_pw { uint16_t type; char l2vpn_name[L2VPN_NAME_LEN]; - char ifname[INTERFACE_NAMSIZ]; + char ifname[IFNAMSIZ]; uint32_t pwid; struct in_addr lsr_id; uint32_t local_label; @@ -728,7 +728,7 @@ struct ctl_pw { }; struct ctl_ldp_sync { - char name[INTERFACE_NAMSIZ]; + char name[IFNAMSIZ]; ifindex_t ifindex; bool in_sync; bool timer_running; diff --git a/ldpd/neighbor.c b/ldpd/neighbor.c index 5209c55..d40728b 100644 --- a/ldpd/neighbor.c +++ b/ldpd/neighbor.c @@ -505,21 +505,12 @@ nbr_start_idtimer(struct nbr *nbr) { int secs; - secs = INIT_DELAY_TMR; - switch(nbr->idtimer_cnt) { - default: + if (nbr->idtimer_cnt > 2) { /* do not further increase the counter */ secs = MAX_DELAY_TMR; - break; - case 2: - secs *= 2; - /* FALLTHROUGH */ - case 1: - secs *= 2; - /* FALLTHROUGH */ - case 0: + } else { + secs = INIT_DELAY_TMR * (1 << nbr->idtimer_cnt); nbr->idtimer_cnt++; - break; } EVENT_OFF(nbr->initdelay_timer); diff --git a/ldpd/socket.c b/ldpd/socket.c index 6b7e475..71d5c21 100644 --- a/ldpd/socket.c +++ b/ldpd/socket.c @@ -9,6 +9,7 @@ */ #include +#include #include "ldpd.h" #include "ldpe.h" -- cgit v1.2.3