[core] Use MAC address size constants instead of literals (#18254)

This commit is contained in:
Jesse Hills
2026-08-11 08:27:32 -04:00
committed by GitHub
parent 2ff55e3058
commit 04dd6b3a55
19 changed files with 34 additions and 32 deletions
+2 -3
View File
@@ -1772,9 +1772,8 @@ bool APIConnection::send_device_info_response_() {
#ifdef USE_AREAS
resp.suggested_area = StringRef(App.get_area());
#endif
// Stack buffer for MAC address (XX:XX:XX:XX:XX:XX\0 = 18 bytes)
char mac_address[18];
uint8_t mac[6];
char mac_address[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
uint8_t mac[MAC_ADDRESS_SIZE];
get_mac_address_raw(mac);
format_mac_addr_upper(mac, mac_address);
resp.mac_address = StringRef(mac_address);
@@ -14,7 +14,7 @@ static const char *const TAG = "captive_portal";
void CaptivePortal::handle_config(AsyncWebServerRequest *request) {
AsyncResponseStream *stream = request->beginResponseStream(ESPHOME_F("application/json"));
stream->addHeader(ESPHOME_F("cache-control"), ESPHOME_F("public, max-age=0, must-revalidate"));
char mac_s[18];
char mac_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
const char *mac_str = get_mac_address_pretty_into_buffer(mac_s);
#ifdef USE_ESP8266
stream->print(ESPHOME_F("{\"mac\":\""));
+2 -1
View File
@@ -4,6 +4,7 @@
#include "esphome/core/application.h"
#include "esphome/core/log.h"
#include "esphome/core/hal.h"
#include "esphome/core/helpers.h"
#include <esp_sleep.h>
#include <esp_idf_version.h>
@@ -249,7 +250,7 @@ size_t DebugComponent::get_device_info_(std::span<char, DEVICE_INFO_BUFFER_SIZE>
const char *reset_reason = get_reset_reason_(std::span<char, RESET_REASON_BUFFER_SIZE>(reset_buffer));
const char *wakeup_cause = get_wakeup_cause_(std::span<char, WAKEUP_CAUSE_BUFFER_SIZE>(wakeup_buffer));
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_mac_address_raw(mac);
ESP_LOGD(TAG,
+1 -1
View File
@@ -109,7 +109,7 @@ void set_mac_address(uint8_t *mac) { esp_base_mac_addr_set(mac); }
bool has_custom_mac_address() {
#if !defined(USE_ESP32_IGNORE_EFUSE_CUSTOM_MAC)
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
// do not use 'esp_efuse_mac_get_custom(mac)' because it drops an error in the logs whenever it fails
#ifndef USE_ESP32_VARIANT_ESP32
return (esp_efuse_read_field_blob(ESP_EFUSE_USER_DATA_MAC_CUSTOM, mac, MAC_ADDRESS_SIZE_BITS) == ESP_OK) &&
@@ -144,7 +144,7 @@ class EthernetComponent final : public Component {
#ifdef USE_ETHERNET_MANUAL_IP
void set_manual_ip(const ManualIP &manual_ip);
#endif
void set_fixed_mac(const std::array<uint8_t, 6> &mac) { this->fixed_mac_ = mac; }
void set_fixed_mac(const std::array<uint8_t, MAC_ADDRESS_SIZE> &mac) { this->fixed_mac_ = mac; }
network::IPAddresses get_ip_addresses();
network::IPAddress get_dns_address(uint8_t num);
@@ -336,7 +336,7 @@ class EthernetComponent final : public Component {
bool ipv6_setup_done_{false};
#endif /* LWIP_IPV6 */
optional<std::array<uint8_t, 6>> fixed_mac_;
optional<std::array<uint8_t, MAC_ADDRESS_SIZE>> fixed_mac_;
#ifdef USE_ETHERNET_IP_STATE_LISTENERS
StaticVector<EthernetIPStateListener *, ESPHOME_ETHERNET_IP_STATE_LISTENERS> ip_state_listeners_;
@@ -429,9 +429,9 @@ void EthernetComponent::ethernet_lazy_init_() {
#endif // !USE_ETHERNET_SPI
// use ESP internal eth mac
uint8_t mac_addr[6];
uint8_t mac_addr[MAC_ADDRESS_SIZE];
if (this->fixed_mac_.has_value()) {
memcpy(mac_addr, this->fixed_mac_->data(), 6);
memcpy(mac_addr, this->fixed_mac_->data(), MAC_ADDRESS_SIZE);
} else {
esp_read_mac(mac_addr, ESP_MAC_ETH);
}
@@ -926,7 +926,7 @@ void EthernetComponent::get_eth_mac_address_raw(uint8_t *mac) {
// External callers (mdns, ethernet_info, etc.) may ask for the MAC before/regardless
// of whether ethernet is enabled. Use the configured MAC if set, else the system ETH MAC.
if (this->fixed_mac_.has_value()) {
memcpy(mac, this->fixed_mac_->data(), 6);
memcpy(mac, this->fixed_mac_->data(), MAC_ADDRESS_SIZE);
} else {
esp_read_mac(mac, ESP_MAC_ETH);
}
@@ -944,7 +944,7 @@ std::string EthernetComponent::get_eth_mac_address_pretty() {
const char *EthernetComponent::get_eth_mac_address_pretty_into_buffer(
std::span<char, MAC_ADDRESS_PRETTY_BUFFER_SIZE> buf) {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_eth_mac_address_raw(mac);
format_mac_addr_upper(mac, buf.data());
return buf.data();
@@ -245,7 +245,7 @@ void EthernetComponent::get_eth_mac_address_raw(uint8_t *mac) {
if (this->eth_ != nullptr) {
this->eth_->macAddress(mac);
} else {
memset(mac, 0, 6);
memset(mac, 0, MAC_ADDRESS_SIZE);
}
}
@@ -256,7 +256,7 @@ std::string EthernetComponent::get_eth_mac_address_pretty() {
const char *EthernetComponent::get_eth_mac_address_pretty_into_buffer(
std::span<char, MAC_ADDRESS_PRETTY_BUFFER_SIZE> buf) {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_eth_mac_address_raw(mac);
format_mac_addr_upper(mac, buf.data());
return buf.data();
+1 -1
View File
@@ -39,7 +39,7 @@ bool Mutex::try_lock() { return static_cast<std::mutex *>(handle_)->try_lock();
void Mutex::unlock() { static_cast<std::mutex *>(handle_)->unlock(); }
void get_mac_address_raw(uint8_t *mac) { // NOLINT(readability-non-const-parameter)
static const uint8_t esphome_host_mac_address[6] = USE_ESPHOME_HOST_MAC_ADDRESS;
static const uint8_t esphome_host_mac_address[MAC_ADDRESS_SIZE] = USE_ESPHOME_HOST_MAC_ADDRESS;
memcpy(mac, esphome_host_mac_address, sizeof(esphome_host_mac_address));
}
@@ -12,7 +12,7 @@ static const char *const TAG = "tinyusb";
void TinyUSB::setup() {
// Use the device's MAC address as its serial number if no serial number is defined
if (this->string_descriptor_[SERIAL_NUMBER] == nullptr) {
static char mac_addr_buf[13];
static char mac_addr_buf[MAC_ADDRESS_BUFFER_SIZE];
get_mac_address_into_buffer(mac_addr_buf);
this->string_descriptor_[SERIAL_NUMBER] = mac_addr_buf;
}
+2 -1
View File
@@ -3,6 +3,7 @@
#if defined(USE_NETWORK) && !defined(USE_ZEPHYR)
#include "esphome/components/button/button.h"
#include "esphome/core/component.h"
#include "esphome/core/helpers.h"
#if defined(USE_SOCKET_IMPL_BSD_SOCKETS) || defined(USE_SOCKET_IMPL_LWIP_SOCKETS)
#include "esphome/components/socket/socket.h"
#else
@@ -27,7 +28,7 @@ class WakeOnLanButton final : public button::Button, public Component {
#endif
void press_action() override;
uint16_t port_{9};
uint8_t macaddr_[6];
uint8_t macaddr_[MAC_ADDRESS_SIZE];
};
} // namespace esphome::wake_on_lan
+1 -1
View File
@@ -510,7 +510,7 @@ void WebServer::handle_pna_cors_request(AsyncWebServerRequest *request) {
response->addHeader(ESPHOME_F("Access-Control-Allow-Origin"), origin.empty() ? "*" : origin.c_str());
response->addHeader(ESPHOME_F("Access-Control-Allow-Private-Network"), ESPHOME_F("true"));
response->addHeader(ESPHOME_F("Private-Network-Access-Name"), App.get_name().c_str());
char mac_s[18];
char mac_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
response->addHeader(ESPHOME_F("Private-Network-Access-ID"), get_mac_address_pretty_into_buffer(mac_s));
request->send(response);
}
+2 -2
View File
@@ -1117,7 +1117,7 @@ void WiFiComponent::connect_soon_() {
void WiFiComponent::start_connecting(const WiFiAP &ap) {
// Log connection attempt at INFO level with priority
char bssid_s[18];
char bssid_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
int8_t priority = 0;
if (ap.has_bssid()) {
@@ -2068,7 +2068,7 @@ void WiFiComponent::log_and_adjust_priority_for_failed_connect_() {
(old_priority > std::numeric_limits<int8_t>::min()) ? (old_priority - 1) : std::numeric_limits<int8_t>::min();
this->set_sta_priority(failed_bssid.value(), new_priority);
}
char bssid_s[18];
char bssid_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
format_mac_addr_upper(failed_bssid.value().data(), bssid_s);
ESP_LOGD(TAG, "Failed " LOG_SECRET("'%s'") " " LOG_SECRET("(%s)") ", priority %d → %d", ssid != nullptr ? ssid : "",
bssid_s, old_priority, new_priority);
@@ -516,7 +516,7 @@ void WiFiComponent::wifi_event_callback(System_Event_t *event) {
(const char *) it.ssid);
global_wifi_component->sta_state_ = static_cast<uint8_t>(ESP8266WiFiSTAState::ERROR_NOT_FOUND);
} else {
char bssid_s[18];
char bssid_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
format_mac_addr_upper(it.bssid, bssid_s);
ESP_LOGW(TAG, "Disconnected ssid='%.*s' bssid=" LOG_SECRET("%s") " reason='%s'", it.ssid_len,
(const char *) it.ssid, bssid_s, LOG_STR_ARG(get_disconnect_reason_str(it.reason)));
@@ -140,7 +140,7 @@ void event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, voi
}
void WiFiComponent::wifi_pre_setup_() {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
if (has_custom_mac_address()) {
get_mac_address_raw(mac);
set_mac_address(mac);
@@ -860,7 +860,7 @@ void WiFiComponent::wifi_process_event_(IDFWiFiEvent *data) {
ESP_LOGI(TAG, "Disconnected ssid='%.*s' reason='Station Roaming'", it.ssid_len, (const char *) it.ssid);
return;
} else {
char bssid_s[18];
char bssid_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
format_mac_addr_upper(it.bssid, bssid_s);
ESP_LOGW(TAG, "Disconnected ssid='%.*s' bssid=" LOG_SECRET("%s") " reason='%s'", it.ssid_len,
(const char *) it.ssid, bssid_s, get_disconnect_reason_str(it.reason));
@@ -81,7 +81,7 @@ struct LTWiFiEvent {
uint8_t scan_id;
} scan_done;
struct {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
int rssi;
} ap_probe_req;
} data;
@@ -391,7 +391,7 @@ void WiFiComponent::wifi_event_callback_(esphome_wifi_event_id_t event, esphome_
}
case ESPHOME_EVENT_ID_WIFI_AP_PROBEREQRECVED: {
auto &it = info.wifi_ap_probereqrecved;
memcpy(to_send->data.ap_probe_req.mac, it.mac, 6);
memcpy(to_send->data.ap_probe_req.mac, it.mac, MAC_ADDRESS_SIZE);
to_send->data.ap_probe_req.rssi = it.rssi;
break;
}
@@ -1,5 +1,6 @@
#include "wifi_info_text_sensor.h"
#ifdef USE_WIFI
#include "esphome/core/helpers.h"
#include "esphome/core/log.h"
#ifdef USE_ESP8266
@@ -125,7 +126,7 @@ void BSSIDWiFiInfo::setup() { wifi::global_wifi_component->add_connect_state_lis
void BSSIDWiFiInfo::dump_config() { LOG_TEXT_SENSOR("", "BSSID", this); }
void BSSIDWiFiInfo::on_wifi_connect_state(StringRef ssid, std::span<const uint8_t, 6> bssid) {
char buf[18] = "unknown";
char buf[MAC_ADDRESS_PRETTY_BUFFER_SIZE] = "unknown";
if (mac_address_is_valid(bssid.data())) {
format_mac_addr_upper(bssid.data(), buf);
}
@@ -87,7 +87,7 @@ class PowerSaveModeWiFiInfo final : public Component,
class MacAddressWifiInfo final : public Component, public text_sensor::TextSensor {
public:
void setup() override {
char mac_s[18];
char mac_s[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
this->publish_state(get_mac_address_pretty_into_buffer(mac_s));
}
void dump_config() override;
+3 -3
View File
@@ -144,7 +144,7 @@ std::vector<uint8_t> base64_decode(const std::string &encoded_string) {
// --- Hex/binary formatting helpers ---
std::string format_mac_address_pretty(const uint8_t *mac) {
char buf[18];
char buf[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
format_mac_addr_upper(mac, buf);
return std::string(buf);
}
@@ -206,9 +206,9 @@ std::string format_bin(const uint8_t *data, size_t length) {
// --- MAC address helpers ---
std::string get_mac_address() {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_mac_address_raw(mac);
char buf[13];
char buf[MAC_ADDRESS_BUFFER_SIZE];
format_mac_addr_lower_no_sep(mac, buf);
return std::string(buf);
}
+2 -2
View File
@@ -808,13 +808,13 @@ void HighFrequencyLoopRequester::stop() {
// get_mac_address, get_mac_address_pretty moved to alloc_helpers.cpp
void get_mac_address_into_buffer(std::span<char, MAC_ADDRESS_BUFFER_SIZE> buf) {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_mac_address_raw(mac);
format_mac_addr_lower_no_sep(mac, buf.data());
}
const char *get_mac_address_pretty_into_buffer(std::span<char, MAC_ADDRESS_PRETTY_BUFFER_SIZE> buf) {
uint8_t mac[6];
uint8_t mac[MAC_ADDRESS_SIZE];
get_mac_address_raw(mac);
format_mac_addr_upper(mac, buf.data());
return buf.data();