diff --git a/src/net/mac.go b/src/net/mac.go index 53d5b2dbf596b4..e06ee4710fc613 100644 --- a/src/net/mac.go +++ b/src/net/mac.go @@ -36,8 +36,9 @@ func (a HardwareAddr) String() string { // 0000.5e00.5301 // 0200.5e10.0000.0001 // 0000.0000.fe80.0000.0000.0000.0200.5e10.0000.0001 +// 00005e005301 func ParseMAC(s string) (hw HardwareAddr, err error) { - if len(s) < 14 { + if len(s) < 12 { goto error } @@ -76,6 +77,14 @@ func ParseMAC(s string) (hw HardwareAddr, err error) { } x += 5 } + } else if len(s)%2 == 0 { + hw = make(HardwareAddr, len(s)/2) + for i := range hw { + var ok bool + if hw[i], ok = xtoi2(s[i*2:i*2+2], 0); !ok { + goto error + } + } } else { goto error } diff --git a/src/net/mac_test.go b/src/net/mac_test.go index cad884fcf5d42d..9bfad4f12e806f 100644 --- a/src/net/mac_test.go +++ b/src/net/mac_test.go @@ -19,11 +19,13 @@ var parseMACTests = []struct { {"00:00:5e:00:53:01", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""}, {"00-00-5e-00-53-01", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""}, {"0000.5e00.5301", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""}, + {"00005e005301", HardwareAddr{0x00, 0x00, 0x5e, 0x00, 0x53, 0x01}, ""}, // See RFC 7042, Section 2.2.2. {"02:00:5e:10:00:00:00:01", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""}, {"02-00-5e-10-00-00-00-01", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""}, {"0200.5e10.0000.0001", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""}, + {"02005e1000000001", HardwareAddr{0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01}, ""}, // See RFC 4391, Section 9.1.1. { @@ -53,6 +55,15 @@ var parseMACTests = []struct { }, "", }, + { + "00000000fe8000000000000002005e1000000001", + HardwareAddr{ + 0x00, 0x00, 0x00, 0x00, + 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x5e, 0x10, 0x00, 0x00, 0x00, 0x01, + }, + "", + }, {"ab:cd:ef:AB:CD:EF", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef}, ""}, {"ab:cd:ef:AB:CD:EF:ab:cd", HardwareAddr{0xab, 0xcd, 0xef, 0xab, 0xcd, 0xef, 0xab, 0xcd}, ""}, @@ -78,6 +89,7 @@ var parseMACTests = []struct { {"01:02-03-04-05-06", nil, "invalid MAC address"}, {"0123:4567:89AF", nil, "invalid MAC address"}, {"0123-4567-89AF", nil, "invalid MAC address"}, + {"0123456789AF0", nil, "invalid MAC address"}, } func TestParseMAC(t *testing.T) {