mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-08-29 07:18:21 +00:00
Refine trace and group data retries
This commit is contained in:
+35
-15
@@ -1261,7 +1261,7 @@ set direct.retry.heard off
|
||||
- `infra`: fewer, slower retries for stable fixed infrastructure.
|
||||
- `rooftop`: default long retry window for weak rooftop links.
|
||||
- `mobile`: long retry count with shorter spacing for moving or changing links; flood retry count is `15`.
|
||||
- Changing `direct.retry.count`, `direct.retry.base`, `direct.retry.step`, `direct.retry.margin`, `flood.retry.count`, or `flood.retry.path` makes the preset report as `custom`.
|
||||
- Changing `direct.retry.count`, `direct.retry.base`, `direct.retry.step`, `direct.retry.margin`, `flood.retry.count`, `flood.retry.path`, or `flood.retry.group.path` makes the preset report as `custom`.
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
@@ -1278,7 +1278,7 @@ set retry.preset mobile
|
||||
Flood retry resends flood-routed packets when the same packet is not heard from
|
||||
another qualifying repeater.
|
||||
|
||||
The count, path, and advert controls work on repeater, room-server, and sensor
|
||||
The count, path, group-data path, and advert controls work on repeater, room-server, and sensor
|
||||
firmware. Flood forwarding must also be enabled for retries to run. Prefix,
|
||||
ignore, bridge, and bucket controls are repeater-only.
|
||||
|
||||
@@ -1329,6 +1329,30 @@ set flood.retry.path off
|
||||
|
||||
---
|
||||
|
||||
#### View or change the group-data flood retry path gate
|
||||
**Usage:**
|
||||
- `get flood.retry.group.path`
|
||||
- `set flood.retry.group.path <count|off>`
|
||||
|
||||
**Parameters:**
|
||||
- `count`: Maximum flood path hash count eligible for retry for group data packets (`PAYLOAD_TYPE_GRP_DATA`/type 6), from `0` to `63`.
|
||||
- `off`: Disable only the group-data-specific gate. The general `flood.retry.path` gate still applies.
|
||||
|
||||
**Default:** `1` for `infra`, `rooftop`, and `mobile` presets.
|
||||
|
||||
**Note:** The stricter of `flood.retry.path` and `flood.retry.group.path` is used. A value of `1` allows retry sequences at path counts `0` and `1`; group data at path count `2` or higher is still forwarded normally but does not start a flood retry sequence. A value of `0` allows retries only at the originating sender.
|
||||
|
||||
Setting `flood.retry.path` to `0` also sets `flood.retry.group.path` to `off` because the general zero-hop gate is already stricter. While the general gate remains `0`, attempts to set the group-data gate keep it `off`. Applying a named retry preset restores the group-data default of `1`.
|
||||
|
||||
**Examples:**
|
||||
```
|
||||
get flood.retry.group.path
|
||||
set flood.retry.group.path 1
|
||||
set flood.retry.group.path off
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### View or change flood retry advert handling
|
||||
**Usage:**
|
||||
- `get flood.retry.advert`
|
||||
@@ -1466,15 +1490,13 @@ set direct.retry.count 15
|
||||
**Default:** `175` with the `rooftop` preset
|
||||
|
||||
**Explanation:**
|
||||
- The first retry waits `base` milliseconds after the failed echo window.
|
||||
- The failed echo window includes a packet-length add-on. TRACE and
|
||||
ANON_REQ/type 7 packets keep the existing 4x line-time add-on. TXT_MSG/type 2
|
||||
- The first retry waits for `base + packet-length add-on + random forwarding jitter`
|
||||
after the preceding transmission completes.
|
||||
- TRACE and
|
||||
ANON_REQ/type 7 packets use a 3x line-time add-on. TXT_MSG/type 2
|
||||
packets use 7x. Other direct retry packets use 6x.
|
||||
- Room-server and sensor firmware use this configured base with the same
|
||||
packet-type add-ons.
|
||||
- For non-TRACE direct paths shorter than 6 remaining hops, the effective wait is scaled by `hops / 6`.
|
||||
- Non-TRACE direct paths with 6 or more remaining hops use the configured value unchanged.
|
||||
- TRACE retries shorter than 16 remaining hops use `hops / 16`; 16 or more remaining hops use the configured value unchanged.
|
||||
- Larger values reduce channel pressure and give slow repeaters more time.
|
||||
- Smaller values recover faster but create tighter retry bursts.
|
||||
|
||||
@@ -1499,16 +1521,14 @@ set direct.retry.base 500
|
||||
**Default:** `100` with the `rooftop` preset
|
||||
|
||||
**Explanation:**
|
||||
- Retry delay is `base + attempt_index * step`.
|
||||
- This is added after the failed echo window. TRACE and ANON_REQ/type 7 packets
|
||||
keep the existing 4x packet-length add-on. TXT_MSG/type 2 packets use 7x.
|
||||
- Retry delay is `base + packet-length add-on + random forwarding jitter + attempt_index * step`.
|
||||
- TRACE and ANON_REQ/type 7 packets
|
||||
use a 3x packet-length add-on. TXT_MSG/type 2 packets use 7x.
|
||||
Other direct retry packets use 6x.
|
||||
- Room-server and sensor firmware use this configured step with the same
|
||||
packet-type add-ons.
|
||||
- For non-TRACE direct paths shorter than 6 remaining hops, that computed delay is scaled by `hops / 6`.
|
||||
- Non-TRACE direct paths with 6 or more remaining hops use the computed delay unchanged.
|
||||
- TRACE retries shorter than 16 remaining hops use `hops / 16`; 16 or more remaining hops use the computed delay unchanged.
|
||||
- With `base=175` and `step=100`, non-TRACE paths with 6 or more remaining hops wait about `175`, `275`, `375`, `475` ms, and so on.
|
||||
- With `base=175` and `step=100`, the fixed portion is `175`, `275`, `375`,
|
||||
`475` ms, and so on, before the packet-length add-on and random jitter.
|
||||
- `step=0` keeps every retry at the same delay.
|
||||
- Larger steps spread retries over time and are safer on busy channels.
|
||||
|
||||
|
||||
@@ -210,8 +210,8 @@ Direct retry applies to direct-routed packets. A queued resend is canceled when
|
||||
| `direct.retry.heard` | Uses the recent repeater table as the direct retry eligibility gate. | `get direct.retry.heard`, `set direct.retry.heard on/off` | `set direct.retry.heard on` |
|
||||
| `direct.retry.margin` | SNR margin in dB above the SF-specific receive floor. | `get direct.retry.margin`, `set direct.retry.margin <0-40>` | `set direct.retry.margin 5` |
|
||||
| `direct.retry.count` | Maximum direct retry attempts after initial TX. Direct-routed type 2 text packets always use 21 attempts regardless of this setting or the short-path cap. | `get direct.retry.count`, `set direct.retry.count <1-15>` | `set direct.retry.count 15` |
|
||||
| `direct.retry.base` | Base wait in milliseconds before retry; packet-length add-on is 4x for TRACE and ANON_REQ/type 7, 7x for TXT_MSG/type 2, and 6x for other direct retry packets. Non-TRACE paths under 6 remaining hops scale by `hops / 6`, TRACE paths under 16 by `hops / 16`. | `get direct.retry.base`, `set direct.retry.base <10-5000>` | `set direct.retry.base 175` |
|
||||
| `direct.retry.step` | Milliseconds added per retry attempt before the same short-path scaling. | `get direct.retry.step`, `set direct.retry.step <0-5000>` | `set direct.retry.step 100` |
|
||||
| `direct.retry.base` | Base wait in milliseconds before retry; packet-length add-on is 3x for TRACE and ANON_REQ/type 7, 7x for TXT_MSG/type 2, and 6x for other direct retry packets. | `get direct.retry.base`, `set direct.retry.base <10-5000>` | `set direct.retry.base 175` |
|
||||
| `direct.retry.step` | Milliseconds added per retry attempt after the base, packet-length add-on, and random forwarding jitter. | `get direct.retry.step`, `set direct.retry.step <0-5000>` | `set direct.retry.step 100` |
|
||||
| `direct.retry.cr` | Adaptive coding-rate thresholds for repeater direct retry packets. Repeaters use `CR4`, `CR5`, `CR7`, or `CR8`, then escalate by attempt: CR4, CR5, CR7, CR7, then CR8 from a CR4 start; CR5, CR7, CR7, then CR8 from a CR5 start. Non-repeaters start at the current radio CR and follow the same escalation pattern, clamped at CR8. | `get direct.retry.cr`, `set direct.retry.cr <cr4_min>,<cr5_min>,<cr7_min>,<cr8_max>`, `set direct.retry.cr off` | `set direct.retry.cr 10.0,7.5,2.5,0` |
|
||||
|
||||
The default adaptive coding-rate profile is `10.0,7.5,2.5,2.5`.
|
||||
@@ -257,6 +257,7 @@ the bucket rules below instead.
|
||||
| --- | --- | --- | --- |
|
||||
| `flood.retry.count` | Base flood retry attempts after initial TX. Path count 0 doubles it, path count 1 uses 1.5x rounded up, path count 2+ uses the base, and actual attempts cap at `15`; `0` disables flood retry. | `get flood.retry.count`, `set flood.retry.count <0-15>` | `set flood.retry.count 7` |
|
||||
| `flood.retry.path` | Maximum path hash count eligible for flood retry, or `off` to disable the gate. | `get flood.retry.path`, `set flood.retry.path <0-63/off>` | `set flood.retry.path 1` |
|
||||
| `flood.retry.group.path` | Additional path gate for group data (`type=6`) flood retries. The stricter of this and `flood.retry.path` applies; `off` disables only this additional gate. Setting the general path gate to `0` forces this setting to `off`; a named preset restores the default of `1`. | `get flood.retry.group.path`, `set flood.retry.group.path <0-63/off>` | `set flood.retry.group.path 1` |
|
||||
| `flood.retry.advert` | Allows or blocks retry for node advert packets (`type=4`). Default is `off`. | `get flood.retry.advert`, `set flood.retry.advert on/off` | `set flood.retry.advert off` |
|
||||
| `flood.retry.prefixes` | Target prefixes. If set, only same-packet echoes from matching last-hop prefixes cancel a retry. | `get flood.retry.prefixes`, `set flood.retry.prefixes <prefixes/none/off>` | `set flood.retry.prefixes BEEBB0,425E5C` |
|
||||
| `flood.retry.ignore` | Ignored prefixes. In non-bridge retry, ignored last-hop echoes do not cancel retry. | `get flood.retry.ignore`, `set flood.retry.ignore <prefixes/none/off>` | `set flood.retry.ignore 71CE82,C7618C` |
|
||||
@@ -266,17 +267,18 @@ the bucket rules below instead.
|
||||
|
||||
The shared retry preset sets these flood defaults:
|
||||
|
||||
| Preset | Retry count | Path gate |
|
||||
| --- | ---: | ---: |
|
||||
| `infra` | `1` | `1` |
|
||||
| `rooftop` | `3` | `2` |
|
||||
| `mobile` | `15` | `1` |
|
||||
| Preset | Retry count | Path gate | Group-data path gate |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| `infra` | `1` | `1` | `1` |
|
||||
| `rooftop` | `3` | `2` | `1` |
|
||||
| `mobile` | `15` | `1` | `1` |
|
||||
|
||||
Example for path-gated retry:
|
||||
|
||||
```text
|
||||
set retry.preset rooftop
|
||||
set flood.retry.path 1
|
||||
set flood.retry.group.path 1
|
||||
set flood.retry.advert off
|
||||
set flood.retry.ignore 71CE82,C7618C
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user