@@ -1102,3 +1102,83 @@ fn test_icmp_reply_size(#[case] medium: Medium) {
1102
1102
) )
1103
1103
) ;
1104
1104
}
1105
+
1106
+ #[ rstest]
1107
+ #[ case( Medium :: Ip ) ]
1108
+ #[ cfg( feature = "medium-ip" ) ]
1109
+ #[ case( Medium :: Ethernet ) ]
1110
+ #[ cfg( feature = "medium-ethernet" ) ]
1111
+ fn get_source_address ( #[ case] medium : Medium ) {
1112
+ let ( mut iface, _, _) = setup ( medium) ;
1113
+
1114
+ const OWN_UNIQUE_LOCAL_ADDR1 : Ipv4Address = Ipv4Address :: new ( 172 , 18 , 1 , 2 ) ;
1115
+ const OWN_UNIQUE_LOCAL_ADDR2 : Ipv4Address = Ipv4Address :: new ( 172 , 24 , 24 , 14 ) ;
1116
+
1117
+ // List of addresses of the interface:
1118
+ // 172.18.1.2/24
1119
+ // 172.24.24.14/24
1120
+ iface. update_ip_addrs ( |addrs| {
1121
+ addrs. clear ( ) ;
1122
+
1123
+ addrs
1124
+ . push ( IpCidr :: Ipv4 ( Ipv4Cidr :: new ( OWN_UNIQUE_LOCAL_ADDR1 , 24 ) ) )
1125
+ . unwrap ( ) ;
1126
+ addrs
1127
+ . push ( IpCidr :: Ipv4 ( Ipv4Cidr :: new ( OWN_UNIQUE_LOCAL_ADDR2 , 24 ) ) )
1128
+ . unwrap ( ) ;
1129
+ } ) ;
1130
+
1131
+ // List of addresses we test:
1132
+ // 172.18.1.255 -> 172.18.1.2
1133
+ // 172.24.24.12 -> 172.24.24.14
1134
+ // 172.24.23.255 -> 172.18.1.2
1135
+ const UNIQUE_LOCAL_ADDR1 : Ipv4Address = Ipv4Address :: new ( 172 , 18 , 1 , 255 ) ;
1136
+ const UNIQUE_LOCAL_ADDR2 : Ipv4Address = Ipv4Address :: new ( 172 , 24 , 24 , 12 ) ;
1137
+ const UNIQUE_LOCAL_ADDR3 : Ipv4Address = Ipv4Address :: new ( 172 , 24 , 23 , 255 ) ;
1138
+
1139
+ assert_eq ! (
1140
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR1 ) ,
1141
+ Some ( OWN_UNIQUE_LOCAL_ADDR1 )
1142
+ ) ;
1143
+
1144
+ assert_eq ! (
1145
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR2 ) ,
1146
+ Some ( OWN_UNIQUE_LOCAL_ADDR2 )
1147
+ ) ;
1148
+ assert_eq ! (
1149
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR3 ) ,
1150
+ Some ( OWN_UNIQUE_LOCAL_ADDR1 )
1151
+ ) ;
1152
+ }
1153
+
1154
+ #[ rstest]
1155
+ #[ case( Medium :: Ip ) ]
1156
+ #[ cfg( feature = "medium-ip" ) ]
1157
+ #[ case( Medium :: Ethernet ) ]
1158
+ #[ cfg( feature = "medium-ethernet" ) ]
1159
+ fn get_source_address_empty_interface ( #[ case] medium : Medium ) {
1160
+ let ( mut iface, _, _) = setup ( medium) ;
1161
+
1162
+ iface. update_ip_addrs ( |ips| ips. clear ( ) ) ;
1163
+
1164
+ // List of addresses we test:
1165
+ // 172.18.1.255 -> None
1166
+ // 172.24.24.12 -> None
1167
+ // 172.24.23.255 -> None
1168
+ const UNIQUE_LOCAL_ADDR1 : Ipv4Address = Ipv4Address :: new ( 172 , 18 , 1 , 255 ) ;
1169
+ const UNIQUE_LOCAL_ADDR2 : Ipv4Address = Ipv4Address :: new ( 172 , 24 , 24 , 12 ) ;
1170
+ const UNIQUE_LOCAL_ADDR3 : Ipv4Address = Ipv4Address :: new ( 172 , 24 , 23 , 255 ) ;
1171
+
1172
+ assert_eq ! (
1173
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR1 ) ,
1174
+ None
1175
+ ) ;
1176
+ assert_eq ! (
1177
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR2 ) ,
1178
+ None
1179
+ ) ;
1180
+ assert_eq ! (
1181
+ iface. inner. get_source_address_ipv4( & UNIQUE_LOCAL_ADDR3 ) ,
1182
+ None
1183
+ ) ;
1184
+ }
0 commit comments