static void parse_broadcast(const char *);
static void parse_linux_hz(const char *);
static void parse_linux_freq_scale(const char *);
-
-#if defined(HAVE_SCHED_SETSCHEDULER)
static void parse_sched_priority(const char *);
-#endif
-
-#if defined(HAVE_MLOCKALL)
static void parse_lockall(const char *);
-#endif
/* ================================================== */
/* Configuration variables */
static int set_linux_freq_scale = 0;
static double linux_freq_scale;
+static int sched_priority = 0;
+static int lock_memory = 0;
+
/* ================================================== */
typedef struct {
{"pidfile", 7, parse_pidfile},
{"broadcast", 9, parse_broadcast},
{"linux_hz", 8, parse_linux_hz},
- {"linux_freq_scale", 16, parse_linux_freq_scale}
-#if defined(HAVE_SCHED_SETSCHEDULER)
- ,{"sched_priority", 14, parse_sched_priority}
-#endif
-
-#if defined(HAVE_MLOCKALL)
- ,{"lock_all", 8, parse_lockall}
-#endif
-
+ {"linux_freq_scale", 16, parse_linux_freq_scale},
+ {"sched_priority", 14, parse_sched_priority},
+ {"lock_all", 8, parse_lockall}
};
static int n_commands = (sizeof(commands) / sizeof(commands[0]));
/* ================================================== */
-#if defined(HAVE_SCHED_SETSCHEDULER)
static void
parse_sched_priority(const char *line)
{
- if (SchedPriority == 0) { /* Command-line switch must have priority */
- sscanf(line, "%d", &SchedPriority);
+ if (sscanf(line, "%d", &sched_priority) != 1) {
+ LOG(LOGS_WARN, LOGF_Configure, "Could not read scheduling priority at line %d", line_number);
}
}
-#endif
-#if defined(HAVE_MLOCKALL)
+/* ================================================== */
+
static void
parse_lockall(const char *line)
{
- LockAll = 1;
+ lock_memory = 1;
}
-#endif
/* ================================================== */
*freq_scale = linux_freq_scale ;
}
+/* ================================================== */
+
+int
+CNF_GetSchedPriority(void)
+{
+ return sched_priority;
+}
+
+/* ================================================== */
+
+int
+CNF_GetLockMemory(void)
+{
+ return lock_memory;
+}
extern void CNF_SetupAccessRestrictions(void);
-#if defined(HAVE_SCHED_SETSCHEDULER)
-extern int SchedPriority;
-#endif
-
-#if defined(HAVE_MLOCKALL)
-extern int LockAll;
-#endif
+extern int CNF_GetSchedPriority(void);
+extern int CNF_GetLockMemory(void);
#endif /* GOT_CONF_H */
LOGF_Logging,
LOGF_Rtc,
LOGF_Regress,
+ LOGF_Sys,
LOGF_SysLinux,
LOGF_SysSolaris,
LOGF_SysSunOS,
int debug = 0;
int do_init_rtc = 0;
int other_pid;
-
-#if defined(HAVE_SCHED_SETSCHEDULER)
- int return_value = 0;
-#endif
+ int lock_memory = 0, sched_priority = 0;
LOG_Initialise();
if (!strcmp("-f", *argv)) {
++argv, --argc;
conf_file = *argv;
-
-#if defined(HAVE_SCHED_SETSCHEDULER)
- /* Get real-time scheduler priority */
} else if (!strcmp("-P", *argv)) {
++argv, --argc;
- return_value = sscanf(*argv, "%d", &SchedPriority);
- if (return_value != 1 || SchedPriority < 1 || SchedPriority > 99) {
- SchedPriority = 0;
- LOG(LOGS_WARN, LOGF_Main, "Bad scheduler priority: [%s]", *argv);
+ if (argc == 0 || sscanf(*argv, "%d", &sched_priority) != 1) {
+ LOG_FATAL(LOGF_Main, "Bad scheduler priority");
}
-#endif /* HAVE_SCHED_SETCHEDULER */
-
-#if defined(HAVE_MLOCKALL)
- /* Detect lockall switch */
} else if (!strcmp("-m", *argv)) {
- LockAll = 1;
-#endif /* HAVE_MLOCKALL */
-
+ lock_memory = 1;
} else if (!strcmp("-r", *argv)) {
reload = 1;
} else if (!strcmp("-u", *argv)) {
++argv, --argc;
- user = *argv;
+ if (argc == 0) {
+ LOG_FATAL(LOGF_Main, "Missing user name");
+ } else {
+ user = *argv;
+ }
} else if (!strcmp("-s", *argv)) {
do_init_rtc = 1;
} else if (!strcmp("-v", *argv) || !strcmp("--version",*argv)) {
RTC_Initialise();
RCL_Initialise();
- if (SchedPriority > 0) {
- SYS_SetScheduler(SchedPriority);
+ /* Command-line switch must have priority */
+ if (!sched_priority) {
+ sched_priority = CNF_GetSchedPriority();
+ }
+ if (sched_priority) {
+ SYS_SetScheduler(sched_priority);
}
- if (LockAll == 1 ) {
- SYS_MemLockAll(LockAll);
+ if (lock_memory || CNF_GetLockMemory()) {
+ SYS_LockMemory();
}
- if (user)
+ if (user) {
SYS_DropRoot(user);
+ }
REF_Initialise();
SST_Initialise();
*/
#include "sys.h"
+#include "logging.h"
#if defined (LINUX)
#include "sys_linux.h"
{
#if defined(LINUX) && defined (FEAT_LINUXCAPS)
SYS_Linux_DropRoot(user);
+#else
+ LOG_FATAL(LOGF_Sys, "dropping root privileges not supported");
#endif
+
+ return;
}
/* ================================================== */
{
#if defined(LINUX) && defined(HAVE_SCHED_SETSCHEDULER)
SYS_Linux_SetScheduler(SchedPriority);
+#else
+ LOG_FATAL(LOGF_Sys, "scheduler priority setting not supported");
#endif
- ;;
+
+ return;
}
-void SYS_MemLockAll(int LockAll)
+/* ================================================== */
+
+void SYS_LockMemory(void)
{
#if defined(LINUX) && defined(HAVE_MLOCKALL)
- SYS_Linux_MemLockAll(LockAll);
+ SYS_Linux_MemLockAll(1);
+#else
+ LOG_FATAL(LOGF_Sys, "memory locking not supported");
#endif
- ;;
+
+ return;
}
/* ================================================== */
-
-
-
extern void SYS_DropRoot(char *user);
extern void SYS_SetScheduler(int SchedPriority);
-extern void SYS_MemLockAll(int LockAll);
+extern void SYS_LockMemory(void);
#endif /* GOT_SYS_H */
int pmax, pmin;
struct sched_param sched;
- if (SchedPriority > 0) {
+ if (SchedPriority < 1 || SchedPriority > 99) {
+ LOG_FATAL(LOGF_SysLinux, "Bad scheduler priority: %d", SchedPriority);
+ } else {
sched.sched_priority = SchedPriority;
pmax = sched_get_priority_max(SCHED_FIFO);
pmin = sched_get_priority_min(SCHED_FIFO);