2009-07-17 21:22:24

by Tim Gardner

[permalink] [raw]
Subject: Setting rfkill from user space

Johannes,

Because the rfkill sysfs info moved around, I've been working on a
program for the Debian acpi-support package that can be used to perform
2 operations; 1) discover if there are any wireless devices powered on,
and 2) toggle the states of all wireless devices (at the same time).

git://kernel.ubuntu.com/rtg/rfkill

I'm a bit confused about what idx is in the event structure. Other then
ascending (though not monotonically), idx appears to have no real value
to user space. I see in the rfkill driver where its being assigned, and
it appears to be an rfkill instance number that describes a relationship
to a device. For example:

Here is the output before toggling and right after a boot:

rtg@xps1330:~$ ./rfkill
bluetooth 0 UNBLOCKED soft:0 hard:0
wlan 1 UNBLOCKED soft:0 hard:0
bluetooth 2 UNBLOCKED soft:0 hard:0
wlan 3 UNBLOCKED soft:0 hard:0
UNBLOCKED

After toggling to BLOCKED:

rtg@xps1330:~$ sudo ./rfkill 1
[sudo] password for rtg:
rtg@xps1330:~$ ./rfkill
wlan 1 SOFT_BLOCKED soft:1 hard:0
bluetooth 2 SOFT_BLOCKED soft:1 hard:0
wlan 3 HARD_BLOCKED soft:1 hard:1
BLOCKED

After toggling to UNBLOCKED:

rtg@xps1330:~$ sudo ./rfkill 0
rtg@xps1330:~$ ./rfkill
wlan 1 HARD_BLOCKED soft:0 hard:1
bluetooth 2 HARD_BLOCKED soft:0 hard:1
wlan 3 UNBLOCKED soft:0 hard:0
bluetooth 4 UNBLOCKED soft:0 hard:0
UNBLOCKED

This laptop only has one wlan and one bluetooth device. Why the extra
index values?

rtg
--
Tim Gardner [email protected]


2009-07-18 10:12:09

by Marcel Holtmann

[permalink] [raw]
Subject: Re: Setting rfkill from user space

Hi Johannes,

> > Because the rfkill sysfs info moved around, I've been working on a
> > program for the Debian acpi-support package that can be used to perform
> > 2 operations; 1) discover if there are any wireless devices powered on,
> > and 2) toggle the states of all wireless devices (at the same time).
> >
> > git://kernel.ubuntu.com/rtg/rfkill
>
> Oh, I'm sorry, we already had http://git.sipsolutions.net/rfkill.git/, I
> really should have publicised that more (and wasn't around when you
> asked the question yesterday).

I saw this post yesterday, but didn't realize they wrote their own tool.

Regards

Marcel



2009-07-18 09:57:29

by Johannes Berg

[permalink] [raw]
Subject: Re: Setting rfkill from user space

On Fri, 2009-07-17 at 14:58 -0600, Tim Gardner wrote:
> Johannes,
>
> Because the rfkill sysfs info moved around, I've been working on a
> program for the Debian acpi-support package that can be used to perform
> 2 operations; 1) discover if there are any wireless devices powered on,
> and 2) toggle the states of all wireless devices (at the same time).
>
> git://kernel.ubuntu.com/rtg/rfkill

Oh, I'm sorry, we already had http://git.sipsolutions.net/rfkill.git/, I
really should have publicised that more (and wasn't around when you
asked the question yesterday).

> I'm a bit confused about what idx is in the event structure. Other then
> ascending (though not monotonically), idx appears to have no real value
> to user space. I see in the rfkill driver where its being assigned, and
> it appears to be an rfkill instance number that describes a relationship
> to a device. For example:

Well, the index is just a unique identifier for each rfkill instance,
like the network interface index for instance. Yes, it doesn't really
have any value, but if you hot-plug rfkill instances (e.g. with a USB
wireless device) then you may want to know it's now a new instance.

> Here is the output before toggling and right after a boot:
>
> rtg@xps1330:~$ ./rfkill
> bluetooth 0 UNBLOCKED soft:0 hard:0
> wlan 1 UNBLOCKED soft:0 hard:0
> bluetooth 2 UNBLOCKED soft:0 hard:0
> wlan 3 UNBLOCKED soft:0 hard:0
> UNBLOCKED
>
> After toggling to BLOCKED:
>
> rtg@xps1330:~$ sudo ./rfkill 1
> [sudo] password for rtg:
> rtg@xps1330:~$ ./rfkill
> wlan 1 SOFT_BLOCKED soft:1 hard:0
> bluetooth 2 SOFT_BLOCKED soft:1 hard:0
> wlan 3 HARD_BLOCKED soft:1 hard:1
> BLOCKED
>
> After toggling to UNBLOCKED:
>
> rtg@xps1330:~$ sudo ./rfkill 0
> rtg@xps1330:~$ ./rfkill
> wlan 1 HARD_BLOCKED soft:0 hard:1
> bluetooth 2 HARD_BLOCKED soft:0 hard:1
> wlan 3 UNBLOCKED soft:0 hard:0
> bluetooth 4 UNBLOCKED soft:0 hard:0
> UNBLOCKED
>
> This laptop only has one wlan and one bluetooth device. Why the extra
> index values?

You mean, why the extra wlan? Well, if you poke sysfs (which our tool
does) you'll notice that you have different instances, in my case (no
laptop wireless button):

# ./rfkill list
11: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
12: phy3: Wireless LAN
Soft blocked: no
Hard blocked: no

So I have 'hci0' and 'phy3', which is a cfg80211 device. You will,
additionally, have something like 'acer-wireless' or 'hp-wireless' or
whatever, which is the platform's rfkill.

That's also why you see 'hard blocked' in your case, because your
platform's soft-block is wired up to your wireless card's hard block.

johannes


Attachments:
signature.asc (801.00 B)
This is a digitally signed message part