Files
2026-05-06 00:33:07 -03:00

45 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
. /etc/tinc/${NETNAME}/config/ula_prefix
ULA_SUBNET="/32"
ETCHOSTS="/etc/hosts"
# Added at the end of each line in the hosts file.
COMMENT="# Managed by tinc ${NETNAME}"
mac_to_address() {
# Turns every octet into a positional variable.
# $1 = 12:3:56:78:9a → $1 = 12, $2 = 3, $3 = 56 …
local IFS=:; set $1
printf '%2s%2s:%2s%2s:%2s%2s' $@ | tr ' ' '0'
}
case $2 in
subnet)
_mac="$(mac_to_address "${SUBNET}")"
IP="${ULA_PREFIX}::${_mac}"
if test "${ULA_SUBNET}" = "/32"; then
case $1 in
up) ip -6 route add "${ULA_PREFIX}:${_mac}::/80" via "${IP}" dev "${INTERFACE}" ;;
down) ip -6 route del "${ULA_PREFIX}:${_mac}::/80" via "${IP}" dev "${INTERFACE}" ;;
esac
fi
;;
tinc)
MAC="$(cat "/sys/class/net/${INTERFACE}/address")"
IP="${ULA_PREFIX}::$(mac_to_address "${MAC}")"
case $1 in
up) ip address add "${IP}${ULA_SUBNET}" dev "${INTERFACE}" ;;
down) sed -re "/${COMMENT}$/d" -i "${ETCHOSTS}" ;;
esac ;;
esac
test -z "${NODE}" && exit
sed -re "/${NODE}\.${NETNAME} ${COMMENT}$/d" -i "${ETCHOSTS}"
sed -re "/^${IP} .* ${COMMENT}$/d" -i "${ETCHOSTS}"
if test "$1" = "up"; then
echo "${IP} ${NODE}.${NETNAME} www.${NODE}.${NETNAME} ${COMMENT}" >> "${ETCHOSTS}"
fi