> On Feb 12, 2020, at 10:34 AM, Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: > > On Wed, Feb 12, 2020 at 10:29 AM Song Liu <songliubraving@xxxxxx> wrote: >> >> >> >>> On Feb 12, 2020, at 10:14 AM, Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: >>> >>> On Wed, Feb 12, 2020 at 10:07 AM Song Liu <songliubraving@xxxxxx> wrote: >>>> >>>> >>>> >>>>> On Feb 12, 2020, at 9:34 AM, Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> wrote: >>>>> >>>>> On Wed, Feb 12, 2020 at 4:32 AM Eelco Chaudron <echaudro@xxxxxxxxxx> wrote: >>>>>> >>>>>> Currently when you want to attach a trace program to a bpf program >>>>>> the section name needs to match the tracepoint/function semantics. >>>>>> >>>>>> However the addition of the bpf_program__set_attach_target() API >>>>>> allows you to specify the tracepoint/function dynamically. >>>>>> >>>>>> The call flow would look something like this: >>>>>> >>>>>> xdp_fd = bpf_prog_get_fd_by_id(id); >>>>>> trace_obj = bpf_object__open_file("func.o", NULL); >>>>>> prog = bpf_object__find_program_by_title(trace_obj, >>>>>> "fentry/myfunc"); >>>>>> bpf_program__set_attach_target(prog, xdp_fd, >>>>>> "fentry/xdpfilt_blk_all"); >>>>>> bpf_object__load(trace_obj) >>>>>> >>>>>> Signed-off-by: Eelco Chaudron <echaudro@xxxxxxxxxx> >>>> >>>> >>>> I am trying to solve the same problem with slightly different approach. >>>> >>>> It works as the following (with skeleton): >>>> >>>> obj = myobject_bpf__open_opts(&opts); >>>> bpf_object__for_each_program(prog, obj->obj) >>>> bpf_program__overwrite_section_name(prog, new_names[id++]); >>>> err = myobject_bpf__load(obj); >>>> >>>> I don't have very strong preference. But I think my approach is simpler? >>> >>> I prefer bpf_program__set_attach_target() approach. Section name is a >>> program identifier and a *hint* for libbpf to determine program type, >>> attach type, and whatever else makes sense. But there still should be >>> an API to set all that manually at runtime, thus >>> bpf_program__set_attach_target(). Doing same by overriding section >>> name feels like a hack, plus it doesn't handle overriding >>> attach_program_fd at all. >> >> We already have bpf_object_open_opts to handle different attach_program_fd. > > Not really, because open_opts apply to bpf_object and all its > bpf_programs, not to individual bpf_program. So it works only if BPF > application has only one BPF program. If you have many, you can only > set the same attach_program_fd for all of them. Basically, open_opts' > attach_prog_fd should be treated as a default or fallback > attach_prog_fd. Fair enough. I will use set_attach_target in my code. > >> Can we depreciate bpf_object_open_opts.attach_prog_fd with the >> bpf_program__set_attach_target() approach? > > bpf_program__set_attach_target() overrides attach_prog_fd, yes. But we > can't just deprecate that option because it's part of an API already, > even though adding it to open opts was probably a mistake. But for > simple BPF apps with single BPF program it does work fine, so... Maybe add a warning saying "attach_prog_fd is deprecated, xxx"? Thanks, Song