dhcpcd-discuss

Re: interaction with rfkill

Iain

Wed Jul 29 16:02:09 2009

Roy Marples wrote:
Well, dhcpcd should Do The Right Thing, but you can remove and add an interface to the list like so
dhcpcd -x eth0
dhcpcd -n eth0

this works fine with my 3945, thanks.

for info, here's what happens with the 3945:

root@craptop:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:1c:c4:c9:2c:97 brd ff:ff:ff:ff:ff:ff
3: wmaster0: <> mtu 0 qdisc noop state DOWN qlen 1000
    link/ieee802.11 00:1c:bf:a0:13:d7 brd 00:00:00:00:00:00
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 00:1c:bf:a0:13:d7 brd ff:ff:ff:ff:ff:ff

[so we can see the wlan0 interface just fine]

root@craptop:~# ip link set up dev wlan0
RTNETLINK answers: No such device

when the 'no such device' error is returned, I get this from dmesg:

[  141.451110] iwl3945 0000:10:00.0: Radio disabled by HW RF Kill switch


digging through the code for that message you can find the following in iwl3945-base.c

static int __iwl3945_up(struct iwl_priv *priv)
{


        int rc, i;

        if (test_bit(STATUS_EXIT_PENDING, &priv->status)) {
                IWL_WARN(priv, "Exit pending; will not bring the NIC up\n");
                return -EIO;
        }

        if (test_bit(STATUS_RF_KILL_SW, &priv->status)) {
                IWL_WARN(priv, "Radio disabled by SW RF kill (module "
                            "parameter)\n");
                return -ENODEV;
        }

        if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
                IWL_ERR(priv, "ucode not available for device bring up\n");
                return -EIO;
        }

        /* If platform's RF_KILL switch is NOT set to KILL */
        if (iwl_read32(priv, CSR_GP_CNTRL) &
                                CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
                clear_bit(STATUS_RF_KILL_HW, &priv->status);
        else {
                set_bit(STATUS_RF_KILL_HW, &priv->status);
                if (!test_bit(STATUS_IN_SUSPEND, &priv->status)) {
                        IWL_WARN(priv, "Radio disabled by HW RF Kill switch\n");
                        return -ENODEV;
                }
        }

So as long as either the hardware or software rfkill switch is set then this driver will simply return -ENODEV and there's no chance for dhcpcd or wpa_supplicant to do anything from there.

So for now I'm just using the rfkill uevent to check for dhcpcd already being running and if it is I can use -n to add the interface, this works well enough. I'd still be interested in an option similar to -n but that doesn't start up dhcpcd if it's not already running.

thanks,
Iain

Follow-Ups:
Re: interaction with rfkillRoy Marples
References:
interaction with rfkillIain
Re: interaction with rfkillRoy Marples
Archive administrator: postmaster@marples.name