Boardinfo rcd script¶
Allow to fetch and preset some early items, like set MAC address.
D-Link DIR-632 example:
#!/bin/sh
# BEFORE: ADAPTATION
# PROVIDE: boardinfo
. /etc/rc.subr
. /etc/network.subr
name="boardinfo"
start_cmd="boardinfo_start"
boardinfo_start()
{
BASEMAC=`dd if=/dev/map/MAC bs=4 skip=1 count=5 2> /dev/null`
BASEMACVNDR=`echo ${BASEMAC} | sed -E 's/\:.{2}\:.{2}\:.{2}$//'`
BASEMACDEV=`echo ${BASEMAC} | sed -E 's/.{2}\:.{2}\:.{2}\://; s/\://g; s/^/0x/'`
WANMACDEV=$((${BASEMACDEV} + 1))
WLANMACDEV=$((${BASEMACDEV} + 2))
WANMAC=`printf "${BASEMACVNDR}:%02x:%02x:%02x" $(( (${WANMACDEV} >> 16 ) & 0xff )) $(( (${WANMACDEV} >> 8 ) & 0xff )) $(( ${WANMACDEV} & 0xff ))`
WLANMAC=`printf "${BASEMACVNDR}:%02x:%02x:%02x" $(( (${WLANMACDEV} >> 16 ) & 0xff )) $(( (${WLANMACDEV} >> 8 ) & 0xff )) $(( ${WLANMACDEV} & 0xff ))`
kenv BASE_MAC_ADDR="${BASEMAC}"
kenv LAN_MAC_ADDR="${BASEMAC}"
kenv WAN_MAC_ADDR="${WANMAC}"
kenv WLAN_MAC_ADDR="${WLANMAC}"
echo "Using default board MAC address \"${BASEMAC}\""
}
load_rc_config $name
run_rc_command $*
In this example, script read special block of flash (/dev/map/MAC), parse base MAC address from it, and calculate and introduce via kenv(1) MAC addresses for different purposes.