-
Notifications
You must be signed in to change notification settings - Fork 36
/
example_neigh_list_test.go
50 lines (42 loc) · 942 Bytes
/
example_neigh_list_test.go
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
40
41
42
43
44
45
46
47
48
49
50
//go:build linux
// +build linux
package rtnetlink_test
import (
"log"
"net"
"github.com/jsimonetti/rtnetlink/v2"
"golang.org/x/sys/unix"
)
// List all neighbors on interface 'lo'
func Example_listNeighbors() {
// Gather the interface Index
iface, _ := net.InterfaceByName("lo")
// Get an ip address to add to the interface
family := uint8(unix.AF_INET)
// Dial a connection to the rtnetlink socket
conn, err := rtnetlink.Dial(nil)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
// Request all neighbors
msg, err := conn.Neigh.List()
if err != nil {
log.Fatal(err)
}
// Filter neighbors by family and interface index
var neigh []rtnetlink.NeighMessage
for _, v := range msg {
add := true
if iface != nil && v.Index != uint32(iface.Index) {
add = false
}
if family != 0 && v.Family != uint16(family) {
add = false
}
if add {
neigh = append(neigh, v)
}
}
log.Printf("%#v", neigh)
}