diff options
author | David S. Miller <davem@davemloft.net> | 2018-05-07 23:35:08 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-05-07 23:35:08 -0400 |
commit | 01adc4851a8090b46c7a5ed9cfc4b97e65abfbf4 (patch) | |
tree | 2ae02593d7139962648dff203f3f9701e34ccbc3 /tools/bpf/bpftool/common.c | |
parent | 18b338f5f9539512e76fd9ebd4c6ca1a0e159e2b (diff) | |
parent | e94fa1d93117e7f1eb783dc9cae6c70650944449 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Minor conflict, a CHECK was placed into an if() statement
in net-next, whilst a newline was added to that CHECK
call in 'net'. Thanks to Daniel for the merge resolution.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/bpf/bpftool/common.c')
-rw-r--r-- | tools/bpf/bpftool/common.c | 77 |
1 files changed, 76 insertions, 1 deletions
diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index 465995281dcd..32f9e397a6c0 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2017 Netronome Systems, Inc. | 2 | * Copyright (C) 2017-2018 Netronome Systems, Inc. |
3 | * | 3 | * |
4 | * This software is dual licensed under the GNU General License Version 2, | 4 | * This software is dual licensed under the GNU General License Version 2, |
5 | * June 1991 as shown in the file COPYING in the top-level directory of this | 5 | * June 1991 as shown in the file COPYING in the top-level directory of this |
@@ -33,6 +33,7 @@ | |||
33 | 33 | ||
34 | /* Author: Jakub Kicinski <kubakici@wp.pl> */ | 34 | /* Author: Jakub Kicinski <kubakici@wp.pl> */ |
35 | 35 | ||
36 | #include <ctype.h> | ||
36 | #include <errno.h> | 37 | #include <errno.h> |
37 | #include <fcntl.h> | 38 | #include <fcntl.h> |
38 | #include <fts.h> | 39 | #include <fts.h> |
@@ -330,6 +331,16 @@ char *get_fdinfo(int fd, const char *key) | |||
330 | return NULL; | 331 | return NULL; |
331 | } | 332 | } |
332 | 333 | ||
334 | void print_data_json(uint8_t *data, size_t len) | ||
335 | { | ||
336 | unsigned int i; | ||
337 | |||
338 | jsonw_start_array(json_wtr); | ||
339 | for (i = 0; i < len; i++) | ||
340 | jsonw_printf(json_wtr, "%d", data[i]); | ||
341 | jsonw_end_array(json_wtr); | ||
342 | } | ||
343 | |||
333 | void print_hex_data_json(uint8_t *data, size_t len) | 344 | void print_hex_data_json(uint8_t *data, size_t len) |
334 | { | 345 | { |
335 | unsigned int i; | 346 | unsigned int i; |
@@ -420,6 +431,70 @@ void delete_pinned_obj_table(struct pinned_obj_table *tab) | |||
420 | } | 431 | } |
421 | } | 432 | } |
422 | 433 | ||
434 | unsigned int get_page_size(void) | ||
435 | { | ||
436 | static int result; | ||
437 | |||
438 | if (!result) | ||
439 | result = getpagesize(); | ||
440 | return result; | ||
441 | } | ||
442 | |||
443 | unsigned int get_possible_cpus(void) | ||
444 | { | ||
445 | static unsigned int result; | ||
446 | char buf[128]; | ||
447 | long int n; | ||
448 | char *ptr; | ||
449 | int fd; | ||
450 | |||
451 | if (result) | ||
452 | return result; | ||
453 | |||
454 | fd = open("/sys/devices/system/cpu/possible", O_RDONLY); | ||
455 | if (fd < 0) { | ||
456 | p_err("can't open sysfs possible cpus"); | ||
457 | exit(-1); | ||
458 | } | ||
459 | |||
460 | n = read(fd, buf, sizeof(buf)); | ||
461 | if (n < 2) { | ||
462 | p_err("can't read sysfs possible cpus"); | ||
463 | exit(-1); | ||
464 | } | ||
465 | close(fd); | ||
466 | |||
467 | if (n == sizeof(buf)) { | ||
468 | p_err("read sysfs possible cpus overflow"); | ||
469 | exit(-1); | ||
470 | } | ||
471 | |||
472 | ptr = buf; | ||
473 | n = 0; | ||
474 | while (*ptr && *ptr != '\n') { | ||
475 | unsigned int a, b; | ||
476 | |||
477 | if (sscanf(ptr, "%u-%u", &a, &b) == 2) { | ||
478 | n += b - a + 1; | ||
479 | |||
480 | ptr = strchr(ptr, '-') + 1; | ||
481 | } else if (sscanf(ptr, "%u", &a) == 1) { | ||
482 | n++; | ||
483 | } else { | ||
484 | assert(0); | ||
485 | } | ||
486 | |||
487 | while (isdigit(*ptr)) | ||
488 | ptr++; | ||
489 | if (*ptr == ',') | ||
490 | ptr++; | ||
491 | } | ||
492 | |||
493 | result = n; | ||
494 | |||
495 | return result; | ||
496 | } | ||
497 | |||
423 | static char * | 498 | static char * |
424 | ifindex_to_name_ns(__u32 ifindex, __u32 ns_dev, __u32 ns_ino, char *buf) | 499 | ifindex_to_name_ns(__u32 ifindex, __u32 ns_dev, __u32 ns_ino, char *buf) |
425 | { | 500 | { |