summaryrefslogtreecommitdiff
path: root/contrib/mactable/macscript
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mactable/macscript')
-rwxr-xr-xcontrib/mactable/macscript30
1 files changed, 30 insertions, 0 deletions
diff --git a/contrib/mactable/macscript b/contrib/mactable/macscript
new file mode 100755
index 0000000..8d807c5
--- /dev/null
+++ b/contrib/mactable/macscript
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+STATUS_FILE="/tmp/dnsmasq-ip-mac.status"
+
+# Script for dnsmasq lease-change hook.
+# Maintains the above file with a IP address/MAC address pairs,
+# one lease per line. Works with IPv4 and IPv6 leases, file is
+# atomically updated, so no races for users of the data.
+
+action="$1"
+mac="$2" # IPv4
+ip="$3"
+
+if [ -n "$DNSMASQ_IAID" ]; then
+ if [ -z "$DNSMASQ_MAC" -a "$action" = "old" ]; then
+ # MAC not known by dnsmasq, probably due to restart.
+ exit 0;
+ fi
+ mac="$DNSMASQ_MAC" # IPv6
+fi
+
+if [ "$action" = "add" -o "$action" = "old" -o "$action" = "del" ]; then
+ if [ -f "$STATUS_FILE" ]; then
+ sed "/^${ip//./\.} / d" "$STATUS_FILE" > "$STATUS_FILE".new
+ fi
+ if [ "$action" = "add" -o "$action" = "old" ]; then
+ echo "$ip $mac" >> "$STATUS_FILE".new
+ fi
+ mv "$STATUS_FILE".new "$STATUS_FILE" # atomic update.
+fi