diff options
-rw-r--r-- | perl-install/c/stuff.xs.pl | 20 | ||||
-rw-r--r-- | perl-install/network/netconnect.pm | 4 |
2 files changed, 22 insertions, 2 deletions
diff --git a/perl-install/c/stuff.xs.pl b/perl-install/c/stuff.xs.pl index 26e6ce413..d30aff57f 100644 --- a/perl-install/c/stuff.xs.pl +++ b/perl-install/c/stuff.xs.pl @@ -23,6 +23,8 @@ print ' #include <sys/stat.h> #include <sys/utsname.h> #include <sys/mount.h> +#undef __USE_MISC +#include <linux/wireless.h> #include <linux/keyboard.h> #include <linux/kd.h> #include <linux/hdreg.h> @@ -405,6 +407,24 @@ hasNetDevice(device) OUTPUT: RETVAL + +int +isNetDeviceWirelessAware(device) + char * device + CODE: + struct iwreq ifr; + + int s = socket(AF_INET, SOCK_DGRAM, 0); + + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, device, IFNAMSIZ); + RETVAL = ioctl(s, SIOCGIWNAME, &ifr) != -1; + close(s); + OUTPUT: + RETVAL + + + char* getNetDriver(char* device) ALIAS: diff --git a/perl-install/network/netconnect.pm b/perl-install/network/netconnect.pm index d4ff1ab1d..18f75b032 100644 --- a/perl-install/network/netconnect.pm +++ b/perl-install/network/netconnect.pm @@ -130,8 +130,8 @@ sub real_main { @all_cards = network::ethernet::get_eth_cards(); %eth_intf = network::ethernet::get_eth_cards_names(@all_cards); require list_modules; - my @wmodules = list_modules::category2modules('network/wireless'); - %eth_intf = map { $_->[0] => join(': ', $_->[0], $_->[2]) } grep { int(!$is_wireless) ^ member($_->[1], @wmodules) } @all_cards; + %eth_intf = map { $_->[0] => join(': ', $_->[0], $_->[2]) } + grep { $is_wireless ^ !c::isNetDeviceWirelessAware($_->[0]) } @all_cards; }; my $find_lan_module = sub { |