Skip to content

Commit

Permalink
feat(openthread): support openthread ephemeral key
Browse files Browse the repository at this point in the history
  • Loading branch information
gytxxsy authored and zwx1995esp committed Jun 11, 2024
1 parent 01e02ae commit 3efe49f
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 10 deletions.
13 changes: 11 additions & 2 deletions components/openthread/include/esp_openthread_netif_glue.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand All @@ -16,7 +16,7 @@ extern "C" {
#endif

/**
* @brief Default configuration reference of OT esp-netif
* @brief Default configuration reference of OpenThread esp-netif
*/
#define ESP_NETIF_INHERENT_DEFAULT_OPENTHREAD() \
{ \
Expand Down Expand Up @@ -67,6 +67,15 @@ void esp_openthread_netif_glue_deinit(void);
*/
esp_netif_t *esp_openthread_get_netif(void);

/**
* @brief This function register a handler for meshcop-e service publish event and remove event.
*
* @param[in] handler The handler.
* @param[in] for_publish The usage of handler, true for publish event and false for remove event.
*
*/
void esp_openthread_register_meshcop_e_handler(esp_event_handler_t handler, bool for_publish);

#ifdef __cplusplus
}
#endif
2 changes: 2 additions & 0 deletions components/openthread/include/esp_openthread_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ typedef enum {
OPENTHREAD_EVENT_TREL_REMOVE_IP6, /*!< OpenThread stack removed TREL IPv6 address */
OPENTHREAD_EVENT_TREL_MULTICAST_GROUP_JOIN, /*!< OpenThread stack joined TREL IPv6 multicast group */
OPENTHREAD_EVENT_SET_DNS_SERVER, /*!< OpenThread stack set DNS server >*/
OPENTHREAD_EVENT_PUBLISH_MESHCOP_E, /*!< OpenThread stack start to publish meshcop-e service >*/
OPENTHREAD_EVENT_REMOVE_MESHCOP_E, /*!< OpenThread stack start to remove meshcop-e service >*/
} esp_openthread_event_t;

/**
Expand Down
2 changes: 1 addition & 1 deletion components/openthread/openthread
Submodule openthread updated 1214 files
Original file line number Diff line number Diff line change
Expand Up @@ -632,4 +632,8 @@
#define OPENTHREAD_CONFIG_MAC_MAX_CSMA_BACKOFFS_DIRECT CONFIG_OPENTHREAD_MAC_MAX_CSMA_BACKOFFS_DIRECT
#endif

#ifndef OPENTHREAD_CONFIG_THREAD_VERSION
#define OPENTHREAD_CONFIG_THREAD_VERSION OT_THREAD_VERSION_1_4
#endif

#define OPENTHREAD_FTD 1
2 changes: 1 addition & 1 deletion components/openthread/sbom_openthread.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ supplier: 'Organization: Espressif Systems (Shanghai) CO LTD'
originator: 'Organization: Google LLC'
description: OpenThread released by Google is an open-source implementation of the Thread networking
url: https://github.com/espressif/openthread
hash: 456c448284486abe2a9118a9fdaa468fe2383fcd
hash: be7d36e4ff9cf7df6dfce54e58a31163c87b93f7
37 changes: 36 additions & 1 deletion components/openthread/src/esp_openthread_netif_glue.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down Expand Up @@ -203,6 +203,33 @@ static esp_err_t openthread_netif_transmit(void *handle, void *buffer, size_t le
return error;
}

static esp_event_handler_t meshcop_e_publish_handler = NULL;
static void esp_openthread_meshcop_e_publish_handler(void *args, esp_event_base_t base, int32_t event_id, void *data)
{
if (meshcop_e_publish_handler) {
meshcop_e_publish_handler(args, base, event_id, data);
}
}

static esp_event_handler_t meshcop_e_remove_handler = NULL;
static void esp_openthread_meshcop_e_remove_handler(void *args, esp_event_base_t base, int32_t event_id, void *data)
{
if (meshcop_e_remove_handler) {
meshcop_e_remove_handler(args, base, event_id, data);
}
}

void esp_openthread_register_meshcop_e_handler(esp_event_handler_t handler, bool for_publish)
{
if (for_publish) {
meshcop_e_publish_handler = handler;
} else if (!for_publish) {
meshcop_e_remove_handler = handler;
} else {
ESP_ERROR_CHECK(ESP_FAIL);
}
}

static esp_err_t register_openthread_event_handlers(esp_netif_t *esp_netif)
{
ESP_RETURN_ON_ERROR(
Expand All @@ -229,6 +256,12 @@ static esp_err_t register_openthread_event_handlers(esp_netif_t *esp_netif)
ESP_RETURN_ON_ERROR(esp_event_handler_register(OPENTHREAD_EVENT, OPENTHREAD_EVENT_MULTICAST_GROUP_LEAVE,
esp_netif_action_leave_ip6_multicast_group, esp_netif),
OT_PLAT_LOG_TAG, "OpenThread interface leave ip6 multicast group event register failed");
ESP_RETURN_ON_ERROR(esp_event_handler_register(OPENTHREAD_EVENT, OPENTHREAD_EVENT_PUBLISH_MESHCOP_E,
esp_openthread_meshcop_e_publish_handler, NULL),
OT_PLAT_LOG_TAG, "OpenThread publish meshcop-e service event register failed");
ESP_RETURN_ON_ERROR(esp_event_handler_register(OPENTHREAD_EVENT, OPENTHREAD_EVENT_REMOVE_MESHCOP_E,
esp_openthread_meshcop_e_remove_handler, NULL),
OT_PLAT_LOG_TAG, "OpenThread remove meshcop-e service event register failed");
return ESP_OK;
}

Expand All @@ -244,6 +277,8 @@ static void unregister_openthread_event_handlers(void)
esp_netif_action_join_ip6_multicast_group);
esp_event_handler_unregister(OPENTHREAD_EVENT, OPENTHREAD_EVENT_MULTICAST_GROUP_LEAVE,
esp_netif_action_leave_ip6_multicast_group);
esp_event_handler_unregister(OPENTHREAD_EVENT, OPENTHREAD_EVENT_PUBLISH_MESHCOP_E, esp_openthread_meshcop_e_publish_handler);
esp_event_handler_unregister(OPENTHREAD_EVENT, OPENTHREAD_EVENT_REMOVE_MESHCOP_E, esp_openthread_meshcop_e_remove_handler);
}

static esp_err_t openthread_netif_post_attach(esp_netif_t *esp_netif, void *args)
Expand Down
8 changes: 4 additions & 4 deletions examples/openthread/pytest_otbr.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
# This file contains the test scripts for Thread:

# Case 1: Thread network formation and attaching
# A Thread Border Router forms a Thread network, Thread devices attache to it, then test ping connection between them.
# A Thread Border Router forms a Thread network, Thread devices attach to it, then test ping connection between them.

# Case 2: Bidirectional IPv6 connectivity
# Test IPv6 ping connection between Thread device and Linux Host (via Thread Border Router).
Expand All @@ -29,10 +29,10 @@
# Case 4: Multicast forwarding from Thread to Wi-Fi network
# Linux Host joins the multicast group, test group communication from Thread to Wi-Fi network.

# Case 5: discover Serice published by Thread device
# Case 5: discover Service published by Thread device
# Thread device publishes the service, Linux Host discovers the service on Wi-Fi network.

# Case 6: discover Serice published by W-Fi device
# Case 6: discover Service published by W-Fi device
# Linux Host device publishes the service on Wi-Fi network, Thread device discovers the service.

# Case 7: ICMP communication via NAT64
Expand Down Expand Up @@ -728,7 +728,7 @@ def test_br_meshcop(Init_interface:bool, Init_avahi:bool, dut: Tuple[IdfDut, Idf
assert 'hostname = [esp-ot-br.local]' in str(output_str)
assert ('address = [' + ipv4_address + ']') in str(output_str)
assert 'dn=DefaultDomain' in str(output_str)
assert 'tv=1.3.0' in str(output_str)
assert 'tv=1.4.0' in str(output_str)
assert ('nn=' + networkname) in str(output_str)
assert 'mn=BorderRouter' in str(output_str)
assert 'vn=OpenThread' in str(output_str)
Expand Down

0 comments on commit 3efe49f

Please sign in to comment.