Skip to content

Libbpf userspace function bpf_program__attach_tcx

1.3.0

Attach a BPF_PROG_TYPE_SCHED_CLS program to a network interface.

Definition

struct bpf_link * bpf_program__attach_tcx(const struct bpf_program *prog, int ifindex, const struct bpf_tcx_opts *opts);

Parameters

  • prog: BPF program to attach
  • ifindex: index of the network interface to attach the program to
  • opts: options for the TC program

Return

Reference to the newly created BPF link; or NULL is returned on error, error code is stored in errno

struct bpf_tcx_opts

struct bpf_tcx_opts {
    /* size of this struct, for forward/backward compatibility */
    size_t sz;
    __u32 flags;
    __u32 relative_fd;
    __u32 relative_id;
    __u64 expected_revision;
    size_t :0;
};

flags

Flags to modify attachment behavior.

BPF_F_ID - If set, identify a relative object based on the ID in relative_id. Otherwise use the FD in relative_fd. BPF_F_LINK - If set, the relative_fd/relative_id fields refer to links, not programs. BPF_F_REPLACE - If set, replace the existing program/link with the relative one. BPF_F_BEFORE - If set, add the new program/link before the relative one. BPF_F_AFTER - If set, add the new program/link after the relative one.

relative_fd

File descriptor of the relative object.

relative_id

ID of the relative object.

expected_revision

The current mprog revision. A revision number shared by all programs attached to the same hook point. It can be queried via BPF_PROG_QUERY / bpf_prog_query / bpf_prog_query_opts.

Usage

This function attaches a TC program via the BPF link interface. It is referred to as TCX to differentiate it from TC programs attached via bpf_tc_attach. The two methods are mutually exclusive. TCX is the newer and preferred method.

Example

Docs could be improved

This part of the docs is incomplete, contributions are very welcome