From: Matt Layher Date: Fri, 17 Jul 2015 21:28:42 +0000 (-0400) Subject: net: allow ParseMAC to parse 20-octet IPoIB link-layer address X-Git-Tag: go1.6beta1~1288 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=759210b96207ef51be401338781b2b05d84eea36;p=gostls13.git net: allow ParseMAC to parse 20-octet IPoIB link-layer address Fixes #11763 Change-Id: Ie291b36a8c29694e80940836d7e6fd96d2d76494 Reviewed-on: https://go-review.googlesource.com/12382 Reviewed-by: Mikio Hara Run-TryBot: Mikio Hara Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick --- diff --git a/src/net/mac.go b/src/net/mac.go index 8594a9146a..93f0b09121 100644 --- a/src/net/mac.go +++ b/src/net/mac.go @@ -24,14 +24,17 @@ func (a HardwareAddr) String() string { return string(buf) } -// ParseMAC parses s as an IEEE 802 MAC-48, EUI-48, or EUI-64 using one of the -// following formats: +// ParseMAC parses s as an IEEE 802 MAC-48, EUI-48, EUI-64, or a 20-octet +// IP over InfiniBand link-layer address using one of the following formats: // 01:23:45:67:89:ab // 01:23:45:67:89:ab:cd:ef +// 01:23:45:67:89:ab:cd:ef:00:00:01:23:45:67:89:ab:cd:ef:00:00 // 01-23-45-67-89-ab // 01-23-45-67-89-ab-cd-ef +// 01-23-45-67-89-ab-cd-ef-00-00-01-23-45-67-89-ab-cd-ef-00-00 // 0123.4567.89ab // 0123.4567.89ab.cdef +// 0123.4567.89ab.cdef.0000.0123.4567.89ab.cdef.0000 func ParseMAC(s string) (hw HardwareAddr, err error) { if len(s) < 14 { goto error @@ -42,7 +45,7 @@ func ParseMAC(s string) (hw HardwareAddr, err error) { goto error } n := (len(s) + 1) / 3 - if n != 6 && n != 8 { + if n != 6 && n != 8 && n != 20 { goto error } hw = make(HardwareAddr, n) @@ -58,7 +61,7 @@ func ParseMAC(s string) (hw HardwareAddr, err error) { goto error } n := 2 * (len(s) + 1) / 5 - if n != 6 && n != 8 { + if n != 6 && n != 8 && n != 20 { goto error } hw = make(HardwareAddr, n) diff --git a/src/net/mac_test.go b/src/net/mac_test.go index 0af0c014f5..1ec6b287ac 100644 --- a/src/net/mac_test.go +++ b/src/net/mac_test.go @@ -34,6 +34,30 @@ var parseMACTests = []struct { {"01:23:45:67:89:AB:CD:EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, {"01-23-45-67-89-AB-CD-EF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, {"0123.4567.89AB.CDEF", HardwareAddr{1, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, ""}, + { + "01:23:45:67:89:ab:cd:ef:00:00:01:23:45:67:89:ab:cd:ef:00:00", + HardwareAddr{ + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + }, + "", + }, + { + "01-23-45-67-89-ab-cd-ef-00-00-01-23-45-67-89-ab-cd-ef-00-00", + HardwareAddr{ + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + }, + "", + }, + { + "0123.4567.89ab.cdef.0000.0123.4567.89ab.cdef.0000", + HardwareAddr{ + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x00, 0x00, + }, + "", + }, } func TestParseMAC(t *testing.T) {