xutils: put commonly used code into xutils, remove deprecated one
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 29 Jan 2013 14:20:37 +0000 (29 15:20 +0100)
committerDaniel Borkmann <dborkman@redhat.com>
Tue, 29 Jan 2013 14:20:37 +0000 (29 15:20 +0100)
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
netsniff-ng.c
trafgen.c
xutils.c
xutils.h

index 3004c33..b711097 100644 (file)
@@ -69,7 +69,7 @@ volatile sig_atomic_t sigint = 0;
 
 static volatile bool next_dump = false;
 
-static const char *short_options = "d:i:o:rf:MJt:S:k:n:b:B:HQmcsqXlvhF:RGAP:Vu:g:T:D";
+static const char *short_options = "d:i:o:rf:MJt:S:k:n:b:HQmcsqXlvhF:RGAP:Vu:g:T:D";
 static const struct option long_options[] = {
        {"dev",                 required_argument,      NULL, 'd'},
        {"in",                  required_argument,      NULL, 'i'},
@@ -81,7 +81,6 @@ static const struct option long_options[] = {
        {"ring-size",           required_argument,      NULL, 'S'},
        {"kernel-pull",         required_argument,      NULL, 'k'},
        {"bind-cpu",            required_argument,      NULL, 'b'},
-       {"unbind-cpu",          required_argument,      NULL, 'B'},
        {"prefix",              required_argument,      NULL, 'P'},
        {"user",                required_argument,      NULL, 'u'},
        {"group",               required_argument,      NULL, 'g'},
@@ -113,26 +112,6 @@ static struct itimerval itimer;
 
 static unsigned long frame_count_max = 0, interval = TX_KERNEL_PULL_INT;
 
-#define set_system_socket_memory(vals) \
-       do { \
-               if ((vals[0] = get_system_socket_mem(sock_rmem_max)) < SMEM_SUG_MAX) \
-                       set_system_socket_mem(sock_rmem_max, SMEM_SUG_MAX); \
-               if ((vals[1] = get_system_socket_mem(sock_rmem_def)) < SMEM_SUG_DEF) \
-                       set_system_socket_mem(sock_rmem_def, SMEM_SUG_DEF); \
-               if ((vals[2] = get_system_socket_mem(sock_wmem_max)) < SMEM_SUG_MAX) \
-                       set_system_socket_mem(sock_wmem_max, SMEM_SUG_MAX); \
-               if ((vals[3] = get_system_socket_mem(sock_wmem_def)) < SMEM_SUG_DEF) \
-                       set_system_socket_mem(sock_wmem_def, SMEM_SUG_DEF); \
-       } while (0)
-
-#define reset_system_socket_memory(vals) \
-       do { \
-               set_system_socket_mem(sock_rmem_max, vals[0]); \
-               set_system_socket_mem(sock_rmem_def, vals[1]); \
-               set_system_socket_mem(sock_wmem_max, vals[2]); \
-               set_system_socket_mem(sock_wmem_def, vals[3]); \
-       } while (0)
-
 #define __pcap_io              pcap_ops[ctx->pcap]
 
 static void signal_handler(int number)
@@ -1117,7 +1096,7 @@ static void header(void)
 int main(int argc, char **argv)
 {
        char *ptr;
-       int c, i, j, opt_index, ops_touched = 0, vals[4] = {0};
+       int c, i, j, cpu_tmp, opt_index, ops_touched = 0, vals[4] = {0};
        bool prio_high = false, setsockmem = true;
        void (*main_loop)(struct ctx *ctx) = NULL;
        struct ctx ctx = {
@@ -1218,13 +1197,11 @@ int main(int argc, char **argv)
                        ctx.reserve_size *= strtol(optarg, NULL, 0);
                        break;
                case 'b':
-                       set_cpu_affinity(optarg, 0);
-                       /* Take the first CPU for rebinding the IRQ */
+                       cpu_tmp = strtol(optarg, NULL, 0);
+
+                       cpu_affinity(cpu_tmp);
                        if (ctx.cpu != -2)
-                               ctx.cpu = strtol(optarg, NULL, 0);
-                       break;
-               case 'B':
-                       set_cpu_affinity(optarg, 1);
+                               ctx.cpu = cpu_tmp;
                        break;
                case 'H':
                        prio_high = true;
@@ -1333,7 +1310,6 @@ int main(int argc, char **argv)
                        case 'T':
                        case 'u':
                        case 'g':
-                       case 'B':
                        case 'e':
                                panic("Option -%c requires an argument!\n",
                                      optopt);
@@ -1411,14 +1387,14 @@ int main(int argc, char **argv)
        bug_on(!main_loop);
 
        if (setsockmem)
-               set_system_socket_memory(vals);
+               set_system_socket_memory(vals, array_size(vals));
        xlockme();
 
        main_loop(&ctx);
 
        xunlockme();
        if (setsockmem)
-               reset_system_socket_memory(vals);
+               reset_system_socket_memory(vals, array_size(vals));
 
        tprintf_cleanup();
 
index 2d3a399..b18201c 100644 (file)
--- a/trafgen.c
+++ b/trafgen.c
@@ -122,26 +122,6 @@ unsigned int seed;
 #define CPU_STATS_STATE_CHK    2
 #define CPU_STATS_STATE_RES    4
 
-#define set_system_socket_memory(vals) \
-       do { \
-               if ((vals[0] = get_system_socket_mem(sock_rmem_max)) < SMEM_SUG_MAX) \
-                       set_system_socket_mem(sock_rmem_max, SMEM_SUG_MAX); \
-               if ((vals[1] = get_system_socket_mem(sock_rmem_def)) < SMEM_SUG_DEF) \
-                       set_system_socket_mem(sock_rmem_def, SMEM_SUG_DEF); \
-               if ((vals[2] = get_system_socket_mem(sock_wmem_max)) < SMEM_SUG_MAX) \
-                       set_system_socket_mem(sock_wmem_max, SMEM_SUG_MAX); \
-               if ((vals[3] = get_system_socket_mem(sock_wmem_def)) < SMEM_SUG_DEF) \
-                       set_system_socket_mem(sock_wmem_def, SMEM_SUG_DEF); \
-       } while (0)
-
-#define reset_system_socket_memory(vals) \
-       do { \
-               set_system_socket_mem(sock_rmem_max, vals[0]); \
-               set_system_socket_mem(sock_rmem_def, vals[1]); \
-               set_system_socket_mem(sock_wmem_max, vals[2]); \
-               set_system_socket_mem(sock_wmem_def, vals[3]); \
-       } while (0)
-
 #ifndef ICMP_FILTER
 # define ICMP_FILTER   1
 
@@ -1185,7 +1165,7 @@ int main(int argc, char **argv)
 
        header();
 
-       set_system_socket_memory(vals);
+       set_system_socket_memory(vals, array_size(vals));
        xlockme();
 
        if (ctx.rfraw) {
@@ -1233,7 +1213,7 @@ int main(int argc, char **argv)
        if (ctx.rfraw)
                leave_rfmon_mac80211(ctx.device_trans, ctx.device);
 
-       reset_system_socket_memory(vals);
+       reset_system_socket_memory(vals, array_size(vals));
 
        for (i = 0, tx_packets = tx_bytes = 0; i < ctx.cpus; i++) {
                while ((__get_state(i) & CPU_STATS_STATE_RES) == 0)
index 47f33e8..4e97b06 100644 (file)
--- a/xutils.c
+++ b/xutils.c
 #include <sys/epoll.h>
 #include <sys/syscall.h>
 #include <asm/unistd.h>
-/* Kernel < 2.6.26 */
 #include <linux/if.h>
 #include <linux/socket.h>
 #include <linux/types.h>
-/* Kernel < 2.6.26 */
 #include <linux/if_ether.h>
 #include <linux/if_packet.h>
 #include <linux/sockios.h>
@@ -65,8 +63,21 @@ enum {
        ioprio_who_user,
 };
 
+enum {
+       sock_rmem_max = 0,
+       sock_rmem_def,
+       sock_wmem_max,
+       sock_wmem_def,
+};
+
+#define SMEM_SUG_MAX   104857600
+#define SMEM_SUG_DEF   4194304
+
 static const char *const to_prio[] = {
-       "none", "realtime", "best-effort", "idle",
+       "none",
+       "realtime",
+       "best-effort",
+       "idle",
 };
 
 static const char *const sock_mem[] = {
@@ -713,20 +724,16 @@ void sock_print_net_stats(int sock, unsigned long skipped)
        socklen_t slen = sizeof(kstats);
 
        memset(&kstats, 0, sizeof(kstats));
-
        ret = getsockopt(sock, SOL_PACKET, PACKET_STATISTICS, &kstats, &slen);
        if (ret > -1) {
                uint64_t packets = kstats.tp_packets;
                uint64_t drops = kstats.tp_drops;
 
                printf("\r%12ld  packets incoming\n", packets);
-               printf("\r%12ld  packets passed filter\n",
-                      packets - drops - skipped);
-               printf("\r%12ld  packets failed filter (out of space)\n",
-                      drops + skipped);
+               printf("\r%12ld  packets passed filter\n", packets - drops - skipped);
+               printf("\r%12ld  packets failed filter (out of space)\n", drops + skipped);
                if (kstats.tp_packets > 0)
-                       printf("\r%12.4f%\% packet droprate\n",
-                              1.f * drops / packets * 100.f);
+                       printf("\r%12.4lf%\% packet droprate\n", (1.0 * drops / packets) * 100.0);
        }
 }
 
@@ -740,6 +747,7 @@ void register_signal(int signal, void (*handler)(int))
        saction.sa_handler = handler;
        saction.sa_mask = block_mask;
        saction.sa_flags = SA_RESTART;
+
        sigaction(signal, &saction, NULL);
 }
 
@@ -753,6 +761,7 @@ void register_signal_f(int signal, void (*handler)(int), int flags)
        saction.sa_handler = handler;
        saction.sa_mask = block_mask;
        saction.sa_flags = flags;
+
        sigaction(signal, &saction, NULL);
 }
 
@@ -760,12 +769,12 @@ int get_tty_size(void)
 {
 #ifdef TIOCGSIZE
        struct ttysize ts = {0};
-       return (ioctl(0, TIOCGSIZE, &ts) == 0 ?
-               ts.ts_cols : DEFAULT_TTY_SIZE);
+
+       return (ioctl(0, TIOCGSIZE, &ts) == 0 ? ts.ts_cols : DEFAULT_TTY_SIZE);
 #elif defined(TIOCGWINSZ)
        struct winsize ts;
-       return (ioctl(0, TIOCGWINSZ, &ts) == 0 ?
-               ts.ws_col : DEFAULT_TTY_SIZE);
+
+       return (ioctl(0, TIOCGWINSZ, &ts) == 0 ? ts.ws_col : DEFAULT_TTY_SIZE);
 #else
        return DEFAULT_TTY_SIZE;
 #endif
@@ -819,8 +828,7 @@ int device_up_and_running(char *ifname)
        if (!strncmp("any", ifname, strlen("any")))
                return 1;
 
-       return (device_get_flags(ifname) & (IFF_UP | IFF_RUNNING)) ==
-              (IFF_UP | IFF_RUNNING);
+       return (device_get_flags(ifname) & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING);
 }
 
 int poll_error_maybe_die(int sock, struct pollfd *pfd)
@@ -841,7 +849,7 @@ int poll_error_maybe_die(int sock, struct pollfd *pfd)
                return POLL_MOVE_OUT;
        }
        if (pfd->revents & POLLNVAL) {
-               whine("Invalid polling request on socket!\n");
+               printf("Invalid polling request on socket!\n");
 
                return POLL_MOVE_OUT;
        }
@@ -849,21 +857,6 @@ int poll_error_maybe_die(int sock, struct pollfd *pfd)
        return POLL_NEXT_PKT;
 }
 
-static inline char *next_token(char *q, int sep)
-{
-       if (q)
-               q = strchr(q, sep);
-               /*
-                * glibc defines this as a macro and gcc throws a false
-                * positive ``logical ‘&&’ with non-zero constant will
-                * always evaluate as true'' in older versions. See:
-                * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36513
-                */
-       if (q)
-               q++;
-       return q;
-}
-
 void cpu_affinity(int cpu)
 {
        int ret;
@@ -878,73 +871,8 @@ void cpu_affinity(int cpu)
                panic("Can't set this cpu affinity!\n");
 }
 
-int set_cpu_affinity(char *str, int inverted)
-{
-       int ret, i, cpus;
-       char *p, *q;
-       cpu_set_t cpu_bitmask;
-
-       q = str;
-
-       cpus = get_number_cpus();
-
-       CPU_ZERO(&cpu_bitmask);
-
-       for (i = 0; inverted && i < cpus; ++i)
-               CPU_SET(i, &cpu_bitmask);
-
-       while (p = q, q = next_token(q, ','), p) {
-               unsigned int a;  /* Beginning of range */
-               unsigned int b;  /* End of range */
-               unsigned int s;  /* Stride */
-               char *c1, *c2;
-
-               if (sscanf(p, "%u", &a) < 1)
-                       return -EINVAL;
-
-               b = a;
-               s = 1;
-
-               c1 = next_token(p, '-');
-               c2 = next_token(p, ',');
-
-               if (c1 != NULL && (c2 == NULL || c1 < c2)) {
-                       if (sscanf(c1, "%u", &b) < 1)
-                               return -EINVAL;
-
-                       c1 = next_token(c1, ':');
-
-                       if (c1 != NULL && (c2 == NULL || c1 < c2))
-                               if (sscanf(c1, "%u", &s) < 1)
-                                       return -EINVAL;
-               }
-
-               if (!(a <= b))
-                       return -EINVAL;
-
-               while (a <= b) {
-                       if (inverted)
-                               CPU_CLR(a, &cpu_bitmask);
-                       else
-                               CPU_SET(a, &cpu_bitmask);
-                       a += s;
-               }
-       }
-
-       ret = sched_setaffinity(getpid(), sizeof(cpu_bitmask),
-                               &cpu_bitmask);
-       if (ret)
-               panic("Can't set this cpu affinity!\n");
-
-       return 0;
-}
-
 int set_proc_prio(int priority)
 {
-       /*
-        * setpriority() is clever, even if you put a nice value which 
-        * is out of range it corrects it to the closest valid nice value
-        */
        int ret = setpriority(PRIO_PROCESS, getpid(), priority);
        if (ret)
                panic("Can't set nice val to %i!\n", priority);
@@ -1117,27 +1045,6 @@ noinline void *xmemset(void *s, int c, size_t n)
        return ptr;
 }
 
-char *getuint(char *in, uint32_t *out)
-{
-       char *pt = in, tmp;
-       char *endptr = NULL;
-
-       while (*in && (isdigit(*in) || isxdigit(*in) || *in == 'x'))
-               in++;
-       if (!*in)
-               panic("Syntax error!\n");
-       errno = 0;
-       tmp = *in;
-       *in = 0;
-       *out = strtoul(pt, &endptr, 0);
-       if ((endptr != NULL && *endptr != '\0') || errno != 0) {
-               panic("Syntax error!\n");
-       }
-       *in = tmp;
-
-       return in;
-}
-
 char *strtrim_right(register char *p, register char c)
 {
        register char *end;
@@ -1156,7 +1063,7 @@ char *strtrim_right(register char *p, register char c)
        return p;
 }
 
-char *strtrim_left(register char *p, register char c)
+static char *strtrim_left(register char *p, register char c)
 {
        register int len;
 
@@ -1170,3 +1077,78 @@ char *strtrim_left(register char *p, register char c)
 
        return p;
 }
+
+char *skips(char *p)
+{
+       return strtrim_left(p, ' ');
+}
+
+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_number_cpus(void)
+{
+       return sysconf(_SC_NPROCESSORS_CONF);
+}
+
+int get_number_cpus_online(void)
+{
+       return sysconf(_SC_NPROCESSORS_ONLN);
+}
+
+int get_default_proc_prio(void)
+{
+       return -20;
+}
+
+struct timeval tv_subtract(struct timeval time1, struct timeval time2)
+{
+       struct timeval result;
+
+       if ((time1.tv_sec < time2.tv_sec) || ((time1.tv_sec == time2.tv_sec) &&
+           (time1.tv_usec <= time2.tv_usec))) {
+               result.tv_sec = result.tv_usec = 0;
+       } else {
+               result.tv_sec = time1.tv_sec - time2.tv_sec;
+               if (time1.tv_usec < time2.tv_usec) {
+                       result.tv_usec = time1.tv_usec + 1000000L -
+                                        time2.tv_usec;
+                       result.tv_sec--;
+               } else {
+                       result.tv_usec = time1.tv_usec - time2.tv_usec;
+               }
+       }
+
+       return result;
+}
+
+void set_system_socket_memory(int *vals, size_t len)
+{
+       bug_on(len != 4);
+
+       if ((vals[0] = get_system_socket_mem(sock_rmem_max)) < SMEM_SUG_MAX)
+               set_system_socket_mem(sock_rmem_max, SMEM_SUG_MAX);
+       if ((vals[1] = get_system_socket_mem(sock_rmem_def)) < SMEM_SUG_DEF)
+               set_system_socket_mem(sock_rmem_def, SMEM_SUG_DEF);
+       if ((vals[2] = get_system_socket_mem(sock_wmem_max)) < SMEM_SUG_MAX)
+               set_system_socket_mem(sock_wmem_max, SMEM_SUG_MAX);
+       if ((vals[3] = get_system_socket_mem(sock_wmem_def)) < SMEM_SUG_DEF)
+               set_system_socket_mem(sock_wmem_def, SMEM_SUG_DEF);
+}
+
+void reset_system_socket_memory(int *vals, size_t len)
+{
+       bug_on(len != 4);
+
+       set_system_socket_mem(sock_rmem_max, vals[0]);
+       set_system_socket_mem(sock_rmem_def, vals[1]);
+       set_system_socket_mem(sock_wmem_max, vals[2]);
+       set_system_socket_mem(sock_wmem_def, vals[3]);
+}
index 21a547e..309a196 100644 (file)
--- a/xutils.h
+++ b/xutils.h
 #include <sys/resource.h>
 #include <sys/time.h>
 
-#include "die.h"
 #include "built_in.h"
 
-enum {
-       sock_rmem_max = 0,
-       sock_rmem_def,
-       sock_wmem_max,
-       sock_wmem_def,
-};
-
-#define SMEM_SUG_MAX   104857600
-#define SMEM_SUG_DEF   4194304
-
 extern int af_socket(int af);
 extern int pf_socket(void);
 extern int adjust_dbm_level(int in_dbm, int dbm_val);
@@ -48,11 +37,9 @@ extern u32 device_bitrate(const char *ifname);
 extern int ethtool_drvinf(const char *ifname, struct ethtool_drvinfo *drvinf);
 extern int ethtool_link(const char *ifname);
 extern int device_mtu(const char *ifname);
-extern int device_address(const char *ifname, int af,
-                         struct sockaddr_storage *ss);
+extern int device_address(const char *ifname, int af, struct sockaddr_storage *ss);
 extern int device_irq_number(const char *ifname);
-extern int device_set_irq_affinity_list(int irq, unsigned long from,
-                                       unsigned long to);
+extern int device_set_irq_affinity_list(int irq, unsigned long from, unsigned long to);
 extern int device_bind_irq_to_cpu(int irq, int cpu);
 extern void sock_print_net_stats(int sock, unsigned long skipped);
 extern int device_ifindex(const char *ifname);
@@ -86,10 +73,8 @@ extern int device_up(char *ifname);
 extern int device_running(char *ifname);
 extern int device_up_and_running(char *ifname);
 extern int poll_error_maybe_die(int sock, struct pollfd *pfd);
-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 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_cpu_affinity(char *str, int inverted);
 extern int set_proc_prio(int prio);
@@ -105,68 +90,15 @@ 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, ...);
 extern noinline void *xmemset(void *s, int c, size_t n);
-extern char *getuint(char *in, uint32_t *out);
 extern char *strtrim_right(register char *p, register char c);
-extern char *strtrim_left(register char *p, register char c);
-
-static inline int get_default_sched_policy(void)
-{
-       return SCHED_FIFO;
-}
-
-static inline int get_default_sched_prio(void)
-{
-       return sched_get_priority_max(get_default_sched_policy());
-}
-
-static inline int get_number_cpus(void)
-{
-       return sysconf(_SC_NPROCESSORS_CONF);
-}
-
-static inline int get_number_cpus_online(void)
-{
-       return sysconf(_SC_NPROCESSORS_ONLN);
-}
-
-static inline int get_default_proc_prio(void)
-{
-       return -20;
-}
-
-static inline struct timeval tv_subtract(struct timeval time1,
-                                        struct timeval time2)
-{
-       /* time1 - time2 */
-       struct timeval result;
-
-       if ((time1.tv_sec < time2.tv_sec) || ((time1.tv_sec == time2.tv_sec) &&
-           (time1.tv_usec <= time2.tv_usec))) {
-               result.tv_sec = result.tv_usec = 0;
-       } else {
-               result.tv_sec = time1.tv_sec - time2.tv_sec;
-               if (time1.tv_usec < time2.tv_usec) {
-                       result.tv_usec = time1.tv_usec + 1000000L -
-                                        time2.tv_usec;
-                       result.tv_sec--;
-               } else {
-                       result.tv_usec = time1.tv_usec - time2.tv_usec;
-               }
-       }
-
-       return result;
-}
-
-static inline char *skips(char *p)
-{
-       return strtrim_left(p, ' ');
-}
-
-static inline char *skipchar(char *in, char c)
-{
-       if (*in != c)
-               panic("Syntax error!\n");
-       return ++in;
-}
+extern char *skips(char *p);
+extern int get_default_sched_policy(void);
+extern int get_default_sched_prio(void);
+extern int get_number_cpus(void);
+extern int get_number_cpus_online(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 struct timeval tv_subtract(struct timeval time1, struct timeval time2);
 
 #endif /* XSYS_H */