ESP: Enable Wi-Fi and Ethernet coexisting and add platform mdns for Ethernet (#32428)
* ESP32: Add platform mdns support for Ethernet network interface
* Enable Wi-Fi and Ethernet coexisting
* Restyled by clang-format
* readme file changes
* spell check
* Restyled by prettier-markdown
* review changes
* Restyled by clang-format
---------
Co-authored-by: Restyled.io <commits@restyled.io>
diff --git a/config/esp32/components/chip/CMakeLists.txt b/config/esp32/components/chip/CMakeLists.txt
index 14594a0..672cf84 100644
--- a/config/esp32/components/chip/CMakeLists.txt
+++ b/config/esp32/components/chip/CMakeLists.txt
@@ -441,16 +441,17 @@
endif()
endif()
-if((NOT CONFIG_USE_MINIMAL_MDNS) AND (CONFIG_ENABLE_WIFI_STATION OR CONFIG_ENABLE_WIFI_AP))
+if(NOT CONFIG_USE_MINIMAL_MDNS)
idf_build_get_property(build_components BUILD_COMPONENTS)
# For IDF v5.x, the mdns component was moved to idf_managed_components.
# We should use 'espressif__mdns' for 'idf_component_get_property'.
if("espressif__mdns" IN_LIST build_components)
idf_component_get_property(mdns_lib espressif__mdns COMPONENT_LIB)
+ list(APPEND chip_libraries $<TARGET_FILE:${mdns_lib}>)
elseif("mdns" IN_LIST build_components)
idf_component_get_property(mdns_lib mdns COMPONENT_LIB)
+ list(APPEND chip_libraries $<TARGET_FILE:${mdns_lib}>)
endif()
- list(APPEND chip_libraries $<TARGET_FILE:${mdns_lib}>)
endif()
if (CONFIG_ENABLE_ENCRYPTED_OTA)
diff --git a/examples/all-clusters-app/esp32/README.md b/examples/all-clusters-app/esp32/README.md
index d781702..60ee180 100644
--- a/examples/all-clusters-app/esp32/README.md
+++ b/examples/all-clusters-app/esp32/README.md
@@ -14,6 +14,7 @@
- [Cluster control](#cluster-control)
- [Matter OTA guide](../../../docs/guides/esp32/ota.md)
- [RPC console and Device Tracing](../../../docs/guides/esp32/rpc_console.md)
+- [Multiple Network Interfaces](#multiple-network-interfaces)
---
@@ -37,6 +38,24 @@
$ ./out/debug/chip-tool levelcontrol move-to-level Level=10 TransitionTime=0 OptionMask=0 OptionOverride=0 <NODE ID> <ENDPOINT>
```
+### Multiple Network Interfaces
+
+The data model of this example includes a secondary NetworkCommissioning
+Endpoint with another NetworkCommissioning cluster. The Endpoint Id for the
+secondary NetworkCommissioning Endpoint is 65534. The secondary
+NetworkCommissioning Endpoint can be used to manage the driver of extra network
+interface.
+
+For ESP32-C6 DevKits, if `CHIP_DEVICE_CONFIG_ENABLE_WIFI` and
+`CHIP_DEVICE_CONFIG_ENABLE_THREAD` are both enabled, the NetworkCommissioning
+cluster in Endpoint 0 will be used for Thread network driver and the same
+cluster on Endpoint 65534 will be used for Wi-Fi network driver.
+
+For ESP32-Ethernet-Kits, if `CHIP_DEVICE_CONFIG_ENABLE_WIFI` and
+`CHIP_DEVICE_CONFIG_ENABLE_ETHERNET` are both enabled, the NetworkCommissioning
+cluster in Endpoint 0 will be used for Ethernet network driver and the same
+cluster on Endpoint 65534 will be used for Wi-Fi network driver.
+
---
This demo app illustrates controlling OnOff cluster (Server) attributes of an
diff --git a/examples/all-clusters-app/esp32/main/main.cpp b/examples/all-clusters-app/esp32/main/main.cpp
index 4893cf1..a3af54f 100644
--- a/examples/all-clusters-app/esp32/main/main.cpp
+++ b/examples/all-clusters-app/esp32/main/main.cpp
@@ -114,7 +114,7 @@
{
Esp32AppServer::Init(&sCallbacks); // Init ZCL Data Model and CHIP App Server AND Initialize device attestation config
-#if !(CHIP_DEVICE_CONFIG_ENABLE_WIFI && CHIP_DEVICE_CONFIG_ENABLE_THREAD)
+#if !(CHIP_DEVICE_CONFIG_ENABLE_WIFI && (CHIP_DEVICE_CONFIG_ENABLE_THREAD || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET))
// We only have network commissioning on endpoint 0.
emberAfEndpointEnableDisable(kNetworkCommissioningEndpointSecondary, false);
#endif
diff --git a/examples/platform/esp32/common/Esp32AppServer.cpp b/examples/platform/esp32/common/Esp32AppServer.cpp
index b60685d..038ff05 100644
--- a/examples/platform/esp32/common/Esp32AppServer.cpp
+++ b/examples/platform/esp32/common/Esp32AppServer.cpp
@@ -51,19 +51,20 @@
namespace {
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
+#if CHIP_DEVICE_CONFIG_ENABLE_THREAD || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
constexpr chip::EndpointId kNetworkCommissioningEndpointWiFi = 0xFFFE;
#else
constexpr chip::EndpointId kNetworkCommissioningEndpointWiFi = 0;
#endif
app::Clusters::NetworkCommissioning::Instance
sWiFiNetworkCommissioningInstance(kNetworkCommissioningEndpointWiFi, &(NetworkCommissioning::ESPWiFiDriver::GetInstance()));
-#elif CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#if CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
static app::Clusters::NetworkCommissioning::Instance
sEthernetNetworkCommissioningInstance(0 /* Endpoint Id */, &(NetworkCommissioning::ESPEthernetDriver::GetInstance()));
#endif
-#if CONFIG_TEST_EVENT_TRIGGER_ENABLED
+#if CONFIG_TEST_EVENT_TRIGGER_ENABLED && CONFIG_ENABLE_OTA_REQUESTOR
static uint8_t sTestEventTriggerEnableKey[TestEventTriggerDelegate::kEnableKeyLength] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55,
0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
0xcc, 0xdd, 0xee, 0xff };
@@ -73,7 +74,7 @@
#endif
} // namespace
-#if CONFIG_TEST_EVENT_TRIGGER_ENABLED
+#if CONFIG_TEST_EVENT_TRIGGER_ENABLED && CONFIG_ENABLE_OTA_REQUESTOR
static int hex_digit_to_int(char hex)
{
if ('A' <= hex && hex <= 'F')
@@ -112,7 +113,7 @@
return buf_size;
}
-#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED
+#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED && CONFIG_ENABLE_OTA_REQUESTOR
void Esp32AppServer::DeInitBLEIfCommissioned(void)
{
@@ -175,7 +176,7 @@
VerifyOrDie(sTestEventTriggerDelegate.Init(ByteSpan(sTestEventTriggerEnableKey)) == CHIP_NO_ERROR);
VerifyOrDie(sTestEventTriggerDelegate.AddHandler(&sOtaTestEventTriggerHandler) == CHIP_NO_ERROR);
initParams.testEventTriggerDelegate = &sTestEventTriggerDelegate;
-#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED
+#endif // CONFIG_TEST_EVENT_TRIGGER_ENABLED && CONFIG_ENABLE_OTA_REQUESTOR
(void) initParams.InitializeStaticResourcesBeforeServerInit();
if (sAppDelegate != nullptr)
{
@@ -190,6 +191,9 @@
#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
sWiFiNetworkCommissioningInstance.Init();
#endif
+#if CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ sEthernetNetworkCommissioningInstance.Init();
+#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
if (chip::DeviceLayer::ConnectivityMgr().IsThreadProvisioned() &&
(chip::Server::GetInstance().GetFabricTable().FabricCount() != 0))
diff --git a/src/platform/ESP32/BUILD.gn b/src/platform/ESP32/BUILD.gn
index 768f6a2..b1d3650 100644
--- a/src/platform/ESP32/BUILD.gn
+++ b/src/platform/ESP32/BUILD.gn
@@ -122,10 +122,24 @@
"NetworkCommissioningDriver.cpp",
"NetworkCommissioningDriver.h",
]
+ }
+
+ if (chip_mdns == "platform") {
+ sources += [ "DnssdImpl.cpp" ]
+ }
+
+ if (chip_enable_ethernet) {
+ sources += [
+ "ConnectivityManagerImpl_Ethernet.cpp",
+ "NetworkCommissioningDriver_Ethernet.cpp",
+ ]
+ }
+
+ if (chip_enable_ethernet || chip_enable_wifi) {
if (chip_mdns == "platform") {
sources += [
- "WiFiDnssdImpl.cpp",
- "WiFiDnssdImpl.h",
+ "ESP32DnssdImpl.cpp",
+ "ESP32DnssdImpl.h",
]
}
if (chip_mdns == "minimal") {
@@ -141,17 +155,6 @@
}
}
- if (chip_mdns == "platform") {
- sources += [ "DnssdImpl.cpp" ]
- }
-
- if (chip_enable_ethernet) {
- sources += [
- "ConnectivityManagerImpl_Ethernet.cpp",
- "NetworkCommissioningDriver_Ethernet.cpp",
- ]
- }
-
if (chip_enable_openthread) {
sources += [
"../OpenThread/GenericNetworkCommissioningThreadDriver.cpp",
diff --git a/src/platform/ESP32/CHIPDevicePlatformConfig.h b/src/platform/ESP32/CHIPDevicePlatformConfig.h
index f0f2840..ef6f850 100644
--- a/src/platform/ESP32/CHIPDevicePlatformConfig.h
+++ b/src/platform/ESP32/CHIPDevicePlatformConfig.h
@@ -53,11 +53,12 @@
#define CHIP_DEVICE_CONFIG_ENABLE_THREAD_DNS_CLIENT CONFIG_OPENTHREAD_DNS_CLIENT
#if CONFIG_ENABLE_ETHERNET_TELEMETRY
-#define CHIP_DEVICE_CONFIG_ENABLE_WIFI 0
#define CHIP_DEVICE_CONFIG_ENABLE_ETHERNET 1
-#elif CONFIG_IDF_TARGET_ESP32H2
-#define CHIP_DEVICE_CONFIG_ENABLE_WIFI 0
-#else
+#endif
+
+#define CHIP_DEVICE_CONFIG_ENABLE_WIFI CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP | CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+#define CHIP_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY CONFIG_ENABLE_WIFI_TELEMETRY
#define CHIP_DEVICE_CONFIG_WIFI_STATION_RECONNECT_INTERVAL CONFIG_WIFI_STATION_RECONNECT_INTERVAL
#define CHIP_DEVICE_CONFIG_MAX_SCAN_NETWORKS_RESULTS CONFIG_MAX_SCAN_NETWORKS_RESULTS
#define CHIP_DEVICE_CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT CONFIG_WIFI_SCAN_COMPLETION_TIMEOUT
@@ -69,9 +70,7 @@
#define CHIP_DEVICE_CONFIG_WIFI_AP_BEACON_INTERVAL CONFIG_WIFI_AP_BEACON_INTERVAL
#define CHIP_DEVICE_CONFIG_WIFI_AP_IDLE_TIMEOUT CONFIG_WIFI_AP_IDLE_TIMEOUT
#endif /* CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP */
-#define CHIP_DEVICE_CONFIG_ENABLE_WIFI_TELEMETRY CONFIG_ENABLE_WIFI_TELEMETRY
-#define CHIP_DEVICE_CONFIG_ENABLE_WIFI CHIP_DEVICE_CONFIG_ENABLE_WIFI_AP | CHIP_DEVICE_CONFIG_ENABLE_WIFI_STATION
-#endif // CONFIG_IDF_TARGET_ESP32H2
+#endif // CHIP_DEVICE_CONFIG_ENABLE_WIFI
#if CONFIG_ENABLE_ICD_SERVER
#define CHIP_DEVICE_CONFIG_ICD_SLOW_POLL_INTERVAL chip::System::Clock::Milliseconds32(CONFIG_ICD_SLOW_POLL_INTERVAL_MS)
diff --git a/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp b/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp
index d8f7137..b36c4b8 100644
--- a/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp
+++ b/src/platform/ESP32/ConnectivityManagerImpl_Ethernet.cpp
@@ -30,7 +30,7 @@
#include <platform/ESP32/NetworkCommissioningDriver.h>
#include <platform/internal/BLEManager.h>
-#include "esp_eth_com.h"
+#include "esp_eth.h"
#include "esp_event.h"
#include "esp_netif.h"
#include "esp_wifi.h"
@@ -88,28 +88,42 @@
void ConnectivityManagerImpl::OnEthernetPlatformEvent(const ChipDeviceEvent * event)
{
- switch (event->Platform.ESPSystemEvent.Id)
+ if (event->Type == DeviceEventType::kESPSystemEvent)
{
- case IP_EVENT_ETH_GOT_IP:
- OnEthernetIPv4AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp);
- break;
- case IP_EVENT_ETH_LOST_IP:
- OnEthernetIPv4AddressLost();
- break;
- case IP_EVENT_GOT_IP6:
- if (strcmp(esp_netif_get_ifkey(event->Platform.ESPSystemEvent.Data.IpGotIp6.esp_netif), "ETH_DEF") == 0)
+ if (event->Platform.ESPSystemEvent.Base == IP_EVENT)
{
- OnEthernetIPv6AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp6);
+ switch (event->Platform.ESPSystemEvent.Id)
+ {
+ case IP_EVENT_ETH_GOT_IP:
+ OnEthernetIPv4AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp);
+ break;
+ case IP_EVENT_ETH_LOST_IP:
+ OnEthernetIPv4AddressLost();
+ break;
+ case IP_EVENT_GOT_IP6:
+ if (strcmp(esp_netif_get_ifkey(event->Platform.ESPSystemEvent.Data.IpGotIp6.esp_netif), "ETH_DEF") == 0)
+ {
+ OnEthernetIPv6AddressAvailable(event->Platform.ESPSystemEvent.Data.IpGotIp6);
+ }
+ break;
+ default:
+ break;
+ }
}
- break;
- case ETHERNET_EVENT_START:
- ChipLogProgress(DeviceLayer, "Ethernet Started");
- break;
- case ETHERNET_EVENT_STOP:
- ChipLogProgress(DeviceLayer, "Ethernet Stopped");
- break;
- default:
- break;
+ else if (event->Platform.ESPSystemEvent.Base == ETH_EVENT)
+ {
+ switch (event->Platform.ESPSystemEvent.Id)
+ {
+ case ETHERNET_EVENT_START:
+ ChipLogProgress(DeviceLayer, "Ethernet Started");
+ break;
+ case ETHERNET_EVENT_STOP:
+ ChipLogProgress(DeviceLayer, "Ethernet Stopped");
+ break;
+ default:
+ break;
+ }
+ }
}
}
diff --git a/src/platform/ESP32/DnssdImpl.cpp b/src/platform/ESP32/DnssdImpl.cpp
index 37d33f9..1ca0721 100644
--- a/src/platform/ESP32/DnssdImpl.cpp
+++ b/src/platform/ESP32/DnssdImpl.cpp
@@ -17,6 +17,7 @@
#include "lib/dnssd/platform/Dnssd.h"
#include "platform/CHIPDeviceLayer.h"
+#include "platform/ESP32/ESP32Utils.h"
#include <lib/support/CHIPMem.h>
#include <lib/support/CodeUtils.h>
@@ -24,8 +25,8 @@
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
#include <platform/OpenThread/OpenThreadDnssdImpl.h>
#endif
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
-#include <platform/ESP32/WiFiDnssdImpl.h>
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+#include <platform/ESP32/ESP32DnssdImpl.h>
#endif
using namespace ::chip::DeviceLayer;
@@ -35,8 +36,8 @@
CHIP_ERROR ChipDnssdInit(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context)
{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- ReturnErrorOnFailure(WiFiDnssdInit(initCallback, errorCallback, context));
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ ReturnErrorOnFailure(EspDnssdInit(initCallback, errorCallback, context));
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
ReturnErrorOnFailure(OpenThreadDnssdInit(initCallback, errorCallback, context));
@@ -48,11 +49,8 @@
CHIP_ERROR ChipDnssdPublishService(const DnssdService * service, DnssdPublishCallback callback, void * context)
{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- if (ConnectivityMgr().IsWiFiStationProvisioned())
- {
- ReturnErrorOnFailure(WiFiDnssdPublishService(service, callback, context));
- }
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ ReturnErrorOnFailure(EspDnssdPublishService(service, callback, context));
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
if (ConnectivityMgr().IsThreadProvisioned())
@@ -65,11 +63,8 @@
CHIP_ERROR ChipDnssdRemoveServices()
{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- if (ConnectivityMgr().IsWiFiStationProvisioned())
- {
- ReturnErrorOnFailure(WiFiDnssdRemoveServices());
- }
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ ReturnErrorOnFailure(EspDnssdRemoveServices());
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
if (ConnectivityMgr().IsThreadProvisioned())
@@ -95,10 +90,11 @@
chip::Inet::InterfaceId interface, DnssdBrowseCallback callback, void * context,
intptr_t * browseIdentifier)
{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- if (ConnectivityMgr().IsWiFiStationProvisioned())
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ if (ConnectivityMgr().IsWiFiStationProvisioned() ||
+ Internal::ESP32Utils::HasIPv6LinkLocalAddress(Internal::ESP32Utils::kDefaultEthernetNetifKey))
{
- ReturnErrorOnFailure(WiFiDnssdBrowse(type, protocol, addressType, interface, callback, context, browseIdentifier));
+ ReturnErrorOnFailure(EspDnssdBrowse(type, protocol, addressType, interface, callback, context, browseIdentifier));
}
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
@@ -118,10 +114,11 @@
CHIP_ERROR ChipDnssdResolve(DnssdService * service, chip::Inet::InterfaceId interface, DnssdResolveCallback callback,
void * context)
{
-#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
- if (ConnectivityMgr().IsWiFiStationProvisioned())
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI || CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ if (ConnectivityMgr().IsWiFiStationProvisioned() ||
+ Internal::ESP32Utils::HasIPv6LinkLocalAddress(Internal::ESP32Utils::kDefaultEthernetNetifKey))
{
- ReturnErrorOnFailure(WiFiDnssdResolve(service, interface, callback, context));
+ ReturnErrorOnFailure(EspDnssdResolve(service, interface, callback, context));
}
#endif
#if CHIP_DEVICE_CONFIG_ENABLE_THREAD
diff --git a/src/platform/ESP32/WiFiDnssdImpl.cpp b/src/platform/ESP32/ESP32DnssdImpl.cpp
similarity index 91%
rename from src/platform/ESP32/WiFiDnssdImpl.cpp
rename to src/platform/ESP32/ESP32DnssdImpl.cpp
index b927dd2..2c896a0 100644
--- a/src/platform/ESP32/WiFiDnssdImpl.cpp
+++ b/src/platform/ESP32/ESP32DnssdImpl.cpp
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-#include "WiFiDnssdImpl.h"
+#include "ESP32DnssdImpl.h"
#include "lib/dnssd/platform/Dnssd.h"
#include <esp_err.h>
@@ -130,7 +130,7 @@
return CHIP_NO_ERROR;
}
-CHIP_ERROR WiFiDnssdInit(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context)
+CHIP_ERROR EspDnssdInit(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context)
{
CHIP_ERROR error = CHIP_NO_ERROR;
esp_err_t espError;
@@ -153,7 +153,7 @@
return protocol == DnssdServiceProtocol::kDnssdProtocolTcp ? "_tcp" : "_udp";
}
-CHIP_ERROR WiFiDnssdPublishService(const DnssdService * service, DnssdPublishCallback callback, void * context)
+CHIP_ERROR EspDnssdPublishService(const DnssdService * service, DnssdPublishCallback callback, void * context)
{
CHIP_ERROR error = CHIP_NO_ERROR;
mdns_txt_item_t * items = nullptr;
@@ -165,7 +165,7 @@
}
VerifyOrExit(service->mTextEntrySize <= UINT8_MAX, error = CHIP_ERROR_INVALID_ARGUMENT);
- if (service->mTextEntries)
+ if (service->mTextEntries && service->mTextEntrySize > 0)
{
items = static_cast<mdns_txt_item_t *>(chip::Platform::MemoryCalloc(service->mTextEntrySize, sizeof(mdns_txt_item_t)));
VerifyOrExit(items != nullptr, error = CHIP_ERROR_NO_MEMORY);
@@ -203,13 +203,30 @@
return error;
}
-CHIP_ERROR WiFiDnssdRemoveServices()
+CHIP_ERROR EspDnssdRemoveServices()
{
mdns_service_remove("_matter", "_tcp");
mdns_service_remove("_matterc", "_udp");
+ mdns_service_remove("_matterd", "_udp");
return CHIP_NO_ERROR;
}
+static Inet::InterfaceId GetServiceInterfaceId(esp_netif_t * esp_netif)
+{
+ if (!esp_netif)
+ {
+ // If the InterfaceId in the context and esp_netif in current result is Null,
+ // we will use the Station or Ethernet netif by default.
+#if CHIP_DEVICE_CONFIG_ENABLE_WIFI
+ return Inet::InterfaceId(DeviceLayer::Internal::ESP32Utils::GetStationNetif());
+#elif CHIP_DEVICE_CONFIG_ENABLE_ETHERNET
+ return Inet::InterfaceId(
+ DeviceLayer::Internal::ESP32Utils::GetNetif(DeviceLayer::Internal::ESP32Utils::kDefaultEthernetNetifKey));
+#endif
+ }
+ return Inet::InterfaceId(static_cast<struct netif *>(esp_netif_get_netif_impl(esp_netif)));
+}
+
static Inet::IPAddressType MapAddressType(mdns_ip_protocol_t ip_protocol)
{
switch (ip_protocol)
@@ -330,16 +347,9 @@
ctx->mService[servicesIndex].mTextEntrySize = currentResult->txt_count;
ctx->mService[servicesIndex].mSubTypes = NULL;
ctx->mService[servicesIndex].mSubTypeSize = 0;
- if (ctx->mInterfaceId == chip::Inet::InterfaceId::Null())
- {
- // If the InterfaceId in the context is Null, we will use the Station netif by default.
- ctx->mService[servicesIndex].mInterface =
- Inet::InterfaceId(DeviceLayer::Internal::ESP32Utils::GetStationNetif());
- }
- else
- {
- ctx->mService[servicesIndex].mInterface = ctx->mInterfaceId;
- }
+ ctx->mService[servicesIndex].mInterface = ctx->mInterfaceId != chip::Inet::InterfaceId::Null()
+ ? ctx->mInterfaceId
+ : GetServiceInterfaceId(currentResult->esp_netif);
if (currentResult->addr)
{
Inet::IPAddress IPAddr;
@@ -416,16 +426,9 @@
ctx->mService->mPort = ctx->mSrvQueryResult->port;
ctx->mService->mSubTypes = nullptr;
ctx->mService->mSubTypeSize = 0;
- if (ctx->mInterfaceId == chip::Inet::InterfaceId::Null())
- {
- // If the InterfaceId in the context is Null, we will use the Station netif by default.
- ctx->mService->mInterface = Inet::InterfaceId(DeviceLayer::Internal::ESP32Utils::GetStationNetif());
- }
- else
- {
- ctx->mService->mInterface = ctx->mInterfaceId;
- }
-
+ ctx->mService->mInterface = ctx->mInterfaceId != chip::Inet::InterfaceId::Null()
+ ? ctx->mInterfaceId
+ : GetServiceInterfaceId(ctx->mSrvQueryResult->esp_netif);
return CHIP_NO_ERROR;
}
else
@@ -595,9 +598,9 @@
chip::DeviceLayer::PlatformMgr().ScheduleWork(MdnsQueryDone, reinterpret_cast<intptr_t>(searchHandle));
}
-CHIP_ERROR WiFiDnssdBrowse(const char * type, DnssdServiceProtocol protocol, chip::Inet::IPAddressType addressType,
- chip::Inet::InterfaceId interface, DnssdBrowseCallback callback, void * context,
- intptr_t * browseIdentifier)
+CHIP_ERROR EspDnssdBrowse(const char * type, DnssdServiceProtocol protocol, chip::Inet::IPAddressType addressType,
+ chip::Inet::InterfaceId interface, DnssdBrowseCallback callback, void * context,
+ intptr_t * browseIdentifier)
{
CHIP_ERROR error = CHIP_NO_ERROR;
mdns_search_once_t * queryHandle =
@@ -623,8 +626,7 @@
return error;
}
-CHIP_ERROR WiFiDnssdResolve(DnssdService * service, chip::Inet::InterfaceId interface, DnssdResolveCallback callback,
- void * context)
+CHIP_ERROR EspDnssdResolve(DnssdService * service, chip::Inet::InterfaceId interface, DnssdResolveCallback callback, void * context)
{
CHIP_ERROR error = CHIP_NO_ERROR;
mdns_search_once_t * querySrv = mdns_query_async_new(service->mName, service->mType, GetProtocolString(service->mProtocol),
diff --git a/src/platform/ESP32/WiFiDnssdImpl.h b/src/platform/ESP32/ESP32DnssdImpl.h
similarity index 85%
rename from src/platform/ESP32/WiFiDnssdImpl.h
rename to src/platform/ESP32/ESP32DnssdImpl.h
index 1f1c378..aa7f0f6 100644
--- a/src/platform/ESP32/WiFiDnssdImpl.h
+++ b/src/platform/ESP32/ESP32DnssdImpl.h
@@ -139,18 +139,18 @@
}
};
-CHIP_ERROR WiFiDnssdInit(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context);
+CHIP_ERROR EspDnssdInit(DnssdAsyncReturnCallback initCallback, DnssdAsyncReturnCallback errorCallback, void * context);
-CHIP_ERROR WiFiDnssdPublishService(const DnssdService * service, DnssdPublishCallback callback, void * context);
+CHIP_ERROR EspDnssdPublishService(const DnssdService * service, DnssdPublishCallback callback, void * context);
-CHIP_ERROR WiFiDnssdRemoveServices();
+CHIP_ERROR EspDnssdRemoveServices();
-CHIP_ERROR WiFiDnssdBrowse(const char * type, DnssdServiceProtocol protocol, chip::Inet::IPAddressType addressType,
- chip::Inet::InterfaceId interface, DnssdBrowseCallback callback, void * context,
- intptr_t * browseIdentifier);
+CHIP_ERROR EspDnssdBrowse(const char * type, DnssdServiceProtocol protocol, chip::Inet::IPAddressType addressType,
+ chip::Inet::InterfaceId interface, DnssdBrowseCallback callback, void * context,
+ intptr_t * browseIdentifier);
-CHIP_ERROR WiFiDnssdResolve(DnssdService * service, chip::Inet::InterfaceId interface, DnssdResolveCallback callback,
- void * context);
+CHIP_ERROR EspDnssdResolve(DnssdService * service, chip::Inet::InterfaceId interface, DnssdResolveCallback callback,
+ void * context);
} // namespace Dnssd
} // namespace chip
diff --git a/src/platform/ESP32/ESP32Utils.h b/src/platform/ESP32/ESP32Utils.h
index 1c052ee..b82734c 100644
--- a/src/platform/ESP32/ESP32Utils.h
+++ b/src/platform/ESP32/ESP32Utils.h
@@ -54,6 +54,7 @@
static constexpr char kDefaultWiFiStationNetifKey[] = "WIFI_STA_DEF";
static constexpr char kDefaultWiFiAPNetifKey[] = "WIFI_AP_DEF";
+ static constexpr char kDefaultEthernetNetifKey[] = "ETH_DEF";
};
#define ReturnMappedErrorOnFailure(expr) \