Created
August 26, 2011 10:32
-
-
Save jiphex/1173162 to your computer and use it in GitHub Desktop.
Generate RFC4193 Shell Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# @(#) generate-rfc4193-addr.sh (ULA) (c) Sep 2004 - Jun 2011 Holger Zuleger | |
# | |
# do what the name suggest | |
# | |
# firstpart = 64-Bit NTP time | |
# secondpart = EUI-64 Identifier or 48 Bit MAC-Adress | |
# sha1sum ($firstpart | $secondpart ) | |
# use least significant 40 Bits of sha1sum | |
# build global prefix (locally assigned == FD00::/8) | |
# | |
# (M1) 11. May 2006 | |
# - a check added to complain if firstpart or secondpart is empty | |
# - firstpart calculation changed in such a way, that only one transmit | |
# time is stored (ntpdate since version 4.2.0 use a list of ntp servers) | |
# | |
# (M2) 27. Aug 2006 | |
# Fixed bug in using reference time instead of transmit timestamp. | |
# Thanks to Marc A. Donges for finding this out | |
# | |
# (M3) 4. Sep 2006 | |
# Use ntpq instead of ntpdate because the latter is deprecated. | |
# This requires a local running and syncronized ntpd, but | |
# speeds up the execution time | |
# | |
# (M4) 29. Dec 2006 | |
# set LC_ALL=C at the beginning of the script, to be sure the grep command | |
# used to scan the output of the ifconfig command finds the expected string | |
# Thanks to Ted Percival for finding this out | |
# | |
# (M5) 5. Jun 2011 | |
# tr command added to remove the trailing newline from the sha1 calculation | |
# Thanks to Reinard Max for the fix | |
# | |
# (M6) 26. Aug 2011 | |
# Modified to work on BSD as well as Linux, and take the interface as $1 | |
# | |
PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin:/sbin | |
debug=0 | |
USE_NTPQ=1 | |
NTPSERVER=pool.ntp.org | |
test -z $1 && echo "Usage: $0 INTERFACE" && exit 1 | |
#(M4) | |
LC_ALL=C | |
export LC_ALL | |
#(M3) | |
if test $USE_NTPQ -eq 1 | |
then | |
if time=`ntpq -c rv | grep clock=` | |
then | |
test $debug -eq 1 && echo "$time" | |
firstpart=`echo $time | sed -e "s/clock=//" -e "s/ .*//" -e "s/\.//"` | |
else | |
echo "no local ntpd running" 1>&2 | |
exit 1 | |
fi | |
else | |
#(M1) | |
#(M2) | |
firstpart=`ntpdate -d -q $NTPSERVER 2>/dev/null | sed "/transmit timestamp/q" | | |
sed -n "/transmit time/s/^transmit timestamp: *\([^ ]*\) .*/\1/p" | | |
tr -d "."` | |
fi | |
secondpart=`ifconfig $1 | | |
egrep "inet6 (addr: )?fe80" | | |
sed -n "s/^.*fe80::\([0-9a-f\:]*\).*/\1/p" | | |
tr -d ":"` | |
#(M1) | |
if test -z "$firstpart" -o -z "$secondpart" | |
then | |
echo "$0: installation error: check if ntpdate and ifconfig is in search path" | |
exit 1 | |
fi | |
test $debug -eq 1 && echo "Firstpart: $firstpart" | |
test $debug -eq 1 && echo "Secondpart: $secondpart" | |
test $debug -eq 1 && echo "123456789o123456789o123456789o123456789o123456789o123456789o" | |
test $debug -eq 1 && echo ${firstpart}${secondpart} | sha1sum | |
#(M5) | |
globalid=`echo ${firstpart}${secondpart} | tr -d "\012" | sha1sum | cut -c31-40` | |
test $debug -eq 1 && echo $globalid | |
echo fd${globalid} | sed "s|\(....\)\(....\)\(....\)|\1:\2:\3::/48|" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment