How to send a message from a userspace application to a module
Teto
mattator at gmail.com
Mon Apr 1 11:17:42 EDT 2013
just to say that I've a better understanding of netlink and that I solved
the problem though I can't point out the problem since I've made many
changes.
On Wed, Mar 27, 2013 at 8:14 PM, Teto <mattator at gmail.com> wrote:
> Hi there,
>
> I am quite new to kernel development and netlink. I am trying to get a
> linux module communicate with an userspace daemon. It is hard to find
> up to date documentation or tutorials so I came up (with difficulty)
> with the following code but I am not sure if this is the recommanded
> way (I've seen people using netlink_kernel_create but I don't use it
> for instnace). The problem is that my module should print a message
> on dmesg via printk when it receives a netlink packet but nothing
> happens.
>
>
> A lot of code follows but it shouldn't be too hard to read for netlink
> specialists such as yourselves since it's mainly copy/paste of
> examples on the Internet, that is very classical without any personal
> logic.
>
>
> ================================================
> ==== USER SPACE CODE: lig_daemon.c ===
> ================================================
> #include <netlink/netlink.h>
> #include <netlink/genl/genl.h>
> #include <netlink/genl/ctrl.h>
> #include <netlink/genl/mngt.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include"../lig_module/lig_module.h"
>
>
> static int parse_cb(struct nl_msg *msg, void *arg)
> {
> printf("callbacl called\n");
> // return genl_handle_msg(msg, NULL);
> }
>
>
>
> int main()
> {
> struct nl_sock *sk = 0;
> int ret = 0;
> int family_id = 0;
> // struct sk_buff *skb = 0;
> void *msg_head;
>
> struct nl_msg *msg;
> struct s_lig_result *user_hdr;
>
>
> printf("Starting LIG DAEMON\n");
>
> sk = nl_socket_alloc();
>
> if(!sk) {
> printf("could not allocate socket\n");
> return EXIT_FAILURE;
> }
>
>
> if(nl_connect(sk, NETLINK_GENERIC) != 0)
> {
> printf("could not connect socket\n");
> goto fail_connect;
>
> }
>
>
> /** 2nd parameter refers to family name defined in gnl_family.name */
> family_id = genl_ctrl_resolve (sk, LIG_FAMILY_NAME);
> if(family_id < 0 )
> {
> printf("error obtaining family\n");
> goto failure;
> }
>
> printf("Family No:\t%d\n", family_id);
>
>
> if (!(msg = nlmsg_alloc()))
> {
> printf("Could not allocate a new message");
> goto failure;
> }
>
>
> user_hdr = genlmsg_put(msg,
> NL_AUTO_PORT, /* port Netlink port
> or NL_AUTO_PORT */
> NL_AUTO_SEQ, /* Sequence number of
> message or NL_AUTO_SEQ*/
> family_id, /* Numeric family identifier*/
> 0,
>
> 0, /* flags (optional ) */
> ELC_RESULTS, /* command identifier */
> VERSION_NR /* version */
> );
>
>
> if (!user_hdr)
> {
> printf("Could not generate a new message");
> goto failure;
>
> }
>
> ret = nla_put_string(msg, ELA_EID, "stuff");
> if(ret != 0)
> {
> printf("Could not add string");
> goto skb_failure;
> }
>
> // else we fill the struct
> // user_hdr->number_of_remote_rlocs = 2;
> // user_hdr->number_of_local_rlocs = 1;
>
>
>
>
> /* finalize the message */
>
> ret =nl_send_auto ( sk, msg);
>
> /* send message (skb, pid) */
> if(ret < 0)
> {
> printf("Could not send message");
> goto skb_failure;
> }
>
>
> nl_socket_modify_cb( sk, NL_CB_VALID, NL_CB_CUSTOM, parse_cb, NULL);
>
>
> //returns -10 => NLE_OPNOTSUPP
> ret = nl_recvmsgs_default( sk );
> printf("After receive %i.\n", ret);
> if( ret < 0)
> {
> printf("Error: %s\n", nl_geterror(ret) );
> }
>
>
>
>
> // free allocated struct
> nlmsg_free(msg);
> nl_socket_free(sk);
>
>
> printf("End of DAEMON\n");
> return EXIT_SUCCESS;
>
>
>
> skb_failure:
> nlmsg_free(msg);
>
> failure:
> fail_connect:
> nl_socket_free(sk);
>
>
> return EXIT_FAILURE;
> }
>
>
>
> ================================================
> ==== KERNEL MODULE CODE: lig_module.h, just a bunch of definitions ===
> ================================================
> #ifndef LIG_MODULE_H
> #define LIG_MODULE_H
>
>
>
>
> /* attributes (variables): the index in this enum is used as a
> reference for the type,
> * userspace application has to indicate the corresponding type
> * the policy is used for security considerations
> */
> enum E_LIG_ATTRIBUTE {
> ELA_RLOCS_NUMBER,
> ELA_EID,
> ELA_MAX
>
> };
>
>
> /* protocol version */
> #define VERSION_NR 1
>
> /*the name of this family, used by userspace application */
> #define LIG_FAMILY_NAME "LIG_FAMILY"
>
> /* commands: enumeration of all commands (functions),
> * used by userspace application to identify command to be ececuted
> */
> enum E_LIG_COMMAND {
> ELC_REQUEST_RLOCS_FOR_EID,
> ELC_RESULTS,
> ELC_MAX,
> };
>
> struct s_lig_result {
> int number_of_remote_rlocs;
> int number_of_local_rlocs;
> };
>
> struct s_lig_request {
> int remote_eid;
> int local_eid;
> // int number_of_local_rlocs;
> };
>
>
> #endif
>
> ================================================
> ==== KERNEL MODULE CODE: lig_module.c, just a bunch of definitions ===
> ================================================
>
>
> #include <linux/genetlink.h>
> #include <net/genetlink.h>
> #include <linux/module.h>
> #include <linux/kernel.h>
> #include "lig_module.h"
>
>
> #define MAX_STRING 16
> #define MAX_TAB 16
>
>
> //static int entier;
> static char destinationIP[MAX_STRING];
>
> //! Path towards the lig program
> static char programPath[100];
>
> // sock
> //static struct sock *nl_sk = NULL;
>
> module_param_string(destinationIP, destinationIP, sizeof(destinationIP),
> 0644);
> module_param_string(programPath, programPath, sizeof(programPath), 0644);
>
> MODULE_PARM_DESC(destinationIP, "EID we want to retrieve the RLOC number
> for");
> MODULE_PARM_DESC(programPath, "Path towards the userspace lig program
> this module calls ?");
>
>
>
> MODULE_DESCRIPTION("lig_module");
> MODULE_LICENSE("GPL");
>
>
>
> /* attribute policy: defines which attribute has which type (e.g int,
> char * etc)
> * possible values defined in net/netlink.h
> */
> static struct nla_policy lig_policy[ ELA_MAX ] = {
> [ELA_RLOCS_NUMBER] = { .type = NLA_UNSPEC, .len = 120 },
> [ELA_EID] = { .type = NLA_UNSPEC , .len = 120}
> };
>
>
> /* family definition */
> static struct genl_family lig_gnl_family = {
> .id = GENL_ID_GENERATE, /* genetlink should generate an id
> */
> .hdrsize = 0,
> .name = LIG_FAMILY_NAME, /*the name of this family, used by
> userspace application */
> .version = VERSION_NR, //version number
> .maxattr = ELA_MAX,
> };
>
>
>
> /* an echo command, receives a message, prints it and sends another
> message back */
> int handle_results(struct sk_buff *skb_2, struct genl_info *info)
> {
> struct nlattr *na;
> struct sk_buff *skb;
> int rc;
> void *msg_head;
> char * mydata;
>
> if (info == NULL)
> goto out;
>
> printk("call to %s in reaction to %d \n",__func__, info->snd_pid );
>
> /*for each attribute there is an index in info->attrs which points
> to a nlattr structure
> *in this structure the data is given
> */
> na = info->attrs[ELA_RLOCS_NUMBER];
> if (na)
> {
> mydata = (char *)nla_data(na);
>
> if (mydata == NULL)
> printk("error while receiving data\n");
> else
> printk(KERN_NOTICE "received: %s\n", mydata);
> }
> else
> {
> printk("no info->attrs %i\n", ELA_RLOCS_NUMBER);
> }
>
>
> /* send a message back*/
> /* allocate some memory, since the size is not yet known use
> NLMSG_GOODSIZE*/
> skb = genlmsg_new(NLMSG_GOODSIZE, GFP_KERNEL);
>
> if (skb == NULL)
> goto out;
>
> /* create the message headers */
> /* arguments of genlmsg_put:
> struct sk_buff *,
> int (sending) pid,
> int sequence number,
> struct genl_family *,
> int flags,
> u8 command index (why do we need this?)
> */
> /*
> * Payload Format:
> * <---------------------- nlmsg_len(nlh) --------------------->
> * <------ hdrlen ------> <- nlmsg_attrlen(nlh, hdrlen) ->
> * +----------------------+- - -+--------------------------------+
> * | Family Header | Pad | Attributes |
> * +----------------------+- - -+--------------------------------+
> */
>
> msg_head = genlmsg_put(skb, 0, info->snd_seq+1, &lig_gnl_family, 0,
> ELC_REQUEST_RLOCS_FOR_EID);
>
> if (msg_head == NULL) {
> rc = -ENOMEM;
> goto out;
> }
> /* add a DOC_EXMPL_A_MSG attribute (actual value to be sent) */
> rc = nla_put_string(skb, ELA_EID, "hello world from kernel
> space\n");
> if (rc != 0)
> goto out;
>
> /* finalize the message */
> genlmsg_end(skb, msg_head);
>
> /* send the message back */
> // rc = genlmsg_unicast( skb, info->snd_pid );
> if (rc != 0)
> goto out;
> return 0;
>
> out:
> printk("an error occured in %s:\n",__func__);
>
> return 0;
> }
>
>
>
>
> /*
> commands: mapping between the command enumeration and the actual function
>
> */
> struct genl_ops lig_ops[ELC_MAX] = {
>
> {
> .cmd = ELC_REQUEST_RLOCS_FOR_EID,
> .flags = 0,
> .policy = lig_policy,
> .doit = handle_results, /* cb function */
> .dumpit = NULL, /* cb function */
> } ,
> {
> .cmd = ELC_RESULTS,
> .flags = 0,
> .policy = lig_policy,
> .doit = handle_results, /* cb function */
> .dumpit = NULL, /* cb function */
> }
> };
>
>
>
>
> static int __init init_lig_module(void)
> {
> int rc;
> printk("LIG MODULE initialization\n");
>
> /*register new family*/
> rc = genl_register_family(&lig_gnl_family);
> if (rc != 0){
> genl_unregister_family(&lig_gnl_family);
> rc = genl_register_family(&lig_gnl_family);
> if (rc != 0)
> goto failure;
> }
>
>
> /*register functions (commands) of the new family*/
> rc = genl_register_ops(&lig_gnl_family, lig_ops);
> if (rc != 0){
> printk(KERN_WARNING "could not register ops: %i\n",rc);
> genl_unregister_family(&lig_gnl_family);
> goto failure;
> }
>
>
>
> return 0;
>
>
>
> failure:
> printk(KERN_ERR "an error occured while inserting the generic
> netlink example module\n");
> return -1;
>
> }
>
> static void __exit cleanup_lig_module(void)
> {
>
> int ret = 0;
>
> printk(KERN_INFO "cleanup_lig_module() called\n");
>
> /* do not forget to unregister family
> returns 0 on success
> unregister operations as well
> */
> ret = genl_unregister_family(&lig_gnl_family);
> if( ret != 0)
> {
> printk(KERN_WARNING "Could not unregister family, error:
> %d\n", ret);
> }
>
> }
>
>
> module_init( init_lig_module );
> module_exit( cleanup_lig_module );
>
>
>
> =====================================================
> ==== the debug output of the userspace application "lig_daemon" ====
> =====================================================
> teto at tatooine:~/lig_daemon$ NLCB=debug lig_daemon
> Starting LIG DAEMON
> -- Debug: Sent Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 20
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 773 <REQUEST,ACK,ROOT,MATCH>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 03 01 00 00 ....
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 116
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 7 octets
> 6e 6c 63 74 72 6c 00 nlctrl.
> [PADDING] 1 octets
> 00 .
> [ATTR 01] 2 octets
> 10 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 02 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 07 00 00 00 ....
> [ATTR 06] 20 octets
> 14 00 01 00 08 00 01 00 03 00 00 00 08 00 02 00 0e 00
> ..................
> 00 00 ..
> [ATTR 07] 24 octets
> 18 00 01 00 08 00 02 00 10 00 00 00 0b 00 01 00 6e 6f
> ................no
> 74 69 66 79 00 00 tify..
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 232
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 10 octets
> 4e 4c 42 4c 5f 4d 47 4d 54 00 NLBL_MGMT.
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 01] 2 octets
> 11 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 03 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 0a 00 00 00 ....
> [ATTR 06] 160 octets
> 14 00 01 00 08 00 01 00 01 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 02 00 08 00 01 00 02 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 03 00 08 00 01 00 03 00 00 00 08 00
> ..................
> 02 00 0c 00 00 00 14 00 04 00 08 00 01 00 04 00 00 00
> ..................
> 08 00 02 00 0b 00 00 00 14 00 05 00 08 00 01 00 05 00
> ..................
> 00 00 08 00 02 00 0b 00 00 00 14 00 06 00 08 00 01 00
> ..................
> 06 00 00 00 08 00 02 00 0a 00 00 00 14 00 07 00 08 00
> ..................
> 01 00 07 00 00 00 08 00 02 00 0c 00 00 00 14 00 08 00
> ..................
> 08 00 01 00 08 00 00 00 08 00 02 00 0a 00 00 00 ................
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 156
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 13 octets
> 4e 4c 42 4c 5f 43 49 50 53 4f 76 34 00 NLBL_CIPSOv4.
> [PADDING] 3 octets
> 00 00 00 ...
> [ATTR 01] 2 octets
> 12 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 03 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 0c 00 00 00 ....
> [ATTR 06] 80 octets
> 14 00 01 00 08 00 01 00 01 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 02 00 08 00 01 00 02 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 03 00 08 00 01 00 03 00 00 00 08 00
> ..................
> 02 00 0a 00 00 00 14 00 04 00 08 00 01 00 04 00 00 00
> ..................
> 08 00 02 00 0c 00 00 00 ........
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 232
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 11 octets
> 4e 4c 42 4c 5f 55 4e 4c 42 4c 00 NLBL_UNLBL.
> [PADDING] 1 octets
> 00 .
> [ATTR 01] 2 octets
> 13 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 03 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 07 00 00 00 ....
> [ATTR 06] 160 octets
> 14 00 01 00 08 00 01 00 03 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 02 00 08 00 01 00 04 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 03 00 08 00 01 00 05 00 00 00 08 00
> ..................
> 02 00 0c 00 00 00 14 00 04 00 08 00 01 00 06 00 00 00
> ..................
> 08 00 02 00 0b 00 00 00 14 00 05 00 08 00 01 00 07 00
> ..................
> 00 00 08 00 02 00 0b 00 00 00 14 00 06 00 08 00 01 00
> ..................
> 08 00 00 00 08 00 02 00 0c 00 00 00 14 00 07 00 08 00
> ..................
> 01 00 01 00 00 00 08 00 02 00 0b 00 00 00 14 00 08 00
> ..................
> 08 00 01 00 02 00 00 00 08 00 02 00 0a 00 00 00 ................
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 104
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 11 octets
> 61 63 70 69 5f 65 76 65 6e 74 00 acpi_event.
> [PADDING] 1 octets
> 00 .
> [ATTR 01] 2 octets
> 14 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 01 00 00 00 ....
> [ATTR 07] 32 octets
> 20 00 01 00 08 00 02 00 01 00 00 00 12 00 01 00 61 63
> ...............ac
> 70 69 5f 6d 63 5f 67 72 6f 75 70 00 00 00 pi_mc_group...
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 112
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 14 octets
> 74 68 65 72 6d 61 6c 5f 65 76 65 6e 74 00 thermal_event.
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 01] 2 octets
> 15 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 01 00 00 00 ....
> [ATTR 07] 36 octets
> 24 00 01 00 08 00 02 00 02 00 00 00 16 00 01 00 74 68
> $...............th
> 65 72 6d 61 6c 5f 6d 63 5f 67 72 6f 75 70 02 00 00 00
> ermal_mc_group....
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 68
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 10 octets
> 56 46 53 5f 44 51 55 4f 54 00 VFS_DQUOT.
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 01] 2 octets
> 16 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 06 00 00 00 ....
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 112
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 10 octets
> 54 41 53 4b 53 54 41 54 53 00 TASKSTATS.
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 01] 2 octets
> 17 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 04 00 00 00 ....
> [ATTR 06] 40 octets
> 14 00 01 00 08 00 01 00 01 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 02 00 08 00 01 00 04 00 00 00 08 00 02 00
> ..................
> 0a 00 00 00 ....
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 1540
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 8 octets
> 6e 6c 38 30 32 31 31 00 nl80211.
> [ATTR 01] 2 octets
> 18 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 98 00 00 00 ....
> [ATTR 06] 1340 octets
> 14 00 01 00 08 00 01 00 01 00 00 00 08 00 02 00 0e 00
> ..................
> 00 00 14 00 02 00 08 00 01 00 02 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 03 00 08 00 01 00 05 00 00 00 08 00
> ..................
> 02 00 0e 00 00 00 14 00 04 00 08 00 01 00 06 00 00 00
> ..................
> 08 00 02 00 0b 00 00 00 14 00 05 00 08 00 01 00 07 00
> ..................
> 00 00 08 00 02 00 0b 00 00 00 14 00 06 00 08 00 01 00
> ..................
> 08 00 00 00 08 00 02 00 0b 00 00 00 14 00 07 00 08 00
> ..................
> 01 00 09 00 00 00 08 00 02 00 0b 00 00 00 14 00 08 00
> ..................
> 08 00 01 00 0a 00 00 00 08 00 02 00 0b 00 00 00 14 00
> ..................
> 09 00 08 00 01 00 0b 00 00 00 08 00 02 00 0b 00 00 00
> ..................
> 14 00 0a 00 08 00 01 00 0c 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 0b 00 08 00 01 00 0e 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 0c 00 08 00 01 00 0f 00 00 00 08 00
> ..................
> 02 00 0b 00 00 00 14 00 0d 00 08 00 01 00 10 00 00 00
> ..................
> 08 00 02 00 0b 00 00 00 14 00 0e 00 08 00 01 00 11 00
> ..................
> 00 00 08 00 02 00 0e 00 00 00 14 00 0f 00 08 00 01 00
> ..................
> 12 00 00 00 08 00 02 00 0b 00 00 00 14 00 10 00 08 00
> ..................
> 01 00 13 00 00 00 08 00 02 00 0b 00 00 00 14 00 11 00
> ..................
> 08 00 01 00 14 00 00 00 08 00 02 00 0b 00 00 00 14 00
> ..................
> 12 00 08 00 01 00 15 00 00 00 08 00 02 00 0f 00 00 00
> ..................
> 14 00 13 00 08 00 01 00 16 00 00 00 08 00 02 00 0b 00
> ..................
> 00 00 14 00 14 00 08 00 01 00 17 00 00 00 08 00 02 00
> ..................
> 0b 00 00 00 14 00 15 00 08 00 01 00 18 00 00 00 08 00
> ..................
> 02 00 0b 00 00 00 14 00 16 00 08 00 01 00 19 00 00 00
> ..................
> 08 00 02 00 0b 00 00 00 14 00 17 00 08 00 01 00 1f 00
> ..................
> 00 00 08 00 02 00 0a 00 00 00 14 00 18 00 08 00 01 00
> ..................
> 1a 00 00 00 08 00 02 00 0b 00 00 00 14 00 19 00 08 00
> ..................
> 01 00 1b 00 00 00 08 00 02 00 0b 00 00 00 14 00 1a 00
> ..................
> 08 00 01 00 1c 00 00 00 08 00 02 00 0a 00 00 00 14 00
> ..................
> 1b 00 08 00 01 00 1d 00 00 00 08 00 02 00 0b 00 00 00
> ..................
> 14 00 1c 00 08 00 01 00 21 00 00 00 08 00 02 00 0b 00
> ........!.........
> 00 00 14 00 1d 00 08 00 01 00 20 00 00 00 08 00 02 00 ..........
> .......
> 0c 00 00 00 14 00 1e 00 08 00 01 00 4b 00 00 00 08 00
> ............K.....
> 02 00 0b 00 00 00 14 00 1f 00 08 00 01 00 4c 00 00 00
> ..............L...
> 08 00 02 00 0b 00 00 00 14 00 20 00 08 00 01 00 25 00 ..........
> .....%.
> 00 00 08 00 02 00 0b 00 00 00 14 00 21 00 08 00 01 00
> ............!.....
> 26 00 00 00 08 00 02 00 0b 00 00 00 14 00 22 00 08 00
> &............."...
> 01 00 27 00 00 00 08 00 02 00 0b 00 00 00 14 00 23 00
> ..'.............#.
> 08 00 01 00 28 00 00 00 08 00 02 00 0b 00 00 00 14 00
> ....(.............
> 24 00 08 00 01 00 2b 00 00 00 08 00 02 00 0b 00 00 00
> $.....+...........
> 14 00 25 00 08 00 01 00 2c 00 00 00 08 00 02 00 0b 00
> ..%.....,.........
> 00 00 14 00 26 00 08 00 01 00 2d 00 00 00 08 00 02 00
> ....&.....-.......
> 0f 00 00 00 14 00 27 00 08 00 01 00 2e 00 00 00 08 00
> ......'...........
> 02 00 0b 00 00 00 14 00 28 00 08 00 01 00 30 00 00 00
> ........(.....0...
> 08 00 02 00 0b 00 00 00 14 00 29 00 08 00 01 00 31 00
> ..........).....1.
> 00 00 08 00 02 00 0b 00 00 00 14 00 2a 00 08 00 01 00
> ............*.....
> 32 00 00 00 08 00 02 00 0c 00 00 00 14 00 2b 00 08 00
> 2.............+...
> 01 00 34 00 00 00 08 00 02 00 0b 00 00 00 14 00 2c 00
> ..4.............,.
> 08 00 01 00 35 00 00 00 08 00 02 00 0b 00 00 00 14 00
> ....5.............
> 2d 00 08 00 01 00 36 00 00 00 08 00 02 00 0b 00 00 00
> -.....6...........
> 14 00 2e 00 08 00 01 00 37 00 00 00 08 00 02 00 0b 00
> ........7.........
> 00 00 14 00 2f 00 08 00 01 00 38 00 00 00 08 00 02 00
> ..../.....8.......
> 0b 00 00 00 14 00 30 00 08 00 01 00 39 00 00 00 08 00
> ......0.....9.....
> 02 00 0b 00 00 00 14 00 31 00 08 00 01 00 3a 00 00 00
> ........1.....:...
> 08 00 02 00 0b 00 00 00 14 00 32 00 08 00 01 00 3b 00
> ..........2.....;.
> 00 00 08 00 02 00 0b 00 00 00 14 00 33 00 08 00 01 00
> ............3.....
> 43 00 00 00 08 00 02 00 0b 00 00 00 14 00 34 00 08 00
> C.............4...
> 01 00 3d 00 00 00 08 00 02 00 0b 00 00 00 14 00 35 00
> ..=.............5.
> 08 00 01 00 3e 00 00 00 08 00 02 00 0a 00 00 00 14 00
> ....>.............
> 36 00 08 00 01 00 3f 00 00 00 08 00 02 00 0b 00 00 00
> 6.....?...........
> 14 00 37 00 08 00 01 00 41 00 00 00 08 00 02 00 0b 00
> ..7.....A.........
> 00 00 14 00 38 00 08 00 01 00 42 00 00 00 08 00 02 00
> ....8.....B.......
> 0b 00 00 00 14 00 39 00 08 00 01 00 44 00 00 00 08 00
> ......9.....D.....
> 02 00 0b 00 00 00 14 00 3a 00 08 00 01 00 45 00 00 00
> ........:.....E...
> 08 00 02 00 0b 00 00 00 14 00 3b 00 08 00 01 00 49 00
> ..........;.....I.
> 00 00 08 00 02 00 0a 00 00 00 14 00 3c 00 08 00 01 00
> ............<.....
> 4a 00 00 00 08 00 02 00 0b 00 00 00 14 00 3d 00 08 00
> J.............=...
> 01 00 4f 00 00 00 08 00 02 00 0b 00 00 00 14 00 3e 00
> ..O.............>.
> 08 00 01 00 52 00 00 00 08 00 02 00 0b 00 00 00 14 00
> ....R.............
> 3f 00 08 00 01 00 51 00 00 00 08 00 02 00 0b 00 00 00
> ?.....Q...........
> 14 00 40 00 08 00 01 00 53 00 00 00 08 00 02 00 0b 00
> .. at .....S.........
> 00 00 14 00 41 00 08 00 01 00 54 00 00 00 08 00 02 00
> ....A.....T.......
> 0b 00 00 00 14 00 42 00 08 00 01 00 55 00 00 00 08 00
> ......B.....U.....
> 02 00 0b 00 00 00 14 00 43 00 08 00 01 00 57 00 00 00
> ........C.....W...
> 08 00 02 00 0b 00 00 00 ........
> [ATTR 07] 128 octets
> 18 00 01 00 08 00 02 00 03 00 00 00 0b 00 01 00 63 6f
> ................co
> 6e 66 69 67 00 00 18 00 02 00 08 00 02 00 04 00 00 00
> nfig..............
> 09 00 01 00 73 63 61 6e 00 00 00 00 1c 00 03 00 08 00
> ....scan..........
> 02 00 05 00 00 00 0f 00 01 00 72 65 67 75 6c 61 74 6f
> ..........regulato
> 72 79 00 00 18 00 04 00 08 00 02 00 06 00 00 00 09 00
> ry................
> 01 00 6d 6c 6d 65 00 00 00 00 1c 00 05 00 08 00 02 00
> ..mlme............
> 07 00 00 00 0d 00 01 00 74 65 73 74 6d 6f 64 65 00 00
> ........testmode..
> 00 00 ..
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 92
> .nlmsg_type = 16 <genl/family::nlctrl>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 01 02 00 00 ....
> [ATTR 02] 11 octets
> 4c 49 47 5f 46 41 4d 49 4c 59 00 LIG_FAMILY.
> [PADDING] 1 octets
> 00 .
> [ATTR 01] 2 octets
> 19 00 ..
> [PADDING] 2 octets
> 00 00 ..
> [ATTR 03] 4 octets
> 01 00 00 00 ....
> [ATTR 04] 4 octets
> 00 00 00 00 ....
> [ATTR 05] 4 octets
> 02 00 00 00 ....
> [ATTR 06] 20 octets
> 14 00 01 00 08 00 01 00 00 00 00 00 08 00 02 00 0a 00
> ..................
> 00 00 ..
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: Received Message:
> -------------------------- BEGIN NETLINK MESSAGE
> ---------------------------
> [HEADER] 16 octets
> .nlmsg_len = 20
> .nlmsg_type = 3 <DONE>
> .nlmsg_flags = 2 <MULTI>
> .nlmsg_seq = 1364408051
> .nlmsg_pid = 13496
> [PAYLOAD] 4 octets
> 00 00 00 00 ....
> --------------------------- END NETLINK MESSAGE
> ---------------------------
> -- Debug: End of multipart message block: type=DONE length=20
> flags=<MULTI> sequence-nr=1364408051 pid=13496
> End of DAEMON
>
>
>
>
> I hope it's not too much reading. I am running Ubuntu 12.10 with a
> 3.5.0 kernel. Please tell me if you need more infos or if I should run
> a specific test.
>
> Best regards
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/libnl/attachments/20130401/adfa6dd0/attachment-0001.html>
More information about the libnl
mailing list