@@ -835,14 +835,9 @@ fn test_packet_len(#[case] medium: Medium) {
835835 }
836836}
837837
838- #[ rstest]
839- #[ case( Medium :: Ip ) ]
840- #[ cfg( all( feature = "socket-raw" , feature = "medium-ip" ) ) ]
841- #[ case( Medium :: Ethernet ) ]
842- #[ cfg( all( feature = "socket-raw" , feature = "medium-ethernet" ) ) ]
843- fn test_raw_socket_no_reply ( #[ case] medium : Medium ) {
844- use crate :: wire:: { IpVersion , UdpPacket , UdpRepr } ;
845-
838+ /// Check no reply is emitted when using a raw socket
839+ #[ cfg( feature = "socket-raw" ) ]
840+ fn check_no_reply_raw_socket ( medium : Medium , frame : & crate :: wire:: ipv4:: Packet < & [ u8 ] > ) {
846841 let ( mut iface, mut sockets, _) = setup ( medium) ;
847842
848843 let packets = 1 ;
@@ -852,14 +847,30 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
852847 vec ! [ raw:: PacketMetadata :: EMPTY ; packets] ,
853848 vec ! [ 0 ; 48 * packets] ,
854849 ) ;
855- let raw_socket = raw:: Socket :: new (
856- Some ( IpVersion :: Ipv4 ) ,
857- Some ( IpProtocol :: Udp ) ,
858- rx_buffer,
859- tx_buffer,
860- ) ;
850+ let raw_socket = raw:: Socket :: new ( Some ( IpVersion :: Ipv4 ) , None , rx_buffer, tx_buffer) ;
861851 sockets. add ( raw_socket) ;
862852
853+ assert_eq ! (
854+ iface. inner. process_ipv4(
855+ & mut sockets,
856+ PacketMeta :: default ( ) ,
857+ HardwareAddress :: default ( ) ,
858+ frame,
859+ & mut iface. fragments
860+ ) ,
861+ None
862+ ) ;
863+ }
864+
865+ #[ rstest]
866+ #[ case( Medium :: Ip ) ]
867+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ip" ) ) ]
868+ #[ case( Medium :: Ethernet ) ]
869+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ethernet" ) ) ]
870+ /// Test no reply to received UDP when using raw socket which accepts all protocols
871+ fn test_raw_socket_no_reply_udp ( #[ case] medium : Medium ) {
872+ use crate :: wire:: { UdpPacket , UdpRepr } ;
873+
863874 let src_addr = Ipv4Address :: new ( 127 , 0 , 0 , 2 ) ;
864875 let dst_addr = Ipv4Address :: new ( 127 , 0 , 0 , 1 ) ;
865876
@@ -869,16 +880,6 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
869880 src_port : 67 ,
870881 dst_port : 68 ,
871882 } ;
872- let mut bytes = vec ! [ 0xff ; udp_repr. header_len( ) + PAYLOAD_LEN ] ;
873- let mut packet = UdpPacket :: new_unchecked ( & mut bytes[ ..] ) ;
874- udp_repr. emit (
875- & mut packet,
876- & src_addr. into ( ) ,
877- & dst_addr. into ( ) ,
878- PAYLOAD_LEN ,
879- |buf| fill_slice ( buf, 0x2a ) ,
880- & ChecksumCapabilities :: default ( ) ,
881- ) ;
882883 let ipv4_repr = Ipv4Repr {
883884 src_addr,
884885 dst_addr,
@@ -905,16 +906,63 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
905906 Ipv4Packet :: new_unchecked ( & bytes[ ..] )
906907 } ;
907908
908- assert_eq ! (
909- iface. inner. process_ipv4(
910- & mut sockets,
911- PacketMeta :: default ( ) ,
912- HardwareAddress :: default ( ) ,
913- & frame,
914- & mut iface. fragments
915- ) ,
916- None
917- ) ;
909+ check_no_reply_raw_socket ( medium, & frame) ;
910+ }
911+
912+ #[ rstest]
913+ #[ case( Medium :: Ip ) ]
914+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ip" ) ) ]
915+ #[ case( Medium :: Ethernet ) ]
916+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ethernet" ) ) ]
917+ /// Test no reply to received TCP when using raw socket which accepts all protocols
918+ fn test_raw_socket_no_reply_tcp ( #[ case] medium : Medium ) {
919+ use crate :: wire:: { TcpPacket , TcpRepr } ;
920+
921+ let src_addr = Ipv4Address :: new ( 127 , 0 , 0 , 2 ) ;
922+ let dst_addr = Ipv4Address :: new ( 127 , 0 , 0 , 1 ) ;
923+
924+ const PAYLOAD_LEN : usize = 10 ;
925+ const PAYLOAD : [ u8 ; PAYLOAD_LEN ] = [ 0x2a ; PAYLOAD_LEN ] ;
926+
927+ let tcp_repr = TcpRepr {
928+ src_port : 67 ,
929+ dst_port : 68 ,
930+ control : TcpControl :: Syn ,
931+ seq_number : TcpSeqNumber ( 1 ) ,
932+ ack_number : None ,
933+ window_len : 10 ,
934+ window_scale : None ,
935+ max_seg_size : None ,
936+ sack_permitted : false ,
937+ sack_ranges : [ None , None , None ] ,
938+ timestamp : None ,
939+ payload : & PAYLOAD ,
940+ } ;
941+ let ipv4_repr = Ipv4Repr {
942+ src_addr,
943+ dst_addr,
944+ next_header : IpProtocol :: Tcp ,
945+ hop_limit : 64 ,
946+ payload_len : tcp_repr. header_len ( ) + PAYLOAD_LEN ,
947+ } ;
948+
949+ // Emit to frame
950+ let mut bytes = vec ! [ 0u8 ; ipv4_repr. buffer_len( ) + tcp_repr. header_len( ) + PAYLOAD_LEN ] ;
951+ let frame = {
952+ ipv4_repr. emit (
953+ & mut Ipv4Packet :: new_unchecked ( & mut bytes) ,
954+ & ChecksumCapabilities :: default ( ) ,
955+ ) ;
956+ tcp_repr. emit (
957+ & mut TcpPacket :: new_unchecked ( & mut bytes[ ipv4_repr. buffer_len ( ) ..] ) ,
958+ & src_addr. into ( ) ,
959+ & dst_addr. into ( ) ,
960+ & ChecksumCapabilities :: default ( ) ,
961+ ) ;
962+ Ipv4Packet :: new_unchecked ( & bytes[ ..] )
963+ } ;
964+
965+ check_no_reply_raw_socket ( medium, & frame) ;
918966}
919967
920968#[ rstest]
0 commit comments