tools: bpftool: move get_possible_cpus() to common code
authorJakub Kicinski <jakub.kicinski@netronome.com>
Fri, 4 May 2018 01:37:15 +0000 (18:37 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 4 May 2018 21:41:04 +0000 (23:41 +0200)
Move the get_possible_cpus() function to shared code.  No functional
changes.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Reviewed-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/bpf/bpftool/common.c
tools/bpf/bpftool/main.h
tools/bpf/bpftool/map.c

index 4659952..9c62077 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 Netronome Systems, Inc.
+ * Copyright (C) 2017-2018 Netronome Systems, Inc.
  *
  * This software is dual licensed under the GNU General License Version 2,
  * June 1991 as shown in the file COPYING in the top-level directory of this
@@ -33,6 +33,7 @@
 
 /* Author: Jakub Kicinski <kubakici@wp.pl> */
 
+#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <fts.h>
@@ -420,6 +421,61 @@ void delete_pinned_obj_table(struct pinned_obj_table *tab)
        }
 }
 
+unsigned int get_possible_cpus(void)
+{
+       static unsigned int result;
+       char buf[128];
+       long int n;
+       char *ptr;
+       int fd;
+
+       if (result)
+               return result;
+
+       fd = open("/sys/devices/system/cpu/possible", O_RDONLY);
+       if (fd < 0) {
+               p_err("can't open sysfs possible cpus");
+               exit(-1);
+       }
+
+       n = read(fd, buf, sizeof(buf));
+       if (n < 2) {
+               p_err("can't read sysfs possible cpus");
+               exit(-1);
+       }
+       close(fd);
+
+       if (n == sizeof(buf)) {
+               p_err("read sysfs possible cpus overflow");
+               exit(-1);
+       }
+
+       ptr = buf;
+       n = 0;
+       while (*ptr && *ptr != '\n') {
+               unsigned int a, b;
+
+               if (sscanf(ptr, "%u-%u", &a, &b) == 2) {
+                       n += b - a + 1;
+
+                       ptr = strchr(ptr, '-') + 1;
+               } else if (sscanf(ptr, "%u", &a) == 1) {
+                       n++;
+               } else {
+                       assert(0);
+               }
+
+               while (isdigit(*ptr))
+                       ptr++;
+               if (*ptr == ',')
+                       ptr++;
+       }
+
+       result = n;
+
+       return result;
+}
+
 static char *
 ifindex_to_name_ns(__u32 ifindex, __u32 ns_dev, __u32 ns_ino, char *buf)
 {
index b8e9584..cbf8985 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 Netronome Systems, Inc.
+ * Copyright (C) 2017-2018 Netronome Systems, Inc.
  *
  * This software is dual licensed under the GNU General License Version 2,
  * June 1991 as shown in the file COPYING in the top-level directory of this
@@ -125,6 +125,7 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes,
                       const char *arch);
 void print_hex_data_json(uint8_t *data, size_t len);
 
+unsigned int get_possible_cpus(void);
 const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino);
 
 #endif
index 7da77e4..5efefde 100644 (file)
@@ -34,7 +34,6 @@
 /* Author: Jakub Kicinski <kubakici@wp.pl> */
 
 #include <assert.h>
-#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <stdbool.h>
@@ -69,61 +68,6 @@ static const char * const map_type_name[] = {
        [BPF_MAP_TYPE_CPUMAP]           = "cpumap",
 };
 
-static unsigned int get_possible_cpus(void)
-{
-       static unsigned int result;
-       char buf[128];
-       long int n;
-       char *ptr;
-       int fd;
-
-       if (result)
-               return result;
-
-       fd = open("/sys/devices/system/cpu/possible", O_RDONLY);
-       if (fd < 0) {
-               p_err("can't open sysfs possible cpus");
-               exit(-1);
-       }
-
-       n = read(fd, buf, sizeof(buf));
-       if (n < 2) {
-               p_err("can't read sysfs possible cpus");
-               exit(-1);
-       }
-       close(fd);
-
-       if (n == sizeof(buf)) {
-               p_err("read sysfs possible cpus overflow");
-               exit(-1);
-       }
-
-       ptr = buf;
-       n = 0;
-       while (*ptr && *ptr != '\n') {
-               unsigned int a, b;
-
-               if (sscanf(ptr, "%u-%u", &a, &b) == 2) {
-                       n += b - a + 1;
-
-                       ptr = strchr(ptr, '-') + 1;
-               } else if (sscanf(ptr, "%u", &a) == 1) {
-                       n++;
-               } else {
-                       assert(0);
-               }
-
-               while (isdigit(*ptr))
-                       ptr++;
-               if (*ptr == ',')
-                       ptr++;
-       }
-
-       result = n;
-
-       return result;
-}
-
 static bool map_is_per_cpu(__u32 type)
 {
        return type == BPF_MAP_TYPE_PERCPU_HASH ||