1
1
// SPDX-License-Identifier: MIT
2
2
3
- use std:: net:: { IpAddr , Ipv6Addr } ;
3
+ use std:: net:: { IpAddr , Ipv4Addr , Ipv6Addr } ;
4
4
5
5
use anyhow:: Context ;
6
6
use byteorder:: { BigEndian , ByteOrder , NativeEndian } ;
@@ -50,7 +50,7 @@ pub enum InfoIpTunnel {
50
50
Protocol ( IpProtocol ) ,
51
51
PMtuDisc ( bool ) ,
52
52
Ipv6RdPrefix ( Ipv6Addr ) ,
53
- Ipv6RdRelayPrefix ( Ipv6Addr ) ,
53
+ Ipv6RdRelayPrefix ( Ipv4Addr ) ,
54
54
Ipv6RdPrefixLen ( u16 ) ,
55
55
Ipv6RdRelayPrefixLen ( u16 ) ,
56
56
EncapType ( TunnelEncapType ) ,
@@ -66,7 +66,8 @@ impl Nla for InfoIpTunnel {
66
66
fn value_len ( & self ) -> usize {
67
67
use self :: InfoIpTunnel :: * ;
68
68
match self {
69
- Ipv6RdPrefix ( _) | Ipv6RdRelayPrefix ( _) => 16 ,
69
+ Ipv6RdPrefix ( _) => 16 ,
70
+ Ipv6RdRelayPrefix ( _) => 4 ,
70
71
Local ( value) | Remote ( value) => match value {
71
72
IpAddr :: V4 ( _) => 4 ,
72
73
IpAddr :: V6 ( _) => 16 ,
@@ -89,9 +90,8 @@ impl Nla for InfoIpTunnel {
89
90
fn emit_value ( & self , buffer : & mut [ u8 ] ) {
90
91
use self :: InfoIpTunnel :: * ;
91
92
match self {
92
- Ipv6RdPrefix ( value) | Ipv6RdRelayPrefix ( value) => {
93
- buffer. copy_from_slice ( & value. octets ( ) )
94
- }
93
+ Ipv6RdPrefix ( value) => buffer. copy_from_slice ( & value. octets ( ) ) ,
94
+ Ipv6RdRelayPrefix ( value) => buffer. copy_from_slice ( & value. octets ( ) ) ,
95
95
Link ( value) | FwMark ( value) | FlowInfo ( value) => {
96
96
NativeEndian :: write_u32 ( buffer, * value)
97
97
}
@@ -231,14 +231,14 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
231
231
}
232
232
}
233
233
IFLA_IPTUN_6RD_RELAY_PREFIX => {
234
- if payload. len ( ) == 16 {
235
- let mut data = [ 0u8 ; 16 ] ;
236
- data. copy_from_slice ( & payload[ 0 ..16 ] ) ;
237
- Self :: Ipv6RdRelayPrefix ( Ipv6Addr :: from ( data) )
234
+ if payload. len ( ) == 4 {
235
+ let mut data = [ 0u8 ; 4 ] ;
236
+ data. copy_from_slice ( & payload[ 0 ..4 ] ) ;
237
+ Self :: Ipv6RdRelayPrefix ( Ipv4Addr :: from ( data) )
238
238
} else {
239
239
return Err ( DecodeError :: from ( format ! (
240
240
"Invalid IFLA_IPTUN_6RD_RELAY_PREFIX, got unexpected \
241
- length of IPv6 address payload {payload:?}"
241
+ length of IPv4 address payload {payload:?}"
242
242
) ) ) ;
243
243
}
244
244
}
0 commit comments