Skip to content

libbpf ​

libbpf 库在内核未开启某些选项或支持某些操作时会导致程序无法正常运行:

  • 通过 fd 获取 BPF object 信息, 若不支持, 则在实现中调用了 bpf_obj_get_info_by_fd 函数的接口可能会失败, 比如
    • bpf_tc_attach: 在 BPF tc 挂载点上挂载程序.
  • NETLINK_EXT_ACK sockopt, 若不支持, 则在实现中调用了 libbpf_netlink_send_recv 函数的接口可能会打印如下报错,
    libbpf: Netlink error reporting not supported
    比如
    • bpf_tc_hook_create: 创建 struct bpf_tc_hook 类型实例.
  • BPF 程序查询, 若不支持, 则接口 bpf_prog_query_opts 和 bpf_prog_query 会调用失败.
  • BPF 程序遍历, 若不支持, 则接口 bpf_prog_get_next_id 会调用失败.
  • BPF map 遍历, 若不支持, 则接口 bpf_map_get_next_id 会调用失败.
  • BPF link 遍历, 若不支持, 则接口 bpf_link_get_next_id 会调用失败.
  • 进程相关 BPF 程序查询, 若不支持, 则接口 bpf_task_fd_query 会调用失败.