Skip to content

feat: ARIB STD-T108準拠、単一送信4秒超過時のdropガード追加 - #13

Merged
jirogit merged 1 commit into
devfrom
feat/arib-tx-airtime-guard
Jul 27, 2026
Merged

feat: ARIB STD-T108準拠、単一送信4秒超過時のdropガード追加#13
jirogit merged 1 commit into
devfrom
feat/arib-tx-airtime-guard

Conversation

@jirogit

@jirogit jirogit commented Jul 27, 2026

Copy link
Copy Markdown
Owner

概要

ARIB STD-T108(平成元年郵政省告示第49号)は単一送信を4秒以内に制限している。現状、フラッドメッセージはリピーターを経由するたびにパスバイトが増え、airtimeも伸びる。メッセージ長・ホップ数の組み合わせによっては、リピーターの再送信時点で4秒を超過しうることが計算で判明(CH: 3ホップ目、DM: 18ホップ目で超過、CR4/8時)。

本PRはPhase 0として、送信直前にairtimeを計算し、4秒を超える場合は送信せずdropする最小限のガードを追加する。メッセージ長そのものの見直し(動的MAX_TEXT_LEN)は別PRで別途対応予定。

変更内容

  • Dispatcher::getMaxTxAirtimeMs(): getCADFailMaxDuration()と同じisAS923_1_JP()分岐パターン。JP=4000ms、他地域はUINT32_MAX(無制限、既存動作に影響なし)
  • checkSend(): raw packet長確定後・送信前にgetEstAirtimeFor()でairtime算出、上限超過時は送信せずlogTxFail()呼び出し+drop
  • n_tx_dropped_airtimeカウンター追加(n_sent_flood等と同じパターン、resetStats()にも追加)

実機テスト(T1000-E)

  1. 閾値を一時的に500msに変更 → 1バイト/24バイトメッセージ・ACK含め連続17回以上drop確認。クラッシュ・ハングなし、受信含め動作継続(release/counterパスの安全性確認)
  2. 閾値を4000msに戻す → 通常のDM・チャンネルメッセージ送受信、ACK正常動作確認(リグレッションなし)

スコープ外(別途対応)

  • 実際のマルチホップフラッドでの4秒超過の実地再現(屋内では困難、Portland NET/BECN実運用での検証に回す)
  • MAX_TEXT_LENの動的計算によるメッセージ長の見直し

isAS923_1_JP()時、checkSend()で送信前にgetEstAirtimeFor()を確認し、
getMaxTxAirtimeMs()(JP=4000ms)を超える場合は送信せずdrop。
n_tx_dropped_airtimeカウンターで追跡。

実機テスト(T1000-E)で確認済み:
- 閾値500msでの強制drop連続17回以上でクラッシュ/リーク無し(ACK含む)
- 閾値4000msに戻して通常のDM/チャンネルメッセージ送受信・ACK正常動作確認
@jirogit
jirogit merged commit d143250 into dev Jul 27, 2026
15 checks passed
@jirogit
jirogit deleted the feat/arib-tx-airtime-guard branch July 27, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant