maj du fichier interfaces
This commit is contained in:
parent
01a837b103
commit
a0130ab206
127
ulib/debian
127
ulib/debian
|
@ -221,10 +221,10 @@ function __network_parse_confip() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function __network_parse_ipspec() {
|
function __network_parse_ipspec() {
|
||||||
# ipspec --> ip mask gateway
|
# ipspec --> ip suffix gateway
|
||||||
local __npi_tmp
|
local __npi_tmp
|
||||||
splitfsep "$1" / "${2:-ip}" __npi_tmp
|
splitfsep "$1" / "${2:-ip}" __npi_tmp
|
||||||
splitfsep "$__npi_tmp" + "${3:-mask}" "${4:-gateway}"
|
splitfsep "$__npi_tmp" + "${3:-suffix}" "${4:-gateway}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function __network_parse_confbr() {
|
function __network_parse_confbr() {
|
||||||
|
@ -238,7 +238,7 @@ function __network_parse_confbr() {
|
||||||
function __network_fix_confips() {
|
function __network_fix_confips() {
|
||||||
# confips@
|
# confips@
|
||||||
local -a __nfc_confips __nfc_ipspecs __nfc_ifaces __nfc_ips
|
local -a __nfc_confips __nfc_ipspecs __nfc_ifaces __nfc_ips
|
||||||
local __nfc_confip __nfc_iface __nfc_ipspec __nfc_ip __nfc_mask __nfc_gateway
|
local __nfc_confip __nfc_iface __nfc_ipspec __nfc_ip __nfc_suffix __nfc_gateway __nfc_first
|
||||||
|
|
||||||
array_copy __nfc_confips "${1:-confips}"
|
array_copy __nfc_confips "${1:-confips}"
|
||||||
# recenser les interfaces et créer les tableaux __IFACE_ipspecs
|
# recenser les interfaces et créer les tableaux __IFACE_ipspecs
|
||||||
|
@ -251,9 +251,15 @@ function __network_fix_confips() {
|
||||||
for __nfc_confip in "${__nfc_confips[@]}"; do
|
for __nfc_confip in "${__nfc_confips[@]}"; do
|
||||||
__network_parse_confip "$__nfc_confip" __nfc_iface __nfc_ipspecs
|
__network_parse_confip "$__nfc_confip" __nfc_iface __nfc_ipspecs
|
||||||
for __nfc_ipspec in "${__nfc_ipspecs[@]}"; do
|
for __nfc_ipspec in "${__nfc_ipspecs[@]}"; do
|
||||||
__network_parse_ipspec "$__nfc_ipspec" __nfc_ip __nfc_mask __nfc_gateway
|
__network_parse_ipspec "$__nfc_ipspec" __nfc_ip __nfc_suffix __nfc_gateway
|
||||||
if ! array_contains __nfc_ips "$__nfc_ip"; then
|
if ! array_contains __nfc_ips "$__nfc_ip"; then
|
||||||
eval "array_add __nfc_${__nfc_iface}_ipspecs \"$__nfc_ipspec\""
|
[ -n "$__nfc_suffix" ] || __nfc_suffix=24
|
||||||
|
if [ -z "$__nfc_gateway" ] && array_isempty "__nfc_${__nfc_iface}_ipspecs"; then
|
||||||
|
# premier ipspec, il faut spécifier le gateway
|
||||||
|
__nfc_gateway="$(ipcalc_gateway "$__nfc_ip" "$__nfc_suffix")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval "array_add __nfc_${__nfc_iface}_ipspecs \"$__nfc_ip/$__nfc_suffix${__nfc_gateway:++$__nfc_gateway}\""
|
||||||
array_add __nfc_ips "$__nfc_ip"
|
array_add __nfc_ips "$__nfc_ip"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -270,7 +276,7 @@ function __network_fix_confips() {
|
||||||
function __network_fix_confbrs() {
|
function __network_fix_confbrs() {
|
||||||
# confbrs@
|
# confbrs@
|
||||||
local -a __nfc_confbrs __nfc_ifaces __nfc_brs __nfc_ips
|
local -a __nfc_confbrs __nfc_ifaces __nfc_brs __nfc_ips
|
||||||
local __nfc_confbr __nfc_br __nfc_iface __nfc_ip __nfc_mask __nfc_gateway
|
local __nfc_confbr __nfc_br __nfc_iface __nfc_ip __nfc_suffix __nfc_gateway
|
||||||
|
|
||||||
array_copy __nfc_confbrs "${1:-confbrs}"
|
array_copy __nfc_confbrs "${1:-confbrs}"
|
||||||
# recenser les bridges et créer les tableaux __BR_ifaces
|
# recenser les bridges et créer les tableaux __BR_ifaces
|
||||||
|
@ -360,45 +366,35 @@ function __network_update_iface() {
|
||||||
# nouvelle.
|
# nouvelle.
|
||||||
local inf="$1"; shift
|
local inf="$1"; shift
|
||||||
local outf="$1"; shift
|
local outf="$1"; shift
|
||||||
local IPSPECS_SCRIPT='
|
local IPSPECS_SCRIPT='BEGIN {
|
||||||
method = "dhcp"
|
method = "dhcp"
|
||||||
ips_count = ipspecs_count
|
ips_count = ipspecs_count
|
||||||
array_new(ips)
|
array_new(ips)
|
||||||
array_new(masks)
|
array_new(suffixes)
|
||||||
array_new(gateways)
|
array_new(gateways)
|
||||||
array_new(have_ups)
|
array_new(have_ups)
|
||||||
array_new(have_downs)
|
array_new(have_downs)
|
||||||
for (i = 1; i <= ips_count; i++) {
|
for (i = 1; i <= ips_count; i++) {
|
||||||
if (match(ipspecs[i], "^(.*)(/(.*))?(\\+(.*))?$", vs) != 0) {
|
if (match(ipspecs[i], "^([^/]*)(/([^+]*))?(\\+(.*))?$", vs) != 0) {
|
||||||
ip = vs[1]
|
ip = vs[1]
|
||||||
mask = vs[3]
|
suffix = vs[3]
|
||||||
gateway = vs[5]
|
gateway = vs[5]
|
||||||
} else {
|
} else {
|
||||||
ip = ""
|
ip = ""
|
||||||
mask = ""
|
suffix = ""
|
||||||
gateway = ""
|
gateway = ""
|
||||||
}
|
}
|
||||||
if (i == 1) {
|
if (i == 1) {
|
||||||
if (ip == "dhcp") method = "dhcp"
|
if (ip == "dhcp") method = "dhcp"
|
||||||
else method = "static"
|
else method = "static"
|
||||||
}
|
}
|
||||||
if (mask == "") mask = "255.255.255.0"
|
if (suffix == "") suffix = "255.255.255.0"
|
||||||
ips[i] = ip
|
ips[i] = ip
|
||||||
#masks[i] = mask
|
suffixes[i] = suffix
|
||||||
#gateways[i] = gateway
|
gateways[i] = gateway
|
||||||
have_ups[i] = 0
|
have_ups[i] = 0
|
||||||
have_downs[i] = 0
|
have_downs[i] = 0
|
||||||
}
|
}
|
||||||
'
|
|
||||||
awkrun <"$inf" -f iface="$1" ipspecs[@]="${2:-ipspecs}" '
|
|
||||||
BEGIN {
|
|
||||||
have_hotplug = 0
|
|
||||||
have_auto = 0
|
|
||||||
have_iface = 0
|
|
||||||
have_method = 0 # static ou dhcp
|
|
||||||
in_iface = 0
|
|
||||||
have_mainip = 0
|
|
||||||
'"$IPSPECS_SCRIPT"'
|
|
||||||
}
|
}
|
||||||
function indexof_ip(ip, i) {
|
function indexof_ip(ip, i) {
|
||||||
for (i = 1; i = ips_count; i++) {
|
for (i = 1; i = ips_count; i++) {
|
||||||
|
@ -408,6 +404,17 @@ function indexof_ip(ip, i) {
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
'
|
||||||
|
awkrun <"$inf" -f iface="$1" ipspecs[@]="${2:-ipspecs}" '
|
||||||
|
BEGIN {
|
||||||
|
have_hotplug = 0
|
||||||
|
have_auto = 0
|
||||||
|
have_iface = 0
|
||||||
|
have_method = 0 # static ou dhcp
|
||||||
|
in_iface = 0
|
||||||
|
have_mainip = 0
|
||||||
|
}
|
||||||
|
'"$IPSPECS_SCRIPT"'
|
||||||
|
|
||||||
($0 " ") ~ ("^allow-hotplug.* " iface " ") { have_hotplug = 1; next }
|
($0 " ") ~ ("^allow-hotplug.* " iface " ") { have_hotplug = 1; next }
|
||||||
($0 " ") ~ ("^(allow-)?auto.* " iface " ") { have_auto = 1; next }
|
($0 " ") ~ ("^(allow-)?auto.* " iface " ") { have_auto = 1; next }
|
||||||
|
@ -417,7 +424,7 @@ $0 ~ ("^iface " iface " inet ") {
|
||||||
in_iface = 1
|
in_iface = 1
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
$0 ~ ("^iface ") { in_inface = 0; next; }
|
$0 ~ ("^iface ") { in_iface = 0; next; }
|
||||||
in_iface && $0 ~ "^[ ]*address " mainip { have_mainip = 1 }
|
in_iface && $0 ~ "^[ ]*address " mainip { have_mainip = 1 }
|
||||||
in_iface && $0 ~ "^[ ]*up (/sbin/)?ip addr add " {
|
in_iface && $0 ~ "^[ ]*up (/sbin/)?ip addr add " {
|
||||||
if (match($0, "ip addr add (.*)/.* dev " iface, vs) != 0) {
|
if (match($0, "ip addr add (.*)/.* dev " iface, vs) != 0) {
|
||||||
|
@ -455,7 +462,69 @@ END {
|
||||||
|
|
||||||
# il faut refaire la configuration
|
# il faut refaire la configuration
|
||||||
awkrun <"$inf" >"$outf" -f iface="$1" ipspecs[@]="${2:-ipspecs}" '
|
awkrun <"$inf" >"$outf" -f iface="$1" ipspecs[@]="${2:-ipspecs}" '
|
||||||
|
BEGIN {
|
||||||
|
have_auto = 0
|
||||||
|
remove_auto = 0
|
||||||
|
replace_conf = 1
|
||||||
|
in_iface = 0
|
||||||
|
}
|
||||||
|
'"$IPSPECS_SCRIPT"'
|
||||||
|
function remove_hotplug_iface() {
|
||||||
|
line = $0 " "; gsub(" " iface " ", " ", line)
|
||||||
|
if (line ~ /^allow-hotplug *$/) {
|
||||||
|
# une seule interface sur la ligne: la commenter
|
||||||
|
print "#" $0
|
||||||
|
} else {
|
||||||
|
# supprimer l"interface de la ligne
|
||||||
|
sub(/ *$/, "", line)
|
||||||
|
print line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function remove_auto_iface() {
|
||||||
|
line = $0 " "; gsub(" " iface " ", " ", line)
|
||||||
|
if (line ~ /^(allow-)?auto *$/) {
|
||||||
|
# une seule interface sur la ligne: la commenter
|
||||||
|
print "#" $0
|
||||||
|
} else {
|
||||||
|
# supprimer l"interface de la ligne
|
||||||
|
sub(/ *$/, "", line)
|
||||||
|
print line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function get_netmask(suffix) {
|
||||||
|
if (suffix == 0) return "0.0.0.0"
|
||||||
|
else if (suffix == 8) return "255.0.0.0"
|
||||||
|
else if (suffix == 16) return "255.255.0.0"
|
||||||
|
else if (suffix == 24) return "255.255.255.0"
|
||||||
|
else if (suffix == 32) return "255.255.255.255"
|
||||||
|
else return suffix
|
||||||
|
}
|
||||||
|
function write_conf() {
|
||||||
|
replace_conf = 0
|
||||||
|
if (!have_auto) print "auto " iface
|
||||||
|
print "iface " iface " inet " method
|
||||||
|
if (ips_count > 0 && method == "static") {
|
||||||
|
print " address " ips[1]
|
||||||
|
print " netmask " get_netmask(suffixes[1])
|
||||||
|
print " gateway " gateways[1]
|
||||||
|
}
|
||||||
|
serial = 0
|
||||||
|
for (i = 2; i <= ips_count; i++) {
|
||||||
|
print " up ip addr add " ips[i] "/" suffixes[i] " dev " iface " label " iface ":" serial
|
||||||
|
print " down ip addr del " ips[i] "/" suffixes[i] " dev " iface " label " iface ":" serial
|
||||||
|
serial++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
($0 " ") ~ ("^allow-hotplug.* " iface " ") { remove_hotplug_iface(); next; }
|
||||||
|
!remove_auto && ($0 " ") ~ ("^(allow-)?auto.* " iface " ") { have_auto = 1; remove_auto = 1; next; }
|
||||||
|
remove_auto && ($0 " ") ~ ("^(allow-)?auto.* " iface " ") { remove_auto_iface(); next; }
|
||||||
|
replace_conf && !in_iface && $0 ~ ("^iface " iface " inet ") { in_iface = 1; next; }
|
||||||
|
replace_conf && in_iface && $0 ~ "^iface " { print; in_iface = 0; write_conf(); next; }
|
||||||
{ print }
|
{ print }
|
||||||
|
END {
|
||||||
|
if (replace_conf) write_conf()
|
||||||
|
}
|
||||||
'
|
'
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -471,7 +540,7 @@ function network_config() {
|
||||||
# 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[/mask][+gateway],...
|
# [iface:]address[/suffix][+gateway],...
|
||||||
# [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
|
||||||
|
@ -501,7 +570,7 @@ function network_config() {
|
||||||
|
|
||||||
local mainbr # bridge principal
|
local mainbr # bridge principal
|
||||||
local mainip # adresse IP principale de l'interface principale
|
local mainip # adresse IP principale de l'interface principale
|
||||||
local confbr confip br iface mask gateway
|
local confbr confip br iface suffix gateway
|
||||||
local -a ipspecs
|
local -a ipspecs
|
||||||
|
|
||||||
__network_resolve_mainiface mainiface "${confbrs[0]}" "${confips[0]}"
|
__network_resolve_mainiface mainiface "${confbrs[0]}" "${confips[0]}"
|
||||||
|
@ -555,7 +624,7 @@ function network_config() {
|
||||||
[ -n "$br" ] || br="$mainbr"
|
[ -n "$br" ] || br="$mainbr"
|
||||||
|
|
||||||
if [ -z "$mainip" -a "$br" == "$mainiface" ]; then
|
if [ -z "$mainip" -a "$br" == "$mainiface" ]; then
|
||||||
__network_parse_ipspec "${ipspecs[0]}" mainip mask gateway
|
__network_parse_ipspec "${ipspecs[0]}" mainip suffix gateway
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ifaces=()
|
ifaces=()
|
||||||
|
@ -578,7 +647,7 @@ function network_config() {
|
||||||
[ -n "$iface" ] || iface="$mainiface"
|
[ -n "$iface" ] || iface="$mainiface"
|
||||||
|
|
||||||
if [ -z "$mainip" -a "$iface" == "$mainiface" ]; then
|
if [ -z "$mainip" -a "$iface" == "$mainiface" ]; then
|
||||||
__network_parse_ipspec "${ipspecs[0]}" mainip mask gateway
|
__network_parse_ipspec "${ipspecs[0]}" mainip suffix gateway
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if __network_update_iface "$interfaces" "$workfile" "$iface" ipspecs; then
|
if __network_update_iface "$interfaces" "$workfile" "$iface" ipspecs; then
|
||||||
|
|
Loading…
Reference in New Issue