Skip to content

Commit f28cce8

Browse files
pbbr route handling updated (#1681)
1 parent 389fab0 commit f28cce8

File tree

7 files changed

+57
-19
lines changed

7 files changed

+57
-19
lines changed

source/6LoWPAN/Thread/thread_bbr_api.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -755,8 +755,8 @@ bool thread_bbr_routing_enabled(protocol_interface_info_entry_t *cur)
755755

756756
void thread_bbr_network_data_update_notify(protocol_interface_info_entry_t *cur)
757757
{
758-
(void) cur;
759758
thread_mdns_network_data_update_notify();
759+
thread_extension_bbr_route_update(cur);
760760
}
761761
#endif /* HAVE_THREAD_BORDER_ROUTER*/
762762

source/6LoWPAN/Thread/thread_bootstrap.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
#include "6LoWPAN/Thread/thread_network_synch.h"
6464
#include "6LoWPAN/Thread/thread_joiner_application.h"
6565
#include "6LoWPAN/Thread/thread_extension.h"
66+
#include "6LoWPAN/Thread/thread_extension_bbr.h"
6667
#include "6LoWPAN/Thread/thread_management_client.h"
6768
#include "6LoWPAN/Thread/thread_address_registration_client.h"
6869
#include "6LoWPAN/Thread/thread_joiner_application.h"
@@ -681,6 +682,8 @@ int thread_configuration_thread_activate(protocol_interface_info_entry_t *cur, l
681682

682683
thread_extension_activate(cur);
683684

685+
thread_extension_bbr_route_update(cur);
686+
684687
blacklist_clear();
685688

686689
blacklist_params_set(

source/6LoWPAN/Thread/thread_extension.c

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -192,17 +192,11 @@ void thread_extension_network_data_process(struct protocol_interface_info_entry
192192
}
193193
// Check if we are the BBR if we are make default route to backend
194194
if (0 == thread_extension_network_prefix_get(cur->id, NULL, domain_prefix, &domain_prefix_len)) {
195-
if(addr_is_assigned_to_interface(cur, addr)) {
196-
// pBBR does not have default route to mesh
197-
tr_info("Hosting pBBR for DUA prefix");
198-
ipv6_route_delete(domain_prefix, domain_prefix_len, cur->id, NULL, ROUTE_THREAD);
199-
} else {
200-
// Routers and FEDs create on-mesh prefix for domain prefix
201-
if (cur->thread_info->thread_device_mode == THREAD_DEVICE_MODE_ROUTER ||
202-
cur->thread_info->thread_device_mode == THREAD_DEVICE_MODE_FULL_END_DEVICE){
203-
if (ipv6_route_add(domain_prefix, domain_prefix_len, cur->id, NULL, ROUTE_THREAD, 0xffffffff, 0) == NULL) {
204-
tr_error("fail to add domain prefix route");
205-
}
195+
// Routers and FEDs create on-mesh prefix for domain prefix
196+
if (cur->thread_info->thread_device_mode == THREAD_DEVICE_MODE_ROUTER ||
197+
cur->thread_info->thread_device_mode == THREAD_DEVICE_MODE_FULL_END_DEVICE){
198+
if (ipv6_route_add(domain_prefix, domain_prefix_len, cur->id, NULL, ROUTE_THREAD, 0xffffffff, 0) == NULL) {
199+
tr_error("fail to add domain prefix route");
206200
}
207201
}
208202
}

source/6LoWPAN/Thread/thread_extension_bbr.c

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@
5959

6060
#include "6LoWPAN/Thread/thread_extension_bbr.h"
6161

62-
#ifdef HAVE_THREAD_V2
63-
#ifdef HAVE_THREAD_BORDER_ROUTER
62+
#if defined(HAVE_THREAD_V2) && defined(HAVE_THREAD_BORDER_ROUTER)
6463
#define TRACE_GROUP "pBBR"
6564

6665
/*
@@ -897,6 +896,8 @@ static int thread_extension_bbr_pbbr_stop(thread_pbbr_t *this)
897896
multicast_free_address(this->pbbr_multicast_address);
898897
multicast_fwd_full_for_scope(this->interface_id, IPV6_SCOPE_SITE_LOCAL);
899898

899+
ipv6_route_table_remove_info(this->backbone_interface_id, ROUTE_THREAD_BBR, NULL);
900+
900901
coap_service_unregister_uri(this->coap_service_id, THREAD_URI_BBR_TRI_RX_NTF);
901902
coap_service_unregister_uri(this->coap_service_id, THREAD_URI_BBR_NMK_RX_NTF);
902903
coap_service_unregister_uri(this->coap_service_id, THREAD_URI_BBR_DOMAIN_ADDRESS_REGISTRATION);
@@ -952,7 +953,6 @@ static int thread_extension_bbr_pbbr_start(thread_pbbr_t *this)
952953
tr_info("pBBR service started (Commercial network)");
953954
// Register Primary BBR backbone multicast address
954955
multicast_add_address(this->pbbr_multicast_address, false);
955-
956956
this->pbbr_started = true;
957957

958958
// Register Backbone commercial features
@@ -1062,6 +1062,38 @@ bool thread_extension_bbr_nd_query_process(protocol_interface_info_entry_t *cur,
10621062

10631063
}
10641064

1065+
void thread_extension_bbr_route_update(protocol_interface_info_entry_t *cur)
1066+
{
1067+
// if we have DUA prefix in settings
1068+
// if we are pbbr delete dua on-mesh route
1069+
// if we are pbbr add dua route to backbone
1070+
// else
1071+
// Remove all DUA routes using type
1072+
uint8_t addr[16];
1073+
if (0 != thread_extension_primary_bbr_get(cur, addr, NULL, NULL, NULL)) {
1074+
// BBR not present
1075+
return;
1076+
}
1077+
if(!addr_is_assigned_to_interface(cur, addr)) {
1078+
return;
1079+
}
1080+
1081+
thread_pbbr_t *this = thread_bbr_find_by_interface(cur->id);
1082+
if (!this) {
1083+
return;
1084+
}
1085+
// remove with info and add all valid doman prefixes again to back bone interface
1086+
ipv6_route_table_remove_info(this->backbone_interface_id, ROUTE_THREAD_BBR, NULL);
1087+
uint8_t domain_prefix[8];
1088+
// Check if domain prefix is in settings and verify that configuration is made to backbone -> prefix on-link
1089+
if (0 == thread_extension_network_prefix_get(cur->id, NULL, domain_prefix, NULL)){
1090+
// domain prefix in settings add dua route to backbone, delete dua on-mesh route
1091+
tr_debug("adding dua on link");
1092+
ipv6_route_add_with_info(domain_prefix, 64, this->backbone_interface_id, NULL, ROUTE_THREAD_BBR, NULL, 0, 0xffffffff, 0);
1093+
tr_info("Hosting pBBR for DUA prefix");
1094+
ipv6_route_delete(domain_prefix, 64, cur->id, NULL, ROUTE_THREAD);
1095+
}
1096+
}
10651097

10661098
void thread_extension_bbr_seconds_timer(int8_t interface_id, uint32_t seconds)
10671099
{
@@ -1109,6 +1141,7 @@ void thread_extension_bbr_seconds_timer(int8_t interface_id, uint32_t seconds)
11091141
tr_info("pbbr downgraded");
11101142
thread_extension_bbr_pbbr_stop(this);
11111143
}
1144+
11121145
}
11131146
// Check secondary state if we need to drop
11141147

@@ -1175,5 +1208,4 @@ int thread_extension_bbr_address_set(int8_t interface_id, const uint8_t *addr_pt
11751208
}
11761209

11771210

1178-
#endif //HAVE_THREAD_BORDER_ROUTER
1179-
#endif //HAVE_THREAD_V2
1211+
#endif //HAVE_THREAD_BORDER_ROUTER && HAVE_THREAD_V2

source/6LoWPAN/Thread/thread_extension_bbr.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,15 @@
3838
extern "C" {
3939
#endif
4040

41-
#ifdef HAVE_THREAD_V2
41+
#if defined(HAVE_THREAD_V2) && defined(HAVE_THREAD_BORDER_ROUTER)
42+
4243
int8_t thread_extension_bbr_init(int8_t interface_id, int8_t backbone_interface_id);
4344
void thread_extension_bbr_delete(int8_t interface_id);
4445
bool thread_extension_bbr_nd_query_process(protocol_interface_info_entry_t *cur, const uint8_t *target_addr, uint16_t rloc);
4546
void thread_extension_bbr_seconds_timer(int8_t interface_id, uint32_t seconds);
4647
int thread_extension_bbr_timeout_set(int8_t interface_id, uint32_t timeout_a, uint32_t timeout_b, uint32_t delay);
4748
int thread_extension_bbr_address_set(int8_t interface_id, const uint8_t *addr_ptr, uint16_t port);
49+
void thread_extension_bbr_route_update(protocol_interface_info_entry_t *cur);
4850

4951

5052
#else
@@ -55,10 +57,11 @@ int thread_extension_bbr_address_set(int8_t interface_id, const uint8_t *addr_pt
5557
#define thread_extension_bbr_seconds_timer(interface_id, seconds)
5658
#define thread_extension_bbr_timeout_set(interface_id, timeout_a, timeout_b, delay)
5759
#define thread_extension_bbr_address_set(interface_id, addr_ptr, port) (-1)
60+
#define thread_extension_bbr_route_update(cur)
5861
#endif
5962

6063
#ifdef __cplusplus
6164
}
6265
#endif
6366

64-
#endif /* THREAD_EXTENSION_BBR_H_ */
67+
#endif //HAVE_THREAD_BORDER_ROUTER && HAVE_THREAD_V2

source/ipv6_stack/ipv6_routing_table.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ typedef enum ipv6_route_src {
8282
ROUTE_THREAD,
8383
ROUTE_THREAD_BORDER_ROUTER,
8484
ROUTE_THREAD_PROXIED_HOST,
85+
ROUTE_THREAD_BBR,
8586
ROUTE_REDIRECT, /* Only occurs in destination cache */
8687
ROUTE_MAX,
8788
} ipv6_route_src_t;

test/nanostack/unittest/stub/thread_extension_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ void thread_extension_primary_bbr_update_done(struct protocol_interface_info_ent
5858
(void)cur;
5959
}
6060

61+
void thread_extension_bbr_route_update(protocol_interface_info_entry_t *cur)
62+
{
63+
(void)cur;
64+
}
65+
6166
void thread_extension_primary_bbr_process(struct protocol_interface_info_entry *cur)
6267
{
6368
(void)cur;

0 commit comments

Comments
 (0)