@@ -21,7 +21,7 @@ pub mod ip;
2121
2222#[ repr( C ) ]
2323pub enum RawPacket {
24- Ip ( IpHdr ) ,
24+ Ip ( IpHdr , ip :: ProtoHdr ) ,
2525 Arp ( ArpHdr ) ,
2626}
2727
@@ -53,40 +53,40 @@ impl From<[u8; RawPacket::LEN]> for AppPacket {
5353 fn from ( value : [ u8 ; RawPacket :: LEN ] ) -> Self {
5454 let raw_packet = value. as_ptr ( ) as * const RawPacket ;
5555 match unsafe { & * raw_packet } {
56- RawPacket :: Ip ( packet) => match packet {
57- IpHdr :: V4 ( ipv4_packet) => match ipv4_packet . proto {
58- IpProto :: Tcp => {
56+ RawPacket :: Ip ( packet, proto ) => match packet {
57+ IpHdr :: V4 ( ipv4_packet) => match proto {
58+ ip :: ProtoHdr :: Tcp ( header ) => {
5959 //FIX: This does not work
60- let tcphdr =
61- unsafe { raw_packet. add ( mem:: size_of :: < Ipv4Hdr > ( ) ) } as * const TcpHdr ;
60+ // let tcphdr =
61+ // unsafe { raw_packet.add(mem::size_of::<Ipv4Hdr>()) } as *const TcpHdr;
6262
6363 let tcp_packet = TcpPacket {
6464 src_ip : IpAddr :: V4 ( Ipv4Addr :: from ( u32:: from_be ( ipv4_packet. src_addr ) ) ) ,
65- src_port : u16:: from_be ( unsafe { ( * tcphdr ) . source } ) ,
65+ src_port : u16:: from_be ( header . source ) ,
6666 dst_ip : IpAddr :: V4 ( Ipv4Addr :: from ( u32:: from_be ( ipv4_packet. dst_addr ) ) ) ,
67- dst_port : u16:: from_be ( unsafe { ( * tcphdr ) . dest } ) ,
67+ dst_port : u16:: from_be ( header . dest ) ,
6868 } ;
6969 AppPacket :: Ip ( IpPacket :: Tcp ( tcp_packet) )
7070 }
71- IpProto :: Udp => {
72- let udphdr = unsafe {
73- raw_packet. offset ( Ipv4Hdr :: LEN . try_into ( ) . unwrap ( ) ) as * const UdpHdr
74- } ;
71+ ip :: ProtoHdr :: Udp ( header ) => {
72+ // let udphdr = unsafe {
73+ // raw_packet.offset(Ipv4Hdr::LEN.try_into().unwrap()) as *const UdpHdr
74+ // };
7575
7676 let udp_packet = UdpPacket {
7777 src_ip : IpAddr :: V4 ( Ipv4Addr :: from ( u32:: from_be ( ipv4_packet. src_addr ) ) ) ,
78- src_port : u16:: from_be ( unsafe { ( * udphdr ) . source } ) ,
78+ src_port : u16:: from_be ( header . source ) ,
7979 dst_ip : IpAddr :: V4 ( Ipv4Addr :: from ( u32:: from_be ( ipv4_packet. dst_addr ) ) ) ,
80- dst_port : u16:: from_be ( unsafe { ( * udphdr ) . dest } ) ,
80+ dst_port : u16:: from_be ( header . dest ) ,
8181 } ;
8282 Self :: Ip ( IpPacket :: Udp ( udp_packet) )
8383 }
84- IpProto :: Icmp => {
85- let icmphdr = unsafe {
86- raw_packet. offset ( Ipv4Hdr :: LEN . try_into ( ) . unwrap ( ) ) as * const IcmpHdr
87- } ;
84+ ip :: ProtoHdr :: Icmp ( header ) => {
85+ // let icmphdr = unsafe {
86+ // raw_packet.offset(Ipv4Hdr::LEN.try_into().unwrap()) as *const IcmpHdr
87+ // };
8888
89- let icmp_type = match unsafe { ( * icmphdr ) . type_ } {
89+ let icmp_type = match header . type_ {
9090 0 => IcmpType :: EchoRequest ,
9191 1 => IcmpType :: EchoReply ,
9292 _ => IcmpType :: DestinationUnreachable ,
0 commit comments