|
34 | 34 | #include "net_rpl.h"
|
35 | 35 | #include "Service_Libs/nd_proxy/nd_proxy.h"
|
36 | 36 | #include "6LoWPAN/ws/ws_bbr_api_internal.h"
|
| 37 | +#include "libDHCPv6/libDHCPv6.h" |
| 38 | +#include "DHCPv6_Server/DHCPv6_server_service.h" |
37 | 39 |
|
38 | 40 | #define TRACE_GROUP "wsbs"
|
39 | 41 |
|
@@ -237,22 +239,30 @@ static void ws_bbr_rpl_status_check(protocol_interface_info_entry_t *cur)
|
237 | 239 | if (memcmp(global_dodag_id, ADDR_UNSPECIFIED,16) != 0) {
|
238 | 240 | // TODO remove old global prefix
|
239 | 241 | tr_info("RPL GUA deactivate %s", trace_ipv6(global_dodag_id));
|
240 |
| - addr_delete_matching(cur, global_dodag_id, 64, ADDR_SOURCE_SLAAC); |
241 | 242 |
|
242 | 243 | rpl_control_update_dodag_prefix(protocol_6lowpan_rpl_root_dodag, global_dodag_id, 64, 0, 7200, 0, false);
|
243 | 244 | rpl_control_update_dodag_route(protocol_6lowpan_rpl_root_dodag, global_dodag_id, 64, 0, 7200, false);
|
244 | 245 | ipv6_route_add_with_info(global_dodag_id, 64, backbone_interface_id, NULL, ROUTE_THREAD_BBR, NULL, 0, 7200, 0);
|
245 | 246 | }
|
246 | 247 | // TODO add global prefix
|
247 | 248 | if (memcmp(global_id, ADDR_UNSPECIFIED,16) != 0) {
|
248 |
| - // TODO Add new prefix |
249 |
| - tr_info("RPL GUA activate %s", trace_ipv6(global_id)); |
250 |
| - if_address_entry_t *add_entry = icmpv6_slaac_address_add(cur, global_id, 64, 0xffffffff, 0xffffffff, true, SLAAC_IID_OPAQUE); |
251 |
| - if (!add_entry) { |
| 249 | + //DHCPv6 Server set here |
| 250 | + //Interface LL64 address |
| 251 | + uint8_t ll[16]; |
| 252 | + memcpy(ll, ADDR_LINK_LOCAL_PREFIX, 8); |
| 253 | + memcpy(&ll[8], cur->mac, 8); |
| 254 | + ll[8] ^= 2; |
| 255 | + |
| 256 | + if (DHCPv6_server_service_init(cur->id, global_id, cur->mac, DHCPV6_DUID_HARDWARE_EUI64_TYPE) != 0) { |
| 257 | + tr_error("DHCPv6 Server create fail"); |
252 | 258 | return;
|
253 | 259 | }
|
254 | 260 |
|
255 |
| - rpl_control_update_dodag_prefix(protocol_6lowpan_rpl_root_dodag, global_id, 64, PIO_A, 0xffffffff, 0xffffffff, false); |
| 261 | + DHCPv6_server_service_set_address_autonous_flag(cur->id, global_id, false); |
| 262 | + tr_info("RPL GUA activate %s", trace_ipv6(global_id)); |
| 263 | + ws_dhcp_client_address_request(cur, global_id, ll); |
| 264 | + |
| 265 | + rpl_control_update_dodag_prefix(protocol_6lowpan_rpl_root_dodag, global_id, 64, 0, 0xffffffff, 0xffffffff, false); |
256 | 266 | rpl_control_update_dodag_route(protocol_6lowpan_rpl_root_dodag, global_id, 64, 0, 0xffffffff, false);
|
257 | 267 | ipv6_route_add_with_info(global_id, 64, backbone_interface_id, NULL, ROUTE_THREAD_BBR, NULL, 0, 0xffffffff, 0);
|
258 | 268 | }
|
|
0 commit comments