mirror of
https://github.com/espressif/openthread.git
synced 2026-10-01 13:27:42 +00:00
Retransmissions of frames containing time-dependent header Information Elements (IEs), such as CSL or Time Sync, require updates to these IEs to reflect the exact time of sending. If the frame counter is not incremented for these retransmissions, it leads to nonce reuse in AES-CCM encryption, which is a security vulnerability. This commit addresses this issue by ensuring that every transmission attempt (initial or retry) uses a fresh frame counter: - Deferred security processing from `SubMac::Send()` to `SubMac::BeginTransmit()`. - Upon retransmission in `SubMac::HandleTransmitDone()`, the frame is restored to plaintext via `TxFrame::DecryptTransmitAesCcm()` and security flags are cleared. - This allows time-dependent IEs to be updated and a new frame counter to be assigned for every attempt. Added a Nexus test case `retransmission_security` to verify that both CSL and standard MAC retransmissions use incrementing frame counters and updated CSL phases.
188 lines
9.0 KiB
C
188 lines
9.0 KiB
C
/*
|
|
* Copyright (c) 2024, The OpenThread Authors.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of the copyright holder nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/**
|
|
* This header file defines the OpenThread core configuration for Nexus simulation
|
|
*/
|
|
|
|
#ifndef OT_NEXUS_OPENTHREAD_CORE_NEXUS_CONFIG_H_
|
|
#define OT_NEXUS_OPENTHREAD_CORE_NEXUS_CONFIG_H_
|
|
|
|
#ifndef OPENTHREAD_RADIO
|
|
#define OPENTHREAD_RADIO 0
|
|
#endif
|
|
|
|
#ifndef OPENTHREAD_RADIO
|
|
#define OPENTHREAD_RADIO_CLI 0
|
|
#endif
|
|
|
|
#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BLE_TCAT_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_ADMITTER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_ADMITTER_ENABLED_BY_DEFAULT 0
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_EPHEMERAL_KEY_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_ID_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_COMMISSIONER_EVICTION_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_TRACKER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_AGENT_TXT_DATA_PARSER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTING_DHCP6_PD_CLIENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTING_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTING_TESTING_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BORDER_ROUTING_USE_HEAP_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_CHANNEL_MANAGER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_CHANNEL_MONITOR_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_CLI_PROMPT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COAP_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COAP_BLOCKWISE_TRANSFER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COAP_OBSERVE_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COAP_SECURE_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COMMISSIONER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_COMMISSIONER_MAX_JOINER_ENTRIES 4
|
|
#define OPENTHREAD_CONFIG_DATASET_UPDATER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DELAY_AWARE_QUEUE_MANAGEMENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DHCP6_CLIENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DHCP6_SERVER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DIAG_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_DNS_CLIENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DNS_CLIENT_BIND_UDP_TO_THREAD_NETIF 1
|
|
#define OPENTHREAD_CONFIG_DNS_DSO_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_MAC_SOFTWARE_RETX_SECURITY_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DNS_UPSTREAM_QUERY_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DNSSD_DISCOVERY_PROXY_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_DNSSD_SERVER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_ECDSA_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_HISTORY_TRACKER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_IP6_BR_COUNTERS_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_IP6_MAX_EXT_MCAST_ADDRS 80
|
|
#define OPENTHREAD_CONFIG_MAX_MULTICAST_LISTENERS 80
|
|
#define OPENTHREAD_CONFIG_IP6_MAX_EXT_UCAST_ADDRS 8
|
|
#define OPENTHREAD_CONFIG_IP6_FRAGMENTATION_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_IP6_SLAAC_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_IP6_SLAAC_NUM_ADDRESSES 4
|
|
#define OPENTHREAD_CONFIG_JAM_DETECTION_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_JOINER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
|
|
#define OPENTHREAD_CONFIG_LOG_LEVEL_DYNAMIC_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_LOG_LEVEL_INIT OT_LOG_LEVEL_CRIT
|
|
#define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED
|
|
#define OPENTHREAD_CONFIG_LOG_LEVEL_OVERRIDE_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_LOG_PLATFORM 0
|
|
#define OPENTHREAD_CONFIG_LOG_PREPEND_LEVEL 1
|
|
#define OPENTHREAD_CONFIG_LOG_PREPEND_UPTIME 0
|
|
#define OPENTHREAD_CONFIG_LOG_SUFFIX ""
|
|
#define OPENTHREAD_CONFIG_LOG_INSTANCE_AWARE_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MAC_CSL_RECEIVER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MAC_CSL_TRANSMITTER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MAC_FILTER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MAC_FILTER_SIZE 80
|
|
#define OPENTHREAD_CONFIG_MESH_DIAG_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MESSAGE_USE_HEAP_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MLE_DEVICE_PROPERTY_LEADER_WEIGHT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MLE_DISCOVERY_SCAN_REQUEST_CALLBACK_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MLE_INFORM_PREVIOUS_PARENT_ON_REATTACH 1
|
|
#define OPENTHREAD_CONFIG_MLE_IP_ADDRS_PER_CHILD 10
|
|
#define OPENTHREAD_CONFIG_MLE_LINK_METRICS_INITIATOR_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MLE_LINK_METRICS_SUBJECT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MLE_MAX_CHILDREN 128
|
|
#define OPENTHREAD_CONFIG_MLE_LINK_REQUEST_MARGIN_MIN 5
|
|
#define OPENTHREAD_CONFIG_MLE_PARTITION_MERGE_MARGIN_MIN 5
|
|
#define OPENTHREAD_CONFIG_MLR_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_BACKBONE_ROUTER_MULTICAST_ROUTING_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MULTICAST_DNS_AUTO_ENABLE_ON_INFRA_IF 1
|
|
#define OPENTHREAD_CONFIG_MULTICAST_DNS_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MULTICAST_DNS_ENTRY_ITERATION_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MULTICAST_DNS_PUBLIC_API_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_NAT64_BORDER_ROUTING_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_NAT64_TRANSLATOR_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_NAT64_IDLE_TIMEOUT_SECONDS 600
|
|
#define OPENTHREAD_CONFIG_NET_DIAG_VENDOR_INFO_SET_API_ENABLE OPENTHREAD_FTD
|
|
#define OPENTHREAD_CONFIG_NET_DIAG_VENDOR_MODEL "Nexus Simulation"
|
|
#define OPENTHREAD_CONFIG_NET_DIAG_VENDOR_NAME "RD:OpenThread by Google Nest"
|
|
#define OPENTHREAD_CONFIG_NET_DIAG_VENDOR_SW_VERSION "OT-simul-nexus"
|
|
#define OPENTHREAD_CONFIG_NET_DIAG_VENDOR_OUI 0x020100
|
|
#define OPENTHREAD_CONFIG_NETDATA_PUBLISHER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_NUM_MESSAGE_BUFFERS 256
|
|
#define OPENTHREAD_CONFIG_PARENT_SEARCH_BACKOFF_INTERVAL (10 * 60)
|
|
#define OPENTHREAD_CONFIG_PLATFORM_DNS_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_PLATFORM_DNSSD_ALLOW_RUN_TIME_SELECTION 0
|
|
#define OPENTHREAD_CONFIG_PLATFORM_DNSSD_ENABLE 0
|
|
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
|
#define OPENTHREAD_CONFIG_PLATFORM_UDP_ENABLE 1
|
|
#endif
|
|
#define OPENTHREAD_CONFIG_PLATFORM_FLASH_API_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_PLATFORM_RADIO_COEX_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_PLATFORM_USEC_TIMER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_RADIO_STATS_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_REFERENCE_DEVICE_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_SEEKER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_SRP_CLIENT_AUTO_START_DEFAULT_MODE 0
|
|
#define OPENTHREAD_CONFIG_SRP_CLIENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_SRP_SERVER_ADVERTISING_PROXY_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_SRP_SERVER_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TCP_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TLS_ENABLE 0
|
|
#define OPENTHREAD_CONFIG_TMF_ADDRESS_CACHE_ENTRIES 256
|
|
#define OPENTHREAD_CONFIG_TMF_ADDRESS_CACHE_MAX_SNOOP_ENTRIES 16
|
|
#define OPENTHREAD_CONFIG_TMF_ADDRESS_QUERY_INITIAL_RETRY_DELAY 4
|
|
#define OPENTHREAD_CONFIG_TMF_ADDRESS_QUERY_MAX_RETRY_DELAY 120
|
|
#define OPENTHREAD_CONFIG_TMF_ADDRESS_QUERY_TIMEOUT 6
|
|
#define OPENTHREAD_CONFIG_TMF_ANYCAST_LOCATOR_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TMF_NETDATA_SERVICE_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TMF_NETDIAG_CLIENT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TMF_SNOOP_CACHE_ENTRY_TIMEOUT 3
|
|
#define OPENTHREAD_CONFIG_MAX_STATECHANGE_HANDLERS 4
|
|
#define OPENTHREAD_CONFIG_RADIO_LINK_TREL_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TREL_MANAGE_DNSSD_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_TREL_USE_HEAP_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_UPTIME_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_USE_STD_NEW 1
|
|
#define OPENTHREAD_CONFIG_VERHOEFF_CHECKSUM_ENABLE 1
|
|
|
|
/**
|
|
* @def OPENTHREAD_NEXUS_CONFIG_GRPC_ENABLE
|
|
*
|
|
* Define to 1 to enable gRPC support in Nexus simulation.
|
|
*
|
|
*/
|
|
#ifndef OPENTHREAD_NEXUS_CONFIG_GRPC_ENABLE
|
|
#define OPENTHREAD_NEXUS_CONFIG_GRPC_ENABLE 0
|
|
#endif
|
|
|
|
// CLI configs
|
|
#define OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH 800
|
|
#define OPENTHREAD_CONFIG_CLI_LOG_INPUT_OUTPUT_ENABLE 1
|
|
#define OPENTHREAD_CONFIG_CLI_LOG_INPUT_OUTPUT_LEVEL OT_LOG_LEVEL_INFO
|
|
|
|
#endif // OT_NEXUS_OPENTHREAD_CORE_NEXUS_CONFIG_H_
|