Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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|"
Add Comment
Please, Sign In to add comment