Boardinfo rcd script » History » Version 1
Oleksandr Rybalko, 05/28/2012 09:35 AM
| 1 | 1 | Oleksandr Rybalko | h1. Boardinfo rcd script |
|---|---|---|---|
| 2 | 1 | Oleksandr Rybalko | |
| 3 | 1 | Oleksandr Rybalko | Allow to fetch and preset some early items, like set MAC address. |
| 4 | 1 | Oleksandr Rybalko | |
| 5 | 1 | Oleksandr Rybalko | D-Link DIR-632 example: |
| 6 | 1 | Oleksandr Rybalko | <pre> |
| 7 | 1 | Oleksandr Rybalko | #!/bin/sh |
| 8 | 1 | Oleksandr Rybalko | |
| 9 | 1 | Oleksandr Rybalko | # BEFORE: ADAPTATION |
| 10 | 1 | Oleksandr Rybalko | # PROVIDE: boardinfo |
| 11 | 1 | Oleksandr Rybalko | |
| 12 | 1 | Oleksandr Rybalko | . /etc/rc.subr |
| 13 | 1 | Oleksandr Rybalko | . /etc/network.subr |
| 14 | 1 | Oleksandr Rybalko | |
| 15 | 1 | Oleksandr Rybalko | name="boardinfo" |
| 16 | 1 | Oleksandr Rybalko | start_cmd="boardinfo_start" |
| 17 | 1 | Oleksandr Rybalko | |
| 18 | 1 | Oleksandr Rybalko | boardinfo_start() |
| 19 | 1 | Oleksandr Rybalko | { |
| 20 | 1 | Oleksandr Rybalko | |
| 21 | 1 | Oleksandr Rybalko | BASEMAC=`dd if=/dev/map/MAC bs=4 skip=1 count=5 2> /dev/null` |
| 22 | 1 | Oleksandr Rybalko | |
| 23 | 1 | Oleksandr Rybalko | BASEMACVNDR=`echo ${BASEMAC} | sed -E 's/\:.{2}\:.{2}\:.{2}$//'` |
| 24 | 1 | Oleksandr Rybalko | BASEMACDEV=`echo ${BASEMAC} | sed -E 's/.{2}\:.{2}\:.{2}\://; s/\://g; s/^/0x/'` |
| 25 | 1 | Oleksandr Rybalko | |
| 26 | 1 | Oleksandr Rybalko | WANMACDEV=$((${BASEMACDEV} + 1)) |
| 27 | 1 | Oleksandr Rybalko | WLANMACDEV=$((${BASEMACDEV} + 2)) |
| 28 | 1 | Oleksandr Rybalko | |
| 29 | 1 | Oleksandr Rybalko | WANMAC=`printf "${BASEMACVNDR}:%02x:%02x:%02x" $(( (${WANMACDEV} >> 16 ) & 0xff )) $(( (${WANMACDEV} >> 8 ) & 0xff )) $(( ${WANMACDEV} & 0xff ))` |
| 30 | 1 | Oleksandr Rybalko | WLANMAC=`printf "${BASEMACVNDR}:%02x:%02x:%02x" $(( (${WLANMACDEV} >> 16 ) & 0xff )) $(( (${WLANMACDEV} >> 8 ) & 0xff )) $(( ${WLANMACDEV} & 0xff ))` |
| 31 | 1 | Oleksandr Rybalko | |
| 32 | 1 | Oleksandr Rybalko | kenv BASE_MAC_ADDR="${BASEMAC}" |
| 33 | 1 | Oleksandr Rybalko | kenv LAN_MAC_ADDR="${BASEMAC}" |
| 34 | 1 | Oleksandr Rybalko | kenv WAN_MAC_ADDR="${WANMAC}" |
| 35 | 1 | Oleksandr Rybalko | kenv WLAN_MAC_ADDR="${WLANMAC}" |
| 36 | 1 | Oleksandr Rybalko | echo "Using default board MAC address \"${BASEMAC}\"" |
| 37 | 1 | Oleksandr Rybalko | } |
| 38 | 1 | Oleksandr Rybalko | |
| 39 | 1 | Oleksandr Rybalko | load_rc_config $name |
| 40 | 1 | Oleksandr Rybalko | |
| 41 | 1 | Oleksandr Rybalko | run_rc_command $* |
| 42 | 1 | Oleksandr Rybalko | </pre> |
| 43 | 1 | Oleksandr Rybalko | |
| 44 | 1 | Oleksandr Rybalko | 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. |