diff options
Diffstat (limited to 'src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go')
-rw-r--r-- | src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go index 97776e044dc..1fb685facc1 100644 --- a/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go +++ b/src/mongo/gotools/src/github.com/mongodb/mongo-tools/vendor/github.com/google/gopacket/macs/gen.go @@ -15,6 +15,7 @@ package main import ( "bufio" + "bytes" "encoding/hex" "flag" "fmt" @@ -22,6 +23,7 @@ import ( "net/http" "os" "regexp" + "sort" "time" ) @@ -40,13 +42,25 @@ package macs // ValidMACPrefixMap maps a valid MAC address prefix to the name of the // organization that owns the rights to use it. We map it to a hidden // variable so it won't show up in godoc, since it's a very large map. -var ValidMACPrefixMap map[[3]byte]string= validMACPrefixMap +var ValidMACPrefixMap = validMACPrefixMap var validMACPrefixMap = map[[3]byte]string{ ` -var url = flag.String("url", "http://standards.ieee.org/develop/regauth/oui/oui.txt", "URL to fetch MACs from") +var url = flag.String("url", "http://standards-oui.ieee.org/oui/oui.txt", "URL to fetch MACs from") + +type mac struct { + prefix [3]byte + company string +} + +type macs []mac + +func (m macs) Len() int { return len(m) } +func (m macs) Less(i, j int) bool { return bytes.Compare(m[i].prefix[:], m[j].prefix[:]) < 0 } +func (m macs) Swap(i, j int) { m[i], m[j] = m[j], m[i] } func main() { + flag.Parse() fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url) resp, err := http.Get(*url) if err != nil { @@ -54,9 +68,8 @@ func main() { } defer resp.Body.Close() buffered := bufio.NewReader(resp.Body) - finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*)`) - fmt.Fprintln(os.Stderr, "Starting write to standard output") - fmt.Printf(header, time.Now(), *url) + finder := regexp.MustCompile(`^\s*([0-9A-F]{6})\s+\(base 16\)\s+(.*\S)`) + got := macs{} for { line, err := buffered.ReadString('\n') if err == io.EOF { @@ -65,14 +78,22 @@ func main() { panic(err) } if matches := finder.FindStringSubmatch(line); matches != nil { - bytes := make([]byte, 3) - hex.Decode(bytes, []byte(matches[1])) + var prefix [3]byte + hex.Decode(prefix[:], []byte(matches[1])) company := matches[2] if company == "" { company = "PRIVATE" } - fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", bytes[0], bytes[1], bytes[2], company) + fmt.Fprint(os.Stderr, "*") + got = append(got, mac{prefix: prefix, company: company}) } } + fmt.Fprintln(os.Stderr, "\nSorting macs") + sort.Sort(got) + fmt.Fprintln(os.Stderr, "Starting write to standard output") + fmt.Printf(header, time.Now(), *url) + for _, m := range got { + fmt.Printf("\t[3]byte{%d, %d, %d}: %q,\n", m.prefix[0], m.prefix[1], m.prefix[2], m.company) + } fmt.Println("}") } |