mirror of
https://github.com/tonusoo/koduinternet-cpe
synced 2024-11-23 19:41:01 +02:00
50 lines
2.5 KiB
Plaintext
50 lines
2.5 KiB
Plaintext
|
# Title : get-static-ipv4-addrs
|
||
|
# Last modified date : 11.02.2023
|
||
|
# Author : Martin Tonusoo
|
||
|
# Description : Finds the permanent IPv4 addresses configured on the
|
||
|
# interface and stores those to a variable, which is later
|
||
|
# processed by dhclient restore-static-ipv4-addrs exit
|
||
|
# hook script.
|
||
|
# For example, in case the leased IPv4 address changes or the IPv4
|
||
|
# address is released by the client(dhclient -r) or the lease
|
||
|
# expires, then dhclient-script called by dhclient flushes all
|
||
|
# the IPv4 addresses configured on the interface. This includes
|
||
|
# IPv4 addresses defined in /etc/network/interfaces or conf
|
||
|
# files in interfaces.d directory. This script finds the non-dynamic
|
||
|
# IPv4 addresses configured on the interface and populates the
|
||
|
# "perm_addrs" variable. Exit hook "restore-static-ipv4-addrs" adds
|
||
|
# those addresses back to interface based on the content of the
|
||
|
# "perm_addrs" variable.
|
||
|
# Options :
|
||
|
# Notes : Script is meant to be run as a dhclient enter hook.
|
||
|
# Script is POSIX sh compliant.
|
||
|
#
|
||
|
# Routes and aliases("ALIAS DECLARATIONS" in dhclient.conf man)
|
||
|
# are not touched.
|
||
|
#
|
||
|
# Dhclient-script called by dhclient binary always adds IPv4 addresses
|
||
|
# to non-alias interface with "valid_lft" and "preferred_lft" set
|
||
|
# which results with a "dynamic" flag set in the output of "ip addr".
|
||
|
#
|
||
|
# This script can't help in case the manually configured address is
|
||
|
# from the same network as the address leased by the DHCP server AND
|
||
|
# the manually configured address is a secondary one- if the dynamic
|
||
|
# primary address expires, then both the dynamic primary and all
|
||
|
# the secondary manually configured addresses are removed by the
|
||
|
# kernel automatically.
|
||
|
|
||
|
perm_addrs=""
|
||
|
|
||
|
while read -r _ _ _ perm_addr _; do
|
||
|
|
||
|
# Sanity check.
|
||
|
case "$perm_addr" in
|
||
|
*.*.*.*/*)
|
||
|
perm_addrs="$perm_addrs $perm_addr"
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
done <<-EOF
|
||
|
$(ip -oneline -4 addr show dev "$interface" permanent label "$interface" 2>/dev/null)
|
||
|
EOF
|