diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..def31a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +# Dev Container +/.devcontainer/ + +# VS Code +.vscode +*.code-workspace + +# IDE +.cursor +.kiro + +# Miscellaneous files +*.DS_Store diff --git a/lib/lib.sh b/lib/lib.sh index 409ff7f..e713038 100644 --- a/lib/lib.sh +++ b/lib/lib.sh @@ -233,13 +233,27 @@ _install_and_reload() { fi } +_get_active_dropin_dir() { + local iface=$1 + local default_dir="${unitdir}/70-${iface}.network.d" + local ifindex network_file + ifindex=$(cat "/sys/class/net/${iface}/ifindex" 2> /dev/null) || { echo "$default_dir"; return; } + network_file=$(sed -n 's/^NETWORK_FILE=//p' "/run/systemd/netif/links/${ifindex}" 2> /dev/null) || { echo "$default_dir"; return; } + if [ -n "$network_file" ]; then + echo "${network_file}.d" + else + echo "$default_dir" + fi +} + create_ipv4_aliases() { local iface=$1 local mac=$2 local addresses subnet_supports_ipv4 "$iface" || return 0 addresses=$(get_iface_imds $mac local-ipv4s | tail -n +2 | sort) - local drop_in_dir="${unitdir}/70-${iface}.network.d" + local drop_in_dir + drop_in_dir=$(_get_active_dropin_dir "$iface") mkdir -p "$drop_in_dir" local file="$drop_in_dir/ec2net_alias.conf" local work="${file}.new" @@ -298,7 +312,8 @@ create_rules() { local family=$4 local addrs prefixes local local_addr_key subnet_pd_key - local drop_in_dir="${unitdir}/70-${iface}.network.d" + local drop_in_dir + drop_in_dir=$(_get_active_dropin_dir "$iface") mkdir -p "$drop_in_dir" local -i ruleid=$((device_number+rule_base+100*network_card))