summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-06-03 23:36:14 +0200
committerDaniel Borkmann <dborkman@redhat.com>2013-06-03 23:37:11 +0200
commit8bb67e4e60d1c0d9fba66c1b28e62e4d92d8d4ce (patch)
tree7237b73c834ed7d27dec252253e44856e5b615cf
parent3e071a78f2a5c7424340b4c8b446d51e82413c13 (diff)
iosched: break out io scheduling functions from xutils
Break this stuff out, for better maintainability and readability. Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-rw-r--r--iosched.c76
-rw-r--r--iosched.h8
-rw-r--r--netsniff-ng/Makefile1
-rw-r--r--pcap_mm.c1
-rw-r--r--pcap_rw.c1
-rw-r--r--pcap_sg.c1
-rw-r--r--xutils.c59
-rw-r--r--xutils.h3
8 files changed, 88 insertions, 62 deletions
diff --git a/iosched.c b/iosched.c
new file mode 100644
index 0000000..7417973
--- /dev/null
+++ b/iosched.c
@@ -0,0 +1,76 @@
+/*
+ * netsniff-ng - the packet sniffing beast
+ * Copyright 2009, 2010 Daniel Borkmann.
+ * Copyright 2010 Marek Polacek.
+ * Subject to the GPL, version 2.
+ */
+
+#include <sys/syscall.h>
+
+#include "iosched.h"
+#include "die.h"
+
+#define IOPRIO_CLASS_SHIFT 13
+
+enum {
+ ioprio_class_none,
+ ioprio_class_rt,
+ ioprio_class_be,
+ ioprio_class_idle,
+};
+
+enum {
+ ioprio_who_process = 1,
+ ioprio_who_pgrp,
+ ioprio_who_user,
+};
+
+static const char *const to_prio[] = {
+ "none",
+ "realtime",
+ "best-effort",
+ "idle",
+};
+
+static inline int ioprio_set(int which, int who, int ioprio)
+{
+ return syscall(SYS_ioprio_set, which, who, ioprio);
+}
+
+static inline int ioprio_get(int which, int who)
+{
+ return syscall(SYS_ioprio_get, which, who);
+}
+
+static void ioprio_setpid(pid_t pid, int ioprio, int ioclass)
+{
+ int ret = ioprio_set(ioprio_who_process, pid,
+ ioprio | ioclass << IOPRIO_CLASS_SHIFT);
+ if (ret < 0)
+ panic("Failed to set io prio for pid!\n");
+}
+
+void ioprio_print(void)
+{
+ int ioprio = ioprio_get(ioprio_who_process, getpid());
+ if (ioprio < 0)
+ panic("Failed to fetch io prio for pid!\n");
+ else {
+ int ioclass = ioprio >> IOPRIO_CLASS_SHIFT;
+ if (ioclass != ioprio_class_idle) {
+ ioprio &= 0xff;
+ printf("%s: prio %d\n", to_prio[ioclass], ioprio);
+ } else
+ printf("%s\n", to_prio[ioclass]);
+ }
+}
+
+void set_ioprio_rt(void)
+{
+ ioprio_setpid(getpid(), 4, ioprio_class_rt);
+}
+
+void set_ioprio_be(void)
+{
+ ioprio_setpid(getpid(), 4, ioprio_class_be);
+}
diff --git a/iosched.h b/iosched.h
new file mode 100644
index 0000000..19ff1ff
--- /dev/null
+++ b/iosched.h
@@ -0,0 +1,8 @@
+#ifndef IOSCHED_H
+#define IOSCHED_H
+
+extern void ioprio_print(void);
+extern void set_ioprio_rt(void);
+extern void set_ioprio_be(void);
+
+#endif /* IOSCHED_H */
diff --git a/netsniff-ng/Makefile b/netsniff-ng/Makefile
index 7d5f89c..53f1fea 100644
--- a/netsniff-ng/Makefile
+++ b/netsniff-ng/Makefile
@@ -33,6 +33,7 @@ netsniff-ng-objs = dissector.o \
proto_mpls_unicast.o \
proto_80211_mac_hdr.o \
irq.o \
+ iosched.o \
xio.o \
xutils.o \
xmalloc.o \
diff --git a/pcap_mm.c b/pcap_mm.c
index 28b0469..122b7ef 100644
--- a/pcap_mm.c
+++ b/pcap_mm.c
@@ -17,6 +17,7 @@
#include "xio.h"
#include "xutils.h"
#include "built_in.h"
+#include "iosched.h"
static size_t map_size = 0;
static char *ptr_va_start, *ptr_va_curr;
diff --git a/pcap_rw.c b/pcap_rw.c
index 4d95c47..29d11c5 100644
--- a/pcap_rw.c
+++ b/pcap_rw.c
@@ -16,6 +16,7 @@
#include "xutils.h"
#include "xio.h"
#include "die.h"
+#include "iosched.h"
static ssize_t pcap_rw_write(int fd, pcap_pkthdr_t *phdr, enum pcap_type type,
const uint8_t *packet, size_t len)
diff --git a/pcap_sg.c b/pcap_sg.c
index 6902001..012fb1b 100644
--- a/pcap_sg.c
+++ b/pcap_sg.c
@@ -16,6 +16,7 @@
#include "xio.h"
#include "xutils.h"
#include "built_in.h"
+#include "iosched.h"
static struct iovec iov[1024] __cacheline_aligned;
static off_t iov_off_rd = 0, iov_slot = 0;
diff --git a/xutils.c b/xutils.c
index eea258c..8856b3a 100644
--- a/xutils.c
+++ b/xutils.c
@@ -2,7 +2,6 @@
* netsniff-ng - the packet sniffing beast
* Copyright 2009, 2010 Daniel Borkmann.
* Copyright 2009, 2010 Emmanuel Roullit.
- * Copyright 2010 Marek Polacek.
* Subject to the GPL, version 2.
*/
@@ -46,21 +45,6 @@
#include "ring.h"
#include "built_in.h"
-#define IOPRIO_CLASS_SHIFT 13
-
-enum {
- ioprio_class_none,
- ioprio_class_rt,
- ioprio_class_be,
- ioprio_class_idle,
-};
-
-enum {
- ioprio_who_process = 1,
- ioprio_who_pgrp,
- ioprio_who_user,
-};
-
enum {
sock_rmem_max = 0,
sock_rmem_def,
@@ -723,49 +707,6 @@ int set_sched_status(int policy, int priority)
return 0;
}
-static inline int ioprio_set(int which, int who, int ioprio)
-{
- return syscall(SYS_ioprio_set, which, who, ioprio);
-}
-
-static inline int ioprio_get(int which, int who)
-{
- return syscall(SYS_ioprio_get, which, who);
-}
-
-static void ioprio_setpid(pid_t pid, int ioprio, int ioclass)
-{
- int ret = ioprio_set(ioprio_who_process, pid,
- ioprio | ioclass << IOPRIO_CLASS_SHIFT);
- if (ret < 0)
- panic("Failed to set io prio for pid!\n");
-}
-
-void ioprio_print(void)
-{
- int ioprio = ioprio_get(ioprio_who_process, getpid());
- if (ioprio < 0)
- panic("Failed to fetch io prio for pid!\n");
- else {
- int ioclass = ioprio >> IOPRIO_CLASS_SHIFT;
- if (ioclass != ioprio_class_idle) {
- ioprio &= 0xff;
- printf("%s: prio %d\n", to_prio[ioclass], ioprio);
- } else
- printf("%s\n", to_prio[ioclass]);
- }
-}
-
-void set_ioprio_rt(void)
-{
- ioprio_setpid(getpid(), 4, ioprio_class_rt);
-}
-
-void set_ioprio_be(void)
-{
- ioprio_setpid(getpid(), 4, ioprio_class_be);
-}
-
void xlockme(void)
{
if (mlockall(MCL_CURRENT | MCL_FUTURE) != 0)
diff --git a/xutils.h b/xutils.h
index ce8ee75..ca1a8c5 100644
--- a/xutils.h
+++ b/xutils.h
@@ -69,9 +69,6 @@ extern void cpu_affinity(int cpu);
extern int set_cpu_affinity(char *str, int inverted);
extern int set_proc_prio(int prio);
extern int set_sched_status(int policy, int priority);
-extern void ioprio_print(void);
-extern void set_ioprio_rt(void);
-extern void set_ioprio_be(void);
extern size_t strlcpy(char *dest, const char *src, size_t size);
extern int slprintf(char *dst, size_t size, const char *fmt, ...) __check_format_printf(3, 4);
extern int slprintf_nocheck(char *dst, size_t size, const char *fmt, ...);