Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/arp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::{getter_be, setter_be};
/// The ARP header is typically found after the Ethernet header and is used to
/// map a network protocol address (like an IPv4 address) to a hardware
/// address (like a MAC address).
#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone, Default)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ArpHdr {
Expand Down
2 changes: 1 addition & 1 deletion src/geneve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::{getter_be, setter_be};
/// Represents a Geneve (Generic Network Virtualization Encapsulation) header, according to RFC 8926.
/// Geneve is an encapsulation protocol designed for network virtualization.
///
#[repr(C, packed)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone, Default)]

pub struct GeneveHdr {
Expand Down
987 changes: 359 additions & 628 deletions src/icmp.rs

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub enum IpHdr {
}

/// IPv4 header, which is present after the Ethernet header.
#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Ipv4Hdr {
Expand Down Expand Up @@ -166,7 +166,7 @@ impl Ipv4Hdr {
}

/// IPv6 header, which is present after the Ethernet header.
#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Ipv6Hdr {
Expand Down
4 changes: 2 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ pub mod vxlan;
#[macro_export]
macro_rules! getter_be {
($self:expr, $field:ident, $ty:ty) => {
core::ptr::read_unaligned(core::ptr::addr_of!($self.$field).cast::<$ty>())
*core::ptr::addr_of!($self.$field).cast::<$ty>()
};
}
#[cfg(target_endian = "little")]
#[macro_export]
macro_rules! getter_be {
($self:expr, $field:ident, $ty:ty) => {
core::ptr::read_unaligned(core::ptr::addr_of!($self.$field).cast::<$ty>()).swap_bytes()
(&*core::ptr::addr_of!($self.$field).cast::<$ty>()).swap_bytes()
};
}

Expand Down
2 changes: 1 addition & 1 deletion src/llc.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use core::mem;

/// Represents Logical Link Control according to ISO/IEC 8802-2 Definition
#[repr(C, packed)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LlcHdr {
Expand Down
2 changes: 1 addition & 1 deletion src/mpls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use core::mem;
/// https://www.rfc-editor.org/rfc/rfc3032.html.
/// This header format applies to all MPLS messages.
/// 20 bits for Label - 3 for TC - 1 for S - 8 for TTL
#[repr(C, packed)]
#[repr(C)]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Mpls {
Expand Down
2 changes: 1 addition & 1 deletion src/sctp.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use core::mem;

#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SctpHdr {
Expand Down
2 changes: 1 addition & 1 deletion src/tcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::bitfield::BitfieldUnit;
pub const TCP_HDR_LEN: usize = mem::size_of::<TcpHdr>();

/// TCP header, which is present after the IP header.
#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TcpHdr {
Expand Down
2 changes: 1 addition & 1 deletion src/udp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use crate::{getter_be, setter_be};
/// udp_header.set_len(28); // 8 bytes header + 20 bytes payload
/// udp_header.set_checksum(0); // Checksum calculation would be done separately
/// ```
#[repr(C)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct UdpHdr {
Expand Down
2 changes: 1 addition & 1 deletion src/vxlan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use core::mem;
/// Uses a 24-bit VXLAN Network Identifier (VNI) for traffic segregation.
/// Header length: 8 bytes.
/// Reference: RFC 7348.
#[repr(C, packed)]
#[repr(C, align(4))]
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VxlanHdr {
Expand Down