45 lines
1.2 KiB
Bash
Executable File
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
|