summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-06-04 11:02:20 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-06-04 11:02:20 +0200
commit0b65b09f15783b067343f7a2dcf67ae1f1e27dc7 (patch)
tree6aae73353ac5c8fc45c9d8c6095dc27fd15053d3
parent4722d3bac43062a9213a08ed2435b8ef9b426789 (diff)
proc: move out process specific management functions
Move them out of xutils, so that we can maintain them separately. Also simplify things a bit. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-rw-r--r--netsniff-ng.c5
-rw-r--r--netsniff-ng/Makefile1
-rw-r--r--proc.c66
-rw-r--r--proc.h8
-rw-r--r--trafgen.c1
-rw-r--r--trafgen/Makefile1
-rw-r--r--xutils.c71
-rw-r--r--xutils.h6
8 files changed, 80 insertions, 79 deletions
diff --git a/netsniff-ng.c b/netsniff-ng.c
index f20ebe0..234d781 100644
--- a/netsniff-ng.c
+++ b/netsniff-ng.c
@@ -31,6 +31,7 @@
#include "built_in.h"
#include "pcap_io.h"
#include "privs.h"
+#include "proc.h"
#include "bpf.h"
#include "ioops.h"
#include "die.h"
@@ -1354,8 +1355,8 @@ int main(int argc, char **argv)
tprintf_init();
if (prio_high) {
- set_proc_prio(get_default_proc_prio());
- set_sched_status(get_default_sched_policy(), get_default_sched_prio());
+ set_proc_prio(-20);
+ set_sched_status(SCHED_FIFO, sched_get_priority_max(SCHED_FIFO));
}
if (ctx.device_in && (device_mtu(ctx.device_in) ||
diff --git a/netsniff-ng/Makefile b/netsniff-ng/Makefile
index 23d7b5d..104a42f 100644
--- a/netsniff-ng/Makefile
+++ b/netsniff-ng/Makefile
@@ -34,6 +34,7 @@ netsniff-ng-objs = dissector.o \
proto_80211_mac_hdr.o \
promisc.o \
privs.o \
+ proc.o \
dev.o \
str.o \
irq.o \
diff --git a/proc.c b/proc.c
new file mode 100644
index 0000000..39d661e
--- /dev/null
+++ b/proc.c
@@ -0,0 +1,66 @@
+#define _GNU_SOURCE
+#include <sched.h>
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+
+#include "proc.h"
+#include "die.h"
+
+void cpu_affinity(int cpu)
+{
+ int ret;
+ cpu_set_t cpu_bitmask;
+
+ CPU_ZERO(&cpu_bitmask);
+ CPU_SET(cpu, &cpu_bitmask);
+
+ ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask),
+ &cpu_bitmask);
+ if (ret)
+ panic("Can't set this cpu affinity!\n");
+}
+
+int set_proc_prio(int priority)
+{
+ int ret = setpriority(PRIO_PROCESS, getpid(), priority);
+ if (ret)
+ panic("Can't set nice val to %i!\n", priority);
+
+ return 0;
+}
+
+int set_sched_status(int policy, int priority)
+{
+ int ret, min_prio, max_prio;
+ struct sched_param sp;
+
+ max_prio = sched_get_priority_max(policy);
+ min_prio = sched_get_priority_min(policy);
+
+ if (max_prio == -1 || min_prio == -1)
+ printf("Cannot determine scheduler prio limits!\n");
+ else if (priority < min_prio)
+ priority = min_prio;
+ else if (priority > max_prio)
+ priority = max_prio;
+
+ memset(&sp, 0, sizeof(sp));
+ sp.sched_priority = priority;
+
+ ret = sched_setscheduler(getpid(), policy, &sp);
+ if (ret) {
+ printf("Cannot set scheduler policy!\n");
+ return -EINVAL;
+ }
+
+ ret = sched_setparam(getpid(), &sp);
+ if (ret) {
+ printf("Cannot set scheduler prio!\n");
+ return -EINVAL;
+ }
+
+ return 0;
+}
diff --git a/proc.h b/proc.h
new file mode 100644
index 0000000..0a31f36
--- /dev/null
+++ b/proc.h
@@ -0,0 +1,8 @@
+#ifndef PROC_H
+#define PROC_H
+
+extern void cpu_affinity(int cpu);
+extern int set_proc_prio(int prio);
+extern int set_sched_status(int policy, int priority);
+
+#endif /* PROC_H */
diff --git a/trafgen.c b/trafgen.c
index 628e3be..e725af8 100644
--- a/trafgen.c
+++ b/trafgen.c
@@ -38,6 +38,7 @@
#include "cpus.h"
#include "lockme.h"
#include "privs.h"
+#include "proc.h"
#include "mac80211.h"
#include "xutils.h"
#include "ioops.h"
diff --git a/trafgen/Makefile b/trafgen/Makefile
index 2df9dbf..c6e8591 100644
--- a/trafgen/Makefile
+++ b/trafgen/Makefile
@@ -6,6 +6,7 @@ trafgen-objs = xmalloc.o \
ioops.o \
xutils.o \
privs.o \
+ proc.o \
dev.o \
irq.o \
str.o \
diff --git a/xutils.c b/xutils.c
index b1f73a4..e07ce9e 100644
--- a/xutils.c
+++ b/xutils.c
@@ -405,77 +405,6 @@ void register_signal_f(int signal, void (*handler)(int), int flags)
sigaction(signal, &saction, NULL);
}
-void cpu_affinity(int cpu)
-{
- int ret;
- cpu_set_t cpu_bitmask;
-
- CPU_ZERO(&cpu_bitmask);
- CPU_SET(cpu, &cpu_bitmask);
-
- ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask),
- &cpu_bitmask);
- if (ret)
- panic("Can't set this cpu affinity!\n");
-}
-
-int set_proc_prio(int priority)
-{
- int ret = setpriority(PRIO_PROCESS, getpid(), priority);
- if (ret)
- panic("Can't set nice val to %i!\n", priority);
-
- return 0;
-}
-
-int set_sched_status(int policy, int priority)
-{
- int ret, min_prio, max_prio;
- struct sched_param sp;
-
- max_prio = sched_get_priority_max(policy);
- min_prio = sched_get_priority_min(policy);
-
- if (max_prio == -1 || min_prio == -1)
- printf("Cannot determine scheduler prio limits!\n");
- else if (priority < min_prio)
- priority = min_prio;
- else if (priority > max_prio)
- priority = max_prio;
-
- memset(&sp, 0, sizeof(sp));
- sp.sched_priority = priority;
-
- ret = sched_setscheduler(getpid(), policy, &sp);
- if (ret) {
- printf("Cannot set scheduler policy!\n");
- return -EINVAL;
- }
-
- ret = sched_setparam(getpid(), &sp);
- if (ret) {
- printf("Cannot set scheduler prio!\n");
- return -EINVAL;
- }
-
- return 0;
-}
-
-int get_default_sched_policy(void)
-{
- return SCHED_FIFO;
-}
-
-int get_default_sched_prio(void)
-{
- return sched_get_priority_max(get_default_sched_policy());
-}
-
-int get_default_proc_prio(void)
-{
- return -20;
-}
-
void set_system_socket_memory(int *vals, size_t len)
{
bug_on(len != 4);
diff --git a/xutils.h b/xutils.h
index 53bdca3..83d710a 100644
--- a/xutils.h
+++ b/xutils.h
@@ -47,12 +47,6 @@ extern void register_signal(int signal, void (*handler)(int));
extern void register_signal_f(int signal, void (*handler)(int), int flags);
extern void set_epoll_descriptor(int fd_epoll, int action, int fd_toadd, int events);
extern int set_epoll_descriptor2(int fd_epoll, int action, int fd_toadd, int events);
-extern void cpu_affinity(int cpu);
-extern int set_proc_prio(int prio);
-extern int set_sched_status(int policy, int priority);
-extern int get_default_sched_policy(void);
-extern int get_default_sched_prio(void);
-extern int get_default_proc_prio(void);
extern void set_system_socket_memory(int *vals, size_t len);
extern void reset_system_socket_memory(int *vals, size_t len);
extern void set_itimer_interval_value(struct itimerval *itimer, unsigned long sec,