mirror of
https://github.com/netdata/libbpf.git
synced 2026-04-11 11:09:06 +08:00
libbpf: add the capability to specify netlink proto in libbpf_netlink_send_recv
This is a preliminary patch in order to introduce netlink_generic protocol support to libbpf. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Link: https://lore.kernel.org/r/7878a54667e74afeec3ee519999c044bd514b44c.1675245258.git.lorenzo@kernel.org Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
committed by
Andrii Nakryiko
parent
700d755151
commit
41b96a8c08
@@ -41,7 +41,7 @@ struct xdp_id_md {
|
|||||||
struct xdp_link_info info;
|
struct xdp_link_info info;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int libbpf_netlink_open(__u32 *nl_pid)
|
static int libbpf_netlink_open(__u32 *nl_pid, int proto)
|
||||||
{
|
{
|
||||||
struct sockaddr_nl sa;
|
struct sockaddr_nl sa;
|
||||||
socklen_t addrlen;
|
socklen_t addrlen;
|
||||||
@@ -51,7 +51,7 @@ static int libbpf_netlink_open(__u32 *nl_pid)
|
|||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sa.nl_family = AF_NETLINK;
|
sa.nl_family = AF_NETLINK;
|
||||||
|
|
||||||
sock = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE);
|
sock = socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, proto);
|
||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
return -errno;
|
return -errno;
|
||||||
|
|
||||||
@@ -212,14 +212,14 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int libbpf_netlink_send_recv(struct libbpf_nla_req *req,
|
static int libbpf_netlink_send_recv(struct libbpf_nla_req *req,
|
||||||
__dump_nlmsg_t parse_msg,
|
int proto, __dump_nlmsg_t parse_msg,
|
||||||
libbpf_dump_nlmsg_t parse_attr,
|
libbpf_dump_nlmsg_t parse_attr,
|
||||||
void *cookie)
|
void *cookie)
|
||||||
{
|
{
|
||||||
__u32 nl_pid = 0;
|
__u32 nl_pid = 0;
|
||||||
int sock, ret;
|
int sock, ret;
|
||||||
|
|
||||||
sock = libbpf_netlink_open(&nl_pid);
|
sock = libbpf_netlink_open(&nl_pid, proto);
|
||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
return sock;
|
return sock;
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ static int __bpf_set_link_xdp_fd_replace(int ifindex, int fd, int old_fd,
|
|||||||
}
|
}
|
||||||
nlattr_end_nested(&req, nla);
|
nlattr_end_nested(&req, nla);
|
||||||
|
|
||||||
return libbpf_netlink_send_recv(&req, NULL, NULL, NULL);
|
return libbpf_netlink_send_recv(&req, NETLINK_ROUTE, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bpf_xdp_attach(int ifindex, int prog_fd, __u32 flags, const struct bpf_xdp_attach_opts *opts)
|
int bpf_xdp_attach(int ifindex, int prog_fd, __u32 flags, const struct bpf_xdp_attach_opts *opts)
|
||||||
@@ -382,7 +382,7 @@ int bpf_xdp_query(int ifindex, int xdp_flags, struct bpf_xdp_query_opts *opts)
|
|||||||
xdp_id.ifindex = ifindex;
|
xdp_id.ifindex = ifindex;
|
||||||
xdp_id.flags = xdp_flags;
|
xdp_id.flags = xdp_flags;
|
||||||
|
|
||||||
err = libbpf_netlink_send_recv(&req, __dump_link_nlmsg,
|
err = libbpf_netlink_send_recv(&req, NETLINK_ROUTE, __dump_link_nlmsg,
|
||||||
get_xdp_info, &xdp_id);
|
get_xdp_info, &xdp_id);
|
||||||
if (err)
|
if (err)
|
||||||
return libbpf_err(err);
|
return libbpf_err(err);
|
||||||
@@ -493,7 +493,7 @@ static int tc_qdisc_modify(struct bpf_tc_hook *hook, int cmd, int flags)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return libbpf_netlink_send_recv(&req, NULL, NULL, NULL);
|
return libbpf_netlink_send_recv(&req, NETLINK_ROUTE, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tc_qdisc_create_excl(struct bpf_tc_hook *hook)
|
static int tc_qdisc_create_excl(struct bpf_tc_hook *hook)
|
||||||
@@ -673,7 +673,8 @@ int bpf_tc_attach(const struct bpf_tc_hook *hook, struct bpf_tc_opts *opts)
|
|||||||
|
|
||||||
info.opts = opts;
|
info.opts = opts;
|
||||||
|
|
||||||
ret = libbpf_netlink_send_recv(&req, get_tc_info, NULL, &info);
|
ret = libbpf_netlink_send_recv(&req, NETLINK_ROUTE, get_tc_info, NULL,
|
||||||
|
&info);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return libbpf_err(ret);
|
return libbpf_err(ret);
|
||||||
if (!info.processed)
|
if (!info.processed)
|
||||||
@@ -739,7 +740,7 @@ static int __bpf_tc_detach(const struct bpf_tc_hook *hook,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return libbpf_netlink_send_recv(&req, NULL, NULL, NULL);
|
return libbpf_netlink_send_recv(&req, NETLINK_ROUTE, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int bpf_tc_detach(const struct bpf_tc_hook *hook,
|
int bpf_tc_detach(const struct bpf_tc_hook *hook,
|
||||||
@@ -804,7 +805,8 @@ int bpf_tc_query(const struct bpf_tc_hook *hook, struct bpf_tc_opts *opts)
|
|||||||
|
|
||||||
info.opts = opts;
|
info.opts = opts;
|
||||||
|
|
||||||
ret = libbpf_netlink_send_recv(&req, get_tc_info, NULL, &info);
|
ret = libbpf_netlink_send_recv(&req, NETLINK_ROUTE, get_tc_info, NULL,
|
||||||
|
&info);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return libbpf_err(ret);
|
return libbpf_err(ret);
|
||||||
if (!info.processed)
|
if (!info.processed)
|
||||||
|
|||||||
Reference in New Issue
Block a user