[script shell] Automatisation de parametrage de cartes electroniques

Automatisation de parametrage de cartes electroniques [script shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 15-02-2005 à 14:09:46    

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
 
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 15-02-2005 à 14:09:46   

Reply

Marsh Posté le 16-02-2005 à 04:13:21    

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
Reply

Marsh Posté le 16-02-2005 à 17:57:03    

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

Reply

Marsh Posté le 16-02-2005 à 18:10:35    

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

Reply

Marsh Posté le 16-02-2005 à 22:56:56    

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

Reply

Marsh Posté le 17-02-2005 à 01:41:35    

Reply

Marsh Posté le 17-02-2005 à 20:49:57    

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
 

Reply

Marsh Posté le 18-02-2005 à 01:21:04    

Content d'avoir pu t'aider :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed