Project

General

Profile

Bug #659

arn fails to transmit traffic on some channels

Added by Albert Lee over 8 years ago. Updated over 8 years ago.

Status:
New
Priority:
Low
Assignee:
-
Category:
kernel
Start date:
2011-01-23
Due date:
% Done:

0%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage

Description

A 802.11n AP normally works fine with a client using arn on channel 1, but when configured to use channel 6 (which has another AP in this range), the client using arn is able to associate but any outgoing Ethernet frames are not received by the AP. snoop shows both incoming and outgoing traffic on the AP but no traffic sent from the client (ARP and DHCP/BOOTP requests) is ever received by the endpoints. Other clients are not affected. It's not clear if the problem is the channel specifically, or that it is also occupied by another AP.

History

#1

Updated by Albert Lee over 8 years ago

I should mention that the tx power is also very low.

Here's the configuration; I believe ah_currentRD = 0x60 and ah_countryCode = 0 means it's using a U.S. regulatory configuration.

{
    ah_magic = 0x19641014
    ah_devid = 0x2b
    ah_subvendorid = 0
    ah_macVersion = 0xc0
    ah_macRev = 0x2
    ah_phyRev = 0xe0
    ah_analog5GhzRev = 0xc0
    ah_analog2GhzRev = 0
    ah_sh = 0xffffff01729d8000
    ah_sc = 0xffffff01b92db000
    ah_opmode = 1 (ATH9K_M_STA)
    ah_config = {
        dma_beacon_response_time = 0x2
        sw_beacon_response_time = 0xa
        additional_swba_backoff = 0
        ack_6mb = 0
        cwm_ignore_extcca = 0
        pcie_powersave_enable = 0
        pcie_l1skp_enable = 0
        pcie_clock_req = 0
        pcie_waen = 0
        pcie_power_reset = 0x100
        pcie_restore = 0
        analog_shiftreg = 0x1
        ht_enable = 0x1
        ofdm_trig_low = 0xc8
        ofdm_trig_high = 0x1f4
        cck_trig_high = 0xc8
        cck_trig_low = 0x64
        enable_ani = 0x1
        noise_immunity_level = 0x4
        ofdm_weaksignal_det = 0x1
        cck_weaksignal_thr = 0
        spur_immunity_level = 0x2
        firstep_level = 0
        rssi_thr_high = '('
        rssi_thr_low = '\a'
        diversity_control = 0
        antenna_switch_swap = 0
        serialize_regmode = 0
        intr_mitigation = 0x1
        spurmode = 0x2
        spurchans = [
            [ 0x8000, 0x8000 ]
            [ 0x8000, 0x8000 ]
            [ 0x8000, 0x8000 ]
            [ 0x8000, 0x8000 ]
            [ 0x8000, 0x8000 ]
        ]
    }
    ah_caps = {
        hw_caps = 0x2f71db
        wireless_modes = [ 0x8c, 0xc, 0, 0 ]
        total_queues = 0xa
        keycache_size = 0x80
        low_5ghz_chan = 0x1338
        high_5ghz_chan = 0x17d4
        low_2ghz_chan = 0x908
        high_2ghz_chan = 0xaac
        num_mr_retries = 0x4
        rts_aggr_limit = 0xffff
        tx_chainmask = 0x1
        rx_chainmask = 0x1
        tx_triglevel_max = 0x3f
        reg_cap = 0xbc0
        num_gpio_pins = 0xa
        num_antcfg_2ghz = 0x1
        num_antcfg_5ghz = 0x1
    }
    ah_countryCode = 0
    ah_flags = 0x1
    ah_powerLimit = 0x3f
    ah_maxPowerLevel = 0x13
    ah_tpScale = 0
    ah_currentRD = 0x60
    ah_currentRDExt = 0x1f
    ah_currentRDInUse = 0x10
    ah_currentRD5G = 0x110
    ah_currentRD2G = 0xa10
    ah_iso = [ "NA" ]
    ah_channels = [
        {
            channel = 0x96c
            channelFlags = 0x300e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0xe
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x971
            channelFlags = 0x300e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x976
            channelFlags = 0x300e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x97b
            channelFlags = 0x300e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x980
            channelFlags = 0x700e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x985
            channelFlags = 0x700e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x98a
            channelFlags = 0x700e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x20080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x98f
            channelFlags = 0x500e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x40080
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x994
            channelFlags = 0x500e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x40080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x999
            channelFlags = 0x500e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x40080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0x99e
            channelFlags = 0x500e0
            privFlags = 0
            maxRegTxPower = '\033'
            maxTxPower = '?'
            minTxPower = '?'
            chanmode = 0x40080
            CalValid = 0
            oneTimeCalsDone = 0x1 (B_TRUE)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0xff89
            antennaMax = '\006'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0x11, 0x12 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
        {
            channel = 0
            channelFlags = 0
            privFlags = 0
            maxRegTxPower = '\0'
            maxTxPower = '\0'
            minTxPower = '\0'
            chanmode = 0
            CalValid = 0
            oneTimeCalsDone = 0 (0)
            iCoff = '\0'
            qCoff = '\0'
            rawNoiseFloor = 0
            antennaMax = '\0'
            regDmnFlags = 0
            conformanceTestLimit = [ 0, 0, 0 ]
        },
    ... ]
    ah_curchan = 0xffffff01ba6130dc
    ah_nchan = 0xb
    ah_isPciExpress = 0x1 (B_TRUE)
    ah_txTrigLevel = 0x4
    ah_rfsilent = 0
    ah_rfkill_gpio = 0
    ah_rfkill_polarity = 0
    nfCalHist = [
        {
            nfCalBuffer = [ 0xff89, 0xff89, 0xff89, 0xff8a, 0xff8a ]
            currIndex = 0x2
            privNF = 0xff89
            invalidNFcount = 0
        },
        {
            nfCalBuffer = [ 0, 0, 0, 0, 0 ]
            currIndex = 0x2
            privNF = 0xff8a
            invalidNFcount = 0x5
        },
        {
            nfCalBuffer = [ 0, 0, 0, 0, 0 ]
            currIndex = 0x2
            privNF = 0xff8a
            invalidNFcount = 0x5
        },
        {
            nfCalBuffer = [ 0xff8a, 0xff8a, 0xff8a, 0xff8a, 0xff8a ]
            currIndex = 0x2
            privNF = 0xff8a
            invalidNFcount = 0
        },
        {
            nfCalBuffer = [ 0, 0, 0, 0, 0 ]
            currIndex = 0x2
            privNF = 0xff8a
            invalidNFcount = 0x5
        },
        {
            nfCalBuffer = [ 0, 0, 0, 0, 0 ]
            currIndex = 0x2
            privNF = 0xff8a
            invalidNFcount = 0x5
        },
    ]
}

#2

Updated by Albert Lee over 8 years ago

  • Difficulty set to Medium
  • Tags set to needs-triage

Further investigation shows that the problem manifests as extremely low transmit power on some or all channels. I've tried backporting tx power related changes from later versions of Linux arn drivers, but haven't narrowed down the issue yet. There is embedded firmware in the driver which may need updating.

Also available in: Atom PDF