diff options
| author | Darren Hart <dvhart@linux.intel.com> | 2012-01-26 10:39:01 -0800 |
|---|---|---|
| committer | Darren Hart <dvhart@linux.intel.com> | 2012-02-03 09:25:18 -0800 |
| commit | c42364375acb28f0f23867e3a24c9ae25beced37 (patch) | |
| tree | 5c5c7d1519d04076f11f89de51e70a1d69acbaa9 | |
| parent | 7b1d216a133d3df4597c336e3a6c3c941e69989a (diff) | |
| download | meta-intel-c42364375acb28f0f23867e3a24c9ae25beced37.tar.gz | |
genmac: Replace RANDOM_MAC in network/interfaces with a randomly generated MAC
For machines that do not have a MAC in hardware and with drivers that don't
generate a random one in the kernel, this init script will replace the string
RANDOM_MAC in the network/interfaces file with one generated with "ranpwd -m".
Care is taken to ensure multiple interfaces can use RANDOM_MAC and receive
unique addresses. ranpwd generates MACs with the locally administered bit set
and the multicast bit disabled.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Signed-off-by: Joshua Lock <josh@linux.intel.com>
| -rw-r--r-- | meta-sys940x/recipes-bsp/genmac/files/genmac | 46 | ||||
| -rw-r--r-- | meta-sys940x/recipes-bsp/genmac/genmac.bb | 30 |
2 files changed, 76 insertions, 0 deletions
diff --git a/meta-sys940x/recipes-bsp/genmac/files/genmac b/meta-sys940x/recipes-bsp/genmac/files/genmac new file mode 100644 index 00000000..1899e95f --- /dev/null +++ b/meta-sys940x/recipes-bsp/genmac/files/genmac | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | ### BEGIN INIT INFO | ||
| 3 | # Provides: Random MAC address generator | ||
| 4 | # Required-Start: $syslog | ||
| 5 | # Required-Stop: $syslog | ||
| 6 | # Default-Start: 2 3 4 5 | ||
| 7 | # Default-Stop: 0 1 6 | ||
| 8 | # Short-Description: Set a random MAC for tagged interfaces | ||
| 9 | # Description: Set a random MAC for interfaces with RANDOM_MAC | ||
| 10 | ### END INIT INFO | ||
| 11 | |||
| 12 | # Author: Darren Hart <dvhart@linux.intel.com> | ||
| 13 | # Based on /etc/init.d/skeleton | ||
| 14 | |||
| 15 | PATH=/sbin:/usr/sbin:/bin:/usr/bin | ||
| 16 | DESC="Set a random MAC for tagged interfaces" | ||
| 17 | NAME=genmac | ||
| 18 | RANPWD=`which ranpwd` | ||
| 19 | SCRIPTNAME=/etc/init.d/$NAME | ||
| 20 | |||
| 21 | # Exit if ranpwd is not installed | ||
| 22 | [ -x "$RANPWD" ] || exit 0 | ||
| 23 | |||
| 24 | do_start() { | ||
| 25 | # Replace every occurence of RANDOM_MAC with a unique locally | ||
| 26 | # administered, unicast, randomly generated MAC address. | ||
| 27 | while grep -q RANDOM_MAC /etc/network/interfaces; do | ||
| 28 | sed -i "1,/RANDOM_MAC/s/RANDOM_MAC/$($RANPWD -m)/" /etc/network/interfaces | ||
| 29 | done | ||
| 30 | } | ||
| 31 | |||
| 32 | case "$1" in | ||
| 33 | start) | ||
| 34 | echo "$NAME: Setting random MAC addresses" | ||
| 35 | do_start | ||
| 36 | ;; | ||
| 37 | stop) | ||
| 38 | ;; | ||
| 39 | *) | ||
| 40 | echo "Usage: $SCRIPTNAME {start|stop}" >&2 | ||
| 41 | exit 3 | ||
| 42 | ;; | ||
| 43 | esac | ||
| 44 | |||
| 45 | exit 0 | ||
| 46 | |||
diff --git a/meta-sys940x/recipes-bsp/genmac/genmac.bb b/meta-sys940x/recipes-bsp/genmac/genmac.bb new file mode 100644 index 00000000..56849b46 --- /dev/null +++ b/meta-sys940x/recipes-bsp/genmac/genmac.bb | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | SUMMARY = "Provide a basic init script to generate a random MAC" | ||
| 2 | DESCRIPTION = "Set the MAC from the config file." | ||
| 3 | SECTION = "base" | ||
| 4 | LICENSE = "MIT" | ||
| 5 | LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58" | ||
| 6 | |||
| 7 | PR = "r0" | ||
| 8 | |||
| 9 | inherit update-rc.d | ||
| 10 | |||
| 11 | RDEPENDS_${PN} = "ranpwd" | ||
| 12 | |||
| 13 | SRC_URI = "file://genmac" | ||
| 14 | |||
| 15 | INITSCRIPT_NAME = "genmac" | ||
| 16 | # Run as early as possible to ensure we are before the networking scripts | ||
| 17 | INITSCRIPT_PARAMS = "start 39 S ." | ||
| 18 | |||
| 19 | do_install() { | ||
| 20 | install -d ${D}${sysconfdir} \ | ||
| 21 | ${D}${sysconfdir}/init.d | ||
| 22 | install -m 0755 ${WORKDIR}/${INITSCRIPT_NAME} ${D}${sysconfdir}/init.d | ||
| 23 | cat ${WORKDIR}/${INITSCRIPT_NAME} | \ | ||
| 24 | sed -e 's,/etc,${sysconfdir},g' \ | ||
| 25 | -e 's,/usr/sbin,${sbindir},g' \ | ||
| 26 | -e 's,/var,${localstatedir},g' \ | ||
| 27 | -e 's,/usr/bin,${bindir},g' \ | ||
| 28 | -e 's,/usr,${prefix},g' > ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME} | ||
| 29 | chmod 755 ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME} | ||
| 30 | } | ||
