[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