You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.9 KiB
60 lines
1.9 KiB
package detect
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type Wwn struct {
|
|
Naa uint64 `json:"naa"`
|
|
Oui uint64 `json:"oui"`
|
|
Id uint64 `json:"id"`
|
|
VendorCode string `json:"vendor_code"`
|
|
}
|
|
|
|
// this is an incredibly basic converter, that only works for "Registered" IEEE format - NAA5
|
|
// https://standards.ieee.org/content/dam/ieee-standards/standards/web/documents/tutorials/fibre.pdf
|
|
// references:
|
|
// - https://metacpan.org/pod/Device::WWN
|
|
// - https://en.wikipedia.org/wiki/World_Wide_Name
|
|
// - https://storagemeat.blogspot.com/2012/08/decoding-wwids-or-how-to-tell-whats-what.html
|
|
// - https://bryanchain.com/2016/01/20/breaking-down-an-naa-id-world-wide-name/
|
|
|
|
/*
|
|
+----------+---+---+---+---+---+---+---+---+
|
|
| Byte/Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|
|
+----------+---+---+---+---+---+---+---+---+
|
|
| 0 | NAA (5h) | (MSB) |
|
|
+----------+---------------+ +
|
|
| 1 | |
|
|
+----------+ IEEE OUI |
|
|
| 2 | |
|
|
+----------+ +---------------+
|
|
| 3 | (LSB) | (MSB) |
|
|
+----------+---------------+ +
|
|
| 4 | |
|
|
| | |
|
|
+----------+ |
|
|
| 5 | Vendor ID |
|
|
+----------+ |
|
|
| 6 | |
|
|
+----------+ |
|
|
| 7 | (LSB) |
|
|
+----------+-------------------------------+
|
|
|
|
|
|
*/
|
|
|
|
func (wwn *Wwn) ToString() string {
|
|
|
|
var wwnBuffer uint64
|
|
|
|
wwnBuffer = wwn.Id //start with vendor ID
|
|
wwnBuffer += (wwn.Oui << 36) //add left-shifted OUI
|
|
wwnBuffer += (wwn.Naa << 60) //NAA is a number from 1-6, so decimal == hex.
|
|
|
|
//TODO: may need to support additional versions in the future.
|
|
|
|
return strings.ToLower(fmt.Sprintf("%#x", wwnBuffer))
|
|
}
|