#!/bin/bash

# /etc/network/if-pre-up.d/dhcpcd-sync
#
# Hook script provided by the 'tkl-dhcpcd-ifupdown-glue' package and part of
# TurnKey GNU/Linux network configuration.
#
# Keeps dhcpcd.conf in sync with /etc/network/interfaces so that
# interfaces configured as static are not also managed by dhcpcd.

# shellcheck source=share/helper

ifaces_file="${INTERFACES_FILE:-/etc/network/interfaces}"
update_dhcpcd_conf=/usr/lib/dhcpcd-ifupdown-glue/update-dhcpcd-conf

_info() {
    logger --tag=dhcpcd-ifupdown-glue "$*"
}

_warn() {
    logger --tag=dhcpcd-ifupdown-glue --priority warning "$*"
}

_info "if-pre-up hook running for $IFACE"
if [[ "$IFACE" == "lo" ]]; then
    _info "nothing to do for 'lo'"
    exit 0
fi

for _inet in inet inet6; do
    [[ "$_inet" == "inet" ]] && _ipv=ipv4 || _ipv=ipv6
    iface_mode="$( \
        sed -En "s|^iface $IFACE $_inet ([a-z]+)|\1|p" "$ifaces_file" \
        | head -1)"
    if [[ -z "$iface_mode" ]]; then
        _warn "No $_ipv iface mode info found for $IFACE"
    elif [[ "$iface_mode" == "dhcp" ]]; then
        $update_dhcpcd_conf remove-deny-dhcp "$IFACE" "$_ipv"
    else
        $update_dhcpcd_conf add-deny-dhcp "$IFACE" "$_ipv"
    fi
done

_info "if-pre-up hook finished for $IFACE"

exit 0
