forked from usnistgov/ndn-dpdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathid.go
More file actions
39 lines (32 loc) · 676 Bytes
/
id.go
File metadata and controls
39 lines (32 loc) · 676 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package iface
import (
"math/rand/v2"
"go.uber.org/zap"
)
// ID identifies a face.
// Zero ID is invalid.
type ID uint16
// ID limits.
const (
MinID = 0x1000
MaxID = 0xEFFF
)
// AllocID allocates a random ID.
// Warning: endless loop if all possible IDs are used up.
func AllocID() (id ID) {
for !id.Valid() || gFaces[id] != nil {
id = ID(rand.Uint32())
}
return id
}
// Valid determines whether id is valid.
func (id ID) Valid() bool {
return id >= MinID && id <= MaxID
}
// ZapField returns a zap.Field for logging.
func (id ID) ZapField(key string) zap.Field {
if !id.Valid() {
return zap.String(key, "invalid")
}
return zap.Uint16(key, uint16(id))
}