Commit 8f166931 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Alexei Starovoitov

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: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/7878a54667e74afeec3ee519999c044bd514b44c.1675245258.git.lorenzo@kernel.orgSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 0ae0cb2b
...@@ -41,7 +41,7 @@ struct xdp_id_md { ...@@ -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) ...@@ -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 @@ static int libbpf_netlink_recv(int sock, __u32 nl_pid, int seq, ...@@ -212,14 +212,14 @@ static int libbpf_netlink_recv(int sock, __u32 nl_pid, int seq,
} }
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, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment