@@ -102,6 +102,7 @@ static NS_LIST_DEFINE(bbr_instance_list, thread_bbr_t, link);
102
102
103
103
struct ipv6_route * thread_bbr_dua_entry_find (int8_t interface_id , const uint8_t * addr_data_ptr ) {
104
104
ipv6_route_t * route = ipv6_route_choose_next_hop (addr_data_ptr , interface_id , NULL );
105
+
105
106
if (!route || route -> prefix_len < 128 || !route -> on_link || route -> info .source != ROUTE_THREAD_PROXIED_DUA_HOST ) {
106
107
//Not found
107
108
return NULL ;
@@ -999,22 +1000,22 @@ int thread_bbr_dua_entry_add (int8_t interface_id, const uint8_t *addr_data_ptr,
999
1000
goto error ;
1000
1001
}
1001
1002
// We are using route info field to store BBR MLEID map
1002
- route = ipv6_route_add_with_info (addr_data_ptr , 128 , interface_id , NULL , ROUTE_THREAD_PROXIED_DUA_HOST , map , 0 , lifetime , 0 );
1003
+ route = ipv6_route_add_with_info (addr_data_ptr , 128 , interface_id , NULL , ROUTE_THREAD_PROXIED_DUA_HOST , NULL , 0 , lifetime , 1 );
1003
1004
if (!route ) {
1004
1005
// Direct route to host allows ND proxying to work
1005
1006
ns_dyn_mem_free (map );
1006
1007
goto error ;
1007
1008
}
1008
1009
// Route info autofreed
1009
1010
route -> info_autofree = true;
1011
+ route -> info .info = map ;
1010
1012
}
1011
1013
1012
- map = route -> info .info ;
1013
- memcpy (map -> mleid_ptr , mleid_ptr , 8 );
1014
- map -> last_contact_time = protocol_core_monotonic_time ;
1015
- route -> info .info = map ;
1016
-
1017
-
1014
+ if (!route -> info .info ) {
1015
+ goto error ;
1016
+ }
1017
+ memcpy (((thread_pbbr_dua_info_t * )route -> info .info )-> mleid_ptr , mleid_ptr , 8 );
1018
+ ((thread_pbbr_dua_info_t * )route -> info .info )-> last_contact_time = protocol_core_monotonic_time ;
1018
1019
// send NA
1019
1020
thread_bbr_na_send (this -> backbone_interface_id , addr_data_ptr );
1020
1021
0 commit comments