tools/bpf: add more netlink functionalities in lib/bpf
This patch added a few netlink attribute parsing functions and the netlink API functions to query networking links, tc classes, tc qdiscs and tc filters. For example, the following API is to get networking links: int nl_get_link(int sock, unsigned int nl_pid, dump_nlmsg_t dump_link_nlmsg, void *cookie); Note that when the API is called, the user also provided a callback function with the following signature: int (*dump_nlmsg_t)(void *cookie, void *msg, struct nlattr **tb); The "cookie" is the parameter the user passed to the API and will be available for the callback function. The "msg" is the information about the result, e.g., ifinfomsg or tcmsg. The "tb" is the parsed netlink attributes. Signed-off-by: Yonghong Song <yhs@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:

committed by
Alexei Starovoitov

parent
f7010770fb
commit
36f1678d9e
@@ -67,6 +67,44 @@ struct nla_policy {
|
||||
nla_ok(pos, rem); \
|
||||
pos = nla_next(pos, &(rem)))
|
||||
|
||||
/**
|
||||
* nla_data - head of payload
|
||||
* @nla: netlink attribute
|
||||
*/
|
||||
static inline void *nla_data(const struct nlattr *nla)
|
||||
{
|
||||
return (char *) nla + NLA_HDRLEN;
|
||||
}
|
||||
|
||||
static inline uint8_t nla_getattr_u8(const struct nlattr *nla)
|
||||
{
|
||||
return *(uint8_t *)nla_data(nla);
|
||||
}
|
||||
|
||||
static inline uint32_t nla_getattr_u32(const struct nlattr *nla)
|
||||
{
|
||||
return *(uint32_t *)nla_data(nla);
|
||||
}
|
||||
|
||||
static inline const char *nla_getattr_str(const struct nlattr *nla)
|
||||
{
|
||||
return (const char *)nla_data(nla);
|
||||
}
|
||||
|
||||
/**
|
||||
* nla_len - length of payload
|
||||
* @nla: netlink attribute
|
||||
*/
|
||||
static inline int nla_len(const struct nlattr *nla)
|
||||
{
|
||||
return nla->nla_len - NLA_HDRLEN;
|
||||
}
|
||||
|
||||
int nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head, int len,
|
||||
struct nla_policy *policy);
|
||||
int nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla,
|
||||
struct nla_policy *policy);
|
||||
|
||||
int nla_dump_errormsg(struct nlmsghdr *nlh);
|
||||
|
||||
#endif /* __NLATTR_H */
|
||||
|
Reference in New Issue
Block a user