# [TIP] Réseau sans fil chipset atheros

## bouleetbil

J'ai acheté recement une carte pcmcia netgear WG511T. J'ai donc cherché à la configurer le plus simple que j'ai trouvé (pas forcement la meilleure   :Laughing:  ) a été d'utiliser les pilotes madwifi :

1. Installation

Démasquer les paquets :

```
# echo "net-wireless/madwifi-driver ~x86" >> /etc/portage/package.keywords

# echo "net-wireless/madwifi-tools ~x86" >> /etc/portage/package.keywords

```

L'installer

```
# emerge  madwifi-driver 
```

2. Configuration

Comme pour les autres cartes réseau dans /etc/conf.d/net

```
essid_AP="Nom Réseau "

key_AP="clé WEP  "

gateway="ath0/Ip de la passerelle"

iface_ath0="dhcp" ou "adresse IP netmask 255.255.255.0 broadcast 192.168.0.255" 
```

3. Charger les modules

```

# modprobe ath_hal

# modprobe wlan

# modprobe wlan_acl

# modprobe wlan_ccmp

# modprobe wlan_tkip

# modprobe wlan_wep

# modprobe wlan_xauth

# modprobe wlan_scan_sta

# modprobe wlan_scan_ap

# modprobe ath_rate_sample

# modprobe ath_pci
```

Pour les charger à chaque démarrage les ajouter à /etc/modules.autoload.d/kernel-2.6

4. Démarrer le réseau

Récupérer ce script http://www.zippysoft.com/linux/net.ath0 le mettre dans /etc/init.d/net.ath0

Si le lien ne fonctionne plus, voici le code :

```

#!/sbin/runscript

# Copyright 1999-2003 Gentoo Technologies, Inc.

# Distributed under the terms of the GNU General Public License v2

# $Header: /etc/init.d/net.eth0,v 1.30 2003/10/18 18:03:19 faye Exp $

#NB: Config is in /etc/conf.d/net

# For pcmcia users. note that pcmcia must be added to the same

# runlevel as the net.* script that needs it.

depend() {

   use hotplug

}

checkconfig() {

   if [ -z "${iface_IFACE}" ]

   then

      eerror "Please make sure that /etc/conf.d/net has \$iface_$IFACE set"

      return 1

   fi

}

setup_env() {

   # No reason to check these multiple times in the file

   iface_IFACE="$(eval echo \$\{iface_${IFACE}\})"

   dhcpcd_IFACE="$(eval echo \$\{dhcpcd_${IFACE}\})"

   inet6_IFACE="$(eval echo \$\{inet6_${IFACE}\})"

   alias_IFACE="$(eval echo \$\{alias_${IFACE}\})"

   status_IFACE="$(ifconfig | gawk -v IFACE="${IFACE}" '/Link/ { if ($1 == IFACE) print "up" }')"

   if [ -x `which iwconfig` ]; then

      wireless_IFACE="$(iwconfig 2>/dev/null | gawk -v IFACE="${IFACE}" '/IEEE/ { if ($1 == IFACE) print "yes" }')"

   fi

   wireless_IFACE=${wireless_IFACE:-"no"}

   if [ -x `which mii-tool` ]; then

      link_IFACE=$(mii-tool ${IFACE} 2>/dev/null | gawk '{print $2}')

   fi

   link_IFACE=${link_IFACE:-"yes"}

}

setup_wireless() {

   # Reset to some defaults

   iwconfig $IFACE mode Managed

   iwconfig $IFACE rate auto

   iwconfig $IFACE key off

   iwconfig $IFACE rts off

   iwconfig $IFACE frag off

   iwconfig $IFACE essid any

   # Initiate a scan

   ifconfig $IFACE up

   # Wait for a response

   sleep 2

   # Find known access points

   for AP in `iwlist ${IFACE} scan 2>/dev/null | grep ESSID | awk -F: '{print $2}' | sed 's/[-"]//g'`; do

      if [ -z ${essid_AP} ]; then

         essid_AP="$(eval echo \$\{essid_${AP}\})"

         if [ ! -z ${essid_AP} ]; then

            # setup variables

            key_AP="$(eval echo \$\{key_${AP}\})"

            iface_IFACE="$(eval echo \$\{iface_${AP}\})"

            gateway="${IFACE}/$(eval echo \$\{gateway_${AP}\})"

         fi

      fi

   done

   # Bring interface down to apply changes

   ifconfig $IFACE down

#ewarn "Setting wireless parameters ${essid_AP} and ${key_AP}"

   if [ ! -z ${essid_AP} ]; then

      iwconfig ${IFACE} essid ${essid_AP}

   fi

   if [ ! -z ${key_AP} ]; then

      iwconfig ${IFACE} key ${key_AP}

   fi

   # Bring the interface up

   ifconfig $IFACE up

   # Wait for the system to associate

   while [ `iwconfig $IFACE | awk '/\<..:..:..:..:..:..\>/{print}' | sed 's/^.*\<\(..:..:..:..:..:..\)\>.*$/\1/g'` = FF:FF:FF:FF:FF:FF ]; do

      LC_NUMERIC=C sleep 0.5

   done

   return 0

}

start() {

   local retval=0

   setup_env

   checkconfig || return 1

   if [ ${wireless_IFACE} == "yes" ]; then

      ebegin "Detecting network for ${IFACE}"

      setup_wireless

      eend 0

   fi

   ebegin "Bringing ${IFACE} up"

   if [ ${link_IFACE} == "no" ]

   then

      retval=1

      eend ${retval} "Failed to bring ${IFACE} up"

      return ${retval}

   fi

   if [ "${iface_IFACE}" != "dhcp" ]

   then

      /sbin/ifconfig ${IFACE} ${iface_IFACE} >/dev/null || {

         retval=$?

         eend ${retval} "Failed to bring ${IFACE} up"

         return ${retval}

      }

      # ifconfig do not always return failure ..

      /sbin/ifconfig ${IFACE} &> /dev/null || {

         retval=$?

         eend ${retval} "Failed to bring ${IFACE} up"

         return ${retval}

      }

   else

      # Check that eth0 was not brough up by the kernel ...

      if [ "${status_IFACE}" != "up" ]

      then

         /sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE} >/dev/null || {

            retval=$?

            eend ${retval} "Failed to bring ${IFACE} up"

            return ${retval}

         }

      fi

   fi

   eend 0

   if [ -n "${alias_IFACE}" ]

   then

      local x=""

      local num=0

      local aliasbcast=""

      local aliasnmask=""

      ebegin "  Adding aliases"

      for x in ${alias_IFACE}

      do

         aliasbcast="$(eval echo \$\{broadcast_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')"

         if [ -n "${aliasbcast}" ]

         then

            aliasbcast="broadcast ${aliasbcast}"

         fi

         aliasnmask="$(eval echo \$\{netmask_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')"

         if [ -n "${aliasnmask}" ]

         then

            aliasnmask="netmask ${aliasnmask}"

         fi

      

         ebegin "    ${IFACE}:${num}"

         /sbin/ifconfig ${IFACE}:${num} ${x} \

            ${aliasbcast} ${aliasnmask} >/dev/null

         num=$((num + 1))

         eend 0

      done

      save_options "alias" "${alias_IFACE}"

   fi

   if [ -n "${inet6_IFACE}" ]

   then

      local x=""

      ebegin "  Adding inet6 addresses"

      for x in ${inet6_IFACE}

      do

         ebegin "    ${IFACE} inet6 add ${x}"

         /sbin/ifconfig ${IFACE} inet6 add ${x} >/dev/null

         eend 0

      done

      save_options "inet6" "${inet6_IFACE}"

   fi

   

   if [ -n "${gateway}" ] && [ "${gateway%/*}" = "${IFACE}" ]

   then

      ebegin "  Setting default gateway"

      # First delete any existing routes if it was setup by kernel ..

      /sbin/route del default dev ${gateway%/*} &>/dev/null

      /sbin/route add default gw ${gateway#*/} dev ${gateway%/*} \

         netmask 0.0.0.0 metric 1 >/dev/null || {

         

         local error=$?

         ifconfig ${IFACE} down &>/dev/null

         eend ${error} "Failed to bring ${IFACE} up"

         stop

         return ${error}

      }

      eend 0

   fi

   # Enabling rp_filter causes wacky packets to be auto-dropped by

   # the kernel

   if [ -e /proc/sys/net/ipv4/conf/${IFACE}/rp_filter ]

   then

      echo 1 > /proc/sys/net/ipv4/conf/${IFACE}/rp_filter

   fi

   # If started by hotplug, this doesn't get done.

   # perhaps the right fix is in hotplug

   ln -sf /etc/init.d/net.${IFACE} /var/lib/init.d/started/net.${IFACE}

}

stop() {

   local myalias="$(get_options alias)"

   local myinet6="$(get_options inet6)"

   setup_env

   ebegin "Bringing ${IFACE} down"

   # Also down the inet6 interfaces

   if [ -n "${myinet6}" ]

   then

      local x=""

      for x in ${myinet6}

      do

         /sbin/ifconfig ${IFACE} inet6 del ${x} >/dev/null

      done

   fi

   

   # Do some cleanup in case the amount of aliases change

   if [ -n "${myalias}" ]

   then

      local x=""

      local num=0

      for x in ${myalias}

      do

         /sbin/ifconfig ${IFACE}:${num} down >/dev/null

         num=$((num + 1))

      done

   fi

   #if [ "${iface_IFACE}" = "dhcp" ]

   #then

   #   local count=0

   #   while /sbin/dhcpcd -k ${IFACE} &>/dev/null && [ "${count}" -lt 9 ]

   #   do

   #      # Give dhcpcd time to properly shutdown

   #      sleep 1

   #      count=$((count + 1))

   #   done

   #   if [ "${count}" -ge 9 ]

   #   then

   #      eerror "Timed out trying to stop dhcpcd"

   #   fi

   #else

      /sbin/ifconfig ${IFACE} down >/dev/null

   #fi

   eend 0

}

# vim:ts=4

```

Rendre ce script executable :

```
# chmod +x /etc/init.d/net.ath0
```

Pour démarrer la carte :

```
# /etc/init.d/net.ath0 start
```

La démarrer à chaque démarrage :

```
# rc-update add net.ath0 default
```

C'est pas compliqué le wifi   :Laughing: 

Liens utiles :

La documentation officiel pour Gentoo : http://madwifi.org/wiki/UserDocs/Distro/Gentoo

Liste des cartes compatible : http://madwifi.org/wiki/Compatibility

Problèmes rencontrés :

Suite à une mise à jour de ces pilotes plus rien ne fonctionne. 

Verifier votre version de Udev installer la version 0.81soit dans net.ath0 dans la section setup_env() ajouter :

```
wlanconfig ath create wlandev wifi0 wlanmode sta
```

----------

## kernelsensei

Merci pour le beau TIP  :Wink:  ... juste un truc :

 *bouleetbil wrote:*   

> J'ai acheté recement une carte pcmcia netgear WG511T. J'ai donc cherché à la configurer le plus simple que j'ai trouvé (pas forcement la meilleure   ) a été d'utiliser les pilotes madwifi :
> 
> 1. Installation
> 
> Démasquer le paquet :
> ...

 

Manque pas un truc ?

----------

## bouleetbil

oups j'avais oublié :

```
net-wireless/madwifi-tools
```

C'est corrigé

----------

## yoyo

J'aurai plutôt pensé aux " pour l'echo ...   :Rolling Eyes: 

----------

## bouleetbil

 *yoyo wrote:*   

> J'aurai plutôt pensé aux " pour l'echo ...  

 

Oui aussi, j'avais pas vu c'est corrigé. 

Je suis un peu fatigué en ce moment   :Embarassed: 

----------

## yoyo

Au temps pour moi, il semblerait que les " ne soient pas obligatoires ...   :Embarassed: 

Enfin, les mettre ou pas ne change rien.  :Mr. Green: 

----------

## Trevoke

Je pense que kernel_sensei faisait rapport a ~x86  :Wink: 

----------

## kernelsensei

 *Trevoke wrote:*   

> Je pense que kernel_sensei faisait rapport a ~x86 

 

En effet  :Wink: 

----------

## bouleetbil

C'est corrigé  

Bon cette fois ci je pense que c'est bon   :Laughing: 

----------

## blasserre

 *bouleetbil wrote:*   

> 2. Configuration
> 
> ```
> essid_AP="clé WEP  "
> 
> ...

 

c'est l'inverse plutôt, non ?

----------

## bouleetbil

Oui autant pour moi. C'est l'inverse.

----------

## Adrien

Sympa ton TIP!  :Smile: 

Ca serait pas mal d'ajouter comment créer le symlink, avant le rc-update:

```
# ln -s /etc/init.d/lo /etc/init.d/net.ath0
```

----------

## bouleetbil

Merci,

Mais en fait je fais pas de symlink, je récupère le script net.ath0 

 *bouleetbil wrote:*   

> 
> 
> Récupérer ce script http://www.zippysoft.com/linux/net.ath0 le mettre dans /etc/init.d/net.ath0 
> 
> 

 

----------

## niin

faudrait pas préciser en titre que c'est un TIP pour le wifi sur chipset atheros ?

En tout cas merci ^_^

edit :

je voulais rajouter deux petits trucs :

1) je pense qu'on pourrait rajouter un petit truc au script, qui permet d'avoir les infos sur la connexion une fois que c'est fait, un code du genre :

ifconfig ${IFACE}

iwconfig ${IFACE}

Qui pourrait s'afficher juste après le "Bringing ${IFACE} up"

Dans le code, ca donne ca :

 *Quote:*   

>                 # Check that eth0 was not brough up by the kernel ...
> 
>                 if [ "${status_IFACE}" != "up" ]
> 
>                 then
> ...

 

2) Par contre un problème que je n'arrive pas à régler, c'est le fait qu'à l'arrêt, il n'arrive pas a stopper le dhcp, et que ca se termine sur un timeout :

 *Quote:*   

> * Bringing ath0 down
> 
> * Timed out trying to stop dhcp

 

Le code de cette partie est come ca :

 *Quote:*   

>         ebegin "Bringing ${IFACE} down"
> 
>         # Also down the inet6 interfaces
> 
>         if [ -n "${myinet6}" ]
> ...

 

Je n'arrive pas a bien comprendre le script, donc si quelqu'un saisi, je veux bien savoir où est le soucis, et où il faudrait corriger ^_^

----------

## bouleetbil

Salut,

J'ai modifié le titre et en ce qui concerne le dhcp en effet j'ai le même problème. Ce que j'ai compris du code c'est qu'il essaye cette commande :

```
/sbin/dhcpcd -k ${IFACE}
```

neuf fois et si cela echoue alors on obtient un timeout. Pour le moment, je ne peux pas faire de tests, mon portable est en pleine mise à jour. Ce que tu peux faire c'est modifier cette ligne :

```
while /sbin/dhcpcd -k ${IFACE} &>/dev/null && [ "${count}" -lt 9 ] 
```

en 

```
while /sbin/dhcpcd -k ${IFACE}  && [ "${count}" -lt 9 ] 
```

afin de voire les messages d'erreur s'il y en a.

----------

## niin

il y a toujours le timeout ; par contre j'ai 9 lignes pendant lesquels il écrit "****  /sbin/dhcpcd: not running"

Et je remarque qu'avant l'écriture du premier message, la carte wifi a arrêté de prendre le réseau, donc comme le dit le message, le dhcp n'est plus en route, et c'est sans doute pour ca qu'il n'arrive pas a l'arrêter ; alors il le cherche comme un c*n et il nous fait 9 fois son cirque. Peut-être qu'on peut supprimer une partie du code puisque le dhcp est down.

----------

## bouleetbil

En effet si le réseau n'est plus actif cette partie ne sert à rien   :Laughing: 

----------

## niin

Au fait il ya un oubli dans le tuto :

Après avoir copié le net.ath0 dans /etc/init.d, il faut faire un "chmod +x /etc/init.d/net.ath0" pour rendre le script executable  :Smile: 

edit : tant qu'on y est ce serait possible de poster le code entier du script ? le lien marche plus et je n'ai pas le script sur moi >_<

----------

## bouleetbil

Bonsoir

J'ai ajouté le chmod et le code de net.ath0   :Wink: 

----------

## niin

Les drivers ont changé :

maintenant c'est madwifi-ng et madwifi-ng-tools

Les anciens drivers sont sous le titre madwifi-old et madwifi-old-tools

----------

