# ipw2200 dropping connection using Intel 2195ABG [Solved]

## sandwichfeet

Hi, 

I'm using ipw2200 with the following wireless card on a thinkpad t43.  The connection keeps dropping 4 or 5 times an hour.

Intel Corporation PRO/Wireless 2915ABG [Calexico2] Network Connection (rev 05)

Windows has no issues on this access point on another laptop but, I've tried changing the Tx PowerLevels and the ChannelIds on the router to rule out noise from other access points.  I've also tried using this laptop on my parents wireless with the same problem.

So, how can I figure out why it is happening?  I'm using wpa_supplicant and gentoo's baselayout for network connections (no wicd or networkmanager) and ipw2200 is compiled into the kernel as a module.  

This is been happening for around 2 years now (it used to work fine before that) and I've tried various things, but it is becoming annoying now.  

Any ideas?

ThanksLast edited by sandwichfeet on Tue Mar 02, 2010 8:06 am; edited 1 time in total

----------

## Rexilion

You could try and switch to the kernel from back then and see if it fixes it. Then if you found the kernel, you can try git-bisect to narrow down the problem.

----------

## sandwichfeet

Thanks for the reply Rexilion.  

Unfortunately, I don't know what the last working version was and the thought of hacking the kernel fills me with dread.  I'm really just looking for a way to find out why it keeps dropping.

----------

## Rexilion

Could you post the output of:

```
for i in `ls /sys/module/ipw2200/parameters/` ; do echo ">>>"$i"<<<" ; cat /sys/module/ipw2200/parameters/$i ; done
```

And the output of:

```
ps aux | grep wpa_supplicant
```

And the output of:

```
dmesg | grep -i 2200
```

Btw, if you don't want to bisect the problem the solution given here will at most be a 'good workaround' instead of an actual bugfix!

----------

## sandwichfeet

You think it is likely to be a firmware issue then?  

I really can't remember when it last worked unfortunately, it was too long ago.  

for i in `ls /sys/module/ipw2200/parameters/` ; do echo ">>>"$i"<<<" ; cat /sys/module/ipw2200/parameters/$i ; done

```
>>>antenna<<<

0

>>>associate<<<

0

>>>auto_create<<<

1

>>>bt_coexist<<<

0

>>>channel<<<

0

>>>cmdlog<<<

0

>>>debug<<<

0

>>>disable<<<

0

>>>hwcrypto<<<

0

>>>led<<<

0

>>>mode<<<

0

>>>roaming<<<

1

```

ps aux | grep wpa_supplicant

```

root      3951  0.0  0.0   4760   948 ?        Ss   03:15   0:00 /sbin/wpa_supplicant -Dwext -c/etc/wpa_supplicant/wpa_supplicant.conf -W -W -B -ieth1 -P/var/run/wpa_supplicant-eth1.pid

root      3962  0.0  0.0   2244   424 ?        Ss   03:15   0:00 /bin/wpa_cli -a/etc/wpa_supplicant/wpa_cli.sh -p/var/run/wpa_supplicant -ieth1 -P/var/run/wpa_cli-eth1.pid -B

me       5117  0.0  0.0   3560   732 pts/0    R+   03:25   0:00 grep --colour=auto wpa_supplicant

```

dmesg | grep -i 2200

```

ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.2.2k

ipw2200: Copyright(c) 2003-2006 Intel Corporation

ipw2200 0000:04:02.0: PCI INT A -> GSI 21 (level, low) -> IRQ 21

ipw2200: Detected Intel PRO/Wireless 2915ABG Network Connection

ipw2200 0000:04:02.0: firmware: requesting ipw2200-bss.fw

ipw2200: Detected geography ZZE (13 802.11bg channels, 19 802.11a channels)

```

----------

## Rexilion

Okay, please also post:

```
cat /etc/conf.d/wireless
```

and

```
modinfo ipw2200
```

I don't think it's an firmware issue, since these cards have hwcrypto disabled by default. But it could still be possible...

----------

## sandwichfeet

Isn't conf.d/wireless deprecated?

cat /etc/conf.d/net

```

# added for using wifi

modules=( "wpa_supplicant" )

wpa_supplicant_eth1="-Dwext"

wpa_timeout_eth1=60

# end wifi

```

modinfo ipw2200

```

filename:       /lib/modules/2.6.31-gentoo-r6/kernel/drivers/net/wireless/ipw2x00/ipw2200.ko

license:        GPL

author:         Copyright(c) 2003-2006 Intel Corporation

version:        1.2.2k

description:    Intel(R) PRO/Wireless 2200/2915 Network Driver

srcversion:     EB130A37250DF3E25345BA3

alias:          pci:v00008086d00004224sv*sd*bc*sc*i*

alias:          pci:v00008086d00004223sv*sd*bc*sc*i*

alias:          pci:v00008086d00004221sv*sd*bc*sc*i*

alias:          pci:v00008086d00004220sv*sd*bc*sc*i*

alias:          pci:v00008086d0000104Fsv*sd*bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002762bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002761bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002754bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002753bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002752bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002751bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002742bc*sc*i*

alias:          pci:v00008086d00001043sv0000103Csd00002741bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002741bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002732bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002731bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002722bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002721bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002712bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002711bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002702bc*sc*i*

alias:          pci:v00008086d00001043sv00008086sd00002701bc*sc*i*

depends:        libipw,lib80211

vermagic:       2.6.31-gentoo-r6 mod_unload PENTIUMM 

parm:           disable:manually disable the radio (default 0 [radio on]) (int)

parm:           associate:auto associate when scanning (default off) (int)

parm:           auto_create:auto create adhoc network (default on) (int)

parm:           led:enable led control on some systems (default 0 off) (int)

parm:           debug:debug output mask (int)

parm:           channel:channel to limit associate to (default 0 [ANY]) (int)

parm:           mode:network mode (0=BSS,1=IBSS) (int)

parm:           bt_coexist:enable bluetooth coexistence (default off) (int)

parm:           hwcrypto:enable hardware crypto (default off) (int)

parm:           cmdlog:allocate a ring buffer for logging firmware commands (int)

parm:           roaming:enable roaming support (default on) (int)

parm:           antenna:select antenna 1=Main, 3=Aux, default 0 [both], 2=slow_diversity (choose the one with lower background noise) (int)

```

cat /etc/wpa_supplicant/wpa_supplicant.conf

```

ctrl_interface=/var/run/wpa_supplicant

ctrl_interface_group=0

eapol_version=1

ap_scan=2

fast_reauth=1

network={

   ssid="anything"

        scan_ssid=1

   proto=WPA2

   key_mgmt=WPA-PSK

   pairwise=CCMP TKIP

   psk="password"

   priority=5

}

```

Many thanks again for you help.  I hope at least some of that makes sense...

----------

## Rexilion

Well, right now all you have left to do is simply start tweaking the configuration and see if it helps. 

Boot your machine, disable automatic configuration (eselect rc delete net.eth1 default), change/execute your parameters to what is below the alternative line (pick one alternative at a time, *not multiple* and then enable your network and see if it helps. Make sure to change everything back to default after you have tested one of the alternatives!

Okay, here we go (for the /sys/module stuff, things will change back to default after you reboot):

Alternative one (seems like you have multiple antenna's, perhaps tweaking them might help):

echo 1 > /sys/module/ipw2200/parameters/antenna

Alternative two (same as above):

echo 3 > /sys/module/ipw2200/parameters/antenna

Alternative three (doubt if it will work):

echo 2 > /sys/module/ipw2200/parameters/antenna

Alternative four (let's try another control interface):

In /etc/conf.d/net change:

wpa_supplicant_eth1="-Dwext" 

to

wpa_supplicant_eth1="-Dnl80211" 

Alternative five (disable automatic creation of ad-hoc network):

echo 0 > /sys/module/ipw2200/parameters/auto_create

Alternative six (enable hwcrypto, who knows it might work!):

echo 1 > /sys/module/ipw2200/parameters/hwcrypto

Alternative seven (in wpa_supplicant you do scan_ssid, so no roaming needed I suppose):

echo 0 > /sys/module/ipw2200/parameters/roaming

Why do you have ap_scan=2 in your file? Is your network hidden? If yes, enable SSID broadcasting in your AP since it provides no additional security. Furthermore, eapol_version and fast_reauth are already set to 1 by default so no need to define them there.

And finally, if none of the alternatives separately work, try alternative 4,5,6 and remove the ap_scan and scan_ssid in your wpa_supplicant.conf altogether (make sure your network is broadcasting it's SSID (so no SSID="" in iwlist eth1 scan!). Furthermore, play a little with alternative 1,2 and 3 in the meanwhile, might help...

----------

## sandwichfeet

OK, so I've been running for a few hours now with no dropped connections.  I'm sure I've tinkered with the module params before now, but it certainly helps to have some one to discuss it with, rather than me just flailing wildly at it.  I probably owe you an beer or two as thanks.

So...

```

# echo "options ipw2200 antenna=1" > /etc/modules.d/ipw2200

# update-modules

```

Reboot.  

Let's see how long it lasts.

----------

## Rexilion

I'll be suprised if that option will do the trick   :Very Happy: 

Btw, you might want to enable alternative 4 and 6 just to get hwcrypto (fast!) and better stability when negotiating (nl80211). BUT only after you have stabilized your connection of course as these might break it again   :Wink: 

----------

## sandwichfeet

OK, I'll let it run for now and see how it goes and maybe try those later.  I'm sure I read somewhere that hwcrypto was a bad thing with this card, but that was a long time ago.  And I've not come across nl80211, I'll do a bit of investigating.  

Still seems to be running ok, or maybe I've just been lucky and been reading or something when it's dropped.   iwconfig still mostly reports 0% Link Quality (it's 80-90% when it does report something), but I guess that might be because the ssid is hidden anyway.  

We'll see how it goes, I'll let you know if it starts happening again.

----------

## dennisn

So, I was inspired by your antenna option idea. My ipw2200 pcie wifi card (probably all of them?) has two wires/antennas, Main and Aux, and (don't ask) my Main one is connected to a good thick antenna (which can sustain rather high ~2MB/s bandwidth), but my Aux one is cut (but can still sustain low ~30KB/s bandwidth).

When I tried setting the module option antenna=1 (1=Main, 3=Aux, 0=both (default)) ... it seemed more stable -- BUT, it too (especially when being used heavily) would eventually slow down to a crawl/halt, and lead to the incessant increase of "Tx excessive retries". (Although it was more stable than antenna=0.)

With the module option antenna=3(Aux), it immediately was slow/crawling (because my antenna is cut!), BUT it would eventually speed up. (To Main-antenna speeds!)

So, I think either the firmware or the kernel module (which one?) is overriding my antenna option (ie. during high traffic). This shouldn't be allowed! What's the point of the module option, if it gets ignored?

I ended up disconnecting my Aux antenna physically, and my connection (FINALLY!!) seems to have stabilized ... to date, it hasn't slowed down to the crawling (Aux-antenna) speed. There are a few "retry" packets, but they are relatively few and not out of control. (Before, after the first hiccup/slowdown was encountered, they would constantly begin accumulating, unless I restarted the interface.)

In conclusion, if you're still having this problem, try disconnecting your Aux antenna (by unscrewing/accessing your wifi card and unplugging the wire), and setting antenna=1 (Main antenna), and test. (Or, maybe disconnecting your Main antenna and setting antenna=3 (Aux antenna).)

----------

## dennisn

Sigh. Well, it still manages to slow down, with out-of-control Tx retries, BUT, I swear it's a bit more bearable now :\.

----------

