@@ -537,7 +537,7 @@ static int timer_status(int8_t timer_id)
537
537
return TIMER_STATE_CANCELLED ;
538
538
}
539
539
540
- static int read_data (socket_callback_t * sckt_data , internal_socket_t * sock , ns_address_t * src_address , uint8_t dst_address [static 16 ])
540
+ static int read_data (socket_callback_t * sckt_data , internal_socket_t * sock , ns_address_t * src_address , uint8_t dst_address [static 16 ], int8_t * interface )
541
541
{
542
542
sock -> data_len = 0 ;
543
543
if (sckt_data -> event_type == SOCKET_DATA && sckt_data -> d_len > 0 ) {
@@ -584,6 +584,7 @@ static int read_data(socket_callback_t *sckt_data, internal_socket_t *sock, ns_a
584
584
}
585
585
if (pkt ) {
586
586
memcpy (dst_address , pkt -> ipi6_addr , 16 );
587
+ * interface = pkt -> ipi6_ifindex ;
587
588
} else {
588
589
goto return_failure ;
589
590
}
@@ -613,8 +614,9 @@ static void secure_recv_sckt_msg(void *cb_res)
613
614
ns_address_t src_address ;
614
615
uint8_t dst_address [16 ] = {0 };
615
616
memset (& src_address , 0 , sizeof (ns_address_t ));
617
+ int8_t interface_id = -1 ;
616
618
617
- if (sock && read_data (sckt_data , sock , & src_address , dst_address ) == 0 ) {
619
+ if (sock && read_data (sckt_data , sock , & src_address , dst_address , & interface_id ) == 0 ) {
618
620
/* If received from multicast address, reject */
619
621
if (* (dst_address ) == 0xFF ) {
620
622
return ;
@@ -683,7 +685,7 @@ static void secure_recv_sckt_msg(void *cb_res)
683
685
ns_dyn_mem_free (data );
684
686
} else {
685
687
if (sock -> parent -> _recv_cb ) {
686
- sock -> parent -> _recv_cb (sock -> socket , src_address .address , src_address .identifier , dst_address , data , len );
688
+ sock -> parent -> _recv_cb (sock -> socket , interface_id , src_address .address , src_address .identifier , dst_address , data , len );
687
689
}
688
690
ns_dyn_mem_free (data );
689
691
}
@@ -699,10 +701,11 @@ static void recv_sckt_msg(void *cb_res)
699
701
internal_socket_t * sock = int_socket_find_by_socket_id (sckt_data -> socket_id );
700
702
ns_address_t src_address ;
701
703
uint8_t dst_address [16 ];
704
+ int8_t interface_id = -1 ;
702
705
703
- if (sock && read_data (sckt_data , sock , & src_address , dst_address ) == 0 ) {
706
+ if (sock && read_data (sckt_data , sock , & src_address , dst_address , & interface_id ) == 0 ) {
704
707
if (sock -> parent && sock -> parent -> _recv_cb ) {
705
- sock -> parent -> _recv_cb (sock -> socket , src_address .address , src_address .identifier , dst_address , sock -> data , sock -> data_len );
708
+ sock -> parent -> _recv_cb (sock -> socket , interface_id , src_address .address , src_address .identifier , dst_address , sock -> data , sock -> data_len );
706
709
}
707
710
ns_dyn_mem_free (sock -> data );
708
711
sock -> data = NULL ;
@@ -711,6 +714,8 @@ static void recv_sckt_msg(void *cb_res)
711
714
712
715
int coap_connection_handler_virtual_recv (coap_conn_handler_t * handler , uint8_t address [static 16 ], uint16_t port , uint8_t * data_ptr , uint16_t data_len )
713
716
{
717
+ int8_t interface_id = -1 ;
718
+
714
719
if (!handler || !handler -> socket ) {
715
720
return -1 ;
716
721
}
@@ -787,7 +792,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a
787
792
return 0 ;
788
793
} else {
789
794
if (sock -> parent -> _recv_cb ) {
790
- sock -> parent -> _recv_cb (sock -> socket , address , port , ns_in6addr_any , data , len );
795
+ sock -> parent -> _recv_cb (sock -> socket , interface_id , address , port , ns_in6addr_any , data , len );
791
796
}
792
797
ns_dyn_mem_free (data );
793
798
data = NULL ;
@@ -798,7 +803,7 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a
798
803
} else {
799
804
/* unsecure*/
800
805
if (sock -> parent -> _recv_cb ) {
801
- sock -> parent -> _recv_cb (sock -> socket , address , port , ns_in6addr_any , sock -> data , sock -> data_len );
806
+ sock -> parent -> _recv_cb (sock -> socket , interface_id , address , port , ns_in6addr_any , sock -> data , sock -> data_len );
802
807
}
803
808
if (sock -> data ) {
804
809
ns_dyn_mem_free (sock -> data );
0 commit comments