Files
weave-scope/vendor/github.com/google/gopacket/macs/gen.go
2015-10-26 16:53:21 +00:00

79 lines
2.0 KiB
Go

// Copyright 2012 Google, Inc. All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree.
// +build ignore
// This binary pulls the list of known MAC
// prefixes from IEEE and writes them out to a go file which is compiled
// into gopacket. It should be run as follows:
//
// go run gen.go | gofmt > valid_mac_prefixes.go
package main
import (
"bufio"
"encoding/hex"
"flag"
"fmt"
"io"
"net/http"
"os"
"regexp"
"time"
)
const header = `// Copyright 2012 Google, Inc. All rights reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree.
package macs
// Created by gen.go, don't edit manually
// Generated at %s
// Fetched from %q
// 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 = map[[3]byte]string{
`
var url = flag.String("url", "http://standards.ieee.org/develop/regauth/oui/oui.txt", "URL to fetch MACs from")
func main() {
fmt.Fprintf(os.Stderr, "Fetching MACs from %q\n", *url)
resp, err := http.Get(*url)
if err != nil {
panic(err)
}
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)
for {
line, err := buffered.ReadString('\n')
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
if matches := finder.FindStringSubmatch(line); matches != nil {
bytes := make([]byte, 3)
hex.Decode(bytes, []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.Println("}")
}