1
2
3
4
5 package routebsd
6
7 import (
8 "net/netip"
9 "reflect"
10 "syscall"
11 "testing"
12 )
13
14 type parseAddrsOnDarwinTest struct {
15 attrs uint
16 b []byte
17 as []Addr
18 }
19
20 var parseAddrsOnDarwinLittleEndianTests = []parseAddrsOnDarwinTest{
21 {
22 syscall.RTA_DST | syscall.RTA_GATEWAY | syscall.RTA_NETMASK,
23 []byte{
24 0x10, 0x2, 0x0, 0x0, 0xc0, 0xa8, 0x56, 0x0,
25 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
26
27 0x14, 0x12, 0x4, 0x0, 0x6, 0x0, 0x0, 0x0,
28 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
29 0x0, 0x0, 0x0, 0x0,
30
31 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
32 },
33 []Addr{
34 &InetAddr{IP: netip.AddrFrom4([4]byte{192, 168, 86, 0})},
35 &LinkAddr{Index: 4},
36 &InetAddr{IP: netip.AddrFrom4([4]byte{255, 255, 255, 255})},
37 nil,
38 nil,
39 nil,
40 nil,
41 nil,
42 },
43 },
44 {
45 syscall.RTA_DST | syscall.RTA_GATEWAY | syscall.RTA_NETMASK,
46 []byte{
47 0x10, 0x02, 0x00, 0x00, 0x64, 0x71, 0x00, 0x00,
48 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
49
50 0x14, 0x12, 0x21, 0x00, 0x01, 0x08, 0x00, 0x00,
51 0x75, 0x74, 0x75, 0x6e, 0x34, 0x33, 0x31, 0x39,
52 0x00, 0x00, 0x00, 0x00,
53
54 0x06, 0x02, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
55 },
56 []Addr{
57 &InetAddr{IP: netip.AddrFrom4([4]byte{100, 113, 0, 0})},
58 &LinkAddr{Index: 33, Name: "utun4319"},
59 &InetAddr{IP: netip.AddrFrom4([4]byte{255, 255, 0, 0})},
60 nil,
61 nil,
62 nil,
63 nil,
64 nil,
65 },
66 },
67
68
69 {
70 syscall.RTA_DST | syscall.RTA_GATEWAY | syscall.RTA_NETMASK,
71 []byte{
72 0x1c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0xfd, 0x84, 0x1b, 0x4e, 0x62, 0x81, 0x00, 0x00,
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
75 0x00, 0x00, 0x00, 0x00,
76
77 0x1c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
78 0xfe, 0x80, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00,
79 0xf2, 0x2f, 0x4b, 0xff, 0xfe, 0x09, 0x3b, 0xff,
80 0x00, 0x00, 0x00, 0x00,
81
82 0x0e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
83 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
84 },
85 []Addr{
86 &InetAddr{IP: netip.AddrFrom16([16]byte{0xfd, 0x84, 0x1b, 0x4e, 0x62, 0x81})},
87 &InetAddr{IP: netip.AddrFrom16([16]byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x2f, 0x4b, 0xff, 0xfe, 0x09, 0x3b, 0xff})},
88 &InetAddr{IP: netip.AddrFrom16([16]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff})},
89 nil,
90 nil,
91 nil,
92 nil,
93 nil,
94 },
95 },
96
97 {
98 syscall.RTA_DST | syscall.RTA_GATEWAY | syscall.RTA_NETMASK,
99 []byte{
100 0x00, 0x1e, 0x00, 0x00,
101
102 0x1c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
103 0xfe, 0x80, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00,
104 0xf2, 0x2f, 0x4b, 0xff, 0xfe, 0x09, 0x3b, 0xff,
105 0x00, 0x00, 0x00, 0x00,
106
107 0x0e, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
108 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
109 },
110 []Addr{
111 &InetAddr{IP: netip.AddrFrom16([16]byte{})},
112 &InetAddr{IP: netip.AddrFrom16([16]byte{0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x2f, 0x4b, 0xff, 0xfe, 0x09, 0x3b, 0xff})},
113 &InetAddr{IP: netip.AddrFrom16([16]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff})},
114 nil,
115 nil,
116 nil,
117 nil,
118 nil,
119 },
120 },
121
122 {
123 syscall.RTA_DST | syscall.RTA_GATEWAY | syscall.RTA_NETMASK,
124 []byte{
125 0x84, 0x00, 0x05, 0x04, 0x01, 0x00, 0x00, 0x00, 0x03, 0x08, 0x00, 0x01, 0x15, 0x00, 0x00, 0x00,
126 0x1B, 0x01, 0x00, 0x00, 0xF5, 0x5A, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
127 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
128 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
129 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
130 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00,
131 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
132 0x14, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
133 0x00, 0x00, 0x00, 0x00,
134 },
135 []Addr{
136 &InetAddr{IP: netip.AddrFrom4([4]byte{0x0, 0x0, 0x0, 0x0})},
137 nil,
138 nil,
139 nil,
140 nil,
141 nil,
142 nil,
143 nil,
144 },
145 },
146 }
147
148 func TestParseAddrsOnDarwin(t *testing.T) {
149 tests := parseAddrsOnDarwinLittleEndianTests
150 if nativeEndian != littleEndian {
151 t.Skip("no test for non-little endian machine yet")
152 }
153
154 for i, tt := range tests {
155 as, err := parseAddrs(tt.attrs, tt.b)
156 if err != nil {
157 t.Error(i, err)
158 continue
159 }
160 if !reflect.DeepEqual(as, tt.as) {
161 t.Errorf("#%d: got %+v; want %+v", i, as, tt.as)
162 continue
163 }
164 }
165 }
166
View as plain text