1
0
mirror of https://github.com/tonusoo/koduinternet-cpe synced 2024-11-11 05:41:00 +02:00
koduinternet-cpe/conf/etc/dhcp/dhclient-enter-hooks.d/get-static-ipv4-addrs
2023-06-15 17:55:10 +03:00

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