Skip to content

Commit 709a03b

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

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/link/link_info/iptunnel.rs

Lines changed: 17 additions & 17 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,14 +50,14 @@ 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),
5757
EncapFlags(TunnelEncapFlags),
5858
EncapSPort(u16),
5959
EncapDPort(u16),
60-
CollectMetada(bool),
60+
CollectMetadata(bool),
6161
FwMark(u32),
6262
Other(DefaultNla),
6363
}
@@ -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,
@@ -80,18 +81,17 @@ impl Nla for InfoIpTunnel {
8081
| EncapDPort(_)
8182
| Ipv6RdPrefixLen(_)
8283
| Ipv6RdRelayPrefixLen(_) => 2,
83-
Ttl(_) | Tos(_) | Protocol(_) | PMtuDisc(_) | CollectMetada(_)
84-
| EncapLimit(_) => 1,
84+
Ttl(_) | Tos(_) | Protocol(_) | PMtuDisc(_)
85+
| CollectMetadata(_) | EncapLimit(_) => 1,
8586
Other(nla) => nla.value_len(),
8687
}
8788
}
8889

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
}
@@ -117,7 +117,7 @@ impl Nla for InfoIpTunnel {
117117
}
118118
Protocol(value) => buffer[0] = u8::from(*value),
119119
Ttl(value) | Tos(value) | EncapLimit(value) => buffer[0] = *value,
120-
PMtuDisc(value) | CollectMetada(value) => {
120+
PMtuDisc(value) | CollectMetadata(value) => {
121121
buffer[0] = if *value { 1 } else { 0 }
122122
}
123123
Other(nla) => nla.emit_value(buffer),
@@ -145,7 +145,7 @@ impl Nla for InfoIpTunnel {
145145
EncapFlags(_) => IFLA_IPTUN_ENCAP_FLAGS,
146146
EncapSPort(_) => IFLA_IPTUN_ENCAP_SPORT,
147147
EncapDPort(_) => IFLA_IPTUN_ENCAP_DPORT,
148-
CollectMetada(_) => IFLA_IPTUN_COLLECT_METADATA,
148+
CollectMetadata(_) => IFLA_IPTUN_COLLECT_METADATA,
149149
FwMark(_) => IFLA_IPTUN_FWMARK,
150150
Other(nla) => nla.kind(),
151151
}
@@ -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
}
@@ -269,7 +269,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized>
269269
parse_u16_be(payload)
270270
.context("invalid IFLA_IPTUN_ENCAP_DPORT value")?,
271271
),
272-
IFLA_IPTUN_COLLECT_METADATA => CollectMetada(
272+
IFLA_IPTUN_COLLECT_METADATA => CollectMetadata(
273273
parse_u8(payload)
274274
.context("invalid IFLA_IPTUN_COLLECT_METADATA value")?
275275
> 0,

0 commit comments

Comments
 (0)