Skip to content

Commit

Permalink
net: allow ParseMAC to parse 20-octet IPoIB link-layer address
Browse files Browse the repository at this point in the history
Fixes golang#11763

Change-Id: Ie291b36a8c29694e80940836d7e6fd96d2d76494
Reviewed-on: https://go-review.googlesource.com/12382
Reviewed-by: Mikio Hara <[email protected]>
Run-TryBot: Mikio Hara <[email protected]>
Reviewed-by: Brad Fitzpatrick <[email protected]>
Run-TryBot: Brad Fitzpatrick <[email protected]>
  • Loading branch information
mdlayher authored and bradfitz committed Aug 24, 2015
1 parent f7dc4eb commit 759210b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 4 deletions.
11 changes: 7 additions & 4 deletions src/net/mac.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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)
Expand Down
24 changes: 24 additions & 0 deletions src/net/mac_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 759210b

Please sign in to comment.