[yocto] [pull-sys940x 3/4] genmac: Replace RANDOM_MAC in network/interfaces with a randomly generated MAC
William Mills
wmills at ti.com
Thu Feb 2 06:09:40 PST 2012
On 02/01/2012 05:26 PM, Darren Hart wrote:
> 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 at linux.intel.com>
> ---
> meta-sys940x/recipes-bsp/genmac/files/genmac | 46 ++++++++++++++++++++++++++
> meta-sys940x/recipes-bsp/genmac/genmac.bb | 30 +++++++++++++++++
> 2 files changed, 76 insertions(+), 0 deletions(-)
> create mode 100644 meta-sys940x/recipes-bsp/genmac/files/genmac
> create mode 100644 meta-sys940x/recipes-bsp/genmac/genmac.bb
>
> diff --git a/meta-sys940x/recipes-bsp/genmac/files/genmac b/meta-sys940x/recipes-bsp/genmac/files/genmac
> new file mode 100644
> index 0000000..6ca069c
> --- /dev/null
> +++ b/meta-sys940x/recipes-bsp/genmac/files/genmac
> @@ -0,0 +1,46 @@
> +#!/bin/sh
> +### BEGIN INIT INFO
> +# Provides: Random MAC address generator
> +# Required-Start: $syslog
> +# Required-Stop: $syslog
> +# Default-Start: 2 3 4 5
> +# Default-Stop: 0 1 6
> +# Short-Description: Set a random MAC for tagged interfaces
> +# Description: Set a random MAC for interfaces with RANDOM_MAC
> +### END INIT INFO
> +
> +# Author: Darren Hart<dvhart at linux.intel.com>
> +# Based on /etc/init.d/skeleton
> +
> +PATH=/sbin:/usr/sbin:/bin:/usr/bin
> +DESC="Set a random MAC for tagged interfaces"
> +NAME=genmac
> +RANPWD=`which ranpwd`
> +SCRIPTNAME=/etc/init.d/$NAME
> +
> +# Exit if amixer is not installed
> +[ -x "$RANPWD" ] || exit 0
> +
> +do_start() {
> + # Replace every occurance of RANDOM_MAC with a unique locally
> + # administered, unicast, randomly generated MAC address.
> + while grep -q RANDOM_MAC /etc/network/interfaces; do
> + sed -i "1,/RANDOM_MAC/s/RANDOM_MAC/$($RANPWD -m)/" /etc/network/interfaces
> + done
> +}
So on a non-volatile r/w filesystem this will assign a new random mac to
each interface on the first boot and reuse that MAC on each subsquent boot.
On a volatile r/w filesystem this will use a new MAC addr for each
boot. I guess thats better than nothing and not much to do on a
volatile system.
What does this do on a ro filesystem? No network? network with
0:0:0:0:0:0 MAC addr? (horror! but I suspect the kernel won't allow
that). Certainly this script failing should not cause the rest of boot
to fail.
More information about the yocto
mailing list