Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1145 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [script shell] Automatisation de parametrage de cartes electroniques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[script shell] Automatisation de parametrage de cartes electroniques

n°636767
nlc
Le mieux est l'ennemi du bien
Posté le 15-02-2005 à 14:09:46  profilanswer
 

Bonjour a tous.
 
Je vais essayer de vous expliquer clairement ma problematique, qui pour moi peut se resoudre facilement par un script shell. Malheureusement je ne n'y connais rien en programmtion shell.
 
Voila, j'ai developpé un boitier electronique qui integre une interface reseau ethernet. Comme vous le savez, chaque produit reseau possede un N° unique, l'adresse MAC, de la forme 11.22.33.44.55.66, donc 6 champs allant de 0x00 a 0xFF.
 
Quand mes boitiers sortent de production, ils ont une adresse MAC par defaut. Il me faut donc leur attribuer leur adresse MAC finale. La carte integre un serveur web embarqué, et toutes les configs passent par des requetes http vers un script cgi.
 
Par exemple, si mon boitier est sur le reseau local avec comme IP 192.168.1.250, et que je veux lui donner comme adresse mac 00.FB.AD.EE.45.34, il suffit de taper dans le navigateur : http://192.168.1.250/cgi/setparame [...] D.EE.45.34
La carte redirige alors vers une page indiquant que la sauvegarde s'est bien deroulée ou non.
 
Evidemment, ceci est fastidieux dès qu'on commence a avoir un certain nombre de cartes a programmer.
Donc je voudrais ecrire un script capable de :
 
1) Ouvrir un fichier (mac.txt) et aller a la derniere ligne pour recuperer la derniere adresse MAC utilisée, et la mettre par exemple dans $mac.
2) Incrementer cette adresse MAC
3) Demander a l'utilisateur de brancher un boitier sur le reseau puis de taper ENTER
4) Envoyer la requete de configuration a la carte avec wget
5A) Si wget a retourné une erreur, on indique que ca a merdé et on retourne en 3
5B) On verifie dans le fichier recuperé par wget (reponse du boitier) si la sauvegarde s'est bien passé. Si oui, on passe en 6, sinon, on l'indique et on retourne en 3
6) On rajoute a la fin du fichier mac.txt l'adresse mac qui vient d'etre utilisée
7) On indique a l'utilisateur que tout s'est bien passé, et on retourne en 2
 
 
Note 1 :
--------
La commande wget est la suivante (l'adresse IP de la carte est toujours la meme) :
 
wget -t 1 -O result.txt 192.168.1.250/cgi/setparameters.cgi?mac=xx.xx.xx.xx.xx.xx
 
En cas de sauvegarde reussie, le fichier result.txt contient ceci :
<html><head><meta http-equiv="refresh" content="0;URL=/sauvegardeok.html">
</head></html>
 
En cas d'echec de sauvegarde, il contient ceci :
<html><head><meta http-equiv="refresh" content="0;URL=/sauvegardeko.html">
</head></html>
 
Donc pour verifier si la sauvegarde est OK (point n°5B), un grep 'sauvegardeok' result.txt >> /dev/null devrait marcher (en testant le retour du grep)
 
Note 2 :
--------
 
Le point sensible va etre sans doute l'incrementation de l'adresse mac.
Chaque champs vaut entre 0 et FF ( 0 et 255). Le champs de poids faible est a droite.
Par exemple, au demarrage, si l'appli recupere dans mac.txt cette derniere adresse mac :
00.FB.EE.33.00.FD
les prochains boitiers recevront respectivement :
00.FB.EE.33.00.FE
00.FB.EE.33.00.FF
00.FB.EE.33.01.00
00.FB.EE.33.01.01
00.FB.EE.33.01.02
etc, etc...
 
Je pense qu'il faudrait en fait 6 variables pour simplifier les calculs, genre $mac1, $mac2, $mac3, $mac4, $mac5 et $mac6
 
 
Pensez vous que c'est faisable ?
 
Merci et bonne journée a tous !
 
Cyril
 
 
 
 
 
 
 
 
 
 

mood
Publicité
Posté le 15-02-2005 à 14:09:46  profilanswer
 

n°637189
YupYup
Non.
Posté le 16-02-2005 à 04:13:21  profilanswer
 

Gruiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiik !  [:totoz6]  
 

#!/bin/bash
#  
# mysterious_b0x3n_configurator.sh
#  
# Written by yom <yom@nainwak.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#  
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# Visit http://www.gnu.org/copyleft/gpl.html for details.
 
hextomac() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 zob=`echo $pouet |awk '{print substr($0,1,2)"."substr($0,3,2)"."substr($0,5,2)"."substr($0,7,2)"."substr($0,9,2)"."substr($0,11,2)}'`
 eval "$1=$zob";
}
 
mactohex() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 zob=`echo $pouet |awk '{print substr($0,1,2)""substr($0,4,2)""substr($0,7,2)""substr($0,10,2)""substr($0,13,2)""substr($0,16,2)}'`
 eval "$1=$zob";
}
 
hextodec() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 zob=`echo "16i $pouet p" |dc`
 eval "$1=$zob";
}
 
dectohex() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 zob=`echo "$pouet 16o p" |dc`
 eval "$1=$zob";
}
 
pad() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 zob=`echo $pouet |awk '{while(length($0)<12){$0="0"$0} print $0}'`
 eval "$1=$zob";
}
 
inc() {
 brol=\$"$1"
 
 pouet=`eval "expr \"$brol\" "`
 
 mactohex pouet
 hextodec pouet
 pouet=`echo "$pouet 1 + p" |dc`
 dectohex pouet
 pad pouet
 hextomac pouet
 eval "$1=$pouet";
}
 
ADDRFILE=/tmp/mac.txt
 
# 1 - Ouvrir un fichier (mac.txt) et aller a la derniere ligne pour recuperer la derniere adresse MAC utilisée
MAC=`tail -1 $ADDRFILE`
 
# 2 - Incrementer cette adresse MAC
inc MAC
 
for i in `seq 1 100000` ; do
 # 3 - Demander a l'utilisateur de brancher un boitier sur le reseau puis de taper ENTER
 echo "Veuillez brancher un boitier sur le reseau et appuyer sur ENTER, ou Ctrl-C pour quitter..."
 read BASHSUX
 
 # 4 - Envoyer la requete de configuration a la carte avec wget
 wget -q -t 1 -O /tmp/result.txt 192.168.1.250/cgi/setparameters.cgi?mac=$MAC
 
 # 5 - On verifie dans le fichier recuperé par wget (reponse du boitier) si la sauvegarde s'est bien passé.
 if grep -q "sauvegardeok" /tmp/result.txt ; then
  echo "[OK] Sauvegarde effectuee - Adresse MAC : $MAC"
  echo $MAC >> $ADDRFILE
  inc MAC
 else
  echo "[ERREUR] La sauvegarde a echoue"
 fi
 
done

[:______ from ppc]


Message édité par YupYup le 16-02-2005 à 04:20:36
n°637478
nlc
Le mieux est l'ennemi du bien
Posté le 16-02-2005 à 17:57:03  profilanswer
 

Nom d'une pipe !!
 
Y'a des dieux sur terre !! :)
 
Je l'essaye de suite pour voir

n°637494
YupYup
Non.
Posté le 16-02-2005 à 18:10:35  profilanswer
 

s/dieux/types\ qui\ ont\ rien\ d\'autre\ a\ foutre/g ;)

n°637722
nlc
Le mieux est l'ennemi du bien
Posté le 16-02-2005 à 22:56:56  profilanswer
 

J'ai essayé tout a l'heure, visiblement il me manque la commande 'dc'.
 
A quoi correspond cette commande ?
 
A+

n°637766
YupYup
Non.
Posté le 17-02-2005 à 01:41:35  profilanswer
 
n°638185
nlc
Le mieux est l'ennemi du bien
Posté le 17-02-2005 à 20:49:57  profilanswer
 

Bon et bien bravo, j'ai pu tester en reel le script, j'avais 50 appareils a livrer aujourd'hui, ca a fonctionné du 1er coup.
 
Comme quoi, de petits outils diversifiés, un script et hop, on fait ce qu'on veut ! (enfin, moi pas encore ;) )
Dire que j'en connais qui auraient passé plusieurs jours a developper un logiciel usine a gaz sur une platforme dont je ne citerai pas le nom avec interface graphique et tous les trucs inutiles qui vont bien.....
 
Amicalement,
 
Cyril
 

n°638288
YupYup
Non.
Posté le 18-02-2005 à 01:21:04  profilanswer
 

Content d'avoir pu t'aider :hello:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [script shell] Automatisation de parametrage de cartes electroniques

 

Sujets relatifs
Ordre de détection des cartes réseauxscript
parametrage sambaComparo perfs 3D cartes ATI/Nvidia
Mandrake 10.1 arrive pas à lire les cartes mémoires[Shell] Emettre des bips à différentes fréquences
Script BASH : Innactivite...Script test d'activité entre 2 machines
script dans init.d 
Plus de sujets relatifs à : [script shell] Automatisation de parametrage de cartes electroniques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR