...
1
2
3
4
5
6
7
8
9
10 package routebsd
11
12 import (
13 "errors"
14 "syscall"
15 )
16
17 var (
18 errMessageMismatch = errors.New("message mismatch")
19 errMessageTooShort = errors.New("message too short")
20 errInvalidMessage = errors.New("invalid message")
21 errInvalidAddr = errors.New("invalid address")
22 )
23
24
25
26
27
28 func fetchRIB(typ, arg int) ([]byte, error) {
29 try := 0
30 for {
31 try++
32 b, err := syscall.RouteRIB(typ, arg)
33
34
35
36
37 const maxTries = 3
38 if err == syscall.ENOMEM && try < maxTries {
39 continue
40 }
41
42 return b, err
43 }
44 }
45
46
47
48
49 func FetchRIBMessages(typ, arg int) ([]Message, error) {
50 b, err := fetchRIB(typ, arg)
51 if err != nil {
52 return nil, err
53 }
54 ms, err := parseRIB(b)
55 if err != nil {
56 return nil, err
57 }
58 return ms, nil
59 }
60
View as plain text