__network_set_confips() et __network_set_confbrs()

This commit is contained in:
Jephté Clain 2014-01-28 15:55:40 +04:00
parent fb7a744e27
commit c6727703ef
1 changed files with 65 additions and 24 deletions

View File

@ -318,32 +318,34 @@ function __network_resolve_mainiface() {
[ -n "${!__nrm_mainiface}" ] || set_var "$__nrm_mainiface" eth0
}
function __network_set_mainip() {
# XXX modifier pour en faire set_confips, qui initialise confips en fonction
# des adresses actuelles, principale et supplémentaire
function __network_set_confip() {
eval "$(ip addr show dev "$1" | awk "BEGIN {
mainipvar = \"${2:-mainip}\"
suffixvar = \"${3:-suffix}\"
broadcastvar = \"${4:-broadcast}\"
supplipsvar = \"${3:-supplips}\"
"'
print mainipvar "="
print suffixvar "="
print broadcastvar "="
print supplipsvar "=()"
mainip = ""
supplips = 0
}
$1 == "inet" {
mainip = ""; suffix = ""; broadcast = ""
if (match($0, "inet ([^ ]*)/([^ ]*) ", vs) != 0) {
mainip = vs[1]
suffix = vs[2]
if (mainip == "") {
mainip = $2
print mainipvar "=\"" mainip "\""
} else {
if (!supplips) {
supplips = 1
print supplipsvar "=("
}
print "\"" $2 "\""
}
if (match($0, "brd ([^ ]*) ", vs) != 0) {
broadcast = vs[1]
}
END {
if (supplips) {
print ")"
}
print mainipvar "=\"" mainip "\""
print suffixvar "=\"" suffix "\""
print broadcastvar "=\"" broadcast "\""
exit 0
}')"
set_var "$2" "$(array_join "$2" ,)"
}
function __network_set_gateway() {
@ -359,6 +361,36 @@ $1 == "0.0.0.0" && $8 == iface {
}
#BUG")"
function __network_set_confips() {
local -a __nsc_confips __nsc_ifaces __nsc_supplips
local __nsc_iface __nsc_mainip __nsc_gateway
array_from_lines __nsc_ifaces "$(ip link | grep -v '<.*LOOPBACK.*>' | grep '<.*UP.*>' | awk '{ sub(/:$/, "", $2); print $2}')"
for __nsc_iface in "${__nsc_ifaces[@]}"; do
__network_set_confip "$__nsc_iface" __nsc_mainip __nsc_supplips
[ -n "$__nsc_mainip" ] || continue
__network_set_gateway "$__nsc_iface" __nsc_gateway
array_add __nsc_confips "$__nsc_iface:$__nsc_mainip${__nsc_gateway:++$__nsc_gateway}${__nsc_supplips:+,$__nsc_supplips}"
done
array_copy "${1:-confips}" __nsc_confips
}
function __network_set_confbrs() {
local -a __nsc_ifaces __nsc_tmpconfbrs __nsc_confbrs
local __nsc_confbr __nsc_br __nsc_iface
array_from_lines __nsc_ifaces "$(ip link | grep -v '<.*LOOPBACK.*>' | grep '<.*UP.*>' | awk '{ sub(/:$/, "", $2); print $2}')"
array_from_lines __nsc_tmpconfbrs "$(brctl show 2>/dev/null | awk 'BEGIN { br = "" }
NR == 1 { next }
$1 != "" { br = $1 }
{ print br ":" $4 }
')"
for __nsc_confbr in "${__nsc_tmpconfbrs[@]}"; do
splitpair "$__nsc_confbr" __nsc_br __nsc_iface
array_contains __nsc_ifaces "$__nsc_br" || continue
array_add __nsc_confbrs "$__nsc_confbr"
done
array_copy "${1:-confbrs}" __nsc_confbrs
}
__DEBIAN_NETWORK_UPDATE_BASE_SCRIPT='
BEGIN {
method = "dhcp"
@ -618,7 +650,9 @@ function write_conf() {
if (ipspecs_count > 0 && method == "static") {
print " address " ips[1]
print " netmask " get_netmask(suffixes[1])
print " gateway " gateways[1]
if (gateways[1] != "" && gateways[1] != ips[1]) {
print " gateway " gateways[1]
}
}
ports = " bridge_ports"
if (ifaces_count == 0) {
@ -806,7 +840,9 @@ function write_conf() {
if (ipspecs_count > 0 && method == "static") {
print " address " ips[1]
print " netmask " get_netmask(suffixes[1])
print " gateway " gateways[1]
if (gateways[1] != "" && gateways[1] != ips[1]) {
print " gateway " gateways[1]
}
}
serial = 0
for (i = 2; i <= ipspecs_count; i++) {
@ -832,12 +868,17 @@ END {
function network_config() {
# (Re)configurer le réseau sur l'hôte courant.
# $1 (host) est le nom d'hôte. $2 (confips) est le nom d'un tableau
# contenant la configuration des adresses ips pour les interfaces. $3
# (confbrs) est le nom d'un tableau contenant la configuration des bridges à
# créer/mettre à jour. $4 (mainiface) est le nom de l'interface
# principale. En principe, l'interface principale est le premier bridge
# $1 (host) est le nom d'hôte.
# $2 (confips) est le nom d'un tableau contenant la configuration des
# adresses ips pour les interfaces.
# $3 (confbrs) est le nom d'un tableau contenant la configuration des
# bridges à créer/mettre à jour.
# $4 (mainiface) est le nom de l'interface principale, c'est à dire
# l'interface qui est sélectionnée si une adresse ip n'est pas préfixée de
# son interface. En principe, l'interface principale est le premier bridge
# défini ou la première interface définie.
# $5 (reset_interfaces) spécifie de ne pas chercher à mettre à jour le
# fichier /etc/network/interfaces, mais de le recréer depuis zéro.
# Si un des arguments n'est pas spécifié, il est ignoré.
# Le tableau confips doit contenir des définitions d'une des formes
# suivantes: