package net
const hexDigit = "0123456789abcdef"
type HardwareAddr []byte
func ( HardwareAddr) () string {
if len() == 0 {
return ""
}
:= make([]byte, 0, len()*3-1)
for , := range {
if > 0 {
= append(, ':')
}
= append(, hexDigit[>>4])
= append(, hexDigit[&0xF])
}
return string()
}
func ( string) ( HardwareAddr, error) {
if len() < 14 {
goto
}
if [2] == ':' || [2] == '-' {
if (len()+1)%3 != 0 {
goto
}
:= (len() + 1) / 3
if != 6 && != 8 && != 20 {
goto
}
= make(HardwareAddr, )
for , := 0, 0; < ; ++ {
var bool
if [], = xtoi2([:], [2]); ! {
goto
}
+= 3
}
} else if [4] == '.' {
if (len()+1)%5 != 0 {
goto
}
:= 2 * (len() + 1) / 5
if != 6 && != 8 && != 20 {
goto
}
= make(HardwareAddr, )
for , := 0, 0; < ; += 2 {
var bool
if [], = xtoi2([:+2], 0); ! {
goto
}
if [+1], = xtoi2([+2:], [4]); ! {
goto
}
+= 5
}
} else {
goto
}
return , nil
:
return nil, &AddrError{Err: "invalid MAC address", Addr: }
}