summaryrefslogtreecommitdiff
path: root/ldpd/ldpd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldpd/ldpd.c')
-rw-r--r--ldpd/ldpd.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c
index 0f9f055d02..8e546be93e 100644
--- a/ldpd/ldpd.c
+++ b/ldpd/ldpd.c
@@ -180,6 +180,7 @@ static struct quagga_signal_t ldp_signals[] =
};
static const struct frr_yang_module_info *const ldpd_yang_modules[] = {
+ &frr_vrf_info,
};
FRR_DAEMON_INFO(ldpd, LDP,
@@ -308,9 +309,15 @@ main(int argc, char *argv[])
exit(1);
}
- if (lflag || eflag)
- openzlog(ldpd_di.progname, "LDP", 0,
- LOG_CONS | LOG_NDELAY | LOG_PID, LOG_DAEMON);
+ if (lflag || eflag) {
+ struct zprivs_ids_t ids;
+
+ zprivs_preinit(&ldpd_privs);
+ zprivs_get_ids(&ids);
+
+ zlog_init(ldpd_di.progname, "LDP", 0,
+ ids.uid_normal, ids.gid_normal);
+ }
if (lflag)
lde();
else if (eflag)
@@ -486,7 +493,7 @@ ldpd_shutdown(void)
static pid_t
start_child(enum ldpd_process p, char *argv0, int fd_async, int fd_sync)
{
- char *argv[3];
+ char *argv[7];
int argc = 0, nullfd;
pid_t pid;
@@ -529,6 +536,11 @@ start_child(enum ldpd_process p, char *argv0, int fd_async, int fd_sync)
argv[argc++] = (char *)"-E";
break;
}
+
+ argv[argc++] = (char *)"-u";
+ argv[argc++] = (char *)ldpd_privs.user;
+ argv[argc++] = (char *)"-g";
+ argv[argc++] = (char *)ldpd_privs.group;
argv[argc++] = NULL;
execvp(argv0, argv);
@@ -1319,6 +1331,7 @@ merge_af(int af, struct ldpd_af_conf *af_conf, struct ldpd_af_conf *xa)
int stop_init_backoff = 0;
int remove_dynamic_tnbrs = 0;
int change_egress_label = 0;
+ int change_host_label = 0;
int reset_nbrs_ipv4 = 0;
int reset_nbrs = 0;
int update_sockets = 0;
@@ -1349,6 +1362,12 @@ merge_af(int af, struct ldpd_af_conf *af_conf, struct ldpd_af_conf *xa)
if ((af_conf->flags & F_LDPD_AF_EXPNULL) !=
(xa->flags & F_LDPD_AF_EXPNULL))
change_egress_label = 1;
+
+ /* changing config of host only fec filtering */
+ if ((af_conf->flags & F_LDPD_AF_ALLOCHOSTONLY)
+ != (xa->flags & F_LDPD_AF_ALLOCHOSTONLY))
+ change_host_label = 1;
+
af_conf->flags = xa->flags;
/* update the transport address */
@@ -1358,6 +1377,10 @@ merge_af(int af, struct ldpd_af_conf *af_conf, struct ldpd_af_conf *xa)
}
/* update ACLs */
+ if (strcmp(af_conf->acl_label_allocate_for,
+ xa->acl_label_allocate_for))
+ change_host_label = 1;
+
if (strcmp(af_conf->acl_label_advertise_to,
xa->acl_label_advertise_to) ||
strcmp(af_conf->acl_label_advertise_for,
@@ -1391,6 +1414,8 @@ merge_af(int af, struct ldpd_af_conf *af_conf, struct ldpd_af_conf *xa)
case PROC_LDE_ENGINE:
if (change_egress_label)
lde_change_egress_label(af);
+ if (change_host_label)
+ lde_change_host_label(af);
break;
case PROC_LDP_ENGINE:
if (stop_init_backoff)