提交 339b4ca5 编写于 作者: D Dmitry Eremin-Solenikov

ieee802154: add two nl802154 helpers

Add two nl802154 helpers: one for starting a reply message, one for sending.
Signed-off-by: NDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
上级 405cd39f
...@@ -38,8 +38,13 @@ void __exit ieee802154_nl_exit(void); ...@@ -38,8 +38,13 @@ void __exit ieee802154_nl_exit(void);
.dumpit = _dump, \ .dumpit = _dump, \
} }
struct genl_info;
struct sk_buff *ieee802154_nl_create(int flags, u8 req); struct sk_buff *ieee802154_nl_create(int flags, u8 req);
int ieee802154_nl_mcast(struct sk_buff *msg, unsigned int group); int ieee802154_nl_mcast(struct sk_buff *msg, unsigned int group);
struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info,
int flags, u8 req);
int ieee802154_nl_reply(struct sk_buff *msg, struct genl_info *info);
extern struct genl_family nl802154_family; extern struct genl_family nl802154_family;
int nl802154_mac_register(void); int nl802154_mac_register(void);
......
...@@ -75,6 +75,39 @@ int ieee802154_nl_mcast(struct sk_buff *msg, unsigned int group) ...@@ -75,6 +75,39 @@ int ieee802154_nl_mcast(struct sk_buff *msg, unsigned int group)
return -ENOBUFS; return -ENOBUFS;
} }
struct sk_buff *ieee802154_nl_new_reply(struct genl_info *info,
int flags, u8 req)
{
void *hdr;
struct sk_buff *msg = nlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
if (!msg)
return NULL;
hdr = genlmsg_put_reply(msg, info,
&nl802154_family, flags, req);
if (!hdr) {
nlmsg_free(msg);
return NULL;
}
return msg;
}
int ieee802154_nl_reply(struct sk_buff *msg, struct genl_info *info)
{
/* XXX: nlh is right at the start of msg */
void *hdr = genlmsg_data(NLMSG_DATA(msg->data));
if (genlmsg_end(msg, hdr) < 0)
goto out;
return genlmsg_reply(msg, info);
out:
nlmsg_free(msg);
return -ENOBUFS;
}
int __init ieee802154_nl_init(void) int __init ieee802154_nl_init(void)
{ {
int rc; int rc;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册