Skip to content

Commit 0ee0180

Browse files
fixup! iptunnel: add support to ipip, ipip6 and ip6ip6 tunnels
1 parent 0528db3 commit 0ee0180

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/link/link_info/iptunnel.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// SPDX-License-Identifier: MIT
22

3-
use std::net::{IpAddr, Ipv6Addr};
3+
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
44

55
use anyhow::Context;
66
use byteorder::{BigEndian, ByteOrder, NativeEndian};
@@ -50,7 +50,7 @@ pub enum InfoIpTunnel {
5050
Protocol(IpProtocol),
5151
PMtuDisc(bool),
5252
Ipv6RdPrefix(Ipv6Addr),
53-
Ipv6RdRelayPrefix(Ipv6Addr),
53+
Ipv6RdRelayPrefix(Ipv4Addr),
5454
Ipv6RdPrefixLen(u16),
5555
Ipv6RdRelayPrefixLen(u16),
5656
EncapType(TunnelEncapType),
@@ -66,7 +66,8 @@ impl Nla for InfoIpTunnel {
6666
fn value_len(&self) -> usize {
6767
use self::InfoIpTunnel::*;
6868
match self {
69-
Ipv6RdPrefix(_) | Ipv6RdRelayPrefix(_) => 16,
69+
Ipv6RdPrefix(_) => 16,
70+
Ipv6RdRelayPrefix(_) => 4,
7071
Local(value) | Remote(value) => match value {
7172
IpAddr::V4(_) => 4,
7273
IpAddr::V6(_) => 16,
@@ -89,9 +90,8 @@ impl Nla for InfoIpTunnel {
8990
fn emit_value(&self, buffer: &mut [u8]) {
9091
use self::InfoIpTunnel::*;
9192
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()),
9595
Link(value) | FwMark(value) | FlowInfo(value) => {
9696
NativeEndian::write_u32(buffer, *value)
9797
}
@@ -231,14 +231,14 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
231231
}
232232
}
233233
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))
238238
} else {
239239
return Err(DecodeError::from(format!(
240240
"Invalid IFLA_IPTUN_6RD_RELAY_PREFIX, got unexpected \
241-
length of IPv6 address payload {payload:?}"
241+
length of IPv4 address payload {payload:?}"
242242
)));
243243
}
244244
}

0 commit comments

Comments
 (0)