Skip to content

Commit

Permalink
fix compilation errors for other features
Browse files Browse the repository at this point in the history
  • Loading branch information
thvdveld committed Mar 18, 2024
1 parent 91ad44f commit c570346
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 12 deletions.
27 changes: 18 additions & 9 deletions src/iface/interface/ipv6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -315,16 +315,20 @@ impl InterfaceInner {
return HopByHopResponse::Discard(None);
}
Ipv6OptionFailureType::DiscardSendAll => {
return HopByHopResponse::Discard(
self.param_problem(ipv6_repr, ip_payload),
);
return HopByHopResponse::Discard(self.icmpv6_problem(
ipv6_repr,
ip_payload,
Icmpv6ParamProblem::UnrecognizedOption,
));
}
Ipv6OptionFailureType::DiscardSendUnicast
if !ipv6_repr.dst_addr.is_multicast() =>
{
return HopByHopResponse::Discard(
self.param_problem(ipv6_repr, ip_payload),
);
return HopByHopResponse::Discard(self.icmpv6_problem(
ipv6_repr,
ip_payload,
Icmpv6ParamProblem::UnrecognizedOption,
));
}
_ => unreachable!(),
}
Expand Down Expand Up @@ -373,7 +377,11 @@ impl InterfaceInner {
#[cfg(feature = "socket-raw")]
_ if handled_by_raw_socket => None,

_ => self.param_problem(ipv6_repr, ip_payload),
_ => self.icmpv6_problem(
ipv6_repr,
ip_payload,
Icmpv6ParamProblem::UnrecognizedNxtHdr,
),
}
}

Expand Down Expand Up @@ -711,17 +719,18 @@ impl InterfaceInner {
Some(Packet::Ipv6(p))
}

fn param_problem<'frame>(
fn icmpv6_problem<'frame>(
&self,
ipv6_repr: Ipv6Repr,
ip_payload: &'frame [u8],
reason: Icmpv6ParamProblem,
) -> Option<Packet<'frame>> {
let payload_len =
icmp_reply_payload_len(ip_payload.len(), IPV6_MIN_MTU, ipv6_repr.buffer_len());
self.icmpv6_reply(
ipv6_repr,
Icmpv6Repr::ParamProblem {
reason: Icmpv6ParamProblem::UnrecognizedOption,
reason,
pointer: ipv6_repr.buffer_len() as u32,
header: ipv6_repr,
data: &ip_payload[0..payload_len],
Expand Down
2 changes: 1 addition & 1 deletion src/iface/interface/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1030,7 +1030,7 @@ impl InterfaceInner {
return Err(DispatchError::NeighborPending);
}
NeighborAnswer::NotFound => match (src_addr, dst_addr) {
#[cfg(feature = "proto-ipv4")]
#[cfg(all(feature = "medium-ethernet", feature = "proto-ipv4"))]
(&IpAddress::Ipv4(src_addr), IpAddress::Ipv4(dst_addr)) => {
net_debug!(
"address {} not in neighbor cache, sending ARP request",
Expand Down
4 changes: 4 additions & 0 deletions src/iface/interface/sixlowpan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,7 @@ pub enum SixlowpanPayload<'p> {
Icmpv6(&'p Icmpv6Repr<'p>),
#[cfg(any(feature = "socket-udp", feature = "socket-dns"))]
Udp(UdpRepr, &'p [u8], Option<u16>),
#[cfg(feature = "proto-rpl")]
Raw(&'p [u8]),
}

Expand Down Expand Up @@ -635,6 +636,7 @@ impl<'p> PacketSixlowpan<'p> {

SixlowpanPayload::Udp(*udp_repr, payload, None)
}
#[cfg(feature = "proto-rpl")]
IpPayload::Raw(raw) => {
match last_header {
IpProtocol::Udp => {
Expand Down Expand Up @@ -699,6 +701,7 @@ impl<'p> PacketSixlowpan<'p> {
SixlowpanPayload::Udp(udp_repr, payload, _) => {
len + SixlowpanUdpNhcRepr(udp_repr).header_len() + payload.len()
}
#[cfg(feature = "proto-rpl")]
SixlowpanPayload::Raw(payload) => len + payload.len(),
}
}
Expand Down Expand Up @@ -776,6 +779,7 @@ impl<'p> PacketSixlowpan<'p> {
udp_packet.set_checksum(checksum);
}
}
#[cfg(feature = "proto-rpl")]
SixlowpanPayload::Raw(payload) => buffer[..payload.len()].copy_from_slice(payload),
}
}
Expand Down
9 changes: 7 additions & 2 deletions src/iface/packet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ impl<'p> Packet<'p> {
&caps.checksum,
)
}
#[cfg(feature = "socket-raw")]
#[cfg(any(feature = "socket-raw", feature = "proto-rpl"))]
IpPayload::Raw(raw_packet) => payload.copy_from_slice(raw_packet),
#[cfg(any(feature = "socket-udp", feature = "socket-dns"))]
IpPayload::Udp(udp_repr, inner_payload) => udp_repr.emit(
Expand Down Expand Up @@ -171,6 +171,7 @@ pub(crate) struct PacketV6<'p> {
payload: IpPayload<'p>,
}

#[cfg(feature = "proto-ipv6")]
impl<'p> PacketV6<'p> {
pub(crate) fn new(header: Ipv6Repr, payload: IpPayload<'p>) -> Self {
Self {
Expand All @@ -193,6 +194,7 @@ impl<'p> PacketV6<'p> {
&mut self.header
}

#[cfg(feature = "proto-ipv6-hbh")]
pub(crate) fn hop_by_hop(&self) -> Option<(IpProtocol, &Ipv6HopByHopRepr<'p>)> {
#[cfg(feature = "proto-ipv6-hbh")]
{
Expand All @@ -206,13 +208,15 @@ impl<'p> PacketV6<'p> {
}
}

#[cfg(feature = "proto-ipv6-hbh")]
pub(crate) fn add_hop_by_hop(&mut self, repr: Ipv6HopByHopRepr<'p>) {
self.header.payload_len += 2 + repr.buffer_len();
let next_header = self.header.next_header;
self.header.next_header = IpProtocol::HopByHop;
self.hop_by_hop = Some((next_header, repr));
}

#[cfg(feature = "proto-ipv6-routing")]
pub(crate) fn routing(&self) -> Option<(IpProtocol, &Ipv6RoutingRepr)> {
#[cfg(feature = "proto-ipv6-routing")]
{
Expand All @@ -226,6 +230,7 @@ impl<'p> PacketV6<'p> {
}
}

#[cfg(feature = "proto-ipv6-routing")]
pub(crate) fn add_routing(&mut self, repr: Ipv6RoutingRepr) {
self.header.payload_len += 2 + repr.buffer_len();
let mut next_header = self.header.next_header;
Expand Down Expand Up @@ -254,7 +259,7 @@ pub(crate) enum IpPayload<'p> {
Igmp(IgmpRepr),
#[cfg(feature = "proto-ipv6")]
Icmpv6(Icmpv6Repr<'p>),
#[cfg(feature = "socket-raw")]
#[cfg(any(feature = "socket-raw", feature = "proto-rpl"))]
Raw(&'p [u8]),
#[cfg(any(feature = "socket-udp", feature = "socket-dns"))]
Udp(UdpRepr, &'p [u8]),
Expand Down

0 comments on commit c570346

Please sign in to comment.