mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-08 14:12:05 +00:00
Initial NODENUM_BROADCAST_NO_LORA implementation with NeighborInfo module (#5087)
* Initial NODENUM_BROADCAST_NO_LORA implementation with NeighborInfo module * isBroadcast * Trunkt
This commit is contained in:
parent
b1b6bce6b7
commit
4575352d8c
@ -44,7 +44,7 @@ bool FloodingRouter::isRebroadcaster()
|
|||||||
void FloodingRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtastic_Routing *c)
|
void FloodingRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtastic_Routing *c)
|
||||||
{
|
{
|
||||||
bool isAckorReply = (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) && (p->decoded.request_id != 0);
|
bool isAckorReply = (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) && (p->decoded.request_id != 0);
|
||||||
if (isAckorReply && !isToUs(p) && p->to != NODENUM_BROADCAST) {
|
if (isAckorReply && !isToUs(p) && !isBroadcast(p->to)) {
|
||||||
// do not flood direct message that is ACKed or replied to
|
// do not flood direct message that is ACKed or replied to
|
||||||
LOG_DEBUG("Rxd an ACK/reply not for me, cancel rebroadcast.");
|
LOG_DEBUG("Rxd an ACK/reply not for me, cancel rebroadcast.");
|
||||||
Router::cancelSending(p->to, p->decoded.request_id); // cancel rebroadcast for this DM
|
Router::cancelSending(p->to, p->decoded.request_id); // cancel rebroadcast for this DM
|
||||||
|
@ -86,7 +86,7 @@ void MeshModule::callModules(meshtastic_MeshPacket &mp, RxSource src)
|
|||||||
|
|
||||||
// Was this message directed to us specifically? Will be false if we are sniffing someone elses packets
|
// Was this message directed to us specifically? Will be false if we are sniffing someone elses packets
|
||||||
auto ourNodeNum = nodeDB->getNodeNum();
|
auto ourNodeNum = nodeDB->getNodeNum();
|
||||||
bool toUs = mp.to == NODENUM_BROADCAST || isToUs(&mp);
|
bool toUs = isBroadcast(mp.to) || isToUs(&mp);
|
||||||
|
|
||||||
for (auto i = modules->begin(); i != modules->end(); ++i) {
|
for (auto i = modules->begin(); i != modules->end(); ++i) {
|
||||||
auto &pi = **i;
|
auto &pi = **i;
|
||||||
|
@ -57,4 +57,6 @@ bool isFromUs(const meshtastic_MeshPacket *p);
|
|||||||
bool isToUs(const meshtastic_MeshPacket *p);
|
bool isToUs(const meshtastic_MeshPacket *p);
|
||||||
|
|
||||||
/* Some clients might not properly set priority, therefore we fix it here. */
|
/* Some clients might not properly set priority, therefore we fix it here. */
|
||||||
void fixPriority(meshtastic_MeshPacket *p);
|
void fixPriority(meshtastic_MeshPacket *p);
|
||||||
|
|
||||||
|
bool isBroadcast(uint32_t dest);
|
@ -222,6 +222,11 @@ bool isToUs(const meshtastic_MeshPacket *p)
|
|||||||
return p->to == nodeDB->getNodeNum();
|
return p->to == nodeDB->getNodeNum();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isBroadcast(uint32_t dest)
|
||||||
|
{
|
||||||
|
return dest == NODENUM_BROADCAST || dest == NODENUM_BROADCAST_NO_LORA;
|
||||||
|
}
|
||||||
|
|
||||||
bool NodeDB::resetRadioConfig(bool factory_reset)
|
bool NodeDB::resetRadioConfig(bool factory_reset)
|
||||||
{
|
{
|
||||||
bool didFactoryReset = false;
|
bool didFactoryReset = false;
|
||||||
|
@ -467,7 +467,10 @@ void RadioLibInterface::setStandby()
|
|||||||
void RadioLibInterface::startSend(meshtastic_MeshPacket *txp)
|
void RadioLibInterface::startSend(meshtastic_MeshPacket *txp)
|
||||||
{
|
{
|
||||||
printPacket("Starting low level send", txp);
|
printPacket("Starting low level send", txp);
|
||||||
if (disabled || !config.lora.tx_enabled) {
|
if (txp->to == NODENUM_BROADCAST_NO_LORA) {
|
||||||
|
LOG_DEBUG("Drop Tx packet because dest is broadcast no-lora");
|
||||||
|
packetPool.release(txp);
|
||||||
|
} else if (disabled || !config.lora.tx_enabled) {
|
||||||
LOG_WARN("Drop Tx packet because LoRa Tx disabled");
|
LOG_WARN("Drop Tx packet because LoRa Tx disabled");
|
||||||
packetPool.release(txp);
|
packetPool.release(txp);
|
||||||
} else {
|
} else {
|
||||||
|
@ -181,7 +181,7 @@ ErrorCode Router::sendLocal(meshtastic_MeshPacket *p, RxSource src)
|
|||||||
} else {
|
} else {
|
||||||
// If we are sending a broadcast, we also treat it as if we just received it ourself
|
// If we are sending a broadcast, we also treat it as if we just received it ourself
|
||||||
// this allows local apps (and PCs) to see broadcasts sourced locally
|
// this allows local apps (and PCs) to see broadcasts sourced locally
|
||||||
if (p->to == NODENUM_BROADCAST) {
|
if (isBroadcast(p->to)) {
|
||||||
handleReceived(p, src);
|
handleReceived(p, src);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,7 +240,7 @@ ErrorCode Router::send(meshtastic_MeshPacket *p)
|
|||||||
// assert
|
// assert
|
||||||
|
|
||||||
// Never set the want_ack flag on broadcast packets sent over the air.
|
// Never set the want_ack flag on broadcast packets sent over the air.
|
||||||
if (p->to == NODENUM_BROADCAST)
|
if (isBroadcast(p->to))
|
||||||
p->want_ack = false;
|
p->want_ack = false;
|
||||||
|
|
||||||
// Up until this point we might have been using 0 for the from address (if it started with the phone), but when we send over
|
// Up until this point we might have been using 0 for the from address (if it started with the phone), but when we send over
|
||||||
@ -328,7 +328,7 @@ bool perhapsDecode(meshtastic_MeshPacket *p)
|
|||||||
memcpy(ScratchEncrypted, p->encrypted.bytes, rawSize);
|
memcpy(ScratchEncrypted, p->encrypted.bytes, rawSize);
|
||||||
#if !(MESHTASTIC_EXCLUDE_PKI)
|
#if !(MESHTASTIC_EXCLUDE_PKI)
|
||||||
// Attempt PKI decryption first
|
// Attempt PKI decryption first
|
||||||
if (p->channel == 0 && isToUs(p) && p->to > 0 && p->to != NODENUM_BROADCAST && nodeDB->getMeshNode(p->from) != nullptr &&
|
if (p->channel == 0 && isToUs(p) && p->to > 0 && !isBroadcast(p->to) && nodeDB->getMeshNode(p->from) != nullptr &&
|
||||||
nodeDB->getMeshNode(p->from)->user.public_key.size > 0 && nodeDB->getMeshNode(p->to)->user.public_key.size > 0 &&
|
nodeDB->getMeshNode(p->from)->user.public_key.size > 0 && nodeDB->getMeshNode(p->to)->user.public_key.size > 0 &&
|
||||||
rawSize > MESHTASTIC_PKC_OVERHEAD) {
|
rawSize > MESHTASTIC_PKC_OVERHEAD) {
|
||||||
LOG_DEBUG("Attempting PKI decryption");
|
LOG_DEBUG("Attempting PKI decryption");
|
||||||
@ -493,7 +493,7 @@ meshtastic_Routing_Error perhapsEncode(meshtastic_MeshPacket *p)
|
|||||||
// Don't use PKC if it's not explicitly requested and a non-primary channel is requested
|
// Don't use PKC if it's not explicitly requested and a non-primary channel is requested
|
||||||
!(p->pki_encrypted != true && p->channel > 0) &&
|
!(p->pki_encrypted != true && p->channel > 0) &&
|
||||||
// Check for valid keys and single node destination
|
// Check for valid keys and single node destination
|
||||||
config.security.private_key.size == 32 && p->to != NODENUM_BROADCAST && node != nullptr &&
|
config.security.private_key.size == 32 && !isBroadcast(p->to) && node != nullptr &&
|
||||||
// Check for a known public key for the destination
|
// Check for a known public key for the destination
|
||||||
(node->user.public_key.size == 32) &&
|
(node->user.public_key.size == 32) &&
|
||||||
// Some portnums either make no sense to send with PKC
|
// Some portnums either make no sense to send with PKC
|
||||||
@ -615,7 +615,7 @@ void Router::handleReceived(meshtastic_MeshPacket *p, RxSource src)
|
|||||||
#if !MESHTASTIC_EXCLUDE_MQTT
|
#if !MESHTASTIC_EXCLUDE_MQTT
|
||||||
// Mark as pki_encrypted if it is not yet decoded and MQTT encryption is also enabled, hash matches and it's a DM not to
|
// Mark as pki_encrypted if it is not yet decoded and MQTT encryption is also enabled, hash matches and it's a DM not to
|
||||||
// us (because we would be able to decrypt it)
|
// us (because we would be able to decrypt it)
|
||||||
if (!decoded && moduleConfig.mqtt.encryption_enabled && p->channel == 0x00 && p->to != NODENUM_BROADCAST && !isToUs(p))
|
if (!decoded && moduleConfig.mqtt.encryption_enabled && p->channel == 0x00 && !isBroadcast(p->to) && !isToUs(p))
|
||||||
p_encrypted->pki_encrypted = true;
|
p_encrypted->pki_encrypted = true;
|
||||||
// After potentially altering it, publish received message to MQTT if we're not the original transmitter of the packet
|
// After potentially altering it, publish received message to MQTT if we're not the original transmitter of the packet
|
||||||
if ((decoded || p_encrypted->pki_encrypted) && moduleConfig.mqtt.enabled && !isFromUs(p) && mqtt)
|
if ((decoded || p_encrypted->pki_encrypted) && moduleConfig.mqtt.enabled && !isFromUs(p) && mqtt)
|
||||||
|
@ -122,7 +122,7 @@ Will be used for broadcast.
|
|||||||
int32_t NeighborInfoModule::runOnce()
|
int32_t NeighborInfoModule::runOnce()
|
||||||
{
|
{
|
||||||
if (airTime->isTxAllowedChannelUtil(true) && airTime->isTxAllowedAirUtil()) {
|
if (airTime->isTxAllowedChannelUtil(true) && airTime->isTxAllowedAirUtil()) {
|
||||||
sendNeighborInfo(NODENUM_BROADCAST, false);
|
sendNeighborInfo(NODENUM_BROADCAST_NO_LORA, false);
|
||||||
}
|
}
|
||||||
return Default::getConfiguredOrDefaultMs(moduleConfig.neighbor_info.update_interval, default_neighbor_info_broadcast_secs);
|
return Default::getConfiguredOrDefaultMs(moduleConfig.neighbor_info.update_interval, default_neighbor_info_broadcast_secs);
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes
|
|||||||
|
|
||||||
bool hasChanged = nodeDB->updateUser(getFrom(&mp), p, mp.channel);
|
bool hasChanged = nodeDB->updateUser(getFrom(&mp), p, mp.channel);
|
||||||
|
|
||||||
bool wasBroadcast = mp.to == NODENUM_BROADCAST;
|
bool wasBroadcast = isBroadcast(mp.to);
|
||||||
|
|
||||||
// Show new nodes on LCD screen
|
// Show new nodes on LCD screen
|
||||||
if (wasBroadcast) {
|
if (wasBroadcast) {
|
||||||
|
@ -13,8 +13,7 @@ bool RoutingModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mesh
|
|||||||
printPacket("Routing sniffing", &mp);
|
printPacket("Routing sniffing", &mp);
|
||||||
router->sniffReceived(&mp, r);
|
router->sniffReceived(&mp, r);
|
||||||
|
|
||||||
bool maybePKI =
|
bool maybePKI = mp.which_payload_variant == meshtastic_MeshPacket_encrypted_tag && mp.channel == 0 && !isBroadcast(mp.to);
|
||||||
mp.which_payload_variant == meshtastic_MeshPacket_encrypted_tag && mp.channel == 0 && mp.to != NODENUM_BROADCAST;
|
|
||||||
// Beginning of logic whether to drop the packet based on Rebroadcast mode
|
// Beginning of logic whether to drop the packet based on Rebroadcast mode
|
||||||
if (mp.which_payload_variant == meshtastic_MeshPacket_encrypted_tag &&
|
if (mp.which_payload_variant == meshtastic_MeshPacket_encrypted_tag &&
|
||||||
(config.device.rebroadcast_mode == meshtastic_Config_DeviceConfig_RebroadcastMode_LOCAL_ONLY ||
|
(config.device.rebroadcast_mode == meshtastic_Config_DeviceConfig_RebroadcastMode_LOCAL_ONLY ||
|
||||||
@ -28,7 +27,7 @@ bool RoutingModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mesh
|
|||||||
|
|
||||||
// FIXME - move this to a non promsicious PhoneAPI module?
|
// FIXME - move this to a non promsicious PhoneAPI module?
|
||||||
// Note: we are careful not to send back packets that started with the phone back to the phone
|
// Note: we are careful not to send back packets that started with the phone back to the phone
|
||||||
if ((mp.to == NODENUM_BROADCAST || isToUs(&mp)) && (mp.from != 0)) {
|
if ((isBroadcast(mp.to) || isToUs(&mp)) && (mp.from != 0)) {
|
||||||
printPacket("Delivering rx packet", &mp);
|
printPacket("Delivering rx packet", &mp);
|
||||||
service->handleFromRadio(&mp);
|
service->handleFromRadio(&mp);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user