Hi, Jamal, Now the genl utility can find the acpi event genetlink family. And a simple user space demo is finished for handling acpi event. I really appreciate your help. :) I think the patch which exposes ACPI events via netlink is ok. But I still have some problems on how to listen to specified genetlink family in user space? I can get the dynamic id for "acpi_event" genl family. But I don't know how to use this to receive messages from specified genl family. It seems that "#genl ctrl monitor" has something to do with this, IMO, rtnl_open_byproto(&rth, nl_mgrp(GENL_ID_CTRL), NETLINK_GENERIC) is used to receive messages from the nlctrl(controller) only, but unfortunately it never works for me. :( Any suggestions? What interfaces should I use? Or where can I find some example code? Attachment is the simple user space demo I made. It receives all the broadcasted genetlink messages and only parses the ones sent by "acpi_event" genl family. Thanks, Rui On Sun, 2007-05-27 at 09:34 -0400, jamal wrote: > On 5/27/07, Zhang Rui <rui.zhang@xxxxxxxxx> wrote: > > > > I need to write a user application to test my patch. > > Netlink messages can be sent/received using the standard socket API. > > sure. > > > But how to receive Genetlink messages from specified genetlink family? > > There is no socket ACPI with such a parameter, right? > > Each module has a unique identifier that it receives dynamically on > insertion at the kernel. > > > Do I have to receive all the genetlink messages first? > > No, just the ones for your dynamic id. Try what i described first for > kernel side on the earlier email. I will repeat it here for clarity. > Then look at genl code and if you have questions i can > help. > Note: You need to discover your dynamic id (the iproute2/genl code has a stub > example code) > As i told you in the earlier email, in your development: > - start first by just writting your kernel side. > - Then use the genl utility - which is part of iproute2 to see if the > kernel side is "discoverable". > > E.g if i wanted to "discover" currently loaded modules on my laptop, i > would do this: > > --------------- > hadi@lilsol:~$ genl ctrl ls > > Name: nlctrl > ID: 0x10 Version: 0x2 header size: 0 max attribs: 6 > commands supported: > #1: ID-0x3 flags-0xe > > > Name: nl80211 > ID: 0x11 Version: 0x1 header size: 0 max attribs: 22 > commands supported: > #1: ID-0x1 flags-0xa > #2: ID-0x6 flags-0xa > #3: ID-0x8 flags-0xa > #4: ID-0x3 flags-0xb > #5: ID-0x4 flags-0xb > #6: ID-0x5 flags-0xb > #7: ID-0xa flags-0xb > #8: ID-0xb flags-0xa > #9: ID-0xf flags-0xb > #10: ID-0x10 flags-0xa > #11: ID-0x12 flags-0xb > #12: ID-0x13 flags-0xa > #13: ID-0x15 flags-0xa > #14: ID-0x19 flags-0xb > #15: ID-0x17 flags-0xb > #16: ID-0x18 flags-0xb > #17: ID-0x1a flags-0xb > #18: ID-0x1b flags-0xa > #19: ID-0xd flags-0xb > > > Name: TASKSTATS > ID: 0x12 Version: 0x1 header size: 0 max attribs: 4 > commands supported: > #1: ID-0x1 flags-0xa > --------------------------- > > As you can see, i can see from user space the name of the kernel end > point, its numeric id, what version it is running (so i can make sure > user space is compatible), what extra header it may have, what the > maximum number of attributes it can take. The last thing that gets > listed is the commands, and flags for those commands. > > Lets load tipc kernel module and repeat... > > ----------- > > hadi@lilsol:~$ sudo modprobe tipc > Name: nlctrl > ID: 0x10 Version: 0x2 header size: 0 max attribs: 6 > commands supported: > #1: ID-0x3 flags-0xe > > .... > [same as before] > .... > > Name: TIPC > ID: 0x13 Version: 0x1 header size: 8 max attribs: 0 > commands supported: > #1: ID-0x1 flags-0x2 > > =============== > > > It would be great if there are any examples on user space communication. > > > > Bug Thomas - he has written some simple example. I also have some but i > changed laptops and i have to go and dig it up for you. > I do have plans for making this easier for people - but havent had time. > If there is persistence - or someone out there wants to be a hero email > me privately and i will explain it. > > > Or should I use libnl library instead? > > Why am i answering all these questions if you are fine with using libnl? > Last time you said you couldnt use a library, no? > > cheers, > jamal > > > > Thanks, > > Rui. > >
Attachment:
acpi_genl.tgz
Description: application/compressed-tar