@@ -1529,7 +1529,7 @@ impl RouteTable {
15291529 . into_iter ( )
15301530 . flat_map ( |info| & info. proxy_cidrs )
15311531 . filter_map ( |cidr| cidr. parse :: < IpCidr > ( ) . ok ( ) )
1532- . collect :: < Vec < _ > > ( ) ;
1532+ . collect :: < HashSet < _ > > ( ) ;
15331533
15341534 // build next hop map
15351535 let ( graph, start_node) =
@@ -1636,11 +1636,7 @@ impl RouteTable {
16361636 continue ;
16371637 } ;
16381638
1639- if * peer_id != my_peer_id
1640- && local_proxy_cidrs
1641- . iter ( )
1642- . any ( |local_cidr| cidr_is_subset ( & cidr, local_cidr) )
1643- {
1639+ if * peer_id != my_peer_id && local_proxy_cidrs. contains ( & cidr) {
16441640 tracing:: debug!(
16451641 ?peer_id,
16461642 ?my_peer_id,
@@ -6509,7 +6505,7 @@ mod tests {
65096505 }
65106506
65116507 #[ tokio:: test]
6512- async fn sync_route_info_prioritizes_local_over_remote_for_overlapped_proxy_cidrs ( ) {
6508+ async fn sync_route_info_uses_lpm_for_overlapped_proxy_cidrs ( ) {
65136509 let peer_mgr = create_mock_pmgr ( ) . await ;
65146510 let route = create_mock_route ( peer_mgr. clone ( ) ) . await ;
65156511 let from_peer_id: PeerId = 11001 ;
@@ -6577,13 +6573,13 @@ mod tests {
65776573 assert_eq ! ( stored. proxy_cidrs, sender_info. proxy_cidrs) ;
65786574 drop ( guard) ;
65796575
6580- // Route-table filtering: local announced /16 should dominate remote equal/subset .
6576+ // Data plane uses LPM: remote /24 should win over local /16 for 10.10.1.1 .
65816577 assert_eq ! (
65826578 route
65836579 . service_impl
65846580 . route_table
65856581 . get_peer_id_for_proxy( & "10.10.1.1" . parse:: <IpAddr >( ) . unwrap( ) ) ,
6586- Some ( peer_mgr . my_peer_id ( ) )
6582+ Some ( from_peer_id )
65876583 ) ;
65886584 // Non-overlapped remote prefix should still route to remote.
65896585 assert_eq ! (
0 commit comments