* repeater & room server: new CLI config "flood.max"
This commit is contained in:
@@ -235,7 +235,9 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool allowPacketForward(const mesh::Packet* packet) override {
|
bool allowPacketForward(const mesh::Packet* packet) override {
|
||||||
return !_prefs.disable_fwd;
|
if (_prefs.disable_fwd) return false;
|
||||||
|
if (packet->isRouteFlood() && packet->path_len >= _prefs.flood_max) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* getLogDateTime() override {
|
const char* getLogDateTime() override {
|
||||||
@@ -536,6 +538,7 @@ public:
|
|||||||
_prefs.cr = LORA_CR;
|
_prefs.cr = LORA_CR;
|
||||||
_prefs.tx_power_dbm = LORA_TX_POWER;
|
_prefs.tx_power_dbm = LORA_TX_POWER;
|
||||||
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
|
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
|
||||||
|
_prefs.flood_max = 64;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonCLI* getCLI() { return &_cli; }
|
CommonCLI* getCLI() { return &_cli; }
|
||||||
|
|||||||
@@ -304,7 +304,9 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool allowPacketForward(const mesh::Packet* packet) override {
|
bool allowPacketForward(const mesh::Packet* packet) override {
|
||||||
return !_prefs.disable_fwd;
|
if (_prefs.disable_fwd) return false;
|
||||||
|
if (packet->isRouteFlood() && packet->path_len >= _prefs.flood_max) return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void onAnonDataRecv(mesh::Packet* packet, uint8_t type, const mesh::Identity& sender, uint8_t* data, size_t len) override {
|
void onAnonDataRecv(mesh::Packet* packet, uint8_t type, const mesh::Identity& sender, uint8_t* data, size_t len) override {
|
||||||
@@ -568,6 +570,7 @@ public:
|
|||||||
_prefs.tx_power_dbm = LORA_TX_POWER;
|
_prefs.tx_power_dbm = LORA_TX_POWER;
|
||||||
_prefs.disable_fwd = 1;
|
_prefs.disable_fwd = 1;
|
||||||
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
|
_prefs.advert_interval = 1; // default to 2 minutes for NEW installs
|
||||||
|
_prefs.flood_max = 64;
|
||||||
#ifdef ROOM_PASSWORD
|
#ifdef ROOM_PASSWORD
|
||||||
StrHelper::strncpy(_prefs.guest_password, ROOM_PASSWORD, sizeof(_prefs.guest_password));
|
StrHelper::strncpy(_prefs.guest_password, ROOM_PASSWORD, sizeof(_prefs.guest_password));
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ void CommonCLI::loadPrefs(FILESYSTEM* fs) {
|
|||||||
file.read((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115
|
file.read((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115
|
||||||
file.read((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
|
file.read((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
|
||||||
file.read(pad, 4); // 120
|
file.read(pad, 4); // 120
|
||||||
|
file.read((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124
|
||||||
|
|
||||||
// sanitise bad pref values
|
// sanitise bad pref values
|
||||||
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
|
||||||
@@ -91,6 +92,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
|
|||||||
file.write((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115
|
file.write((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115
|
||||||
file.write((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
|
file.write((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
|
||||||
file.write(pad, 4); // 120
|
file.write(pad, 4); // 120
|
||||||
|
file.write((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124
|
||||||
|
|
||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
@@ -176,6 +178,8 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->rx_delay_base));
|
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->rx_delay_base));
|
||||||
} else if (memcmp(config, "txdelay", 7) == 0) {
|
} else if (memcmp(config, "txdelay", 7) == 0) {
|
||||||
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->tx_delay_factor));
|
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->tx_delay_factor));
|
||||||
|
} else if (memcmp(config, "flood.max", 9) == 0) {
|
||||||
|
sprintf(reply, "> %d", (uint32_t)_prefs->flood_max);
|
||||||
} else if (memcmp(config, "direct.txdelay", 14) == 0) {
|
} else if (memcmp(config, "direct.txdelay", 14) == 0) {
|
||||||
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->direct_tx_delay_factor));
|
sprintf(reply, "> %s", StrHelper::ftoa(_prefs->direct_tx_delay_factor));
|
||||||
} else if (memcmp(config, "tx", 2) == 0 && (config[2] == 0 || config[2] == ' ')) {
|
} else if (memcmp(config, "tx", 2) == 0 && (config[2] == 0 || config[2] == ' ')) {
|
||||||
@@ -262,6 +266,15 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||||||
} else {
|
} else {
|
||||||
strcpy(reply, "Error, cannot be negative");
|
strcpy(reply, "Error, cannot be negative");
|
||||||
}
|
}
|
||||||
|
} else if (memcmp(config, "flood.max ", 10) == 0) {
|
||||||
|
uint8_t m = atoi(&config[10]);
|
||||||
|
if (m <= 64) {
|
||||||
|
_prefs->flood_max = m;
|
||||||
|
savePrefs();
|
||||||
|
strcpy(reply, "OK");
|
||||||
|
} else {
|
||||||
|
strcpy(reply, "Error, max 64");
|
||||||
|
}
|
||||||
} else if (memcmp(config, "direct.txdelay ", 15) == 0) {
|
} else if (memcmp(config, "direct.txdelay ", 15) == 0) {
|
||||||
float f = atof(&config[15]);
|
float f = atof(&config[15]);
|
||||||
if (f >= 0) {
|
if (f >= 0) {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ struct NodePrefs { // persisted to file
|
|||||||
uint8_t reserved1;
|
uint8_t reserved1;
|
||||||
uint8_t reserved2;
|
uint8_t reserved2;
|
||||||
float bw;
|
float bw;
|
||||||
|
uint8_t flood_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CommonCLICallbacks {
|
class CommonCLICallbacks {
|
||||||
|
|||||||
Reference in New Issue
Block a user