1. 20 Nov, 2018 14 commits
    • Alexei Starovoitov's avatar
      Merge branch 'btf-func-info' · 740baecd
      Alexei Starovoitov authored
      Martin KaFai Lau says:
      
      ====================
      The BTF support was added to kernel by Commit 69b693f0
      ("bpf: btf: Introduce BPF Type Format (BTF)"), which introduced
      .BTF section into ELF file and is primarily
      used for map pretty print.
      pahole is used to convert dwarf to BTF for ELF files.
      
      This patch added func info support to the kernel so we can
      get better ksym's for bpf function calls. Basically,
      function call types are passed to kernel and the kernel
      extract function names from these types in order to contruct ksym
      for these functions.
      
      The llvm patch at https://reviews.llvm.org/D53736
      will generate .BTF section and one more section .BTF.ext.
      The .BTF.ext section encodes function type
      information. The following is a sample output for selftests
      test_btf with file test_btf_haskv.o for translated insns
      and jited insns respectively.
      
        $ bpftool prog dump xlated id 1
        int _dummy_tracepoint(struct dummy_tracepoint_args * arg):
           0: (85) call pc+2#bpf_prog_2dcecc18072623fc_test_long_fname_1
           1: (b7) r0 = 0
           2: (95) exit
        int test_long_fname_1(struct dummy_tracepoint_args * arg):
           3: (85) call pc+1#bpf_prog_89d64e4abf0f0126_test_long_fname_2
           4: (95) exit
        int test_long_fname_2(struct dummy_tracepoint_args * arg):
           5: (b7) r2 = 0
           6: (63) *(u32 *)(r10 -4) = r2
           7: (79) r1 = *(u64 *)(r1 +8)
           ...
           22: (07) r1 += 1
           23: (63) *(u32 *)(r0 +4) = r1
           24: (95) exit
      
        $ bpftool prog dump jited id 1
        int _dummy_tracepoint(struct dummy_tracepoint_args * arg):
        bpf_prog_b07ccb89267cf242__dummy_tracepoint:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          3c:   add    $0x28,%rbp
          40:   leaveq
          41:   retq
      
        int test_long_fname_1(struct dummy_tracepoint_args * arg):
        bpf_prog_2dcecc18072623fc_test_long_fname_1:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          3a:   add    $0x28,%rbp
          3e:   leaveq
          3f:   retq
      
        int test_long_fname_2(struct dummy_tracepoint_args * arg):
        bpf_prog_89d64e4abf0f0126_test_long_fname_2:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          80:   add    $0x28,%rbp
          84:   leaveq
          85:   retq
      
      Changelogs:
        v4 -> v5:
          . Add back BTF_KIND_FUNC_PROTO as v1 did.  The difference
            is BTF_KIND_FUNC_PROTO cannot have t->name_off now.
            All param metadata is defined in BTF_KIND_FUNC_PROTO.
            BTF_KIND_FUNC must have t->name_off != 0 and t->type
            refers to a BTF_KIND_FUNC_PROTO.
      
            The above is the conclusion after the discussion between
            Edward Cree, Alexei, Daniel, Yonghong and Martin.
        v3 -> v4:
          . Remove BTF_KIND_FUNC_PROTO. BTF_KIND_FUNC is used for
            both function pointer and subprogram. The name_off field
            is used to distinguish both.
          . The record size is added to the func_info subsection
            in .BTF.ext to enable future extension.
          . The bpf_prog_info interface change to make it similar
            bpf_prog_load.
          . Related kernel and libbpf changes to accommodate the
            new .BTF.ext and kernel interface changes.
        v2 -> v3:
          . Removed kernel btf extern functions btf_type_id_func()
            and btf_get_name_by_id(). Instead, exposing existing
            functions btf_type_by_id() and btf_name_by_offset().
          . Added comments about ELF section .BTF.ext layout.
          . Better codes in btftool as suggested by Edward Cree.
        v1 -> v2:
          . Added missing sign-off.
          . Limited the func_name/struct_member_name length for validity test.
          . Removed/changed several verifier messages.
          . Modified several commit messages to remove line_off reference.
      ====================
      Acked-by: default avatarEdward Cree <ecree@solarflare.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      740baecd
    • Yonghong Song's avatar
      tools/bpf: bpftool: add support for func types · 254471e5
      Yonghong Song authored
      This patch added support to print function signature
      if btf func_info is available. Note that ksym
      now uses function name instead of prog_name as
      prog_name has a limit of 16 bytes including
      ending '\0'.
      
      The following is a sample output for selftests
      test_btf with file test_btf_haskv.o for translated insns
      and jited insns respectively.
      
        $ bpftool prog dump xlated id 1
        int _dummy_tracepoint(struct dummy_tracepoint_args * arg):
           0: (85) call pc+2#bpf_prog_2dcecc18072623fc_test_long_fname_1
           1: (b7) r0 = 0
           2: (95) exit
        int test_long_fname_1(struct dummy_tracepoint_args * arg):
           3: (85) call pc+1#bpf_prog_89d64e4abf0f0126_test_long_fname_2
           4: (95) exit
        int test_long_fname_2(struct dummy_tracepoint_args * arg):
           5: (b7) r2 = 0
           6: (63) *(u32 *)(r10 -4) = r2
           7: (79) r1 = *(u64 *)(r1 +8)
           ...
           22: (07) r1 += 1
           23: (63) *(u32 *)(r0 +4) = r1
           24: (95) exit
      
        $ bpftool prog dump jited id 1
        int _dummy_tracepoint(struct dummy_tracepoint_args * arg):
        bpf_prog_b07ccb89267cf242__dummy_tracepoint:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          3c:   add    $0x28,%rbp
          40:   leaveq
          41:   retq
      
        int test_long_fname_1(struct dummy_tracepoint_args * arg):
        bpf_prog_2dcecc18072623fc_test_long_fname_1:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          3a:   add    $0x28,%rbp
          3e:   leaveq
          3f:   retq
      
        int test_long_fname_2(struct dummy_tracepoint_args * arg):
        bpf_prog_89d64e4abf0f0126_test_long_fname_2:
           0:   push   %rbp
           1:   mov    %rsp,%rbp
          ......
          80:   add    $0x28,%rbp
          84:   leaveq
          85:   retq
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      254471e5
    • Yonghong Song's avatar
      tools/bpf: enhance test_btf file testing to test func info · 999d82cb
      Yonghong Song authored
      Change the bpf programs test_btf_haskv.c and test_btf_nokv.c to
      have two sections, and enhance test_btf.c test_file feature
      to test btf func_info returned by the kernel.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      999d82cb
    • Yonghong Song's avatar
      tools/bpf: refactor to implement btf_get_from_id() in lib/bpf · d7f5b5e0
      Yonghong Song authored
      The function get_btf() is implemented in tools/bpf/bpftool/map.c
      to get a btf structure given a map_info. This patch
      refactored this function to be function btf_get_from_id()
      in tools/lib/bpf so that it can be used later.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      d7f5b5e0
    • Yonghong Song's avatar
      tools/bpf: do not use pahole if clang/llvm can generate BTF sections · 9ce6ae22
      Yonghong Song authored
      Add additional checks in tools/testing/selftests/bpf and
      samples/bpf such that if clang/llvm compiler can generate
      BTF sections, do not use pahole.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      9ce6ae22
    • Yonghong Song's avatar
      tools/bpf: add support to read .BTF.ext sections · 2993e051
      Yonghong Song authored
      The .BTF section is already available to encode types.
      These types can be used for map
      pretty print. The whole .BTF will be passed to the
      kernel as well for which kernel can verify and return
      to the user space for pretty print etc.
      
      The llvm patch at https://reviews.llvm.org/D53736
      will generate .BTF section and one more section .BTF.ext.
      The .BTF.ext section encodes function type
      information and line information. Note that
      this patch set only supports function type info.
      The functionality is implemented in libbpf.
      
      The .BTF section can be directly loaded into the
      kernel, and the .BTF.ext section cannot. The loader
      may need to do some relocation and merging,
      similar to merging multiple code sections, before
      loading into the kernel.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      2993e051
    • Yonghong Song's avatar
      tools/bpf: extends test_btf to test load/retrieve func_type info · 4798c4ba
      Yonghong Song authored
      A two function bpf program is loaded with btf and func_info.
      After successful prog load, the bpf_get_info syscall is called
      to retrieve prog info to ensure the types returned from the
      kernel matches the types passed to the kernel from the
      user space.
      
      Several negative tests are also added to test loading/retriving
      of func_type info.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      4798c4ba
    • Yonghong Song's avatar
      tools/bpf: add new fields for program load in lib/bpf · 7e0d0fb5
      Yonghong Song authored
      The new fields are added for program load in lib/bpf so
      application uses api bpf_load_program_xattr() is able
      to load program with btf and func_info data.
      
      This functionality will be used in next patch
      by bpf selftest test_btf.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      7e0d0fb5
    • Yonghong Song's avatar
      tools/bpf: sync kernel uapi bpf.h header to tools directory · cc19435c
      Yonghong Song authored
      The kernel uapi bpf.h is synced to tools directory.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      cc19435c
    • Yonghong Song's avatar
      bpf: Introduce bpf_func_info · 838e9690
      Yonghong Song authored
      This patch added interface to load a program with the following
      additional information:
         . prog_btf_fd
         . func_info, func_info_rec_size and func_info_cnt
      where func_info will provide function range and type_id
      corresponding to each function.
      
      The func_info_rec_size is introduced in the UAPI to specify
      struct bpf_func_info size passed from user space. This
      intends to make bpf_func_info structure growable in the future.
      If the kernel gets a different bpf_func_info size from userspace,
      it will try to handle user request with part of bpf_func_info
      it can understand. In this patch, kernel can understand
        struct bpf_func_info {
             __u32   insn_offset;
             __u32   type_id;
        };
      If user passed a bpf func_info record size of 16 bytes, the
      kernel can still handle part of records with the above definition.
      
      If verifier agrees with function range provided by the user,
      the bpf_prog ksym for each function will use the func name
      provided in the type_id, which is supposed to provide better
      encoding as it is not limited by 16 bytes program name
      limitation and this is better for bpf program which contains
      multiple subprograms.
      
      The bpf_prog_info interface is also extended to
      return btf_id, func_info, func_info_rec_size and func_info_cnt
      to userspace, so userspace can print out the function prototype
      for each xlated function. The insn_offset in the returned
      func_info corresponds to the insn offset for xlated functions.
      With other jit related fields in bpf_prog_info, userspace can also
      print out function prototypes for each jited function.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      838e9690
    • Martin KaFai Lau's avatar
      tools/bpf: Add tests for BTF_KIND_FUNC_PROTO and BTF_KIND_FUNC · 78a2540e
      Martin KaFai Lau authored
      This patch adds unit tests for BTF_KIND_FUNC_PROTO and
      BTF_KIND_FUNC to test_btf.
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      78a2540e
    • Martin KaFai Lau's avatar
      tools/bpf: Sync kernel btf.h header · 781e775e
      Martin KaFai Lau authored
      The kernel uapi btf.h is synced to the tools directory.
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      781e775e
    • Martin KaFai Lau's avatar
      bpf: btf: Add BTF_KIND_FUNC and BTF_KIND_FUNC_PROTO · 2667a262
      Martin KaFai Lau authored
      This patch adds BTF_KIND_FUNC and BTF_KIND_FUNC_PROTO
      to support the function debug info.
      
      BTF_KIND_FUNC_PROTO must not have a name (i.e. !t->name_off)
      and it is followed by >= 0 'struct bpf_param' objects to
      describe the function arguments.
      
      The BTF_KIND_FUNC must have a valid name and it must
      refer back to a BTF_KIND_FUNC_PROTO.
      
      The above is the conclusion after the discussion between
      Edward Cree, Alexei, Daniel, Yonghong and Martin.
      
      By combining BTF_KIND_FUNC and BTF_LIND_FUNC_PROTO,
      a complete function signature can be obtained.  It will be
      used in the later patches to learn the function signature of
      a running bpf program.
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      2667a262
    • Martin KaFai Lau's avatar
      bpf: btf: Break up btf_type_is_void() · b47a0bd2
      Martin KaFai Lau authored
      This patch breaks up btf_type_is_void() into
      btf_type_is_void() and btf_type_is_fwd().
      
      It also adds btf_type_nosize() to better describe it is
      testing a type has nosize info.
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      b47a0bd2
  2. 19 Nov, 2018 6 commits
  3. 17 Nov, 2018 9 commits
  4. 11 Nov, 2018 4 commits
    • Alexei Starovoitov's avatar
      Merge branch 'narrow-loads' · 407be8d0
      Alexei Starovoitov authored
      Andrey Ignatov says:
      
      ====================
      This patch set adds support for narrow loads with offset > 0 to BPF
      verifier.
      
      Patch 1 provides more details and is the main patch in the set.
      Patches 2 and 3 add new test cases to test_verifier and test_sock_addr
      selftests.
      
      v1->v2:
      - fix -Wdeclaration-after-statement warning.
      ====================
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      407be8d0
    • Andrey Ignatov's avatar
      selftests/bpf: Test narrow loads with off > 0 for bpf_sock_addr · e7605475
      Andrey Ignatov authored
      Add more test cases for context bpf_sock_addr to test narrow loads with
      offset > 0 for ctx->user_ip4 field (__u32):
      * off=1, size=1;
      * off=2, size=1;
      * off=3, size=1;
      * off=2, size=2.
      Signed-off-by: default avatarAndrey Ignatov <rdna@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      e7605475
    • Andrey Ignatov's avatar
      selftests/bpf: Test narrow loads with off > 0 in test_verifier · 6c2afb67
      Andrey Ignatov authored
      Test the following narrow loads in test_verifier for context __sk_buff:
      * off=1, size=1 - ok;
      * off=2, size=1 - ok;
      * off=3, size=1 - ok;
      * off=0, size=2 - ok;
      * off=1, size=2 - fail;
      * off=0, size=2 - ok;
      * off=3, size=2 - fail.
      Signed-off-by: default avatarAndrey Ignatov <rdna@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      6c2afb67
    • Andrey Ignatov's avatar
      bpf: Allow narrow loads with offset > 0 · 46f53a65
      Andrey Ignatov authored
      Currently BPF verifier allows narrow loads for a context field only with
      offset zero. E.g. if there is a __u32 field then only the following
      loads are permitted:
        * off=0, size=1 (narrow);
        * off=0, size=2 (narrow);
        * off=0, size=4 (full).
      
      On the other hand LLVM can generate a load with offset different than
      zero that make sense from program logic point of view, but verifier
      doesn't accept it.
      
      E.g. tools/testing/selftests/bpf/sendmsg4_prog.c has code:
      
        #define DST_IP4			0xC0A801FEU /* 192.168.1.254 */
        ...
        	if ((ctx->user_ip4 >> 24) == (bpf_htonl(DST_IP4) >> 24) &&
      
      where ctx is struct bpf_sock_addr.
      
      Some versions of LLVM can produce the following byte code for it:
      
             8:       71 12 07 00 00 00 00 00         r2 = *(u8 *)(r1 + 7)
             9:       67 02 00 00 18 00 00 00         r2 <<= 24
            10:       18 03 00 00 00 00 00 fe 00 00 00 00 00 00 00 00         r3 = 4261412864 ll
            12:       5d 32 07 00 00 00 00 00         if r2 != r3 goto +7 <LBB0_6>
      
      where `*(u8 *)(r1 + 7)` means narrow load for ctx->user_ip4 with size=1
      and offset=3 (7 - sizeof(ctx->user_family) = 3). This load is currently
      rejected by verifier.
      
      Verifier code that rejects such loads is in bpf_ctx_narrow_access_ok()
      what means any is_valid_access implementation, that uses the function,
      works this way, e.g. bpf_skb_is_valid_access() for __sk_buff or
      sock_addr_is_valid_access() for bpf_sock_addr.
      
      The patch makes such loads supported. Offset can be in [0; size_default)
      but has to be multiple of load size. E.g. for __u32 field the following
      loads are supported now:
        * off=0, size=1 (narrow);
        * off=1, size=1 (narrow);
        * off=2, size=1 (narrow);
        * off=3, size=1 (narrow);
        * off=0, size=2 (narrow);
        * off=2, size=2 (narrow);
        * off=0, size=4 (full).
      Reported-by: default avatarYonghong Song <yhs@fb.com>
      Signed-off-by: default avatarAndrey Ignatov <rdna@fb.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      46f53a65
  5. 10 Nov, 2018 7 commits
    • Alexei Starovoitov's avatar
      Merge branch 'bpftool-flow-dissector' · f2cbf958
      Alexei Starovoitov authored
      Stanislav Fomichev says:
      
      ====================
      v5 changes:
      * FILE -> PATH for load/loadall (can be either file or directory now)
      * simpler implementation for __bpf_program__pin_name
      * removed p_err for REQ_ARGS checks
      * parse_atach_detach_args -> parse_attach_detach_args
      * for -> while in bpf_object__pin_{programs,maps} recovery
      
      v4 changes:
      * addressed another round of comments/style issues from Jakub Kicinski &
        Quentin Monnet (thanks!)
      * implemented bpf_object__pin_maps and bpf_object__pin_programs helpers and
        used them in bpf_program__pin
      * added new pin_name to bpf_program so bpf_program__pin
        works with sections that contain '/'
      * moved *loadall* command implementation into a separate patch
      * added patch that implements *pinmaps* to pin maps when doing
        load/loadall
      
      v3 changes:
      * (maybe) better cleanup for partial failure in bpf_object__pin
      * added special case in bpf_program__pin for programs with single
        instances
      
      v2 changes:
      * addressed comments/style issues from Jakub Kicinski & Quentin Monnet
      * removed logic that populates jump table
      * added cleanup for partial failure in bpf_object__pin
      
      This patch series adds support for loading and attaching flow dissector
      programs from the bpftool:
      
      * first patch fixes flow dissector section name in the selftests (so
        libbpf auto-detection works)
      * second patch adds proper cleanup to bpf_object__pin, parts of which are now
        being used to attach all flow dissector progs/maps
      * third patch adds special case in bpf_program__pin for programs with
        single instances (we don't create <prog>/0 pin anymore, just <prog>)
      * forth patch adds pin_name to the bpf_program struct
        which is now used as a pin name in bpf_program__pin et al
      * fifth patch adds *loadall* command that pins all programs, not just
        the first one
      * sixth patch adds *pinmaps* argument to load/loadall to let users pin
        all maps of the obj file
      * seventh patch adds actual flow_dissector support to the bpftool and
        an example
      ====================
      Acked-by: default avatarQuentin Monnet <quentin.monnet@netronome.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      f2cbf958
    • Stanislav Fomichev's avatar
      bpftool: support loading flow dissector · 092f0892
      Stanislav Fomichev authored
      This commit adds support for loading/attaching/detaching flow
      dissector program.
      
      When `bpftool loadall` is called with a flow_dissector prog (i.e. when the
      'type flow_dissector' argument is passed), we load and pin all programs.
      User is responsible to construct the jump table for the tail calls.
      
      The last argument of `bpftool attach` is made optional for this use
      case.
      
      Example:
      bpftool prog load tools/testing/selftests/bpf/bpf_flow.o \
              /sys/fs/bpf/flow type flow_dissector \
      	pinmaps /sys/fs/bpf/flow
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 0 0 0 0 \
              value pinned /sys/fs/bpf/flow/IP
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 1 0 0 0 \
              value pinned /sys/fs/bpf/flow/IPV6
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 2 0 0 0 \
              value pinned /sys/fs/bpf/flow/IPV6OP
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 3 0 0 0 \
              value pinned /sys/fs/bpf/flow/IPV6FR
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 4 0 0 0 \
              value pinned /sys/fs/bpf/flow/MPLS
      
      bpftool map update pinned /sys/fs/bpf/flow/jmp_table \
              key 5 0 0 0 \
              value pinned /sys/fs/bpf/flow/VLAN
      
      bpftool prog attach pinned /sys/fs/bpf/flow/flow_dissector flow_dissector
      
      Tested by using the above lines to load the prog in
      the test_flow_dissector.sh selftest.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      092f0892
    • Stanislav Fomichev's avatar
      bpftool: add pinmaps argument to the load/loadall · 3767a94b
      Stanislav Fomichev authored
      This new additional argument lets users pin all maps from the object at
      specified path.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      3767a94b
    • Stanislav Fomichev's avatar
      bpftool: add loadall command · 77380998
      Stanislav Fomichev authored
      This patch adds new *loadall* command which slightly differs from the
      existing *load*. *load* command loads all programs from the obj file,
      but pins only the first programs. *loadall* pins all programs from the
      obj file under specified directory.
      
      The intended usecase is flow_dissector, where we want to load a bunch
      of progs, pin them all and after that construct a jump table.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      77380998
    • Stanislav Fomichev's avatar
      libbpf: add internal pin_name · 33a2c75c
      Stanislav Fomichev authored
      pin_name is the same as section_name where '/' is replaced
      by '_'. bpf_object__pin_programs is converted to use pin_name
      to avoid the situation where section_name would require creating another
      subdirectory for a pin (as, for example, when calling bpf_object__pin_programs
      for programs in sections like "cgroup/connect6").
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      33a2c75c
    • Stanislav Fomichev's avatar
      libbpf: bpf_program__pin: add special case for instances.nr == 1 · fd734c5c
      Stanislav Fomichev authored
      When bpf_program has only one instance, don't create a subdirectory with
      per-instance pin files (<prog>/0). Instead, just create a single pin file
      for that single instance. This simplifies object pinning by not creating
      unnecessary subdirectories.
      
      This can potentially break existing users that depend on the case
      where '/0' is always created. However, I couldn't find any serious
      usage of bpf_program__pin inside the kernel tree and I suppose there
      should be none outside.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      fd734c5c
    • Stanislav Fomichev's avatar
      libbpf: cleanup after partial failure in bpf_object__pin · 0c19a9fb
      Stanislav Fomichev authored
      bpftool will use bpf_object__pin in the next commits to pin all programs
      and maps from the file; in case of a partial failure, we need to get
      back to the clean state (undo previous program/map pins).
      
      As part of a cleanup, I've added and exported separate routines to
      pin all maps (bpf_object__pin_maps) and progs (bpf_object__pin_programs)
      of an object.
      Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      0c19a9fb