shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Configuração de rede + avançada


From: Fabricio Lopes de Souza
Subject: Configuração de rede + avançada
Date: Tue, 25 Oct 2005 17:14:26 -0200

Ola a todos

Na minha empresa possui uma politica de instalação para nossa
aplicação . Uma delas é a de que as placas de rede devem estar
ordenadas , ou seja , de cima pra baxo ou da esquerda pra direita . (
exemplo , a primeira de cima pra baixo tem que ser a eth0 , a segunda
tem que ser a eth1 , e assim por diante )
Isso é feito para na hora de modificar os cabos nao haver confusão .
Desenvolvi um script simples que com a ajuda do ifconfig ele pega a
configuracao inicial ( geralmente nao esta organizada ) e organiza
ajuda do usuario ...
Mas percebi que esse script fica mto dependente do ifconfig ... queria
saber se tem algum jeito de identificar o mac e o modulo da placa
mesmo que as placas nao estejam "levantadas" , ou de qquer outro jeito
a nao ser o ifconfig
tem como ?? :D

[mandei a mg tanto pra liux-board qnto para a shell-script , por nao
saber corretamente em que lista esta pergunta se encaixa melhor]

fixa_mac.sh ( não esta 100% desenvolvido , sugestoes  eu agradeco jah
que sou newbie em shell :D)

//------------------------------------------
#!/bin/bash
# Fixa Mac :)
#

#Variaveis Globais
null="/dev/null"
temp="/tmp/fixa_tmp"
cfg="/etc/sysconfig/network-scripts"
probe="/etc/modprobe.conf"
backup="/tmp/fix_mac_backups_$$/"
i=0

#Segurança :)
mkdir "$backup"
cp -p $cfg/ifcfg-eth* "$backup"
cp -p "$probe" "$backup"


# Erros :
# 107 - Apenas 1 device encontrado
ERRO_1=107

# Antes de começar faz backup dos arquivos que serao modificados
cp -p "$cfg/ifcfg-eth*" "/tmp/" > $null 2>&1
cp -p $probe "/tmp/" > $null 2>&1

# Funçãozinha que fixa o MAC na config da placas
fix_mac()
{
  echo "---- | O Novo Mac Addr Sera Fixado | ----"
  echo "--------- | ${placas_mac[$placa]} | ---------"
  # Se ja tiver um MAC definido , agente comenta . Tambe definimos
ONBOOT=yes e BOOTPROTO=static
  sed -e "/^#OLD_HWADDR.*/d" -e 's/^HWADDR/#OLD_HWADDR/' -e
's/ONBOOT=no/ONBOO=yes/' -e 's/PROTO=[^s]/PROTO=static/'
$cfg/ifcfg-eth${placa} > $temp
  mv $temp $cfg/ifcfg-eth${placa}
  # Adiciona no fim do arquivo o MAC da placa
  echo "HWADDR="${placas_mac[$placa]} >> ${cfg}/ifcfg-eth${placa}       
}
# Função que modifica o nome da placa no modprobe.conf
fix_name()
{
 echo ""
 echo "---- | O Novo Nome Sera Fixado | ----"
 echo "--------------| ${placas_name[$placa]} |--------------"
 # Remove a entrada ja existente
 sed /eth${placa}/d $probe > $temp
 mv $temp $probe
 # Adiciona a nova
 echo "alias eth${placa} ${placas_name[$placa]}" >> $probe
}
# Assume quantas placas de rede existem , e guarda seus respectivos MAC
while : ; do
         ifconfig eth${i} >$null 2>$null || break
         echo "-----------------------"
         echo "Placa encontrada : eth${i} "
        
         # Amarra o MAC na no mac[${i}] e o nome no name[${i}]
         eval mac[${i}]="`ifconfig eth${i} | grep HWaddr | cut -d" " -f11 `"
         eval name[${i}]="`grep eth${i} /etc/modprobe.conf | cut -d" " -f3 `"
        
         echo "MAC ADDRESS" : ${mac[$i]}
         echo "Nome do Device " : ${name[$i]}
         echo "-----------------------"
         ((i++))
         done
echo ""
echo "-----------------------"
echo "${i} placa(s) encontrada(s)"
echo "-----------------------"

        # Se tiver apenas uma placa de rede não tem o que trocar :)
                
if [[ ${i} -eq 1 ]] ; then
         echo '\\\ERRO : Necessario no minimo 2 placas de rede///'
         echo ""
         echo "Caso as placas de rede estejam fisicamente ligadas
         echo "Voce deve \"subi-las\" (ifup ethX) antes de executar o script "
         echo "(Nao e necessario colocar um ip na placa)"
         exit ${ERRO_1};
         fi

# Ordena as placas
echo ""
echo "Desligue todos os cabos de redes de todas as placas"
echo "Pressione qualquer tecla para continuar..." ; read -n 1
echo "---------------------------------------------------"
placa=0
resp=0

for (( j=0 ; j<=i-1 ; j++ )) ; do
         echo "Conecte apenas um cabo de rede na placa de rede numero 
$((placa+1)) "
         echo "Pressione qualquer tecla para continuar ..." ; read -n 1
         echo ""
         echo "----- Testando a placa $((placa+1)) -----"
         for ((k=0 ; k<=i-1 ; k++ )) ; do
                 echo "--- Verificando o trafego na eth${k} ---"
                 tcpdump -ni eth${k} -c 10 > $null 2>&1 &
                 sleep 5
                 killall tcpdump 2> $null
                 if [[ $? -ne 0 ]] ; then
                         echo ""
                         echo " Encontrado ! "
                         echo ""
                         echo "------------------- Config Atual 
---------------------"
                         echo "Placa $((placa+1)) ----> eth${k} ----> 
${mac[$k]} ----> ${name[$k]}"
                         echo 
"------------------------------------------------------"
                         echo ""
                         # Amarra a placa fisica com seu mac/nome
                         placas_mac[$placa]=${mac[$k]}
                         placas_name[$placa]=${name[$k]}
                         fix_mac
                         fix_name
                         echo ""
                         echo "Placa $((placa+1)) foi configurada com sucesso!"
                         echo ""
                         ((placa++))
                         break
                 fi
         done
done

#limpa os tmp
rm -rf $temp
//---------------------------------------------------------


reply via email to

[Prev in Thread] Current Thread [Next in Thread]