mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-17 05:52:44 +01:00
Merge #19836
19836: sys/net/sock: add sock_aux_ttl r=maribu a=benpicco Co-authored-by: Benjamin Valentin <benjamin.valentin@ml-pa.com>
This commit is contained in:
commit
b39d3a44d4
@ -513,6 +513,7 @@ PSEUDOMODULES += sock_async
|
|||||||
PSEUDOMODULES += sock_aux_local
|
PSEUDOMODULES += sock_aux_local
|
||||||
PSEUDOMODULES += sock_aux_rssi
|
PSEUDOMODULES += sock_aux_rssi
|
||||||
PSEUDOMODULES += sock_aux_timestamp
|
PSEUDOMODULES += sock_aux_timestamp
|
||||||
|
PSEUDOMODULES += sock_aux_ttl
|
||||||
PSEUDOMODULES += sock_dtls
|
PSEUDOMODULES += sock_dtls
|
||||||
PSEUDOMODULES += sock_ip
|
PSEUDOMODULES += sock_ip
|
||||||
PSEUDOMODULES += sock_tcp
|
PSEUDOMODULES += sock_tcp
|
||||||
|
@ -319,6 +319,21 @@ enum {
|
|||||||
* @ref sock_dtls_aux_tx_t::local.
|
* @ref sock_dtls_aux_tx_t::local.
|
||||||
*/
|
*/
|
||||||
SOCK_AUX_SET_LOCAL = (1LU << 3),
|
SOCK_AUX_SET_LOCAL = (1LU << 3),
|
||||||
|
/**
|
||||||
|
* @brief Flag to request the TTL value of received frame
|
||||||
|
*
|
||||||
|
* @note Select module `sock_aux_ttl` and a compatible network stack to
|
||||||
|
* use this
|
||||||
|
*
|
||||||
|
* Set this flag in the auxiliary data structure prior to the call of
|
||||||
|
* @ref sock_udp_recv_aux / @ref sock_ip_recv_aux / etc. to request the
|
||||||
|
* TTL value of a received frame. This flag will be cleared if the
|
||||||
|
* time to live was stored, otherwise it remains set.
|
||||||
|
*
|
||||||
|
* Depending on the family of the socket, the TTL value will be stored in
|
||||||
|
* @ref sock_udp_aux_rx_t::ttl or @ref sock_dtls_aux_rx_t::ttl.
|
||||||
|
*/
|
||||||
|
SOCK_AUX_GET_TTL = (1LU << 4),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -332,6 +332,14 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
int16_t rssi;
|
int16_t rssi;
|
||||||
#endif /* MODULE_SOCK_AUX_RSSI */
|
#endif /* MODULE_SOCK_AUX_RSSI */
|
||||||
|
#if defined(MODULE_SOCK_AUX_TTL) || defined(DOXYGEN)
|
||||||
|
/**
|
||||||
|
* @brief TTL value of the received frame
|
||||||
|
*
|
||||||
|
* @see SOCK_AUX_GET_TTL
|
||||||
|
*/
|
||||||
|
uint8_t ttl;
|
||||||
|
#endif /* MODULE_SOCK_AUX_TTL */
|
||||||
sock_aux_flags_t flags; /**< Flags used request information */
|
sock_aux_flags_t flags; /**< Flags used request information */
|
||||||
} sock_udp_aux_rx_t;
|
} sock_udp_aux_rx_t;
|
||||||
|
|
||||||
|
@ -305,6 +305,16 @@ ssize_t sock_udp_recv_buf_aux(sock_udp_t *sock, void **data, void **buf_ctx,
|
|||||||
if ((aux != NULL) && (_aux.flags & GNRC_SOCK_RECV_AUX_FLAG_RSSI)) {
|
if ((aux != NULL) && (_aux.flags & GNRC_SOCK_RECV_AUX_FLAG_RSSI)) {
|
||||||
aux->flags &= ~SOCK_AUX_GET_RSSI;
|
aux->flags &= ~SOCK_AUX_GET_RSSI;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if IS_USED(MODULE_SOCK_AUX_TTL)
|
||||||
|
if ((aux != NULL) && (aux->flags & SOCK_AUX_GET_TTL)) {
|
||||||
|
gnrc_pktsnip_t *ip = gnrc_pktsnip_search_type(pkt, GNRC_NETTYPE_IPV6);
|
||||||
|
if (ip) {
|
||||||
|
ipv6_hdr_t *ip_hdr = ip->data;
|
||||||
|
aux->ttl = ip_hdr->hl;
|
||||||
|
aux->flags &= ~SOCK_AUX_GET_TTL;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
*data = pkt->data;
|
*data = pkt->data;
|
||||||
*buf_ctx = pkt;
|
*buf_ctx = pkt;
|
||||||
|
@ -3,6 +3,7 @@ include ../Makefile.net_common
|
|||||||
AUX_LOCAL ?= 1
|
AUX_LOCAL ?= 1
|
||||||
AUX_TIMESTAMP ?= 1
|
AUX_TIMESTAMP ?= 1
|
||||||
AUX_RSSI ?= 1
|
AUX_RSSI ?= 1
|
||||||
|
AUX_TTL ?= 1
|
||||||
|
|
||||||
ifeq (1, $(AUX_LOCAL))
|
ifeq (1, $(AUX_LOCAL))
|
||||||
USEMODULE += sock_aux_local
|
USEMODULE += sock_aux_local
|
||||||
@ -16,6 +17,10 @@ ifeq (1, $(AUX_RSSI))
|
|||||||
USEMODULE += sock_aux_rssi
|
USEMODULE += sock_aux_rssi
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq (1, $(AUX_TTL))
|
||||||
|
USEMODULE += sock_aux_ttl
|
||||||
|
endif
|
||||||
|
|
||||||
USEMODULE += gnrc_sock_check_reuse
|
USEMODULE += gnrc_sock_check_reuse
|
||||||
USEMODULE += sock_udp
|
USEMODULE += sock_udp
|
||||||
USEMODULE += gnrc_ipv6
|
USEMODULE += gnrc_ipv6
|
||||||
|
@ -451,7 +451,7 @@ static void test_sock_udp_recv__aux(void)
|
|||||||
static const inject_aux_t inject_aux = { .timestamp = 1337, .rssi = -11 };
|
static const inject_aux_t inject_aux = { .timestamp = 1337, .rssi = -11 };
|
||||||
sock_udp_ep_t result;
|
sock_udp_ep_t result;
|
||||||
sock_udp_aux_rx_t aux = {
|
sock_udp_aux_rx_t aux = {
|
||||||
.flags = SOCK_AUX_GET_LOCAL | SOCK_AUX_GET_TIMESTAMP | SOCK_AUX_GET_RSSI
|
.flags = SOCK_AUX_GET_LOCAL | SOCK_AUX_GET_TIMESTAMP | SOCK_AUX_GET_RSSI | SOCK_AUX_GET_TTL
|
||||||
};
|
};
|
||||||
|
|
||||||
expect(0 == sock_udp_create(&_sock, &local, NULL, SOCK_FLAGS_REUSE_EP));
|
expect(0 == sock_udp_create(&_sock, &local, NULL, SOCK_FLAGS_REUSE_EP));
|
||||||
@ -483,6 +483,12 @@ static void test_sock_udp_recv__aux(void)
|
|||||||
expect(inject_aux.rssi == aux.rssi);
|
expect(inject_aux.rssi == aux.rssi);
|
||||||
#else
|
#else
|
||||||
expect(aux.flags & SOCK_AUX_GET_RSSI);
|
expect(aux.flags & SOCK_AUX_GET_RSSI);
|
||||||
|
#endif
|
||||||
|
#if IS_USED(MODULE_SOCK_AUX_TTL)
|
||||||
|
expect(!(aux.flags & SOCK_AUX_GET_TTL));
|
||||||
|
expect(64 == aux.ttl);
|
||||||
|
#else
|
||||||
|
expect(aux.flags & SOCK_AUX_GET_TTL);
|
||||||
#endif
|
#endif
|
||||||
expect(_check_net());
|
expect(_check_net());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user