finir implémentation de network_config

This commit is contained in:
Jephte CLAIN 2014-02-09 22:44:22 +04:00
parent ac63d8456a
commit 71d1308188
1 changed files with 77 additions and 87 deletions

View File

@ -915,10 +915,11 @@ function network_config() {
# défini ou la première interface définie. # défini ou la première interface définie.
# $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le # $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
# fichier /etc/network/interfaces, mais de le recréer depuis zéro. # fichier /etc/network/interfaces, mais de le recréer depuis zéro.
# $6 (oldhost) est le nom d'hôte actuel, avant la modification
# Si un des arguments n'est pas spécifié, il est ignoré. # Si un des arguments n'est pas spécifié, il est ignoré.
# Le tableau confips doit contenir des définitions d'une des formes # Le tableau confips doit contenir des définitions d'une des formes
# suivantes: # suivantes:
# [iface:]address[/suffix][+gateway],... # [[iface][//gateway]:]address[/suffix],...
# [iface:]dhcp # [iface:]dhcp
# La deuxième forme est pour spécifier qu'une interface est configurée par # La deuxième forme est pour spécifier qu'une interface est configurée par
# DHCP. iface vaut par défaut eth0, sauf si une définition de bridge # DHCP. iface vaut par défaut eth0, sauf si une définition de bridge
@ -932,28 +933,22 @@ function network_config() {
# séparées par une virgule. e.g. br0:eth0,eth1 # séparées par une virgule. e.g. br0:eth0,eth1
# Bien que ce soit techniquement possible, ce script interdit que l'on # Bien que ce soit techniquement possible, ce script interdit que l'on
# définisse une adresse IP pour une interface faisant partie d'un bridge. # définisse une adresse IP pour une interface faisant partie d'un bridge.
urequire ipcalc conf
local -a __nc_confips __nc_confbrs local -a __nc_confips __nc_confbrs
[ -n "$2" ] && array_copy __nc_confips "$2" [ -n "$2" ] && array_copy __nc_confips "$2"
[ -n "$3" ] && array_copy __nc_confbrs "$3" [ -n "$3" ] && array_copy __nc_confbrs "$3"
local host="$1" mainiface="$4" reset_interfaces="$5" local host="$1"
local -a confips confbrs local -a confips; array_copy confips __nc_confips
array_copy confips __nc_confips local -a confbrs; array_copy confbrs __nc_confbrs
array_copy confbrs __nc_confbrs local mainiface="$4" reset_interfaces="$5" oldhost="$6"
local modified
network_fix_confips confips network_fix_confs confbrs confips "$mainiface"
network_fix_confbrs confbrs
local mainbr # bridge principal local confbr br; local -a ifaces
local mainip # adresse IP principale de l'interface principale local confip iface gateway mainip suffix; local -a ipsuffixes
local confbr confip br iface suffix gateway network_parse_confip "${confips[0]}" iface gateway ipsuffixes
local -a ipspecs network_parse_ipsuffix "${ipsuffixes[0]}" mainip suffix
__old_network_resolve_mainiface mainiface "${confbrs[0]}" "${confips[0]}"
__old_network_parse_confbr "${confbrs[0]}" mainbr
[ -n "$mainbr" ] || mainbr=br0
if [ -n "${confips[*]}" -o -n "${confbrs[*]}" ]; then if [ -n "${confips[*]}" -o -n "${confbrs[*]}" ]; then
# Vérifier qu'une interface avec une adresse IP ne figure pas dans les # Vérifier qu'une interface avec une adresse IP ne figure pas dans les
@ -965,11 +960,11 @@ function network_config() {
local -a brifaces local -a brifaces
ifaces_with_ips=() ifaces_with_ips=()
for confip in "${confips[@]}"; do for confip in "${confips[@]}"; do
__old_network_parse_confip "$confip" iface network_parse_confip "$confip" iface gateway ipsuffixes
array_addu ifaces_with_ips "$iface" array_addu ifaces_with_ips "$iface"
done done
for confbr in "${confbrs[@]}"; do for confbr in "${confbrs[@]}"; do
__old_network_parse_confbr "$confbr" br ifaces network_parse_confbr "$confbr" br ifaces
array_add brifaces "$br" array_add brifaces "$br"
for iface in "${ifaces[@]}"; do for iface in "${ifaces[@]}"; do
if array_contains ifaces_with_ips "$iface"; then if array_contains ifaces_with_ips "$iface"; then
@ -978,21 +973,30 @@ function network_config() {
fi fi
done done
done done
local -a confstdips confbrips
for confip in "${confips[@]}"; do # vérifier si une modification est nécessaire
__old_network_parse_confip "$confip" iface local modify
[ -n "$iface" ] || iface="$mainiface" for confbr in "${confbrs[@]}"; do
if array_contains brifaces "$iface"; then network_parse_confbr "$confbr" br ifaces
array_add confbrips "$confip" if ! network_interfaces_check_confbr "$br" iface; then
else modify=1
array_add confstdips "$confip" break
fi fi
done done
if [ -z "$modify" ]; then
for confip in "${confips[@]}"; do
network_parse_confip "$confip" iface gateway ipsuffixes
if ! network_interfaces_check_confip "$iface" "$gateway" ipsuffixes; then
modify=1
break
fi
done
fi
# maintenant, configurer /etc/network/interfaces: faire une copie de travail # yes! il faut refaire la configuration
local interfaces workfile if [ -n "$modify" ]; then
ac_set_tmpfile interfaces # faire une copie de travail
ac_set_tmpfile workfile local interfaces; ac_set_tmpfile interfaces
cat /etc/network/interfaces >"$interfaces" cat /etc/network/interfaces >"$interfaces"
if [ -n "$reset_interfaces" ]; then if [ -n "$reset_interfaces" ]; then
@ -1006,42 +1010,25 @@ iface lo inet loopback
" "
fi fi
# configurer chaque bridge # d'abord supprimer l'ancienne configuration
local -a tmpifaces
local tmpbr
for confip in "${confbrips[@]}"; do
__old_network_parse_confip "$confip" br ipspecs
[ -n "$br" ] || br="$mainbr"
if [ -z "$mainip" -a "$br" == "$mainiface" ]; then
__old_network_parse_ipspec "${ipspecs[0]}" mainip suffix gateway
fi
ifaces=()
for confbr in "${confbrs[@]}"; do for confbr in "${confbrs[@]}"; do
__old_network_parse_confbr "$confbr" tmpbr tmpifaces network_parse_confbr "$confbr" br ifaces
if [ "$tmpbr" == "$br" ]; then network_interfaces_remove_confbr "$br" ifaces "$interfaces"
array_copy ifaces tmpifaces done
break for confip in "${confips[@]}"; do
fi network_parse_confip "$confip" iface gateway ipsuffixes
network_interfaces_remove_confip "$iface"
done done
if __old_network_update_bridge "$interfaces" "$workfile" "$br" ipspecs ifaces; then # puis recréer la configuration
cat "$workfile" >"$interfaces" for confbr in "${confbrs[@]}"; do
fi network_parse_confbr "$confbr" br ifaces
network_interfaces_add_confbr "$br" ifaces confips "$interfaces"
done done
for confip in "${confips[@]}"; do
# configurer chaque interface classique network_parse_confip "$confip" iface gateway ipsuffixes
for confip in "${confstdips[@]}"; do if ! array_contains brifaces "$iface"; then
__old_network_parse_confip "$confip" iface ipspecs network_interfaces_add_confip "$iface" "$gateway" ipsuffixes "$interfaces"
[ -n "$iface" ] || iface="$mainiface"
if [ -z "$mainip" -a "$iface" == "$mainiface" ]; then
__old_network_parse_ipspec "${ipspecs[0]}" mainip suffix gateway
fi
if __old_network_update_iface "$interfaces" "$workfile" "$iface" ipspecs; then
cat "$workfile" >"$interfaces"
fi fi
done done
@ -1062,8 +1049,10 @@ iface lo inet loopback
estep /etc/network/interfaces estep /etc/network/interfaces
fi fi
cat "$interfaces" >/etc/network/interfaces cat "$interfaces" >/etc/network/interfaces
modified=1
fi
ac_clean "$interfaces"
fi fi
ac_clean "$interfaces" "$workfile"
eend eend
fi fi
@ -1097,5 +1086,6 @@ iface lo inet loopback
eend eend
fi fi
[ -z "$modified" ] && return 10
return 0 return 0
} }