@@ -8,7 +8,7 @@ use netlink_packet_utils::{Emitable, Parseable};
8
8
use crate :: link:: {
9
9
InfoData , InfoIpTunnel , InfoKind , LinkAttribute , LinkFlags , LinkHeader ,
10
10
LinkInfo , LinkLayerType , LinkMessage , LinkMessageBuffer , TunnelEncapFlags ,
11
- TunnelEncapType , TunnelFlags ,
11
+ TunnelEncapType ,
12
12
} ;
13
13
14
14
use crate :: { AddressFamily , IpProtocol } ;
@@ -30,8 +30,8 @@ fn test_iptunnel_ipip_link_info() {
30
30
0x05 , 0x00 , 0x05 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x09 , 0x00 ,
31
31
0x04 , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x0a , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 ,
32
32
0x08 , 0x00 , 0x14 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x0f , 0x00 ,
33
- 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
34
- 0x06 , 0x00 , 0x12 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 ,
33
+ 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x0a , 0x00 , 0x00 ,
34
+ 0x06 , 0x00 , 0x12 , 0x00 , 0x00 , 0x0c , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 ,
35
35
0x00 , 0x00 , 0x00 , 0x00 , // data
36
36
] ;
37
37
@@ -59,8 +59,8 @@ fn test_iptunnel_ipip_link_info() {
59
59
InfoIpTunnel :: PMtuDisc ( true ) ,
60
60
InfoIpTunnel :: FwMark ( 0 ) ,
61
61
InfoIpTunnel :: EncapType ( TunnelEncapType :: None ) ,
62
- InfoIpTunnel :: EncapSPort ( 0 ) ,
63
- InfoIpTunnel :: EncapDPort ( 0 ) ,
62
+ InfoIpTunnel :: EncapSPort ( 10 ) ,
63
+ InfoIpTunnel :: EncapDPort ( 12 ) ,
64
64
InfoIpTunnel :: EncapFlags ( TunnelEncapFlags :: from_bits_retain( 0 ) ) ,
65
65
] ) ) ,
66
66
] ) ] ,
@@ -98,8 +98,8 @@ fn test_iptunnel_ipip6_link_info() {
98
98
0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x08 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 ,
99
99
0x05 , 0x00 , 0x09 , 0x00 , 0x04 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x14 , 0x00 ,
100
100
0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x0f , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
101
- 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x12 , 0x00 ,
102
- 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 ,
101
+ 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x0a , 0x00 , 0x00 , 0x06 , 0x00 , 0x12 , 0x00 ,
102
+ 0x00 , 0x0c , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 ,
103
103
0x00 , //data
104
104
] ;
105
105
@@ -124,12 +124,12 @@ fn test_iptunnel_ipip6_link_info() {
124
124
InfoIpTunnel :: Ttl ( 64 ) ,
125
125
InfoIpTunnel :: EncapLimit ( 4 ) ,
126
126
InfoIpTunnel :: FlowInfo ( 0 ) ,
127
- InfoIpTunnel :: Flags ( TunnelFlags :: from_bits_retain ( 0x30000 ) ) ,
127
+ InfoIpTunnel :: Ipv6Flags ( 0x30000 ) ,
128
128
InfoIpTunnel :: Protocol ( IpProtocol :: Ipip ) ,
129
129
InfoIpTunnel :: FwMark ( 0 ) ,
130
130
InfoIpTunnel :: EncapType ( TunnelEncapType :: None ) ,
131
- InfoIpTunnel :: EncapSPort ( 0 ) ,
132
- InfoIpTunnel :: EncapDPort ( 0 ) ,
131
+ InfoIpTunnel :: EncapSPort ( 10 ) ,
132
+ InfoIpTunnel :: EncapDPort ( 12 ) ,
133
133
InfoIpTunnel :: EncapFlags ( TunnelEncapFlags :: from_bits_retain( 0 ) ) ,
134
134
] ) ) ,
135
135
] ) ] ,
@@ -167,8 +167,8 @@ fn test_iptunnel_ip6ip6_link_info() {
167
167
0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x08 , 0x00 , 0x00 , 0x00 , 0x03 , 0x00 ,
168
168
0x05 , 0x00 , 0x09 , 0x00 , 0x29 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x14 , 0x00 ,
169
169
0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x0f , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
170
- 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x12 , 0x00 ,
171
- 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 ,
170
+ 0x06 , 0x00 , 0x11 , 0x00 , 0x00 , 0x0a , 0x00 , 0x00 , 0x06 , 0x00 , 0x12 , 0x00 ,
171
+ 0x00 , 0x0c , 0x00 , 0x00 , 0x06 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 ,
172
172
0x00 , // data
173
173
] ;
174
174
@@ -193,12 +193,12 @@ fn test_iptunnel_ip6ip6_link_info() {
193
193
InfoIpTunnel :: Ttl ( 64 ) ,
194
194
InfoIpTunnel :: EncapLimit ( 4 ) ,
195
195
InfoIpTunnel :: FlowInfo ( 0 ) ,
196
- InfoIpTunnel :: Flags ( TunnelFlags :: from_bits_retain ( 0x30000 ) ) ,
196
+ InfoIpTunnel :: Ipv6Flags ( 0x30000 ) ,
197
197
InfoIpTunnel :: Protocol ( IpProtocol :: Ipv6 ) ,
198
198
InfoIpTunnel :: FwMark ( 0 ) ,
199
199
InfoIpTunnel :: EncapType ( TunnelEncapType :: None ) ,
200
- InfoIpTunnel :: EncapSPort ( 0 ) ,
201
- InfoIpTunnel :: EncapDPort ( 0 ) ,
200
+ InfoIpTunnel :: EncapSPort ( 10 ) ,
201
+ InfoIpTunnel :: EncapDPort ( 12 ) ,
202
202
InfoIpTunnel :: EncapFlags ( TunnelEncapFlags :: from_bits_retain( 0 ) ) ,
203
203
] ) ) ,
204
204
] ) ] ,
@@ -215,3 +215,70 @@ fn test_iptunnel_ip6ip6_link_info() {
215
215
216
216
assert_eq ! ( buf, raw) ;
217
217
}
218
+
219
+ #[ test]
220
+ fn test_iptunnel_sit_link_info ( ) {
221
+ let raw: Vec < u8 > = vec ! [
222
+ 0x00 , 0x00 , // AF_UNSPEC, reserved
223
+ 0x00 , 0x03 , // LL type = IPTUNNEL (768)
224
+ 0x07 , 0x00 , 0x00 , 0x00 , // ifindex = 7
225
+ 0x90 , 0x00 , 0x00 , 0x00 , // flags = NoARP|POINTOPOINT
226
+ 0x00 , 0x00 , 0x00 , 0x00 , // change_mask = 0
227
+ // --- IFLA_LINK_INFO NLA (len=0x78, type=18) ---
228
+ 0x78 , 0x00 , 0x12 , 0x00 ,
229
+ // IFLA_INFO_KIND = "sit\0" (len=8, type=1)
230
+ 0x08 , 0x00 , 0x01 , 0x00 , b's' , b'i' , b't' , 0x00 , 0x6c , 0x00 , 0x02 , 0x00 ,
231
+ 0x08 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x02 , 0x00 ,
232
+ 0xc0 , 0xa8 , 0x7a , 0xb7 , 0x08 , 0x00 , 0x03 , 0x00 , 0x0a , 0xff , 0xfe , 0x02 ,
233
+ 0x05 , 0x00 , 0x04 , 0x00 , 0x40 , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x05 , 0x00 ,
234
+ 0x00 , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x0a , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 ,
235
+ 0x05 , 0x00 , 0x09 , 0x00 , 0x29 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x08 , 0x00 ,
236
+ 0x00 , 0x00 , 0x00 , 0x00 , 0x08 , 0x00 , 0x14 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
237
+ 0x06 , 0x00 , 0x0f , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x06 , 0x00 , 0x11 , 0x00 ,
238
+ 0x00 , 0x0a , 0x00 , 0x00 , 0x06 , 0x00 , 0x12 , 0x00 , 0x00 , 0x0c , 0x00 , 0x00 ,
239
+ 0x06 , 0x00 , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
240
+ ] ;
241
+
242
+ let expected = LinkMessage {
243
+ header : LinkHeader {
244
+ interface_family : AddressFamily :: Unspec ,
245
+ index : 7 ,
246
+ link_layer_type : LinkLayerType :: Tunnel ,
247
+ flags : LinkFlags :: Noarp | LinkFlags :: Pointopoint ,
248
+ change_mask : LinkFlags :: empty ( ) ,
249
+ } ,
250
+ attributes : vec ! [ LinkAttribute :: LinkInfo ( vec![
251
+ LinkInfo :: Kind ( InfoKind :: SitTun ) ,
252
+ LinkInfo :: Data ( InfoData :: SitTun ( vec![
253
+ InfoIpTunnel :: Link ( 0 ) ,
254
+ InfoIpTunnel :: Local ( std:: net:: IpAddr :: V4 (
255
+ Ipv4Addr :: from_str( "192.168.122.183" ) . unwrap( ) ,
256
+ ) ) ,
257
+ InfoIpTunnel :: Remote ( std:: net:: IpAddr :: V4 (
258
+ Ipv4Addr :: from_str( "10.255.254.2" ) . unwrap( ) ,
259
+ ) ) ,
260
+ InfoIpTunnel :: Ttl ( 64 ) ,
261
+ InfoIpTunnel :: Tos ( 0 ) ,
262
+ InfoIpTunnel :: PMtuDisc ( true ) ,
263
+ InfoIpTunnel :: Protocol ( IpProtocol :: Ipv6 ) ,
264
+ InfoIpTunnel :: Ipv6SitFlags ( 0 ) ,
265
+ InfoIpTunnel :: FwMark ( 0 ) ,
266
+ InfoIpTunnel :: EncapType ( TunnelEncapType :: None ) ,
267
+ InfoIpTunnel :: EncapSPort ( 10 ) ,
268
+ InfoIpTunnel :: EncapDPort ( 12 ) ,
269
+ InfoIpTunnel :: EncapFlags ( TunnelEncapFlags :: empty( ) ) ,
270
+ ] ) ) ,
271
+ ] ) ] ,
272
+ } ;
273
+
274
+ assert_eq ! (
275
+ expected,
276
+ LinkMessage :: parse( & LinkMessageBuffer :: new( & raw) ) . unwrap( )
277
+ ) ;
278
+
279
+ let mut buf = vec ! [ 0 ; expected. buffer_len( ) ] ;
280
+
281
+ expected. emit ( & mut buf) ;
282
+
283
+ assert_eq ! ( buf, raw) ;
284
+ }
0 commit comments