From 5786e60242aa800bc3352b9749c671fafc0855bb Mon Sep 17 00:00:00 2001 From: vd994 <232267614+vd994@users.noreply.github.com> Date: Thu, 13 Nov 2025 22:19:06 +0000 Subject: [PATCH 1/2] Don't broadcast the MAC address - Add config.device.send_mac_address in NodeDB.cpp - Randomize the nodenum on first boot - A factory reset generates a new nodenum --- src/mesh/NodeDB.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 6291fa4cc9..e00c3a514b 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -255,6 +255,11 @@ NodeDB::NodeDB() // Ensure user (nodeinfo) role is set to whatever we're configured to owner.role = config.device.role; // Ensure macaddr is set to our macaddr as it will be copied in our info below + if (config.device.send_mac_address == true) { + getMacAddr(ourMacAddr); // Make sure ourMacAddr is set + } else { + memset(ourMacAddr, 0, sizeof(ourMacAddr)); + } memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr)); // Ensure owner.id is always derived from the node number snprintf(owner.id, sizeof(owner.id), "!%08x", getNodeNum()); @@ -522,6 +527,7 @@ void NodeDB::installDefaultNodeDatabase() nodeDatabase.version = DEVICESTATE_CUR_VER; nodeDatabase.nodes = std::vector(MAX_NUM_NODES); numMeshNodes = 0; + myNodeInfo.my_node_num = 0; meshNodes = &nodeDatabase.nodes; } @@ -544,6 +550,7 @@ void NodeDB::installDefaultConfig(bool preserveKey = false) config.has_bluetooth = (HAS_BLUETOOTH ? true : false); config.has_security = true; config.device.rebroadcast_mode = meshtastic_Config_DeviceConfig_RebroadcastMode_ALL; + config.device.send_mac_address = false; config.lora.sx126x_rx_boosted_gain = true; config.lora.tx_enabled = @@ -1077,7 +1084,7 @@ void NodeDB::installDefaultDeviceState() generatePacketId(); // FIXME - ugly way to init current_packet_id; // Set default owner name - pickNewNodeNum(); // based on macaddr now + pickNewNodeNum(); #ifdef USERPREFS_CONFIG_OWNER_LONG_NAME snprintf(owner.long_name, sizeof(owner.long_name), (const char *)USERPREFS_CONFIG_OWNER_LONG_NAME); #else @@ -1089,7 +1096,7 @@ void NodeDB::installDefaultDeviceState() snprintf(owner.short_name, sizeof(owner.short_name), "%04x", getNodeNum() & 0x0ffff); #endif snprintf(owner.id, sizeof(owner.id), "!%08x", getNodeNum()); // Default node ID now based on nodenum - memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr)); + memset(owner.macaddr, 0, sizeof(owner.macaddr)); owner.has_is_unmessagable = true; owner.is_unmessagable = false; } @@ -1103,20 +1110,18 @@ void NodeDB::installDefaultDeviceState() void NodeDB::pickNewNodeNum() { NodeNum nodeNum = myNodeInfo.my_node_num; - getMacAddr(ourMacAddr); // Make sure ourMacAddr is set if (nodeNum == 0) { - // Pick an initial nodenum based on the macaddr - nodeNum = (ourMacAddr[2] << 24) | (ourMacAddr[3] << 16) | (ourMacAddr[4] << 8) | ourMacAddr[5]; + // Pick a random initial nodenum + nodeNum = random(NUM_RESERVED, LONG_MAX); } meshtastic_NodeInfoLite *found; - while (((found = getMeshNode(nodeNum)) && memcmp(found->user.macaddr, ourMacAddr, sizeof(ourMacAddr)) != 0) || + while (((found = getMeshNode(nodeNum)) && found != getMeshNodeByIndex(0)) || (nodeNum == NODENUM_BROADCAST || nodeNum < NUM_RESERVED)) { NodeNum candidate = random(NUM_RESERVED, LONG_MAX); // try a new random choice if (found) - LOG_WARN("NOTE! Our desired nodenum 0x%x is invalid or in use, by MAC ending in 0x%02x%02x vs our 0x%02x%02x, so " - "trying for 0x%x", - nodeNum, found->user.macaddr[4], found->user.macaddr[5], ourMacAddr[4], ourMacAddr[5], candidate); + LOG_WARN("NOTE! Our desired nodenum 0x%x is invalid or in use, so trying for 0x%x", + nodeNum, candidate); nodeNum = candidate; } LOG_DEBUG("Use nodenum 0x%x ", nodeNum); From be301673c6b0c1deec34ce42ff09c824991b01f1 Mon Sep 17 00:00:00 2001 From: vd994 <232267614+vd994@users.noreply.github.com> Date: Fri, 14 Nov 2025 16:58:27 +0000 Subject: [PATCH 2/2] Fix protobufs --- .gitmodules | 3 ++- src/mesh/generated/meshtastic/config.pb.h | 11 +++++++---- src/mesh/generated/meshtastic/deviceonly.pb.h | 2 +- src/mesh/generated/meshtastic/localonly.pb.h | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7c54ad5139..37d20590c5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,7 @@ [submodule "protobufs"] path = protobufs - url = https://github.com/meshtastic/protobufs.git + url = https://github.com/vd994/protobufs.git + branch = no-mac-address [submodule "meshtestic"] path = meshtestic url = https://github.com/meshtastic/meshTestic diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index 327568316c..942d2ff741 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -357,6 +357,7 @@ typedef struct _meshtastic_Config_DeviceConfig { /* Controls buzzer behavior for audio feedback Defaults to ENABLED */ meshtastic_Config_DeviceConfig_BuzzerMode buzzer_mode; + bool send_mac_address; } meshtastic_Config_DeviceConfig; /* Position Config */ @@ -723,7 +724,7 @@ extern "C" { /* Initializer values for message structs */ #define meshtastic_Config_init_default {0, {meshtastic_Config_DeviceConfig_init_default}} -#define meshtastic_Config_DeviceConfig_init_default {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN} +#define meshtastic_Config_DeviceConfig_init_default {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN, 0} #define meshtastic_Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN} #define meshtastic_Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_Config_NetworkConfig_init_default {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_default, "", 0, 0} @@ -734,7 +735,7 @@ extern "C" { #define meshtastic_Config_SecurityConfig_init_default {{0, {0}}, {0, {0}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}}, 0, 0, 0, 0} #define meshtastic_Config_SessionkeyConfig_init_default {0} #define meshtastic_Config_init_zero {0, {meshtastic_Config_DeviceConfig_init_zero}} -#define meshtastic_Config_DeviceConfig_init_zero {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN} +#define meshtastic_Config_DeviceConfig_init_zero {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN, 0} #define meshtastic_Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN} #define meshtastic_Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_Config_NetworkConfig_init_zero {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_zero, "", 0, 0} @@ -758,6 +759,7 @@ extern "C" { #define meshtastic_Config_DeviceConfig_tzdef_tag 11 #define meshtastic_Config_DeviceConfig_led_heartbeat_disabled_tag 12 #define meshtastic_Config_DeviceConfig_buzzer_mode_tag 13 +#define meshtastic_Config_DeviceConfig_send_mac_address_tag 14 #define meshtastic_Config_PositionConfig_position_broadcast_secs_tag 1 #define meshtastic_Config_PositionConfig_position_broadcast_smart_enabled_tag 2 #define meshtastic_Config_PositionConfig_fixed_position_tag 3 @@ -883,7 +885,8 @@ X(a, STATIC, SINGULAR, BOOL, is_managed, 9) \ X(a, STATIC, SINGULAR, BOOL, disable_triple_click, 10) \ X(a, STATIC, SINGULAR, STRING, tzdef, 11) \ X(a, STATIC, SINGULAR, BOOL, led_heartbeat_disabled, 12) \ -X(a, STATIC, SINGULAR, UENUM, buzzer_mode, 13) +X(a, STATIC, SINGULAR, UENUM, buzzer_mode, 13) \ +X(a, STATIC, SINGULAR, BOOL, send_mac_address, 14) #define meshtastic_Config_DeviceConfig_CALLBACK NULL #define meshtastic_Config_DeviceConfig_DEFAULT NULL @@ -1030,7 +1033,7 @@ extern const pb_msgdesc_t meshtastic_Config_SessionkeyConfig_msg; /* Maximum encoded size of messages (where known) */ #define MESHTASTIC_MESHTASTIC_CONFIG_PB_H_MAX_SIZE meshtastic_Config_size #define meshtastic_Config_BluetoothConfig_size 10 -#define meshtastic_Config_DeviceConfig_size 100 +#define meshtastic_Config_DeviceConfig_size 102 #define meshtastic_Config_DisplayConfig_size 34 #define meshtastic_Config_LoRaConfig_size 85 #define meshtastic_Config_NetworkConfig_IpV4Config_size 20 diff --git a/src/mesh/generated/meshtastic/deviceonly.pb.h b/src/mesh/generated/meshtastic/deviceonly.pb.h index 7fab82ff75..9b800120d3 100644 --- a/src/mesh/generated/meshtastic/deviceonly.pb.h +++ b/src/mesh/generated/meshtastic/deviceonly.pb.h @@ -360,7 +360,7 @@ extern const pb_msgdesc_t meshtastic_BackupPreferences_msg; /* Maximum encoded size of messages (where known) */ /* meshtastic_NodeDatabase_size depends on runtime parameters */ #define MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_MAX_SIZE meshtastic_BackupPreferences_size -#define meshtastic_BackupPreferences_size 2277 +#define meshtastic_BackupPreferences_size 2279 #define meshtastic_ChannelFile_size 718 #define meshtastic_DeviceState_size 1737 #define meshtastic_NodeInfoLite_size 196 diff --git a/src/mesh/generated/meshtastic/localonly.pb.h b/src/mesh/generated/meshtastic/localonly.pb.h index 3ab6f02c17..2c0d889fc6 100644 --- a/src/mesh/generated/meshtastic/localonly.pb.h +++ b/src/mesh/generated/meshtastic/localonly.pb.h @@ -187,7 +187,7 @@ extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg; /* Maximum encoded size of messages (where known) */ #define MESHTASTIC_MESHTASTIC_LOCALONLY_PB_H_MAX_SIZE meshtastic_LocalConfig_size -#define meshtastic_LocalConfig_size 749 +#define meshtastic_LocalConfig_size 751 #define meshtastic_LocalModuleConfig_size 673 #ifdef __cplusplus