123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package uuid
- import (
- "sync"
- )
- var (
- nodeMu sync.Mutex
- ifname string
- nodeID [6]byte
- zeroID [6]byte
- )
- func NodeInterface() string {
- defer nodeMu.Unlock()
- nodeMu.Lock()
- return ifname
- }
- func SetNodeInterface(name string) bool {
- defer nodeMu.Unlock()
- nodeMu.Lock()
- return setNodeInterface(name)
- }
- func setNodeInterface(name string) bool {
- iname, addr := getHardwareInterface(name)
- if iname != "" && addr != nil {
- ifname = iname
- copy(nodeID[:], addr)
- return true
- }
-
-
-
- if name == "" {
- ifname = "random"
- randomBits(nodeID[:])
- return true
- }
- return false
- }
- func NodeID() []byte {
- defer nodeMu.Unlock()
- nodeMu.Lock()
- if nodeID == zeroID {
- setNodeInterface("")
- }
- nid := nodeID
- return nid[:]
- }
- func SetNodeID(id []byte) bool {
- if len(id) < 6 {
- return false
- }
- defer nodeMu.Unlock()
- nodeMu.Lock()
- copy(nodeID[:], id)
- ifname = "user"
- return true
- }
- func (uuid UUID) NodeID() []byte {
- var node [6]byte
- copy(node[:], uuid[10:])
- return node[:]
- }
|