22
33use netlink_packet_core:: {
44 DecodeError , Emitable , ErrorContext , Nla , NlaBuffer , NlasIterator ,
5- Parseable ,
5+ Parseable , ParseableParametrized ,
66} ;
77
88use super :: super :: {
99 InfoBond , InfoBridge , InfoGeneve , InfoGreTap , InfoGreTap6 , InfoGreTun ,
10- InfoGreTun6 , InfoGtp , InfoHsr , InfoIpVlan , InfoIpVtap , InfoIpoib , InfoKind ,
11- InfoMacSec , InfoMacVlan , InfoMacVtap , InfoSitTun , InfoTun , InfoVeth ,
12- InfoVlan , InfoVrf , InfoVti , InfoVxlan , InfoXfrm ,
10+ InfoGreTun6 , InfoGtp , InfoHsr , InfoIpTunnel , InfoIpVlan , InfoIpVtap ,
11+ InfoIpoib , InfoKind , InfoMacSec , InfoMacVlan , InfoMacVtap , InfoTun ,
12+ InfoVeth , InfoVlan , InfoVrf , InfoVti , InfoVxlan , InfoXfrm ,
1313} ;
1414
1515const IFLA_INFO_DATA : u16 = 2 ;
@@ -29,7 +29,7 @@ pub enum InfoData {
2929 MacVtap ( Vec < InfoMacVtap > ) ,
3030 GreTap ( Vec < InfoGreTap > ) ,
3131 GreTap6 ( Vec < InfoGreTap6 > ) ,
32- SitTun ( Vec < InfoSitTun > ) ,
32+ SitTun ( Vec < InfoIpTunnel > ) ,
3333 GreTun ( Vec < InfoGreTun > ) ,
3434 GreTun6 ( Vec < InfoGreTun6 > ) ,
3535 Vti ( Vec < InfoVti > ) ,
@@ -40,6 +40,7 @@ pub enum InfoData {
4040 MacSec ( Vec < InfoMacSec > ) ,
4141 Hsr ( Vec < InfoHsr > ) ,
4242 Geneve ( Vec < InfoGeneve > ) ,
43+ IpTunnel ( Vec < InfoIpTunnel > ) ,
4344 Other ( Vec < u8 > ) ,
4445}
4546
@@ -69,6 +70,7 @@ impl Nla for InfoData {
6970 Self :: Vti ( nlas) => nlas. as_slice ( ) . buffer_len ( ) ,
7071 Self :: Gtp ( nlas) => nlas. as_slice ( ) . buffer_len ( ) ,
7172 Self :: Geneve ( nlas) => nlas. as_slice ( ) . buffer_len ( ) ,
73+ Self :: IpTunnel ( nlas) => nlas. as_slice ( ) . buffer_len ( ) ,
7274 Self :: Other ( v) => v. len ( ) ,
7375 }
7476 }
@@ -98,6 +100,7 @@ impl Nla for InfoData {
98100 Self :: Vti ( nlas) => nlas. as_slice ( ) . emit ( buffer) ,
99101 Self :: Gtp ( nlas) => nlas. as_slice ( ) . emit ( buffer) ,
100102 Self :: Geneve ( nlas) => nlas. as_slice ( ) . emit ( buffer) ,
103+ Self :: IpTunnel ( nlas) => nlas. as_slice ( ) . emit ( buffer) ,
101104 Self :: Other ( v) => buffer. copy_from_slice ( v. as_slice ( ) ) ,
102105 }
103106 }
@@ -247,7 +250,8 @@ impl InfoData {
247250 let nla = & nla. context ( format ! (
248251 "invalid IFLA_INFO_DATA for {kind} {payload:?}"
249252 ) ) ?;
250- let parsed = InfoSitTun :: parse ( nla) ?;
253+ let parsed =
254+ InfoIpTunnel :: parse_with_param ( nla, kind. clone ( ) ) ?;
251255 v. push ( parsed) ;
252256 }
253257 InfoData :: SitTun ( v)
@@ -351,6 +355,18 @@ impl InfoData {
351355 }
352356 InfoData :: Hsr ( v)
353357 }
358+ InfoKind :: IpIp | InfoKind :: Ip6Tnl => {
359+ let mut v = Vec :: new ( ) ;
360+ for nla in NlasIterator :: new ( payload) {
361+ let nla = & nla. context ( format ! (
362+ "invalid IFLA_INFO_DATA for {kind} {payload:?}"
363+ ) ) ?;
364+ let parsed =
365+ InfoIpTunnel :: parse_with_param ( nla, kind. clone ( ) ) ?;
366+ v. push ( parsed) ;
367+ }
368+ InfoData :: IpTunnel ( v)
369+ }
354370 InfoKind :: Geneve => {
355371 let mut v = Vec :: new ( ) ;
356372 for nla in NlasIterator :: new ( payload) {
0 commit comments