@@ -835,14 +835,8 @@ fn test_packet_len(#[case] medium: Medium) {
835
835
}
836
836
}
837
837
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
+ fn check_no_reply_raw_socket ( medium : Medium , frame : & crate :: wire:: ipv4:: Packet < & [ u8 ] > ) {
846
840
let ( mut iface, mut sockets, _) = setup ( medium) ;
847
841
848
842
let packets = 1 ;
@@ -852,14 +846,30 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
852
846
vec ! [ raw:: PacketMetadata :: EMPTY ; packets] ,
853
847
vec ! [ 0 ; 48 * packets] ,
854
848
) ;
855
- let raw_socket = raw:: Socket :: new (
856
- Some ( IpVersion :: Ipv4 ) ,
857
- Some ( IpProtocol :: Udp ) ,
858
- rx_buffer,
859
- tx_buffer,
860
- ) ;
849
+ let raw_socket = raw:: Socket :: new ( Some ( IpVersion :: Ipv4 ) , None , rx_buffer, tx_buffer) ;
861
850
sockets. add ( raw_socket) ;
862
851
852
+ assert_eq ! (
853
+ iface. inner. process_ipv4(
854
+ & mut sockets,
855
+ PacketMeta :: default ( ) ,
856
+ HardwareAddress :: default ( ) ,
857
+ frame,
858
+ & mut iface. fragments
859
+ ) ,
860
+ None
861
+ ) ;
862
+ }
863
+
864
+ #[ rstest]
865
+ #[ case( Medium :: Ip ) ]
866
+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ip" ) ) ]
867
+ #[ case( Medium :: Ethernet ) ]
868
+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ethernet" ) ) ]
869
+ /// Test no reply to received UDP when using raw socket which accepts all protocols
870
+ fn test_raw_socket_no_reply_udp ( #[ case] medium : Medium ) {
871
+ use crate :: wire:: { UdpPacket , UdpRepr } ;
872
+
863
873
let src_addr = Ipv4Address :: new ( 127 , 0 , 0 , 2 ) ;
864
874
let dst_addr = Ipv4Address :: new ( 127 , 0 , 0 , 1 ) ;
865
875
@@ -869,16 +879,6 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
869
879
src_port : 67 ,
870
880
dst_port : 68 ,
871
881
} ;
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
- ) ;
882
882
let ipv4_repr = Ipv4Repr {
883
883
src_addr,
884
884
dst_addr,
@@ -905,16 +905,63 @@ fn test_raw_socket_no_reply(#[case] medium: Medium) {
905
905
Ipv4Packet :: new_unchecked ( & bytes[ ..] )
906
906
} ;
907
907
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
- ) ;
908
+ check_no_reply_raw_socket ( medium, & frame) ;
909
+ }
910
+
911
+ #[ rstest]
912
+ #[ case( Medium :: Ip ) ]
913
+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ip" ) ) ]
914
+ #[ case( Medium :: Ethernet ) ]
915
+ #[ cfg( all( feature = "socket-raw" , feature = "medium-ethernet" ) ) ]
916
+ /// Test no reply to received TCP when using raw socket which accepts all protocols
917
+ fn test_raw_socket_no_reply_tcp ( #[ case] medium : Medium ) {
918
+ use crate :: wire:: { TcpPacket , TcpRepr } ;
919
+
920
+ let src_addr = Ipv4Address :: new ( 127 , 0 , 0 , 2 ) ;
921
+ let dst_addr = Ipv4Address :: new ( 127 , 0 , 0 , 1 ) ;
922
+
923
+ const PAYLOAD_LEN : usize = 10 ;
924
+ const PAYLOAD : [ u8 ; PAYLOAD_LEN ] = [ 0x2a ; PAYLOAD_LEN ] ;
925
+
926
+ let tcp_repr = TcpRepr {
927
+ src_port : 67 ,
928
+ dst_port : 68 ,
929
+ control : TcpControl :: Syn ,
930
+ seq_number : TcpSeqNumber ( 1 ) ,
931
+ ack_number : None ,
932
+ window_len : 10 ,
933
+ window_scale : None ,
934
+ max_seg_size : None ,
935
+ sack_permitted : false ,
936
+ sack_ranges : [ None , None , None ] ,
937
+ timestamp : None ,
938
+ payload : & PAYLOAD ,
939
+ } ;
940
+ let ipv4_repr = Ipv4Repr {
941
+ src_addr,
942
+ dst_addr,
943
+ next_header : IpProtocol :: Tcp ,
944
+ hop_limit : 64 ,
945
+ payload_len : tcp_repr. header_len ( ) + PAYLOAD_LEN ,
946
+ } ;
947
+
948
+ // Emit to frame
949
+ let mut bytes = vec ! [ 0u8 ; ipv4_repr. buffer_len( ) + tcp_repr. header_len( ) + PAYLOAD_LEN ] ;
950
+ let frame = {
951
+ ipv4_repr. emit (
952
+ & mut Ipv4Packet :: new_unchecked ( & mut bytes) ,
953
+ & ChecksumCapabilities :: default ( ) ,
954
+ ) ;
955
+ tcp_repr. emit (
956
+ & mut TcpPacket :: new_unchecked ( & mut bytes[ ipv4_repr. buffer_len ( ) ..] ) ,
957
+ & src_addr. into ( ) ,
958
+ & dst_addr. into ( ) ,
959
+ & ChecksumCapabilities :: default ( ) ,
960
+ ) ;
961
+ Ipv4Packet :: new_unchecked ( & bytes[ ..] )
962
+ } ;
963
+
964
+ check_no_reply_raw_socket ( medium, & frame) ;
918
965
}
919
966
920
967
#[ rstest]
0 commit comments