Lines Matching +full:no +full:- +full:can +full:- +full:fd
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /* Copyright (C) 2017-2018 Netronome Systems, Inc. */
81 /* Probe whether kernel switched from memlock-based (RLIMIT_MEMLOCK) to
82 * memcg-based memory accounting for BPF maps and programs. This was done in
83 * commit 97306be45fbe ("Merge branch 'switch to memcg-based memory
86 * Libbpf also offers to probe for memcg-based accounting vs rlimit, but does
90 * Instead, we can probe by lowering the process-based rlimit to 0, trying to
92 * memcg-based accounting is supported.
96 * that bpftool is single-threaded, this is fine to do here.
158 "mount --make-private %s failed: %s", in mnt_fs()
160 return -1; in mnt_fs()
165 "mount --bind %s %s failed: %s", in mnt_fs()
167 return -1; in mnt_fs()
174 snprintf(buff, bufflen, "mount -t %s %s %s failed: %s", in mnt_fs()
176 return -1; in mnt_fs()
189 err_str[ERR_MAX_LEN - 1] = '\0'; in mount_tracefs()
190 p_err("can't mount tracefs: %s", err_str); in mount_tracefs()
199 int fd = -1; in open_obj_pinned() local
208 fd = bpf_obj_get(pname); in open_obj_pinned()
209 if (fd < 0) { in open_obj_pinned()
221 return fd; in open_obj_pinned()
227 int fd; in open_obj_pinned_any() local
229 fd = open_obj_pinned(path, false); in open_obj_pinned_any()
230 if (fd < 0) in open_obj_pinned_any()
231 return -1; in open_obj_pinned_any()
233 type = get_fd_type(fd); in open_obj_pinned_any()
235 close(fd); in open_obj_pinned_any()
240 close(fd); in open_obj_pinned_any()
241 return -1; in open_obj_pinned_any()
244 return fd; in open_obj_pinned_any()
260 return -1; in mount_bpffs_for_pin()
271 p_err("no BPF file system found, not mounting it due to --nomount option"); in mount_bpffs_for_pin()
272 err = -1; in mount_bpffs_for_pin()
278 err_str[ERR_MAX_LEN - 1] = '\0'; in mount_bpffs_for_pin()
279 p_err("can't mount BPF file system to pin the object (%s): %s", in mount_bpffs_for_pin()
288 int do_pin_fd(int fd, const char *name) in do_pin_fd() argument
296 err = bpf_obj_pin(fd, name); in do_pin_fd()
298 p_err("can't pin the object (%s): %s", name, strerror(errno)); in do_pin_fd()
306 int fd; in do_pin_any() local
309 return -EINVAL; in do_pin_any()
311 fd = get_fd(&argc, &argv); in do_pin_any()
312 if (fd < 0) in do_pin_any()
313 return fd; in do_pin_any()
315 err = do_pin_fd(fd, *argv); in do_pin_any()
317 close(fd); in do_pin_any()
339 const char *prog_name = prog_info->name; in get_prog_full_name()
347 strlen(prog_info->name) < BPF_OBJ_NAME_LEN - 1) in get_prog_full_name()
350 if (!prog_info->btf_id || prog_info->nr_func_info == 0) in get_prog_full_name()
354 info.func_info_rec_size = prog_info->func_info_rec_size; in get_prog_full_name()
370 prog_name = btf__name_by_offset(prog_btf, func_type->name_off); in get_prog_full_name()
379 int get_fd_type(int fd) in get_fd_type() argument
385 snprintf(path, sizeof(path), "/proc/self/fd/%d", fd); in get_fd_type()
389 p_err("can't read link type: %s", strerror(errno)); in get_fd_type()
390 return -1; in get_fd_type()
393 p_err("can't read link type: path too long!"); in get_fd_type()
394 return -1; in get_fd_type()
397 if (strstr(buf, "bpf-map")) in get_fd_type()
399 else if (strstr(buf, "bpf-prog")) in get_fd_type()
401 else if (strstr(buf, "bpf-link")) in get_fd_type()
407 char *get_fdinfo(int fd, const char *key) in get_fdinfo() argument
415 snprintf(path, sizeof(path), "/proc/self/fdinfo/%d", fd); in get_fdinfo()
439 line[len - 1] = '\0'; in get_fdinfo()
479 int fd, err = 0; in do_build_table_cb() local
485 fd = open_obj_pinned(fpath, true); in do_build_table_cb()
486 if (fd < 0) in do_build_table_cb()
489 objtype = get_fd_type(fd); in do_build_table_cb()
494 if (bpf_prog_get_info_by_fd(fd, &pinned_info, &len)) in do_build_table_cb()
499 err = -1; in do_build_table_cb()
512 close(fd); in do_build_table_cb()
528 return -1; in build_pinned_obj_table()
534 char *path = mntent->mnt_dir; in build_pinned_obj_table()
536 if (strncmp(mntent->mnt_type, "bpf", 3) != 0) in build_pinned_obj_table()
555 free(entry->pvalue); in delete_pinned_obj_table()
574 p_err("Can't get # of possible cpus: %s", strerror(-cpus)); in get_possible_cpus()
575 exit(-1); in get_possible_cpus()
588 p_err("Can't stat /proc/self: %s", strerror(errno)); in ifindex_to_name_ns()
602 int fd; in read_sysfs_hex_int() local
604 fd = open(path, O_RDONLY); in read_sysfs_hex_int()
605 if (fd < 0) { in read_sysfs_hex_int()
606 p_err("Can't open %s: %s", path, strerror(errno)); in read_sysfs_hex_int()
607 return -1; in read_sysfs_hex_int()
610 len = read(fd, vendor_id_buf, sizeof(vendor_id_buf)); in read_sysfs_hex_int()
611 close(fd); in read_sysfs_hex_int()
613 p_err("Can't read %s: %s", path, strerror(errno)); in read_sysfs_hex_int()
614 return -1; in read_sysfs_hex_int()
618 return -1; in read_sysfs_hex_int()
644 p_err("Can't get net device name for ifindex %d: %s", ifindex, in ifindex_to_arch()
651 p_err("Can't get device vendor id for %s", devname); in ifindex_to_arch()
662 p_info("Unknown NFP device ID, assuming it is NFP-6xxx arch"); in ifindex_to_arch()
664 return "NFP-6xxx"; in ifindex_to_arch()
666 /* No NFP support in LLVM, we have no valid triple to return. */ in ifindex_to_arch()
668 p_err("Can't get arch name for device vendor id 0x%04x", in ifindex_to_arch()
714 return -1; in parse_u32_arg()
719 p_err("can't parse %s as %s", **argv, what); in parse_u32_arg()
720 return -1; in parse_u32_arg()
738 int fd, nb_fds = 0; in prog_fd_by_nametag() local
755 fd = bpf_prog_get_fd_by_id(id); in prog_fd_by_nametag()
756 if (fd < 0) { in prog_fd_by_nametag()
757 p_err("can't get prog by id (%u): %s", in prog_fd_by_nametag()
762 err = bpf_prog_get_info_by_fd(fd, &info, &len); in prog_fd_by_nametag()
764 p_err("can't get prog info (%u): %s", in prog_fd_by_nametag()
770 close(fd); in prog_fd_by_nametag()
775 get_prog_full_name(&info, fd, prog_name, in prog_fd_by_nametag()
778 close(fd); in prog_fd_by_nametag()
791 (*fds)[nb_fds++] = fd; in prog_fd_by_nametag()
795 close(fd); in prog_fd_by_nametag()
797 while (--nb_fds >= 0) in prog_fd_by_nametag()
799 return -1; in prog_fd_by_nametag()
812 p_err("can't parse %s as ID", **argv); in prog_parse_fds()
813 return -1; in prog_parse_fds()
820 return -1; in prog_parse_fds()
831 p_err("can't parse tag"); in prog_parse_fds()
832 return -1; in prog_parse_fds()
843 if (strlen(name) > MAX_PROG_FULL_NAME - 1) { in prog_parse_fds()
844 p_err("can't parse name"); in prog_parse_fds()
845 return -1; in prog_parse_fds()
860 return -1; in prog_parse_fds()
865 return -1; in prog_parse_fds()
871 int nb_fds, fd; in prog_parse_fd() local
876 return -1; in prog_parse_fd()
882 while (nb_fds--) in prog_parse_fd()
885 fd = -1; in prog_parse_fd()
889 fd = fds[0]; in prog_parse_fd()
892 return fd; in prog_parse_fd()
898 int fd, nb_fds = 0; in map_fd_by_name() local
915 fd = bpf_map_get_fd_by_id(id); in map_fd_by_name()
916 if (fd < 0) { in map_fd_by_name()
917 p_err("can't get map by id (%u): %s", in map_fd_by_name()
922 err = bpf_map_get_info_by_fd(fd, &info, &len); in map_fd_by_name()
924 p_err("can't get map info (%u): %s", in map_fd_by_name()
930 close(fd); in map_fd_by_name()
942 (*fds)[nb_fds++] = fd; in map_fd_by_name()
946 close(fd); in map_fd_by_name()
948 while (--nb_fds >= 0) in map_fd_by_name()
950 return -1; in map_fd_by_name()
963 p_err("can't parse %s as ID", **argv); in map_parse_fds()
964 return -1; in map_parse_fds()
971 return -1; in map_parse_fds()
980 if (strlen(name) > BPF_OBJ_NAME_LEN - 1) { in map_parse_fds()
981 p_err("can't parse name"); in map_parse_fds()
982 return -1; in map_parse_fds()
997 return -1; in map_parse_fds()
1002 return -1; in map_parse_fds()
1008 int nb_fds, fd; in map_parse_fd() local
1013 return -1; in map_parse_fd()
1019 while (nb_fds--) in map_parse_fd()
1022 fd = -1; in map_parse_fd()
1026 fd = fds[0]; in map_parse_fd()
1029 return fd; in map_parse_fd()
1036 int fd; in map_parse_fd_and_info() local
1038 fd = map_parse_fd(argc, argv); in map_parse_fd_and_info()
1039 if (fd < 0) in map_parse_fd_and_info()
1040 return -1; in map_parse_fd_and_info()
1042 err = bpf_map_get_info_by_fd(fd, info, info_len); in map_parse_fd_and_info()
1044 p_err("can't get map info: %s", strerror(errno)); in map_parse_fd_and_info()
1045 close(fd); in map_parse_fd_and_info()
1049 return fd; in map_parse_fd_and_info()
1105 return -EINVAL; in pathname_concat()
1107 return -ENAMETOOLONG; in pathname_concat()