base-files: add macaddr_{add,2bin,setbit_la} helpers
[openwrt/staging/rmilecki.git] / package / base-files / files / lib / functions.sh
index 2022e8a3aa7b5e289f8f04bc2eb66bcecfafdcc3..a488f4dc01af370a74979f2a253d328ac9e7b7f6 100755 (executable)
@@ -274,6 +274,30 @@ mtd_get_mac_binary() {
        dd bs=1 skip=$offset count=6 if=$part 2>/dev/null | hexdump -v -n 6 -e '5/1 "%02x:" 1/1 "%02x"'
 }
 
+macaddr_add() {
+       local mac=$1
+       local val=$2
+       local oui=${mac%:*:*:*}
+       local nic=${mac#*:*:*:}
+
+       nic=$(printf "%06x" $((0x${nic//:/} + $val & 0xffffff)) | sed 's/^\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1:\2:\3/')
+       echo $oui:$nic
+}
+
+macaddr_setbit_la()
+{
+       local mac=$1
+
+       printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:}
+}
+
+macaddr_2bin()
+{
+       local mac=$1
+
+       echo -ne \\x${mac//:/\\x}
+}
+
 strtok() { # <string> { <variable> [<separator>] ... }
        local tmp
        local val="$1"