[openwrt/openwrt] base-files: add functions to set or clear bit in MAC address

LEDE Commits lede-commits at lists.infradead.org
Wed Jul 8 17:23:01 EDT 2020


ynezz pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/dc61e3b7ffdc2e3873af238a9100d44ee685578c

commit dc61e3b7ffdc2e3873af238a9100d44ee685578c
Author: Sungbo Eo <mans0n at gorani.run>
AuthorDate: Sat Jan 25 23:06:07 2020 +0900

    base-files: add functions to set or clear bit in MAC address
    
    Some devices (e.g. Arduino Yun) need bitwise operations during MAC address
    setup. This commit adds generalized versions of macaddr_setbit_la(), which
    are helpful when manipulating a single bit in a MAC address.
    
    Signed-off-by: Sungbo Eo <mans0n at gorani.run>
---
 package/base-files/files/lib/functions/system.sh | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/package/base-files/files/lib/functions/system.sh b/package/base-files/files/lib/functions/system.sh
index c7aa7bf75c..f3c901ff79 100644
--- a/package/base-files/files/lib/functions/system.sh
+++ b/package/base-files/files/lib/functions/system.sh
@@ -152,10 +152,26 @@ macaddr_geteui() {
 	echo ${mac:9:2}$sep${mac:12:2}$sep${mac:15:2}
 }
 
-macaddr_setbit_la() {
+macaddr_setbit() {
+	local mac=$1
+	local bit=${2:-0}
+
+	[ $bit -gt 0 -a $bit -le 48 ] || return
+
+	printf "%012x" $(( 0x${mac//:/} | 2**(48-bit) )) | sed -e 's/\(.\{2\}\)/\1:/g' -e 's/:$//'
+}
+
+macaddr_unsetbit() {
 	local mac=$1
+	local bit=${2:-0}
+
+	[ $bit -gt 0 -a $bit -le 48 ] || return
 
-	printf "%02x:%s" $((0x${mac%%:*} | 0x02)) ${mac#*:}
+	printf "%012x" $(( 0x${mac//:/} & ~(2**(48-bit)) )) | sed -e 's/\(.\{2\}\)/\1:/g' -e 's/:$//'
+}
+
+macaddr_setbit_la() {
+	macaddr_setbit $1 7
 }
 
 macaddr_2bin() {



More information about the lede-commits mailing list