Quantcast
Channel: Active questions tagged linux-kernel - Stack Overflow
Viewing all articles
Browse latest Browse all 12339

Why am I not receiving my messages from kernel?

$
0
0

I'm trying to send a message from kernel to user space using generic netlink and libnl, the part of my code which does this is implemented as follow:

int struct my_callback(struct sk_buff *skb, struct genl_info *info){    struct sk_buff *obuff;    void *msg_head;    if ((obuff = genlmsg_new(0, GFP_KERNEL)) == NULL) { // I've tried to change the len to NLMSG_GOODSIZE but not worked        pr_err("Failed allocating message to an reply\n");        return 0;    }    if ((msg_head = genlmsg_put_reply(obuff, info, &lunatik_family, 0, LIST_STATES)) == NULL) {        pr_err("Failed to put generic netlink header\n");        return 0;    }    //I've tried to put a genlmsg_end(obuff, msg_head); but didn't work as well    if (genlmsg_reply(obuff, info) < 0) {        pr_err("Failed to send message to user space\n");        return 0;    }    pr_info("Message sent to user-space\n");    return 0;}

P.s: LIST_STATES is a member of enum and have the value of 3

And my user space code is basically:

static int req_handler(struct nl_msg *msg, void *arg){    struct nlmsghdr *nlhdr;    struct genlmsghdr *genlhdr;    nlhdr = nlmsg_hdr(msg);    genlhdr = genlmsg_hdr(nlhdr);    printf("Received a message from kernel: %d\n", genlhdr->cmd);    return NL_OK;}int socket_init(struct nl_sock *sock){    int err = -1;    if ((sock = nl_socket_alloc()) == NULL)        return err;    if ((err = genl_connect(sock)))        return err;    if ((err = genl_ctrl_resolve(sock, LUNATIK_FAMILY)) < 0)        return err;    // I've tried to use NL_CB_VALID, but when I use it I receive no message at all    nl_socket_modify_cb(sock, NL_CB_MSG_IN, NL_CB_CUSTOM, req_handler, NULL);    return 0;}

My output on dmesg is:

Message sent to user-space

And my output on user space is:

Received a message from kernel: 0

I should receive 3 instead of 0, I noticed that I'm receiving only the ACK message, but not the message that I'm sending, I would like to know why this is happening and what I'm doing wrong.


Viewing all articles
Browse latest Browse all 12339

Latest Images

Trending Articles

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>