OK, that explains this behavior.
dmesg |grep rate -i
phy0: Selected rate control algorithm 'iwl-agn-rs'
Note, that this is not a “pure” 2.6.30.X, but I except the relevant code is from 2.6.30.X (via compat-wireless).
Well, I follow the wireless mailinglist on a very unregular basis and I think I read something about that, too.
Nevertheless, this does also occur when using “nl80211” instead of “wext”, my system is 11.1 but most of the wireless stuff is “tuned” a little (mostly from my own repos), so I have wpa_supplicant >= 0.6.9 (I do some experiments with latest GIT stuff of wpa_supplicant,too.
If you want to version it, it would be “0.7.0pre”) so I can use and switch between different driver extensions in wpa_supplicant also for testing purposes.
The main reason for that is (or was, at this feature will be available in 11.2) this here:
https://bugzilla.novell.com/show_bug.cgi?id=477833
Short update on the “bleeding edge” packages:
The latest version (from 2009-04-10) now contains your patches and builds fine against 11.1, with 11.2 there is a little glitch, which was rather easy to resolve.
Again, I did it in the “brutal way”, because I have not tested yet, if it is related to the (chrooted) build process when using OBS.
When building against factory (with 2.6.31) one file (compat-2.6.32.c) is not compiled which is needed and mac80211 can not be loaded due to missing symbols.
From config.mk
ifneq ($(wildcard $(KLIB_BUILD)/Makefile),)
COMPAT_LATEST_VERSION = 32
KERNEL_SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p'
)
COMPAT_VERSIONS := $(shell I=$(COMPAT_LATEST_VERSION); while "$$I" -gt $(KERNEL_SUBLEVEL) ]; do echo $
$I; I=$$(($$I - 1)); done)
$(foreach ver,$(COMPAT_VERSIONS),$(eval CONFIG_COMPAT_WIRELESS_$(ver)=y))
and net/wireless/Makefile
ccflags-y += -D__CHECK_ENDIAN__
# Compat-wireless kernel compatibility code
cfg80211-$(CONFIG_COMPAT_WIRELESS_22) += compat-2.6.22.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_23) += compat-2.6.23.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_24) += compat-2.6.24.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_25) += compat-2.6.25.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_26) += compat-2.6.26.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_27) += compat-2.6.27.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_28) += compat-2.6.28.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_29) += compat-2.6.29.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_30) += compat-2.6.30.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_31) += compat-2.6.31.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_32) += compat-2.6.32.o
I understand, that only those objects for each newer kernelversion than the running one will be compiled (at least that would make sense to me) and on openSUSE 11.1 with 2.6.27.X you see how all of them are built from compat-2.6.28.o up to compat-2.6.32.o.
However on 11.2/Factory with 2.6.31 the compat-2.6.32.o is not built and consequently you get missing symbols.
My sledgehammer fix for the RPMs was
--- net/wireless/Makefile.orig 2009-10-03 18:30:30.000000000 +0200
+++ net/wireless/Makefile 2009-10-03 18:30:50.000000000 +0200
@@ -21,5 +21,5 @@
cfg80211-$(CONFIG_COMPAT_WIRELESS_29) += compat-2.6.29.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_30) += compat-2.6.30.o
cfg80211-$(CONFIG_COMPAT_WIRELESS_31) += compat-2.6.31.o
-cfg80211-$(CONFIG_COMPAT_WIRELESS_32) += compat-2.6.32.o
+cfg80211-y += compat-2.6.32.o
to hardcode this combined with
%if 0%{?suse_version} > 1110
%patch0 -p0
%endif
this entry in the spec file (so the patch would only be applied for 11.2).
I still have to test, if this is also needed if you rebuild the src.rpm on a running 11.2 (then it is a OBS-specific problem) or when compiling the modules outside rpmbuild (then it will be an openSUSE/rpmbuild specific issue).
If this happens in any case, then it could be an issue of compat-wireless itself.