Skip to content

Commit 2f5e5e2

Browse files
author
Juha Heiskanen
committed
Generic forwarding callback and EF state enabler for Wi-SUN BBR.
1 parent 007dfa2 commit 2f5e5e2

File tree

8 files changed

+37
-0
lines changed

8 files changed

+37
-0
lines changed

source/6LoWPAN/adaptation_interface.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,15 @@ static void lowpan_adaptation_priority_status_update(protocol_interface_info_ent
12141214
}
12151215
}
12161216

1217+
void lowpan_adaptation_expedite_forward_enable(protocol_interface_info_entry_t *cur)
1218+
{
1219+
fragmenter_interface_t *interface_ptr = lowpan_adaptation_interface_discover(cur->id);
1220+
if (!interface_ptr) {
1221+
return;
1222+
}
1223+
lowpan_adaptation_high_priority_state_enable(cur, interface_ptr);
1224+
}
1225+
12171226
void lowpan_adaptation_interface_slow_timer(protocol_interface_info_entry_t *cur)
12181227
{
12191228
fragmenter_interface_t *interface_ptr = lowpan_adaptation_interface_discover(cur->id);

source/6LoWPAN/lowpan_adaptation_interface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ int8_t lowpan_adaptation_free_messages_from_queues_by_address(struct protocol_in
6262

6363
int8_t lowpan_adaptation_indirect_queue_params_set(struct protocol_interface_info_entry *cur, uint16_t indirect_big_packet_threshold, uint16_t max_indirect_big_packets_total, uint16_t max_indirect_small_packets_per_child);
6464

65+
void lowpan_adaptation_expedite_forward_enable(struct protocol_interface_info_entry *cur);
66+
6567
void lowpan_adaptation_interface_slow_timer(struct protocol_interface_info_entry *cur);
6668

6769
#endif /* LOWPAN_ADAPTATION_INTERFACE_H_ */

source/6LoWPAN/ws/ws_bbr_api.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@
3838
#include "RPL/rpl_data.h"
3939
#include "Common_Protocols/icmpv6.h"
4040
#include "Common_Protocols/icmpv6_radv.h"
41+
#include "Common_Protocols/ip.h"
4142
#include "ws_management_api.h"
4243
#include "net_rpl.h"
4344
#include "Service_Libs/nd_proxy/nd_proxy.h"
4445
#include "6LoWPAN/ws/ws_bbr_api_internal.h"
4546
#include "6LoWPAN/ws/ws_pae_controller.h"
47+
#include "6LoWPAN/lowpan_adaptation_interface.h"
4648
#include "DHCPv6_Server/DHCPv6_server_service.h"
4749
#include "DHCPv6_client/dhcpv6_client_api.h"
4850
#include "libDHCPv6/libDHCPv6_vendordata.h"
@@ -907,6 +909,18 @@ bool ws_bbr_ready_to_start(protocol_interface_info_entry_t *cur)
907909
return true;
908910
}
909911

912+
static void ws_bbr_forwarding_cb(protocol_interface_info_entry_t *interface, buffer_t *buf)
913+
{
914+
uint8_t traffic_class = buf->options.traffic_class >> IP_TCLASS_DSCP_SHIFT;
915+
916+
if (traffic_class == IP_DSCP_EF) {
917+
//indicate EF forwarding to adaptation
918+
lowpan_adaptation_expedite_forward_enable(interface);
919+
}
920+
}
921+
922+
923+
910924
void ws_bbr_init(protocol_interface_info_entry_t *interface)
911925
{
912926
(void) interface;
@@ -919,6 +933,7 @@ void ws_bbr_init(protocol_interface_info_entry_t *interface)
919933
ws_bbr_fhss_bsi = ws_bbr_bsi_read(&bbr_info_nvm_tlv);
920934
tr_debug("Read BSI %u from NVM", ws_bbr_fhss_bsi);
921935
}
936+
interface->if_common_forwarding_out_cb = &ws_bbr_forwarding_cb;
922937
}
923938

924939

source/6LoWPAN/ws/ws_bootstrap.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,7 @@ static int8_t ws_bootstrap_down(protocol_interface_info_entry_t *cur)
12141214
ws_pae_controller_stop(cur);
12151215
ws_bootstrap_candidate_table_reset(cur);
12161216
blacklist_clear();
1217+
cur->if_common_forwarding_out_cb = NULL;
12171218

12181219
return nwk_6lowpan_down(cur);
12191220
}

source/Common_Protocols/ipv6.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1362,6 +1362,9 @@ buffer_t *ipv6_forwarding_up(buffer_t *buf)
13621362
}
13631363
} else { /* unicast */
13641364
if (!for_us) {
1365+
if (cur->if_common_forwarding_out_cb) {
1366+
cur->if_common_forwarding_out_cb(cur, buf);
1367+
}
13651368
return ipv6_consider_forwarding_unicast_packet(buf, cur, &ll_src);
13661369
}
13671370
}

source/NWK_INTERFACE/Include/protocol.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ struct protocol_interface_info_entry {
474474
int8_t (*if_down)(struct protocol_interface_info_entry *cur);
475475
int8_t (*if_up)(struct protocol_interface_info_entry *cur);
476476
void (*if_stack_buffer_handler)(buffer_t *);
477+
void (*if_common_forwarding_out_cb)(struct protocol_interface_info_entry *, buffer_t *);
477478
bool (*if_ns_transmit)(struct protocol_interface_info_entry *cur, ipv6_neighbour_t *neighCacheEntry, bool unicast, uint8_t seq);
478479
bool (*if_map_ip_to_link_addr)(struct protocol_interface_info_entry *cur, const uint8_t *ip_addr, addrtype_t *ll_type, const uint8_t **ll_addr_out);
479480
bool (*if_map_link_addr_to_ip)(struct protocol_interface_info_entry *cur, addrtype_t ll_type, const uint8_t *ll_addr, uint8_t *ip_addr_out);

source/NWK_INTERFACE/protocol_core.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,7 @@ static void protocol_core_base_init(protocol_interface_info_entry_t *entry, nwk_
462462
entry->ipv6_configure = NULL;
463463
entry->if_lowpan_security_params = NULL;
464464
entry->if_ns_transmit = NULL;
465+
entry->if_common_forwarding_out_cb = NULL;
465466
entry->if_special_forwarding = NULL;
466467
entry->if_snoop = NULL;
467468
entry->if_icmp_handler = NULL;

test/nanostack/unittest/stub/adaptation_interface_stub.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,8 @@ void lowpan_adaptation_interface_slow_timer(protocol_interface_info_entry_t *cur
116116
{
117117

118118
}
119+
120+
void lowpan_adaptation_expedite_forward_enable(struct protocol_interface_info_entry *cur)
121+
{
122+
123+
}

0 commit comments

Comments
 (0)