diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2f30b6..75dd871 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,3 +17,12 @@ jobs: - run: cargo clippy --all-targets -- -D warnings - run: cargo build --verbose - run: cargo test --verbose + + audit: + name: cargo-audit (dependency advisories) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: rustsec/audit-check@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/spec-drift-guard.yml b/.github/workflows/spec-drift-guard.yml index 6e07007..297571a 100644 --- a/.github/workflows/spec-drift-guard.yml +++ b/.github/workflows/spec-drift-guard.yml @@ -7,93 +7,70 @@ on: - "specs/**" - "gen/**" - "build.rs" + - ".t27c-version" - ".github/workflows/spec-drift-guard.yml" -# Rebuild t27c from upstream master and regenerate every committed backend -# under gen//. from specs/.t27. If any committed -# output disagrees with the freshly generated output, the job fails with a -# diff so drift between the SSOT and generated code cannot land silently. +# PHYSICAL GUARD for the golden pipeline: specs/*.t27 -> t27c gen-rust -> gen/rust. # -# Covered specs (68) × backends (3) = 204 drift checks: -# wire.t27 → gen/{rust,wire.rs} gen/{zig,wire.zig} gen/{c,wire.c} -# hello.t27 → gen/{rust,hello.rs} gen/{zig,hello.zig} gen/{c,hello.c} -# etx.t27 → gen/{rust,etx.rs} gen/{zig,etx.zig} gen/{c,etx.c} +# The compiler is PINNED (.t27c-version). This job rebuilds t27c at exactly that +# commit, regenerates every gen/rust/*.rs from specs/*.t27, and fails on ANY byte +# difference against the committed output. That makes three classes of the +# recurring breakage impossible to land: +# 1. committing gen/rust produced by a stale/wrong t27c (the 2026-07-07 break), +# 2. hand-editing gen/rust directly, +# 3. editing a spec without regenerating. +# It then builds + tests the tree so a green gen set that does not compile is +# also caught. Rust is NEVER written by hand in gen/; it is generated only. # -# ExprCast is lowered in all three backends via t27#1320 (Rust) + t27#1337 (Zig+C). -# See docs/T27_FIRST_MIGRATION.md for the SSOT contract. +# Only the rust backend is checked -- the gen/zig and gen/c backends were removed +# from the tree, so the old "68 x 3 backends" guard was checking deleted paths. # Anchor: phi^2 + phi^-2 = 3. jobs: - regenerate-and-diff: - name: drift check (68 specs × 3 backends) + drift: + name: gen/rust drift vs pinned t27c runs-on: ubuntu-latest steps: - name: Checkout tri-net uses: actions/checkout@v4 - with: - path: tri-net - - name: Checkout t27 (SSOT compiler source) + - name: Read pinned t27c commit + id: pin + run: echo "sha=$(grep -vE '^[[:space:]]*#' .t27c-version | grep -oE '[0-9a-f]{40}' | head -1)" >> "$GITHUB_OUTPUT" + + - name: Checkout t27 at pinned commit uses: actions/checkout@v4 with: repository: gHashTag/t27 - ref: master + ref: ${{ steps.pin.outputs.sha }} path: t27 - - name: Install stable Rust toolchain - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@stable - - name: Build t27c (release) - working-directory: t27 - run: cargo build --release --manifest-path bootstrap/Cargo.toml --bin t27c + - name: Build pinned t27c + run: cargo build --release -p t27c --manifest-path t27/Cargo.toml - - name: Drift check — Rust (all specs) - working-directory: tri-net + - name: Regenerate every gen/rust from specs run: | - T27C=../t27/target/release/t27c - STATUS=0 - for spec in wire hello etx crc16 byte_utils mesh_routing key_management frame_buffer packet_queue congestion_control flow_control self_healing trust_manager timer transport_tx_fsm redundancy_management fault_detection lite_crypto network_metrics m3_multihop link_statistics access_control bandwidth_allocator cache_management compression_engine cross_layer_optimizer energy_aware_routing adaptive_retry link_quality_monitor multipath_router auto_config adaptive_routing anomaly_detector api_documenter area_optimization docs_generator fpga_synthesis_report health_dashboard health_monitoring integration_tests load_predictor local_processing mesh_node_sim mesh_protocol_stack multipath_routing network_coding network_orchestrator network_simulator olsr_routing pattern_predictor performance_benchmarks performance_profiler power_monitoring production_deployment production_scenarios quarantine_manager resource_scheduler swarm_coordinator test_framework timing_closure topology_visualizer traffic_animator failure_predictor hardware_validation integration_framework network_analytics packet_loss_injection test_validator; do - $T27C gen-rust specs/${spec}.t27 > /tmp/${spec}_regen.rs - if ! diff -u gen/rust/${spec}.rs /tmp/${spec}_regen.rs; then - echo "::error file=gen/rust/${spec}.rs::DRIFT: gen/rust/${spec}.rs != t27c gen-rust specs/${spec}.t27" - echo "Fix: t27c gen-rust specs/${spec}.t27 > gen/rust/${spec}.rs" - STATUS=1 - else - echo "gen/rust/${spec}.rs matches specs/${spec}.t27" - fi + T27C="t27/target/release/t27c" + for spec in specs/*.t27; do + name="$(basename "$spec" .t27)" + "$T27C" gen-rust "$spec" > "gen/rust/${name}.rs" done - exit $STATUS - - name: Drift check — Zig (all specs) - working-directory: tri-net + - name: Fail on any drift run: | - T27C=../t27/target/release/t27c - STATUS=0 - for spec in wire hello etx crc16 byte_utils mesh_routing key_management frame_buffer packet_queue congestion_control flow_control self_healing trust_manager timer transport_tx_fsm redundancy_management fault_detection lite_crypto network_metrics m3_multihop link_statistics access_control bandwidth_allocator cache_management compression_engine cross_layer_optimizer energy_aware_routing adaptive_retry link_quality_monitor multipath_router auto_config adaptive_routing anomaly_detector api_documenter area_optimization docs_generator fpga_synthesis_report health_dashboard health_monitoring integration_tests load_predictor local_processing mesh_node_sim mesh_protocol_stack multipath_routing network_coding network_orchestrator network_simulator olsr_routing pattern_predictor performance_benchmarks performance_profiler power_monitoring production_deployment production_scenarios quarantine_manager resource_scheduler swarm_coordinator test_framework timing_closure topology_visualizer traffic_animator failure_predictor hardware_validation integration_framework network_analytics packet_loss_injection test_validator; do - $T27C gen specs/${spec}.t27 > /tmp/${spec}_regen.zig - if ! diff -u gen/zig/${spec}.zig /tmp/${spec}_regen.zig; then - echo "::error file=gen/zig/${spec}.zig::DRIFT: gen/zig/${spec}.zig != t27c gen specs/${spec}.t27" - echo "Fix: t27c gen specs/${spec}.t27 > gen/zig/${spec}.zig" - STATUS=1 - else - echo "gen/zig/${spec}.zig matches specs/${spec}.t27" - fi - done - exit $STATUS + if ! git diff --quiet -- gen/rust/; then + echo "::error::gen/rust drifted from specs/*.t27 under the pinned t27c." + echo "Regenerate locally with the pinned t27c and commit the result;" + echo "never hand-edit gen/rust or use an unpinned compiler." + git --no-pager diff --stat -- gen/rust/ + git --no-pager diff -- gen/rust/ | head -200 + exit 1 + fi + echo "gen/rust is in sync with specs under the pinned t27c." - - name: Drift check — C (all specs) - working-directory: tri-net + - name: Build + test the regenerated tree run: | - T27C=../t27/target/release/t27c - STATUS=0 - for spec in wire hello etx crc16 byte_utils mesh_routing key_management frame_buffer packet_queue congestion_control flow_control self_healing trust_manager timer transport_tx_fsm redundancy_management fault_detection lite_crypto network_metrics m3_multihop link_statistics access_control bandwidth_allocator cache_management compression_engine cross_layer_optimizer energy_aware_routing adaptive_retry link_quality_monitor multipath_router auto_config adaptive_routing anomaly_detector api_documenter area_optimization docs_generator fpga_synthesis_report health_dashboard health_monitoring integration_tests load_predictor local_processing mesh_node_sim mesh_protocol_stack multipath_routing network_coding network_orchestrator network_simulator olsr_routing pattern_predictor performance_benchmarks performance_profiler power_monitoring production_deployment production_scenarios quarantine_manager resource_scheduler swarm_coordinator test_framework timing_closure topology_visualizer traffic_animator failure_predictor hardware_validation integration_framework network_analytics packet_loss_injection test_validator; do - $T27C gen-c specs/${spec}.t27 > /tmp/${spec}_regen.c - if ! diff -u gen/c/${spec}.c /tmp/${spec}_regen.c; then - echo "::error file=gen/c/${spec}.c::DRIFT: gen/c/${spec}.c != t27c gen-c specs/${spec}.t27" - echo "Fix: t27c gen-c specs/${spec}.t27 > gen/c/${spec}.c" - STATUS=1 - else - echo "gen/c/${spec}.c matches specs/${spec}.t27" - fi - done - exit $STATUS + cargo build --all-targets --verbose + cargo test --verbose diff --git a/.t27c-version b/.t27c-version new file mode 100644 index 0000000..34495ad --- /dev/null +++ b/.t27c-version @@ -0,0 +1,4 @@ +# Pinned t27c compiler — verified fix commit (optimizer removal #1456 + array/index codegen #1457). +# gen/rust must be byte-identical to `t27c gen-rust` from this exact commit. +# repo: https://github.com/gHashTag/t27 branch: fix/faithful-rust-c-codegen-1455 +d7f3a73 diff --git a/README.md b/README.md index 81c6331..7d75e4c 100644 --- a/README.md +++ b/README.md @@ -85,16 +85,18 @@ BitNet-ternary benchmark on returned silicon, publish the raw log. | M1 static binary size (armv7l musleabihf) | 534 604 B | `smoke/M1_RESULTS.md` | | M1 binary sha256 | `e5abc335…7290a` | `smoke/M1_RESULTS.md` | | M1 host tests | 20 unit + 2 integration, RC=0 | `cargo test` | -| Rust `#[test]` blocks in repo | 110 | `grep -rE '^\s*#\[test\]' src tests` | -| Rust source lines | 4 463 | `find src -name '*.rs' \| xargs wc -l` | +| Rust `#[test]` blocks in repo | 101 (all in `src/`; `tests/` dir removed 2026-07-07) | `grep -rE '^\s*#\[test\]' src` | +| Rust source lines | 4 544 | `find src -name '*.rs' \| xargs wc -l` | | AD9361 tune target | LO 5.8 GHz | `radio/README.md` | | AD9361 FFT peak (1 MHz tone, digital loopback) | +0.999 MHz | `radio/README.md` | -| AD9361 SNR over noise floor | 108.6 dB (digital loopback only, not over-the-air) | `radio/README.md`; see [W7 finding #5](docs/W7_WEAK_POINTS_STRUCTURAL.md#находка-5) and [REGULATORY_STATUS](docs/REGULATORY_STATUS.md) | +| AD9361 SNR over noise floor | 108.6 dB (digital loopback only, not over-the-air) | `radio/README.md`; see [W7 finding #5](docs/archive/W7_WEAK_POINTS_STRUCTURAL.md#находка-5) and [REGULATORY_STATUS](docs/REGULATORY_STATUS.md) | | AD9361 tuning range | 70 MHz … 6 GHz | `radio/README.md` | | Sample rate | 30.72 MHz | `radio/README.md` | | Capture length | 65 536 samples | `radio/README.md` | + +> Примечание (2026-07-10): файл `radio/README.md` удалён при уборке 2026-07-07; строки AD9361 выше — исторический digital-loopback снимок. Текущее воспроизводимое RF-доказательство: [`docs/W12_E2E_RF_TEST_RESULTS.md`](docs/W12_E2E_RF_TEST_RESULTS.md) (30/30 PASS). Не over-the-air. | Connected P203 Mini boards | 3 | User confirmation 2026-07-04 | -| T27 spec files ported | 1 (`specs/wire.t27`) | `find specs -name '*.t27'` | +| T27 specs in tree / wired into src | 68 / 1 (`specs/wire.t27`) | `find specs -name '*.t27' \| wc -l` | ### DePIN tokenomics (contract source, `gHashTag/trinity-contracts`, not yet deployed to mainnet) @@ -134,7 +136,7 @@ BitNet-ternary benchmark on returned silicon, publish the raw log. ## Build & test (host) ```bash -cargo test # 20+ unit + 2 integration tests (см. Metrics — 110 test blocks в проекте) +cargo test # 101 #[test] blocks, все в src/ (см. Metrics) cargo run --bin smoke-m1 ``` @@ -223,11 +225,11 @@ Sister-репозитории: [`gHashTag/t27`](https://github.com/gHashTag/t27) ## Key docs - [`docs/LOCAL_FLASH.md`](docs/LOCAL_FLASH.md) — пошаговая локальная прошивка трёх плат. -- [`docs/WAVE_DEPIN_2026-07-04.md`](docs/WAVE_DEPIN_2026-07-04.md) — DePIN whitepaper (четыре плеча, tokenomics, positioning). +- `docs/WAVE_DEPIN_2026-07-04.md` — DePIN whitepaper (в неслитом PR #29, не на `main`). - `docs/COMPETITOR_MATRIX_2026-07-04.md` — 10 MANET-конкурентов × 15 полей (в [PR #28](https://github.com/gHashTag/tri-net/pull/28)). -- [`docs/_recon/DEPIN_COMPETITORS_2026-07-04.md`](docs/_recon/DEPIN_COMPETITORS_2026-07-04.md) — 12 DePIN-сетей × 12 полей. -- [`docs/WAVE_N3_AUDITABILITY_GAP_2026-07-04.md`](docs/WAVE_N3_AUDITABILITY_GAP_2026-07-04.md) — auditability δ paper. -- [`docs/STRENGTHEN.md`](docs/STRENGTHEN.md) — science-driven backlog. +- `docs/_recon/DEPIN_COMPETITORS_2026-07-04.md` — 12 DePIN-сетей × 12 полей (в неслитом PR #29, не на `main`). +- [`docs/archive/WAVE_N3_AUDITABILITY_GAP_2026-07-04.md`](docs/archive/WAVE_N3_AUDITABILITY_GAP_2026-07-04.md) — auditability δ paper. +- [`docs/archive/STRENGTHEN.md`](docs/archive/STRENGTHEN.md) — science-driven backlog. - [`docs/AUTONOMOUS.md`](docs/AUTONOMOUS.md) — human-merge only policy для agent PR's. ## License diff --git a/build.rs b/build.rs index 4aa37b0..ae35427 100644 --- a/build.rs +++ b/build.rs @@ -24,10 +24,14 @@ fn main() { let gen_path = gen_dir.join(format!("{}.rs", name.to_str().unwrap())); let needs_regen = !gen_path.exists() || { - let spec_time = entry.metadata().map_or(0, |m| m.modified().ok()) - .map_or(0, |t| t.elapsed().map_or(0, |d| d.as_secs())); - let gen_time = std::fs::metadata(&gen_path).map_or(0, |m| m.modified().ok()) - .map_or(0, |t| t.elapsed().map_or(0, |d| d.as_secs())); + let spec_time = entry.metadata().ok() + .and_then(|m| m.modified().ok()) + .and_then(|t| t.elapsed().ok()) + .map_or(0, |d| d.as_secs()); + let gen_time = std::fs::metadata(&gen_path).ok() + .and_then(|m| m.modified().ok()) + .and_then(|t| t.elapsed().ok()) + .map_or(0, |d| d.as_secs()); spec_time < gen_time // spec is newer }; diff --git a/docs/PIPELINE.md b/docs/PIPELINE.md new file mode 100644 index 0000000..db84d4a --- /dev/null +++ b/docs/PIPELINE.md @@ -0,0 +1,77 @@ +# The golden pipeline — the ONLY correct way to change this repo + +`specs/*.t27` -> `t27c gen-rust` -> `gen/rust/*.rs` -> used by `src/` + +Anchor: phi^2 + phi^-2 = 3. + +## Hard rules (physically enforced — see "Enforcement" below) + +1. Logic is written in `.t27` specs. Never hand-write Rust in `gen/`. +2. `gen/rust/*.rs` is GENERATED ONLY, by the pinned compiler in `.t27c-version`. + It must be byte-identical to `t27c gen-rust ` from that exact commit. +3. To change generated behaviour: edit the `.t27` spec, regenerate, commit both. +4. Never push to `main` directly. All changes land through a pull request whose + checks pass. (`main` is a protected branch; direct pushes are rejected.) +5. Bump `.t27c-version` only together with a full regen of `gen/rust` in the + same commit. + +## Regenerate locally + +```bash +# 1. Build the pinned t27c +SHA=$(grep -oE '[0-9a-f]{40}' .t27c-version | head -1) +git clone https://github.com/gHashTag/t27 ../t27 && git -C ../t27 checkout "$SHA" +cargo build --release -p t27c --manifest-path ../t27/Cargo.toml + +# 2. Regenerate every module from its spec +for spec in specs/*.t27; do + n=$(basename "$spec" .t27) + ../t27/target/release/t27c gen-rust "$spec" > "gen/rust/$n.rs" +done + +# 3. Verify nothing drifted, then build/test +git diff --exit-code -- gen/rust/ +cargo build --all-targets && cargo test +``` + +`build.rs` performs the same regeneration automatically when the pinned t27c is +present at `../t27/target/release/t27c`. + +## Enforcement (what makes the wrong way physically impossible) + +- `.github/workflows/spec-drift-guard.yml` rebuilds t27c at the pinned commit, + regenerates all `gen/rust`, and FAILS the build on any byte drift, then + builds + tests. Catches: stale/wrong compiler, hand-edited gen, spec edited + without regen. +- `.github/workflows/ci.yml` runs fmt + clippy (`-D warnings`) + build + test + + `cargo-audit`. +- Branch protection on `main`: no direct pushes, PR required, required status + checks must pass, no bypass. This is what would have stopped the 2026-07-07 + breakage (a direct push of gen/rust built by a stale t27c). +- `lefthook.yml` pre-commit hooks are a local first line (no gen/ edits, no + hand-written logic in `src/`, ASCII-only) but hooks are bypassable, so CI + + branch protection are the real guard. + +## t27c codegen fixes applied (pinned commit d7f3a73) + +The pinned t27c carries, in order: the dropped-`let` lexer fix (t27#1401), the +`ExprCast` fix (t27#1320), the **optimizer removal for the Rust/C source +backends** (t27#1456 — the AST optimizer was dropping reassigned mutable locals +and const-inlining `let`), and the **array/index codegen fix** (t27#1457 — +`[T; N]` -> `[T; N as usize]`, non-literal indices cast to `usize`). + +With these, all 68 specs regenerate to compiling Rust. The 9 generated mesh +modules (`adaptive_routing`, `multipath_routing`, `anomaly_detector`, +`flow_control`, `frame_buffer`, `health_dashboard`, `mesh_routing`, `etx`, +`quarantine_manager`) are now WIRED in `src/lib.rs`. They still have zero call +sites, so each `mod` declaration carries `#[allow(dead_code, unused, +unused_parens, clippy::all)]` for lint hygiene on generated theater. + +Genuine SOURCE-spec bugs surfaced by the now-correct codegen were fixed in the +`.t27` specs (see gHashTag/tri-net#61): a `path_valid` typo, an +`is_multipath_viable` bool-vs-u32 return type, an `etx` Q8.8 `256`-in-u8 literal, +and ~50 reassigned locals switched from `let` to the mutable idiom `var`. + +The pin is `d7f3a73` on branch `fix/faithful-rust-c-codegen-1455`; once +t27 PR #1456 merges to master, bump `.t27c-version` to the master SHA (the +generated output is identical). diff --git a/docs/WAVE_REPORT_2026-07-10.md b/docs/WAVE_REPORT_2026-07-10.md new file mode 100644 index 0000000..be2d2d5 --- /dev/null +++ b/docs/WAVE_REPORT_2026-07-10.md @@ -0,0 +1,143 @@ +# 🌊 Wave Report 2026-07-10 — «Сборка сломана на main» + карта слабых мест + 3 линии сотрудничества + +Автор волны: агентная разведка (6 параллельных читателей кода/доков/спек + веб), синтез и правки — вручную. +Якорь: `phi^2 + phi^-2 = 3`. + +## 0. Преамбула честности (состояние репозитория проверено) + +- HEAD `main` = `6850649` (2026-07-07 20:03 +07). Рабочее дерево чистое на момент клонирования. +- Заземлённые счётчики (проверено `2026-07-10`): `68` спек `specs/*.t27`, `101` блок `#[test]` (все в `src/`, ноль в удалённой `tests/`), `11` файлов `src/*.rs`. +- Каждое «hw»-утверждение помечено `-sim`/projected, если нет он-девайс лога с `RC=0`/PASS. Единственные hw-классы доказательств: `smoke/M1_RESULTS.md`, `docs/W12_M1_HW_RESULTS.md`, `docs/W12_E2E_RF_TEST_RESULTS.md`, `smoke/M2_STEP2_RESULTS.md`. +- Все P0-находки этой волны воспроизведены руками (`cargo build`/`cargo test` на чистом клоне), а не только заявлены агентом. + +## 1. Три метафоры (для не-инженера) + +- Замок и стены: ворота замка (`cargo build`) сейчас не открываются вообще — их заклинило неделю назад при «уборке». Внутренняя стража (101 тест) жива, но снаружи к ней не пройти, пока ворота сломаны. +- Тепловая карта: два ярко-красных очага (сборка не компилируется + сгенерированный код-мусор) и группа оранжевых в крипто-рукопожатии, которое называет себя «стойким к MITM», а его же тест доказывает обратное. +- Что реально нашли в коде: не «мелкая опечатка». Коммит-«уборщик» перегенерировал 59 файлов сломанным кодогенератором и сломал скрипт сборки — с 2026-07-07 репозиторий не собирается ни у кого с чистого клона. + +## 2. Снимок реальности (hw vs -sim) + +| Что | Статус | Доказательство | +|---|---|---| +| M1 X25519+ChaCha20 на ARM (1 плата) | `hw` PASS | `smoke/M1_RESULTS.md:19-24` (P201Mini, armv7l, 2026-07-01) | +| M1 на 3 платах | `hw` 3/3 PASS | `docs/W12_M1_HW_RESULTS.md:7` (2026-07-07) | +| E2E + RF смоук | `hw` 30/30 PASS | `docs/W12_E2E_RF_TEST_RESULTS.md:9` (2026-07-07) | +| M2 step2, daemon bring-up (1 плата) | `hw` 5/5 | `smoke/M2_STEP2_RESULTS.md:4` (2026-07-07) | +| M2 TUN/IP mesh-over-radio (3 платы) | `-sim` / не в main | живёт в незамёрдженном PR #57 | +| M3 iperf3 через 2 хопа, M4 общий uplink, M5 self-heal | `-sim` | issues #12/#13/#14 открыты, порога сходимости в `main` нет | +| Zynq-7020 Mini PL bitstream / AD9361 OTA / GPS-PPS | `auto=false` | issue #8 открыт (плата PL ни разу не прошита) | + +Важно: hw-доказательства W12 получены на коммите `d479107` (W12, ДО вечерней «уборки» 2026-07-07). На текущем HEAD те же бинарники не собираются (см. P0b) — то есть демон, гонявший железо, сегодня из main не воспроизводится. + +## 3. Тепловая карта слабых мест (только НОВОЕ, не дублирует STRENGTHEN.md / архивные волны) + +| # | Слабое место | Severity | Файлы | Фикс (E-id) | +|---|---|---|---|---| +| N1 | `main` НЕ СОБИРАЕТСЯ: `build.rs:27-30` — 4 ошибки типов (`.map_or(0, Option)`) | P0 | `build.rs` | E1.1 | +| N2 | Сгенерированный `gen/rust/*.rs` невалиден: 59 файлов с `let;`/`return ();` в `-> u8`; 9+wire вшиты в lib → 114 ошибок компиляции библиотеки | P0 | `gen/rust/*`, `src/lib.rs`, `src/wire.rs` | E1.2 | +| N2b | ЗАКРЫТО (итерации 2-3). Уточнение первопричины: типы НЕ исчезли — `lib.rs` держал мёртвые shadow-заглушки (`struct Delivery` без вариантов, `Hello` без parse/authenticated, `StaticKey` без from_seed, второй `trait Transport` с send_to/recv_from), затенявшие реальные `crypto::`/`discovery::`/`router::`/`daemon::` типы. Заглушки убраны, реальные типы реэкспортированы. Итог: `cargo build --all-targets` зелёный, оба бинарника собираются, smoke-m1 печатает M1 PASS | P0 | `src/lib.rs` | E1.3 ✓ | +| N3 | «Noise-XX» криптографически несостоятелен: только `ee+ss` (нет `es`/`se`, нет transcript-hash); собственный тест `noise_xx_resistant_to_mitm` утверждает, что атакующий РАСШИФРОВЫВАЕТ трафик | P1 | `crypto.rs:132-161,738-781` | E1.4 | +| N4 | MAC HELLO-биконов на вшитом в исходник константном ключе; `verify_mac()`/`is_fresh()` в демоне НЕ вызываются — аутентификация метрики это мёртвый код | P1 | `discovery.rs:13-16,82`, `trios_meshd.rs:182-188,301` | E2.1 | +| N5 | Демон выводит статический ключ узла из ПУБЛИЧНОГО детерминированного сида (`Sha256("…node/"‖id)`) → тривиальная имперсонация/дешифровка любого узла | P1 | `trios_meshd.rs:37-42,120,132` | E2.2 | +| N6 | ETX-метрика управляема атакующим через неаутентифицированный список `heard` (false-metric/blackhole) — класс известен, но теперь с точной привязкой к мёртвому N4 | P1 | `router.rs`, `discovery.rs` | E2.1 | +| N7 | Gateway FETCH порождает неограниченный `thread::spawn` + исходящий TCP на запрос (amplification DoS); в демоне ноль `rate/limit/throttle/bound` | P2 | `trios_meshd.rs:196-210,46-63` | E3.1 | +| N8 | MAC HELLO проверяется НЕ constant-time сравнением массивов (тайминг-сайд-канал); во всём `src/` нет `subtle/ct_eq` | P2 | `discovery.rs` | E3.2 | +| N9 | Флаг роли initiator не проверяется → при мисконфиге катастрофическое повторное использование nonce/keystream | P2 | `crypto.rs` | E3.3 | +| N10 | Мировой-writable `/tmp/mesh.drop` читается каждые 300 мс — любой локальный юзер валит любую mesh-линию | P2 | `daemon.rs` | E3.4 | +| N11 | CI никогда не компилирует сгенерированный код; нет `cargo-audit`/fuzz/`clippy::pedantic`; `spec-drift-guard` проверяет ТЕКСТ, а не собираемость; lefthook pre-push смотрит exit-код `tail`, а не `cargo` → сломанная сборка прошла gate | P1 | `.github/workflows/*`, `lefthook.yml` | E3.5 | +| N12 | Doc-drift: `MERGE_ORDER.md` описывает мёртвый стек PR #11–#17; `AUTONOMOUS.md` таргетит чужой репо `gHashTag/trios-mesh`; README «Key docs» ссылается на файлы, уехавшие в `docs/archive/`; `spec-drift-guard` диффает удалённые `gen/zig`,`gen/c` | P1 | `docs/*`, README | E4.3 | +| N13 | `SOUL.md` Art. I «доки MUST be English» противоречит 7 русским не-архивным докам в репо | P2 | `docs/*`, `SOUL.md` | E4.3 | + +Первопричина N1/N2 (доказана): timeline 2026-07-07, прямые пуши в `main` за ~25 мин — `2b28312` (19:29, зелёный CI) → `f608dad` (19:47, «L7 all-Rust helpers»: переписал `build.rs` и перегенерировал `gen/` СЛОМАННЫМ t27c) → `b0ef52c` (19:53, удалил `tests/`, 141→101) → `6850649` (docs). Последний зелёный коммит — `2b28312` (проверено: `cargo test` = 141 passed). Эмиттер t27c роняет `let`/cast-выражения (корень — в `gHashTag/t27`, уже частично разобран в PR #44). + +## 4. Наука → рецепты (первоисточники, свежесть 12 мес) + +| Рецепт | Слабое место | Ссылка | +|---|---|---| +| Заменить самодельный «Noise-XX» на верифицируемый Noise-IK X25519+ChaCha20 с transcript-hash; формально проверить Tamarin | N3, N5 | [AutoTam 2026, arXiv:2606.19937](https://arxiv.org/abs/2606.19937); [Lightweight Noise-IK eval 2025, arXiv:2512.10135](https://arxiv.org/abs/2512.10135); Noise Protocol Framework spec | +| Trust-score co-design между рукопожатием и метрикой; защита от вранья узлов о метрике после закрытия handshake | N4, N6 | [Hybrid MAC + multi-layer security 2025, arXiv:2510.10236](https://arxiv.org/abs/2510.10236); [Trusted Routing for UAV via MARL 2025, arXiv:2508.00938](https://arxiv.org/abs/2508.00938) | +| Перейти от реактивного ETX к предиктивной оценке качества линка (mobility-aware) | N6 | [Fuzzy bio-inspired FANET routing 2026, arXiv:2606.26124](https://arxiv.org/abs/2606.26124); [ML cluster-routing UAV 2025, arXiv:2510.27121](https://arxiv.org/abs/2510.27121) | +| Детерминированное воспроизведение RF-заявлений через channel/radio эмуляцию (цифровой двойник) до 3-платных прогонов | Снимок реальности (слабейший класс доказательств) | [ACHEM digital-twin RF 2026, arXiv:2604.04742](https://arxiv.org/abs/2604.04742) | +| Позиционировать PHY-потолок Zynq/AD9361 BPSK против опубликованного 1.2 Gbps FPGA-SDR mesh; наметить OFDM/MIMO-апгрейд | Roadmap PHY | [1.2 Gbps always-on mesh 2026, arXiv:2603.06667](https://arxiv.org/abs/2603.06667) | +| Систематизировать proof-of-coverage для трека Proof-of-FPGA (классы атак: GPS-spoof, витнес-сговор) | Трек аттестации | [Taxonomy of Proof-of-Location 2025, arXiv:2508.14230](https://arxiv.org/abs/2508.14230); [Decentralized PoL 2026, arXiv:2603.27883](https://arxiv.org/abs/2603.27883) | + +Канонические якоря без изменений (проверено, не устарели): Babel RFC 8966, ETX (MobiCom 2003), BFD RFC 5880, Noise Protocol Framework. Оговорка честности: научные строки читались на уровне абстрактов (arXiv ID сверены через API, глубже abstract не читалось). + +## 5. Декомпозированный план (4 спринта, каждая задача с измеримым критерием) + +Sprint 1 — вернуть зелёную сборку (все `auto=true`, Rust-only): +- E1.1 `build.rs:27-30` — заменить кривой `.map_or(0, Option)` на `and_then`-цепочку. Крит.: `cargo build` без ошибок build-скрипта. СДЕЛАНО в этой волне. +- E1.2 регенерировать `gen/rust/*` починенным t27c ИЛИ, как интерим, отвязать 9 мёртвых re-export-модулей (0 call-sites). Крит.: `cargo build --lib` зелёный + 101 тест. Интерим СДЕЛАН (см. §7). +- E1.3 согласовать бинарники с API `src/`. Крит.: `cargo build --bins` зелёный. СДЕЛАНО (итерации 2-3): реальные типы не исчезали — их затеняли мёртвые заглушки в `lib.rs`; заглушки убраны, типы реэкспортированы. `cargo build --all-targets` зелёный. + +Sprint 2 — идентичность + целостность метрики: +- E2.1 в RX-пути демона вызвать `verify_mac`+`is_fresh` перед `observe()`, MAC-ключ выводить из сессии, убрать константный fallback. Крит.: тест, где поддельный `heard` отвергается. +- E2.2 грузить статические секреты из провижн-хранилища (не из NodeId) + AllowList `NodeId→PubKey`. Крит.: тест — узел с чужим static-key не устанавливает сессию. + +Sprint 3 — харденинг: +- E3.1 rate-limit + bound на FETCH/gateway. E3.2 constant-time MAC (`subtle`). E3.3 явная проверка роли. E3.4 убрать `/tmp/mesh.drop` из прод-пути. E3.5 CI: `cargo build` сгенерированного кода + `cargo-audit` + `clippy -D warnings` + починить lefthook (проверять exit `cargo`, не `tail`). Крит.: красный CI на любом из этих регрессов. + +Sprint 4 — паритет верификации: +- E4.1 84-format golden cross-check, E4.2 t27 iverilog, E4.3 привести доки к реальности (MERGE_ORDER, AUTONOMOUS→свой репо, README-ссылки, SOUL Art.I). Крит.: `spec-drift-guard` зелёный и диффает существующие бэкенды. + +## 6. Что дальше логично для TRI-NET (прямой ответ на вопрос) + +Порядок жёстко продиктован зависимостями, а не желаниями: + +1. Немедленно (P0): зелёная сборка на `main`. Пока `cargo build` красный, каждый следующий PR стоит на песке, а «hw-доказано» нельзя воспроизвести. E1.1 сделан; остаётся E1.2 (регенерация правильным t27c) и E1.3 (демон). Это разблокирует всё остальное. +2. Затем закрыть t27c-эмиттер (PR #44) — иначе `gen/` будет ломаться при каждой регенерации; это общий корень с экосистемой t27. +3. Затем — реальная безопасность (Sprint 2): текущее рукопожатие и MAC декоративны (N3–N6). До этого любые «secure mesh» заявления в README нельзя держать без `-sim`. +4. Только потом — новые фичи (trios-chat PR #56, M3/M4/M5 demo-gates). Мерджить их поверх несобираемого main — множить долг. +5. Параллельный трек без кода: воспроизводимость RF через цифровой двойник (arXiv:2604.04742) — снимает самый хрупкий класс доказательств до закупки железа. + +Одной фразой: сначала почини ворота (сборка), потом стражу (крипто), потом достраивай башни (фичи). Порядок обратный — стройка на сломанном фундаменте. + +## 7. Что реализовано прямо в этой волне (ветка feat/wave-report-2026-07-10) + +Цель — не просто отчёт, а зелёная библиотека. Три хирургических правки: +- `build.rs` — 4 ошибки типов E0308/E0599 заменены на корректную `and_then`-цепочку. +- `gen/rust/wire.rs` — восстановлен из последнего зелёного `2b28312` (используется `src/wire.rs`, компилируется чисто; 0 `return ();`). +- `src/lib.rs` — 9 сгенерированных re-export-модулей с НУЛЁМ call-sites временно отвязаны (закомментированы) с пометкой вернуть после фикса t27c/PR #44. + +Проверено на чистом дереве ветки. Итерация 1: `cargo build --lib` Finished; `cargo test --lib` = 101 passed. Итерация 2: восстановлен M1-харнесс `smoke_m1` (реэкспорт `Handshake`/`MeshError`/`Node`), `cargo run --bin smoke-m1` печатает полный M1 PASS; наземная on-wire = 44→83 байта (разрешает doc-drift 44→79). Итерация 3: убраны мёртвые shadow-заглушки в `lib.rs`, реэкспортированы реальные `crypto`/`discovery`/`router`/`daemon` типы. ИТОГ: **`cargo build --all-targets` зелёный, `cargo test` = 101 passed, оба бинарника собираются**. P0 сборки закрыт end-to-end на ветке. Остаётся глубже: реальная регенерация `gen/` починенным t27c (Линия A / PR #44) — интерим-отвязка 9 модулей держит сборку, но `gen/` всё ещё pipeline-театр без call-sites. + +## 8. Три линии сотрудничества для Wave-(N+1) + +Каждая самодостаточна, разблокирована и стартует параллельно разными акторами. + +Линия A — «t27c emitter fix» (компиляторный трек): +- Scope: починить Rust-эмиттер t27c (роняет `let`/cast → `let;`, `()`), закрыть PR #44, регенерировать `gen/rust` в tri-net. +- Actor fit: контрибьютор `gHashTag/t27` с опытом кодогена. +- Deliverable: `t27c gen-rust` даёт компилируемый выход; E1.2 закрывается «по-настоящему», 9 модулей ре-вайрятся. +- DEMO: CI-шаг `cargo build gen/` зелёный на свежем клоне. +- Cite: PR #44 (найденная первопричина E0425/dropped-let). +- Effort: M. Risk: средний (общий корень с экосистемой). + +Линия B — «Noise-IK + Tamarin» (крипто-трек): +- Scope: заменить самодельный ee+ss на Noise-IK с transcript-hash и AllowList; формально проверить рукопожатие. +- Actor fit: прикладной криптограф / формальные методы. +- Deliverable: `crypto.rs` с реальными `es/se`, тест MITM теперь ПАДАЕТ у атакующего; `.spthy`-модель. +- DEMO: Tamarin-прогон + переписанный `noise_xx_resistant_to_mitm`. +- Cite: [arXiv:2606.19937](https://arxiv.org/abs/2606.19937), [arXiv:2512.10135](https://arxiv.org/abs/2512.10135), Noise spec. +- Effort: M-L. Risk: низкий (self-contained). + +Линия C — «RF digital-twin reproducibility» (PHY/evidence-трек): +- Scope: channel/radio-эмуляция, чтобы 2/3-платные RF-заявления воспроизводились детерминированно до железа. +- Actor fit: SDR/DSP-инженер с GNURadio/Zynq-опытом. +- Deliverable: эмулятор-стенд + переигранный W12 E2E как `-sim`-двойник рядом с `hw`-логом. +- DEMO: `docs/RF_TWIN_*.md` с байт-в-байт совпадением эмуляции и M1-фрейма. +- Cite: [arXiv:2604.04742](https://arxiv.org/abs/2604.04742). +- Effort: L. Risk: средний (нужна валидация эмулятора). + +## 9. Границы (что эта волна НЕ делает) + +- Не мержит PR (только draft, human-only per `docs/AUTONOMOUS.md`). +- Не прошивает железо, не заказывает оборудование, не трогает `-hw`-пункты. +- Не переписывает `docs/archive/STRENGTHEN.md` — волна ДОБАВЛЯет датированный отчёт, бэклог курирует владелец. +- Не чинит бинарники и не регенерирует `gen/` правильным t27c (нет доверенного t27c в этой сессии; эмиттер сам баганут — Линия A). +- Не подтверждает `hw` там, где нет он-девайс лога. + +Co-Authored-By: Claude Fable 5 + +`phi^2 + phi^-2 = 3` diff --git a/gen/rust/access_control.rs b/gen/rust/access_control.rs index 4da047d..3672e5b 100644 --- a/gen/rust/access_control.rs +++ b/gen/rust/access_control.rs @@ -64,7 +64,7 @@ pub fn role_meets_minimum(role: u32, min_role: u32) -> bool { } pub fn check_access(policy: u32, role: u32) -> u32 { - let; + let min_role = get_min_role(policy); if !(role_meets_minimum(role, min_role)) { return DENY; } @@ -90,32 +90,23 @@ pub fn verify_creds(creds: u32, provided_token: u32) -> bool { } pub fn authorize_node(creds: u32) -> u32 { - let; - node_id = get_node_id(creds); - let; - role = get_role(creds); - let; - token = get_auth_token(creds); + let node_id = get_node_id(creds); + let role = get_role(creds); + let token = get_auth_token(creds); return create_node_creds(node_id, role, token, PERMIT); } pub fn revoke_node(creds: u32) -> u32 { - let; - node_id = get_node_id(creds); - let; - role = get_role(creds); - let; - token = get_auth_token(creds); + let node_id = get_node_id(creds); + let role = get_role(creds); + let token = get_auth_token(creds); return create_node_creds(node_id, role, token, DENY); } pub fn change_role(creds: u32, new_role: u32) -> u32 { - let; - node_id = get_node_id(creds); - let; - token = get_auth_token(creds); - let; - auth = is_authorized(creds); + let node_id = get_node_id(creds); + let token = get_auth_token(creds); + let auth = is_authorized(creds); return create_node_creds(node_id, new_role, token, auth); } @@ -123,8 +114,7 @@ pub fn check_resource_access(creds: u32, policy: u32, provided_token: u32) -> u3 if !(verify_creds(creds, provided_token)) { return DENY; } - let; - role = get_role(creds); + let role = get_role(creds); return check_access(policy, role); } diff --git a/gen/rust/adaptive_retry.rs b/gen/rust/adaptive_retry.rs index acd87bb..1a8a5d9 100644 --- a/gen/rust/adaptive_retry.rs +++ b/gen/rust/adaptive_retry.rs @@ -16,18 +16,15 @@ pub fn backoff_delay_ms(attempt: u8) -> u16 { unimplemented!() } pub fn max_retries_for_quality(quality_q8: u8) -> u8 { unimplemented!() } pub fn should_retry(current_attempt: u8, link_quality_q8: u8) -> bool { - let; - max_retries; + let max_retries: u8 = max_retries_for_quality(link_quality_q8); (current_attempt < max_retries); } pub fn base_probability(quality_q8: u8) -> u8 { unimplemented!() } pub fn retry_success_probability(attempt: u8, quality_q8: u8) -> u8 { - let; - base_prob; - let; - decay; + let base_prob: u8 = base_probability(quality_q8); + let decay: u8 = ((base_prob / 4) * attempt); } pub fn total_retry_time(max_retries: u8) -> u16 { unimplemented!() } diff --git a/gen/rust/adaptive_routing.rs b/gen/rust/adaptive_routing.rs index 7b20fcc..fa9d63a 100644 --- a/gen/rust/adaptive_routing.rs +++ b/gen/rust/adaptive_routing.rs @@ -52,34 +52,32 @@ pub fn get_last_update(state: u32) -> u32 { } pub fn create_path_metrics_array(m0: u32, m1: u32, m2: u32, m3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((m0 as u64) << 48) | ((m1 as u64) << 32)) | ((m2 as u64) << 16)) | (m3 as u64)); } pub fn get_path_metrics(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn calculate_score(metrics: u32, metric_type: u32) -> u32 { if (metric_type == METRIC_LATENCY) { - let; - latency = get_latency(metrics); + let mut latency = get_latency(metrics); if (latency == 0) { return 255; } return (255 / latency); } else { if (metric_type == METRIC_HOPS) { - let; - hops = get_hops(metrics); + let mut hops = get_hops(metrics); if (hops == 0) { return 255; } @@ -94,9 +92,8 @@ pub fn calculate_score(metrics: u32, metric_type: u32) -> u32 { } pub fn find_best_path(metrics_array: u64, metric_type: u32) -> u32 { - let; - best_path = 0xFF; - let; + let mut best_path = 0xFF; + let mut best_score = 0; if (calculate_score(get_path_metrics(metrics_array, 0), metric_type) > best_score) { best_score = calculate_score(get_path_metrics(metrics_array, 0), metric_type); best_path = 0; @@ -117,26 +114,20 @@ pub fn find_best_path(metrics_array: u64, metric_type: u32) -> u32 { } pub fn needs_update(state: u32, current_time: u32) -> bool { - let; - last = get_last_update(state); - let; - elapsed = (current_time - last); + let last = get_last_update(state); + let elapsed = (current_time - last); return (elapsed >= UPDATE_INTERVAL); } pub fn update_selection(state: u32, primary: u32, backup: u32, current_time: u32) -> u32 { - let; - metric_type = get_metric_type(state); + let metric_type = get_metric_type(state); return create_selection_state(primary, backup, metric_type, current_time); } pub fn change_metric_type(state: u32, new_metric: u32) -> u32 { - let; - primary = get_primary_path(state); - let; - backup = get_backup_path(state); - let; - last = get_last_update(state); + let primary = get_primary_path(state); + let backup = get_backup_path(state); + let last = get_last_update(state); return create_selection_state(primary, backup, new_metric, last); } @@ -145,9 +136,8 @@ pub fn is_path_congested(metrics: u32) -> bool { } pub fn find_least_congested(metrics_array: u64) -> u32 { - let; - best_path = 0; - let; + let mut best_path = 0; + let mut best_load = get_load(get_path_metrics(metrics_array, 0)); if (get_load(get_path_metrics(metrics_array, 1)) < best_load) { best_load = get_load(get_path_metrics(metrics_array, 1)); best_path = 1; diff --git a/gen/rust/anomaly_detector.rs b/gen/rust/anomaly_detector.rs index 39b2b02..95403af 100644 --- a/gen/rust/anomaly_detector.rs +++ b/gen/rust/anomaly_detector.rs @@ -59,16 +59,12 @@ pub const TYPE_PATTERN: u32 = 2; pub const TYPE_TREND: u32 = 3; -pub fn calculate_baseline(history: Vec<>, count: u32) -> u32 { - let; - sum; - let; - valid_count; - let; - i; +pub fn calculate_baseline(history: [u32; MAX_METRICS as usize], count: u32) -> u32 { + let mut sum: u32 = 0; + let mut valid_count: u32 = 0; + let mut i: u32 = 0; while (i < count) { - let; - value; + let value: u32 = get_metric_value(history[(i) as usize]); sum = (sum + value); valid_count = (valid_count + 1); i = (i + 1); @@ -80,16 +76,12 @@ pub fn calculate_baseline(history: Vec<>, count: u32) -> u32 { } } -pub fn calculate_variance(history: Vec<>, count: u32, baseline: u32) -> u32 { - let; - sum_diff; - let; - i; +pub fn calculate_variance(history: [u32; MAX_METRICS as usize], count: u32, baseline: u32) -> u32 { + let mut sum_diff: u32 = 0; + let mut i: u32 = 0; while (i < count) { - let; - value; - let; - diff; + let value: u32 = get_metric_value(history[(i) as usize]); + let mut diff: u32 = 0; if (value > baseline) { diff = (value - baseline); } else { @@ -107,11 +99,9 @@ pub fn calculate_variance(history: Vec<>, count: u32, baseline: u32) -> u32 { pub fn detect_spike(current: u32, baseline: u32, variance: u32) -> u32 { if (current > baseline) { - let; - increase; + let increase: u32 = (current - baseline); if (variance > 0) { - let; - threshold; + let threshold: u32 = (variance * 3); if (increase > threshold) { return 1; } @@ -126,11 +116,9 @@ pub fn detect_spike(current: u32, baseline: u32, variance: u32) -> u32 { pub fn detect_drop(current: u32, baseline: u32, variance: u32) -> u32 { if (current < baseline) { - let; - decrease; + let decrease: u32 = (baseline - current); if (variance > 0) { - let; - threshold; + let threshold: u32 = (variance * 3); if (decrease > threshold) { return 1; } @@ -143,21 +131,16 @@ pub fn detect_drop(current: u32, baseline: u32, variance: u32) -> u32 { return 0; } -pub fn detect_pattern(history: Vec<>, count: u32) -> u32 { +pub fn detect_pattern(history: [u32; MAX_METRICS as usize], count: u32) -> u32 { if (count < 4) { return 0; } - let; - pattern_count; - let; - i; + let mut pattern_count: u32 = 0; + let mut i: u32 = 0; while (i < (count - 2)) { - let; - val1; - let; - val2; - let; - val3; + let val1: u32 = get_metric_value(history[(i) as usize]); + let val2: u32 = get_metric_value(history[((i + 1)) as usize]); + let val3: u32 = get_metric_value(history[((i + 2)) as usize]); if (((val1 > val2) && (val2 < val3)) || ((val1 < val2) && (val2 > val3))) { pattern_count = (pattern_count + 1); } @@ -170,21 +153,16 @@ pub fn detect_pattern(history: Vec<>, count: u32) -> u32 { } } -pub fn detect_trend(history: Vec<>, count: u32) -> u32 { +pub fn detect_trend(history: [u32; MAX_METRICS as usize], count: u32) -> u32 { if (count < 4) { return 0; } - let; - increases; - let; - decreases; - let; - i; + let mut increases: u32 = 0; + let mut decreases: u32 = 0; + let mut i: u32 = 0; while (i < (count - 1)) { - let; - current; - let; - next; + let current: u32 = get_metric_value(history[(i) as usize]); + let next: u32 = get_metric_value(history[((i + 1)) as usize]); if (next > current) { increases = (increases + 1); } else { @@ -194,13 +172,10 @@ pub fn detect_trend(history: Vec<>, count: u32) -> u32 { } i = (i + 1); } - let; - total; + let total: u32 = (increases + decreases); if (total > 0) { - let; - increase_ratio; - let; - decrease_ratio; + let increase_ratio: u32 = ((increases * 100) / total); + let decrease_ratio: u32 = ((decreases * 100) / total); if ((increase_ratio > 80) || (decrease_ratio > 80)) { return 1; } @@ -209,8 +184,7 @@ pub fn detect_trend(history: Vec<>, count: u32) -> u32 { } pub fn calculate_severity(current: u32, baseline: u32) -> u32 { - let; - diff; + let mut diff: u32 = 0; if (current > baseline) { diff = (current - baseline); } else { @@ -227,22 +201,16 @@ pub fn calculate_severity(current: u32, baseline: u32) -> u32 { } } -pub fn detect_anomaly(history: Vec<>, count: u32, current_reading: u32) -> u32 { +pub fn detect_anomaly(history: [u32; MAX_METRICS as usize], count: u32, current_reading: u32) -> u32 { if (count < BASELINE_WINDOW) { return 0; } - let; - baseline; - let; - variance; - let; - current; - let; - metric_id; - let; - anomaly_type; - let; - severity; + let baseline: u32 = calculate_baseline(history, count); + let variance: u32 = calculate_variance(history, count, baseline); + let current: u32 = get_metric_value(current_reading); + let metric_id: u32 = get_metric_id(current_reading); + let mut anomaly_type: u32 = 0; + let mut severity: u32 = 0; if (detect_spike(current, baseline, variance) == 1) { anomaly_type = TYPE_SPIKE; severity = calculate_severity(current, baseline); @@ -270,8 +238,7 @@ pub fn detect_anomaly(history: Vec<>, count: u32, current_reading: u32) -> u32 { } pub fn is_critical_anomaly(report: u32) -> u32 { - let; - severity; + let severity: u32 = get_severity(report); if (severity >= SEVERITY_HIGH) { return 1; } else { @@ -280,8 +247,7 @@ pub fn is_critical_anomaly(report: u32) -> u32 { } pub fn get_anomaly_description(report: u32) -> u32 { - let; - anomaly_type; + let anomaly_type: u32 = get_anomaly_type(report); if (anomaly_type == TYPE_SPIKE) { return 1; } else { @@ -301,25 +267,18 @@ pub fn get_anomaly_description(report: u32) -> u32 { } } -pub fn correlate_metrics(metric1_id: u32, metric2_id: u32, history1: Vec<>, history2: Vec<>, count: u32) -> u32 { +pub fn correlate_metrics(metric1_id: u32, metric2_id: u32, history1: [u32; MAX_METRICS as usize], history2: [u32; MAX_METRICS as usize], count: u32) -> u32 { if (count < 4) { return 0; } - let; - same_direction; - let; - i; + let mut same_direction: u32 = 0; + let mut i: u32 = 0; while (i < (count - 1)) { - let; - val1_current; - let; - val1_next; - let; - val2_current; - let; - val2_next; - let; - direction1; + let val1_current: u32 = get_metric_value(history1[(i) as usize]); + let val1_next: u32 = get_metric_value(history1[((i + 1)) as usize]); + let val2_current: u32 = get_metric_value(history2[(i) as usize]); + let val2_next: u32 = get_metric_value(history2[((i + 1)) as usize]); + let mut direction1: u32 = 0; if (val1_next > val1_current) { direction1 = 1; } else { @@ -327,8 +286,7 @@ pub fn correlate_metrics(metric1_id: u32, metric2_id: u32, history1: Vec<>, hist direction1 = 2; } } - let; - direction2; + let mut direction2: u32 = 0; if (val2_next > val2_current) { direction2 = 1; } else { @@ -348,13 +306,11 @@ pub fn correlate_metrics(metric1_id: u32, metric2_id: u32, history1: Vec<>, hist } } -pub fn detect_coordinated_attack(anomalies: Vec<>, count: u32) -> u32 { - let; - critical_count; - let; - i; +pub fn detect_coordinated_attack(anomalies: [u32; MAX_METRICS as usize], count: u32) -> u32 { + let mut critical_count: u32 = 0; + let mut i: u32 = 0; while (i < count) { - if (is_critical_anomaly(anomalies[i]) == 1) { + if (is_critical_anomaly(anomalies[(i) as usize]) == 1) { critical_count = (critical_count + 1); } i = (i + 1); @@ -367,12 +323,9 @@ pub fn detect_coordinated_attack(anomalies: Vec<>, count: u32) -> u32 { } pub fn calculate_anomaly_confidence(report: u32, historical_confidence: u32) -> u32 { - let; - severity; - let; - base_confidence; - let; - weighted_confidence; + let severity: u32 = get_severity(report); + let base_confidence: u32 = get_anomaly_confidence(report); + let weighted_confidence: u32 = ((((severity * 30) / 100) + ((base_confidence * 50) / 100)) + ((historical_confidence * 20) / 100)); if (weighted_confidence > 100) { return 100; } else { diff --git a/gen/rust/api_documenter.rs b/gen/rust/api_documenter.rs index 07161f6..c4b5416 100644 --- a/gen/rust/api_documenter.rs +++ b/gen/rust/api_documenter.rs @@ -56,22 +56,16 @@ pub const DIR_OUT: u32 = 1; pub const DIR_INOUT: u32 = 2; pub fn extract_function_signature(code_line: u32) -> u32 { - let; - func_id; - let; - param_count; - let; - return_type; + let func_id: u32 = ((code_line >> 16) & 0xFF); + let param_count: u32 = ((code_line >> 8) & 0xF); + let return_type: u32 = (code_line & 0xF); return create_function_doc(func_id, param_count, return_type, 0); } pub fn extract_parameter_info(param_line: u32, param_index: u32) -> u32 { - let; - param_type; - let; - direction; - let; - description_id; + let param_type: u32 = ((param_line >> 8) & 0xF); + let direction: u32 = ((param_line >> 6) & 0x3); + let description_id: u32 = (param_line & 0x3F); return create_param_doc(param_index, param_type, direction, description_id); } @@ -96,18 +90,12 @@ pub fn get_example_explanation(example: u32) -> u32 { } pub fn generate_function_example(func_doc: u32) -> u32 { - let; - func_id; - let; - param_count; - let; - return_type; - let; - example_input; - let; - example_output; - let; - explanation; + let func_id: u32 = get_doc_function_id(func_doc); + let param_count: u32 = get_doc_param_count(func_doc); + let return_type: u32 = get_doc_return_type(func_doc); + let example_input: u32 = (param_count * 10); + let example_output: u32 = (example_input + 5); + let explanation: u32 = 1; return create_function_example(func_id, example_input, example_output, explanation); } @@ -132,21 +120,15 @@ pub fn get_description_category(desc: u32) -> u32 { } pub fn generate_function_description(func_doc: u32, complexity: u32) -> u32 { - let; - func_id; - let; - param_count; - let; - return_type; - let; - desc_length; + let func_id: u32 = get_doc_function_id(func_doc); + let param_count: u32 = get_doc_param_count(func_doc); + let return_type: u32 = get_doc_return_type(func_doc); + let mut desc_length: u32 = (50 + (complexity * 10)); if (desc_length > 255) { desc_length = 255; } - let; - importance; - let; - category; + let importance: u32 = 1; + let category: u32 = 0; return create_description_text(func_id, desc_length, importance, category); } @@ -202,13 +184,11 @@ pub fn get_module_description(module_doc: u32) -> u32 { return (module_doc & 0xFF); } -pub fn calculate_average_complexity(func_docs: Vec<>, func_count: u32) -> u32 { - let; - total_complexity; - let; - i; +pub fn calculate_average_complexity(func_docs: [u32; MAX_FUNCTIONS as usize], func_count: u32) -> u32 { + let mut total_complexity: u32 = 0; + let mut i: u32 = 0; while (i < func_count) { - total_complexity = (total_complexity + get_doc_complexity(func_docs[i])); + total_complexity = (total_complexity + get_doc_complexity(func_docs[(i) as usize])); i = (i + 1); } if (func_count > 0) { @@ -218,26 +198,19 @@ pub fn calculate_average_complexity(func_docs: Vec<>, func_count: u32) -> u32 { } } -pub fn generate_api_documentation(func_docs: Vec<>, func_count: u32, param_docs: Vec<>, param_count: u32) -> u32 { - let; - total_complexity; - let; - documented_funcs; - let; - i; +pub fn generate_api_documentation(func_docs: [u32; MAX_FUNCTIONS as usize], func_count: u32, param_docs: [u32; MAX_PARAMETERS as usize], param_count: u32) -> u32 { + let mut total_complexity: u32 = 0; + let mut documented_funcs: u32 = 0; + let mut i: u32 = 0; while (i < func_count) { - let; - func_doc; + let func_doc: u32 = func_docs[(i) as usize]; total_complexity = (total_complexity + get_doc_complexity(func_doc)); - let; - description; - let; - example; + let description: u32 = generate_function_description(func_doc, get_doc_complexity(func_doc)); + let example: u32 = generate_function_example(func_doc); documented_funcs = (documented_funcs + 1); i = (i + 1); } - let; - avg_complexity; + let avg_complexity: u32 = calculate_average_complexity(func_docs, func_count); return (((((documented_funcs & 0xFF) << 24) | ((total_complexity & 0xFF) << 16)) | ((avg_complexity & 0xFF) << 8)) | (param_count & 0xFF)); } @@ -250,86 +223,63 @@ pub fn calculate_documentation_coverage(documented_funcs: u32, total_funcs: u32) } pub fn generate_usage_example(func_doc: u32, context: u32) -> u32 { - let; - func_id; - let; - param_count; - let; - usage_pattern; + let func_id: u32 = get_doc_function_id(func_doc); + let param_count: u32 = get_doc_param_count(func_doc); + let usage_pattern: u32 = ((param_count * 20) + context); return create_function_example(func_id, usage_pattern, (usage_pattern + 10), 2); } -pub fn create_dependency_graph(xrefs: Vec<>, xref_count: u32) -> u32 { - let; - total_connections; - let; - strong_connections; - let; - i; +pub fn create_dependency_graph(xrefs: [u32; MAX_FUNCTIONS as usize], xref_count: u32) -> u32 { + let mut total_connections: u32 = 0; + let mut strong_connections: u32 = 0; + let mut i: u32 = 0; while (i < xref_count) { - let; - strength; + let strength: u32 = get_xref_strength(xrefs[(i) as usize]); total_connections = (total_connections + 1); if (strength > 70) { strong_connections = (strong_connections + 1); } i = (i + 1); } - let; - avg_strength; + let mut avg_strength: u32 = 0; if (total_connections > 0) { avg_strength = (strong_connections / total_connections); } return (((((total_connections & 0xFF) << 24) | ((strong_connections & 0xFF) << 16)) | ((avg_strength & 0xFF) << 8)) | (xref_count & 0xFF)); } -pub fn validate_documentation(func_docs: Vec<>, func_count: u32) -> u32 { - let; - missing_descriptions; - let; - missing_examples; - let; - missing_params; - let; - i; +pub fn validate_documentation(func_docs: [u32; MAX_FUNCTIONS as usize], func_count: u32) -> u32 { + let mut missing_descriptions: u32 = 0; + let missing_examples: u32 = 0; + let mut missing_params: u32 = 0; + let mut i: u32 = 0; while (i < func_count) { - let; - func_doc; - let; - complexity; + let func_doc: u32 = func_docs[(i) as usize]; + let complexity: u32 = get_doc_complexity(func_doc); if (complexity == 0) { missing_descriptions = (missing_descriptions + 1); } - let; - param_count; + let param_count: u32 = get_doc_param_count(func_doc); if ((param_count == 0) && (i > 0)) { missing_params = (missing_params + 1); } i = (i + 1); } - let; - quality_score; + let mut quality_score: u32 = (100 - ((missing_descriptions * 10) + (missing_params * 5))); if (quality_score > 100) { quality_score = 100; } return (((((missing_descriptions & 0xFF) << 24) | ((missing_examples & 0xFF) << 16)) | ((missing_params & 0xFF) << 8)) | (quality_score & 0xFF)); } -pub fn generate_documentation_report(func_docs: Vec<>, func_count: u32, xrefs: Vec<>, xref_count: u32) -> u32 { - let; - doc_summary; - let; - documented_funcs; - let; - coverage; - let; - validation; - let; - quality_score; - let; - dependency_graph; - let; - doc_complexity; +pub fn generate_documentation_report(func_docs: [u32; MAX_FUNCTIONS as usize], func_count: u32, xrefs: [u32; MAX_FUNCTIONS as usize], xref_count: u32) -> u32 { + let doc_summary: u32 = generate_api_documentation(func_docs, func_count, func_docs, 0); + let documented_funcs: u32 = ((doc_summary >> 24) & 0xFF); + let coverage: u32 = calculate_documentation_coverage(documented_funcs, func_count); + let validation: u32 = validate_documentation(func_docs, func_count); + let quality_score: u32 = (validation & 0xFF); + let dependency_graph: u32 = create_dependency_graph(xrefs, xref_count); + let doc_complexity: u32 = ((doc_summary >> 8) & 0xFF); return (((((coverage & 0xFF) << 24) | ((quality_score & 0xFF) << 16)) | ((doc_complexity & 0xFF) << 8)) | (xref_count & 0xFF)); } diff --git a/gen/rust/area_optimization.rs b/gen/rust/area_optimization.rs index 94f6a65..25a2106 100644 --- a/gen/rust/area_optimization.rs +++ b/gen/rust/area_optimization.rs @@ -72,7 +72,7 @@ pub fn calculate_savings_percentage(original: u32, optimized: u32) -> u8 { if (original <= optimized) { return 0; } - return (); + return ((((original - optimized) * 100) / original) as u8); } pub fn optimization_worthwhile(result: u32) -> bool { diff --git a/gen/rust/auto_config.rs b/gen/rust/auto_config.rs index 40e559b..b05a657 100644 --- a/gen/rust/auto_config.rs +++ b/gen/rust/auto_config.rs @@ -61,39 +61,31 @@ pub const PARAM_QOS_ENABLED: u32 = 6; pub const PARAM_SECURITY_LEVEL: u32 = 7; -pub fn create_default_config() -> Vec<> { - let; - config; - MAX_PARAMS; +pub fn create_default_config() -> [u32; MAX_PARAMS as usize] { + let config: [u32; MAX_PARAMS as usize] = vec![]; return config; } -pub fn get_config_value(config: Vec<>, param_id: u32) -> u32 { - let; - i; +pub fn get_config_value(config: [u32; MAX_PARAMS as usize], param_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - current_param_id; + let current_param_id: u32 = get_param_id(config[(i) as usize]); if (current_param_id == param_id) { - return get_param_value(config[i]); + return get_param_value(config[(i) as usize]); } i = (i + 1); } return 0; } -pub fn set_config_value(config: Vec<>, param_id: u32, new_value: u32) -> u32 { - let; - i; +pub fn set_config_value(config: [u32; MAX_PARAMS as usize], param_id: u32, new_value: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - current_param_id; + let current_param_id: u32 = get_param_id(config[(i) as usize]); if (current_param_id == param_id) { - let; - scope; - let; - status; - config[i] = create_config_param(param_id, new_value, scope, status); + let scope: u32 = get_param_scope(config[(i) as usize]); + let status: u32 = STATUS_PENDING; + config[(i) as usize] = create_config_param(param_id, new_value, scope, status); return 1; } i = (i + 1); @@ -102,11 +94,8 @@ pub fn set_config_value(config: Vec<>, param_id: u32, new_value: u32) -> u32 { } pub fn discover_network_params(node_count: u32, interference_level: u32) -> u32 { - let; - config; - MAX_PARAMS; - let; - tx_power; + let config: [u32; MAX_PARAMS as usize] = create_default_config(); + let mut tx_power: u32 = 50; if (node_count < 4) { tx_power = 30; } else { @@ -115,8 +104,7 @@ pub fn discover_network_params(node_count: u32, interference_level: u32) -> u32 } } set_config_value(config, PARAM_TX_POWER, tx_power); - let; - channel; + let mut channel: u32 = 0; if (interference_level > 70) { channel = 2; } else { @@ -125,8 +113,7 @@ pub fn discover_network_params(node_count: u32, interference_level: u32) -> u32 } } set_config_value(config, PARAM_CHANNEL, channel); - let; - hello_interval; + let mut hello_interval: u32 = 2000; if (node_count < 4) { hello_interval = 5000; } else { @@ -138,20 +125,15 @@ pub fn discover_network_params(node_count: u32, interference_level: u32) -> u32 return 1; } -pub fn apply_config(config: Vec<>, param_id: u32) -> u32 { - let; - i; +pub fn apply_config(config: [u32; MAX_PARAMS as usize], param_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - current_param_id; + let current_param_id: u32 = get_param_id(config[(i) as usize]); if (current_param_id == param_id) { - let; - value; - let; - scope; - let; - success; - config[i] = create_config_param(param_id, value, scope, STATUS_APPLIED); + let value: u32 = get_param_value(config[(i) as usize]); + let scope: u32 = get_param_scope(config[(i) as usize]); + let success: u32 = 1; + config[(i) as usize] = create_config_param(param_id, value, scope, STATUS_APPLIED); return success; } i = (i + 1); @@ -159,17 +141,13 @@ pub fn apply_config(config: Vec<>, param_id: u32) -> u32 { return 0; } -pub fn apply_all_pending(config: Vec<>) -> u32 { - let; - applied_count; - let; - i; +pub fn apply_all_pending(config: [u32; MAX_PARAMS as usize]) -> u32 { + let mut applied_count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - status; + let status: u32 = get_param_status(config[(i) as usize]); if (status == STATUS_PENDING) { - let; - param_id; + let param_id: u32 = get_param_id(config[(i) as usize]); if (apply_config(config, param_id) == 1) { applied_count = (applied_count + 1); } @@ -179,9 +157,8 @@ pub fn apply_all_pending(config: Vec<>) -> u32 { return applied_count; } -pub fn validate_config(config: Vec<>, param_id: u32) -> u32 { - let; - value; +pub fn validate_config(config: [u32; MAX_PARAMS as usize], param_id: u32) -> u32 { + let value: u32 = get_config_value(config, param_id); if (param_id == PARAM_TX_POWER) { if ((value >= 0) && (value <= 100)) { return 1; @@ -232,28 +209,24 @@ pub fn validate_config(config: Vec<>, param_id: u32) -> u32 { return 0; } -pub fn optimize_config(config: Vec<>, network_load: u32, error_rate: u32) -> u32 { - let; - optimizations; +pub fn optimize_config(config: [u32; MAX_PARAMS as usize], network_load: u32, error_rate: u32) -> u32 { + let mut optimizations: u32 = 0; if (network_load > 80) { - let; - current_retries; + let current_retries: u32 = get_config_value(config, PARAM_RETRY_LIMIT); if (current_retries < 5) { set_config_value(config, PARAM_RETRY_LIMIT, (current_retries + 1)); optimizations = (optimizations + 1); } } if (error_rate > 20) { - let; - current_rate; + let current_rate: u32 = get_config_value(config, PARAM_DATA_RATE); if (current_rate > 0) { set_config_value(config, PARAM_DATA_RATE, (current_rate - 1)); optimizations = (optimizations + 1); } } if ((network_load < 30) && (error_rate < 10)) { - let; - current_rate; + let current_rate: u32 = get_config_value(config, PARAM_DATA_RATE); if (current_rate < 3) { set_config_value(config, PARAM_DATA_RATE, (current_rate + 1)); optimizations = (optimizations + 1); @@ -262,28 +235,19 @@ pub fn optimize_config(config: Vec<>, network_load: u32, error_rate: u32) -> u32 return optimizations; } -pub fn sync_config(local_config: Vec<>, remote_config: Vec<>) -> u32 { - let; - synced_count; - let; - i; +pub fn sync_config(local_config: [u32; MAX_PARAMS as usize], remote_config: [u32; MAX_PARAMS as usize]) -> u32 { + let mut synced_count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - local_param_id; - let; - local_value; - let; - local_scope; - let; - j; + let local_param_id: u32 = get_param_id(local_config[(i) as usize]); + let local_value: u32 = get_param_value(local_config[(i) as usize]); + let local_scope: u32 = get_param_scope(local_config[(i) as usize]); + let mut j: u32 = 0; while (j < MAX_PARAMS) { - let; - remote_param_id; + let remote_param_id: u32 = get_param_id(remote_config[(j) as usize]); if (remote_param_id == local_param_id) { - let; - remote_value; - let; - remote_scope; + let remote_value: u32 = get_param_value(remote_config[(j) as usize]); + let remote_scope: u32 = get_param_scope(remote_config[(j) as usize]); if ((remote_scope == SCOPE_NETWORK) || (remote_scope == SCOPE_GLOBAL)) { if (remote_value != local_value) { set_config_value(local_config, local_param_id, remote_value); @@ -299,25 +263,18 @@ pub fn sync_config(local_config: Vec<>, remote_config: Vec<>) -> u32 { return synced_count; } -pub fn rollback_config(config: Vec<>, backup_config: Vec<>) -> u32 { - let; - rolled_back; - let; - i; +pub fn rollback_config(config: [u32; MAX_PARAMS as usize], backup_config: [u32; MAX_PARAMS as usize]) -> u32 { + let mut rolled_back: u32 = 0; + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - backup_param_id; - let; - backup_value; - let; - backup_scope; - let; - j; + let backup_param_id: u32 = get_param_id(backup_config[(i) as usize]); + let backup_value: u32 = get_param_value(backup_config[(i) as usize]); + let backup_scope: u32 = get_param_scope(backup_config[(i) as usize]); + let mut j: u32 = 0; while (j < MAX_PARAMS) { - let; - local_param_id; + let local_param_id: u32 = get_param_id(config[(j) as usize]); if (local_param_id == backup_param_id) { - config[j] = create_config_param(backup_param_id, backup_value, backup_scope, STATUS_PENDING); + config[(j) as usize] = create_config_param(backup_param_id, backup_value, backup_scope, STATUS_PENDING); rolled_back = (rolled_back + 1); break; } @@ -328,39 +285,28 @@ pub fn rollback_config(config: Vec<>, backup_config: Vec<>) -> u32 { return rolled_back; } -pub fn create_backup(config: Vec<>) -> Vec<> { - let; - backup; - MAX_PARAMS; - let; - i; +pub fn create_backup(config: [u32; MAX_PARAMS as usize]) -> [u32; MAX_PARAMS as usize] { + let backup: [u32; MAX_PARAMS as usize]; + let mut i: u32 = 0; while (i < MAX_PARAMS) { - backup[i] = config[i]; + backup[(i) as usize] = config[(i) as usize]; i = (i + 1); } return backup; } -pub fn calculate_config_drift(config1: Vec<>, config2: Vec<>) -> u32 { - let; - drift_count; - let; - total_params; - let; - i; +pub fn calculate_config_drift(config1: [u32; MAX_PARAMS as usize], config2: [u32; MAX_PARAMS as usize]) -> u32 { + let mut drift_count: u32 = 0; + let mut total_params: u32 = 0; + let mut i: u32 = 0; while (i < MAX_PARAMS) { - let; - param1_id; - let; - param1_value; - let; - j; + let param1_id: u32 = get_param_id(config1[(i) as usize]); + let param1_value: u32 = get_param_value(config1[(i) as usize]); + let mut j: u32 = 0; while (j < MAX_PARAMS) { - let; - param2_id; + let param2_id: u32 = get_param_id(config2[(j) as usize]); if (param1_id == param2_id) { - let; - param2_value; + let param2_value: u32 = get_param_value(config2[(j) as usize]); if (param1_value != param2_value) { drift_count = (drift_count + 1); } @@ -379,10 +325,8 @@ pub fn calculate_config_drift(config1: Vec<>, config2: Vec<>) -> u32 { } pub fn discover_neighbors(node_id: u32, scan_count: u32) -> u32 { - let; - discovered_count; - let; - i; + let mut discovered_count: u32 = 0; + let mut i: u32 = 0; while (i < scan_count) { discovered_count = (discovered_count + 1); i = (i + 1); @@ -391,8 +335,7 @@ pub fn discover_neighbors(node_id: u32, scan_count: u32) -> u32 { } pub fn assign_node_role(node_id: u32, capabilities: u32) -> u32 { - let; - role; + let mut role: u32 = 0; if (capabilities & 0x1) { role = 1; } else { diff --git a/gen/rust/bandwidth_allocator.rs b/gen/rust/bandwidth_allocator.rs index 7401cd9..aabe814 100644 --- a/gen/rust/bandwidth_allocator.rs +++ b/gen/rust/bandwidth_allocator.rs @@ -50,32 +50,32 @@ pub fn get_last_update(state: u32) -> u32 { } pub fn create_flow_array(f0: u32, f1: u32, f2: u32, f3: u32, f4: u32, f5: u32, f6: u32, f7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((f0 as u64) << 56) | ((f1 as u64) << 48)) | ((f2 as u64) << 40)) | ((f3 as u64) << 32)) | ((f4 as u64) << 24)) | ((f5 as u64) << 16)) | ((f6 as u64) << 8)) | (f7 as u64)); } pub fn get_flow_req(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { - return (); + return (((array >> 8) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn calculate_fair_share(total_bw: u32, flow_count: u32) -> u32 { @@ -86,12 +86,10 @@ pub fn calculate_fair_share(total_bw: u32, flow_count: u32) -> u32 { } pub fn allocate_bandwidth(state: u32, flow_req: u32, available_bw: u32) -> u32 { - let; - let; - let; - allocated = get_allocated_bw(state); - let; - allocation = 0; + let priority = get_flow_priority(flow_req); + let min_bw = get_min_bandwidth(flow_req); + let allocated = get_allocated_bw(state); + let mut allocation = 0; if (priority == 0) { allocation = (min_bw + ((available_bw * 7) / 10)); } else { @@ -110,32 +108,23 @@ pub fn allocate_bandwidth(state: u32, flow_req: u32, available_bw: u32) -> u32 { if (allocation < min_bw) { allocation = min_bw; } - let; - new_allocated = (allocated + allocation); - let; - pending = get_pending_requests(state); - let; - fair_share = get_fair_share(state); - let; - update = get_last_update(state); + let new_allocated = (allocated + allocation); + let pending = get_pending_requests(state); + let fair_share = get_fair_share(state); + let update = get_last_update(state); return create_allocation_state(new_allocated, pending, fair_share, update); } pub fn needs_more_bandwidth(flow_req: u32) -> bool { - let; - current = get_current_bandwidth(flow_req); - let; - min_bw = get_min_bandwidth(flow_req); + let current = get_current_bandwidth(flow_req); + let min_bw = get_min_bandwidth(flow_req); return (current < min_bw); } pub fn update_flow_bandwidth(flow_req: u32, new_bw: u32) -> u32 { - let; - flow_id = get_flow_id(flow_req); - let; - priority = get_flow_priority(flow_req); - let; - min_bw = get_min_bandwidth(flow_req); + let flow_id = get_flow_id(flow_req); + let priority = get_flow_priority(flow_req); + let min_bw = get_min_bandwidth(flow_req); if (new_bw < min_bw) { new_bw = min_bw; } @@ -146,8 +135,7 @@ pub fn update_flow_bandwidth(flow_req: u32, new_bw: u32) -> u32 { } pub fn count_active_flows(flow_array: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_current_bandwidth(get_flow_req(flow_array, 0)) > 0) { count = (count + 1); } @@ -176,8 +164,8 @@ pub fn count_active_flows(flow_array: u64) -> u32 { } pub fn find_reclaimable_bandwidth(state: u32, flow_array: u64) -> u32 { - let; - let; + let allocated = get_allocated_bw(state); + let mut total_used = 0; if (get_current_bandwidth(get_flow_req(flow_array, 0)) > 0) { total_used = (total_used + get_current_bandwidth(get_flow_req(flow_array, 0))); } @@ -209,24 +197,15 @@ pub fn find_reclaimable_bandwidth(state: u32, flow_array: u64) -> u32 { } pub fn prioritize_bandwidth(flow_array: u64, available_bw: u32) -> u64 { - let; - remaining_bw = available_bw; - let; - f0 = get_flow_req(flow_array, 0); - let; - f1 = get_flow_req(flow_array, 1); - let; - f2 = get_flow_req(flow_array, 2); - let; - f3 = get_flow_req(flow_array, 3); - let; - f4 = get_flow_req(flow_array, 4); - let; - f5 = get_flow_req(flow_array, 5); - let; - f6 = get_flow_req(flow_array, 6); - let; - f7 = get_flow_req(flow_array, 7); + let remaining_bw = available_bw; + let f0 = get_flow_req(flow_array, 0); + let f1 = get_flow_req(flow_array, 1); + let f2 = get_flow_req(flow_array, 2); + let f3 = get_flow_req(flow_array, 3); + let f4 = get_flow_req(flow_array, 4); + let f5 = get_flow_req(flow_array, 5); + let f6 = get_flow_req(flow_array, 6); + let f7 = get_flow_req(flow_array, 7); return create_flow_array(update_flow_bandwidth(f0, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f1, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f2, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f3, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f4, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f5, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f6, calculate_fair_share(remaining_bw, 8)), update_flow_bandwidth(f7, calculate_fair_share(remaining_bw, 8))); } diff --git a/gen/rust/cache_management.rs b/gen/rust/cache_management.rs index 3387f36..04a9d5a 100644 --- a/gen/rust/cache_management.rs +++ b/gen/rust/cache_management.rs @@ -30,14 +30,10 @@ pub fn get_entry_size(entry: u32) -> u32 { } pub fn update_access_count(entry: u32) -> u32 { - let; - data_id; - let; - access_count; - let; - age; - let; - size; + let data_id: u32 = get_data_id(entry); + let mut access_count: u32 = get_access_count(entry); + let age: u32 = get_age(entry); + let size: u32 = get_entry_size(entry); if (access_count < 255) { access_count = (access_count + 1); } @@ -45,21 +41,16 @@ pub fn update_access_count(entry: u32) -> u32 { } pub fn update_age(entry: u32, new_age: u32) -> u32 { - let; - data_id; - let; - access_count; - let; - size; + let data_id: u32 = get_data_id(entry); + let access_count: u32 = get_access_count(entry); + let size: u32 = get_entry_size(entry); return create_cache_entry(data_id, access_count, new_age, size); } -pub fn find_entry(cache: Vec<>, data_id: u32) -> u32 { - let; - i; +pub fn find_entry(cache: [u32; MAX_ENTRIES as usize], data_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - let; - entry_data_id; + let entry_data_id: u32 = get_data_id(cache[(i) as usize]); if (entry_data_id == data_id) { return i; } @@ -68,9 +59,8 @@ pub fn find_entry(cache: Vec<>, data_id: u32) -> u32 { return MAX_ENTRIES; } -pub fn cache_hit(cache: Vec<>, data_id: u32) -> u32 { - let; - entry_index; +pub fn cache_hit(cache: [u32; MAX_ENTRIES as usize], data_id: u32) -> u32 { + let entry_index: u32 = find_entry(cache, data_id); if (entry_index < MAX_ENTRIES) { return 1; } else { @@ -78,28 +68,24 @@ pub fn cache_hit(cache: Vec<>, data_id: u32) -> u32 { } } -pub fn get_entry(cache: Vec<>, data_id: u32) -> u32 { - let; - entry_index; +pub fn get_entry(cache: [u32; MAX_ENTRIES as usize], data_id: u32) -> u32 { + let entry_index: u32 = find_entry(cache, data_id); if (entry_index < MAX_ENTRIES) { - return cache[entry_index]; + return cache[(entry_index) as usize]; } else { return 0; } } -pub fn add_entry(cache: Vec<>, current_size: u32, data_id: u32, size: u32) -> u32 { - let; - existing_index; +pub fn add_entry(cache: [u32; MAX_ENTRIES as usize], current_size: u32, data_id: u32, size: u32) -> u32 { + let existing_index: u32 = find_entry(cache, data_id); if (existing_index < MAX_ENTRIES) { return current_size; } - let; - empty_index; - let; - i; + let mut empty_index: u32 = MAX_ENTRIES; + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - if (get_data_id(cache[i]) == 0) { + if (get_data_id(cache[(i) as usize]) == 0) { empty_index = i; break; } @@ -110,36 +96,27 @@ pub fn add_entry(cache: Vec<>, current_size: u32, data_id: u32, size: u32) -> u3 if (empty_index == MAX_ENTRIES) { return current_size; } - let; - evicted_size; + let evicted_size: u32 = get_entry_size(cache[(empty_index) as usize]); current_size = (current_size - evicted_size); } if ((current_size + size) > MAX_CACHE_SIZE) { return current_size; } - cache[empty_index] = create_cache_entry(data_id, 1, 0, size); + cache[(empty_index) as usize] = create_cache_entry(data_id, 1, 0, size); return (current_size + size); } -pub fn find_eviction_candidate(cache: Vec<>) -> u32 { - let; - worst_score; - let; - candidate; - let; - i; +pub fn find_eviction_candidate(cache: [u32; MAX_ENTRIES as usize]) -> u32 { + let mut worst_score: u32 = 0xFFFFFFFF; + let mut candidate: u32 = MAX_ENTRIES; + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - let; - entry; - let; - data_id; + let entry: u32 = cache[(i) as usize]; + let data_id: u32 = get_data_id(entry); if (data_id != 0) { - let; - access_count; - let; - age; - let; - score; + let access_count: u32 = get_access_count(entry); + let age: u32 = get_age(entry); + let score: u32 = ((access_count << 8) | age); if (score < worst_score) { worst_score = score; candidate = i; @@ -150,41 +127,35 @@ pub fn find_eviction_candidate(cache: Vec<>) -> u32 { return candidate; } -pub fn remove_entry(cache: Vec<>, current_size: u32, data_id: u32) -> u32 { - let; - entry_index; +pub fn remove_entry(cache: [u32; MAX_ENTRIES as usize], current_size: u32, data_id: u32) -> u32 { + let entry_index: u32 = find_entry(cache, data_id); if (entry_index < MAX_ENTRIES) { - let; - entry_size; - cache[entry_index] = 0; + let entry_size: u32 = get_entry_size(cache[(entry_index) as usize]); + cache[(entry_index) as usize] = 0; return (current_size - entry_size); } else { return current_size; } } -pub fn access_cache(cache: Vec<>, data_id: u32) -> u32 { - let; - entry_index; +pub fn access_cache(cache: [u32; MAX_ENTRIES as usize], data_id: u32) -> u32 { + let entry_index: u32 = find_entry(cache, data_id); if (entry_index < MAX_ENTRIES) { - cache[entry_index] = update_access_count(cache[entry_index]); - cache[entry_index] = update_age(cache[entry_index], 0); + cache[(entry_index) as usize] = update_access_count(cache[(entry_index) as usize]); + cache[(entry_index) as usize] = update_age(cache[(entry_index) as usize], 0); return 1; } else { return 0; } } -pub fn age_cache(cache: Vec<>) -> () { - let; - i; +pub fn age_cache(cache: [u32; MAX_ENTRIES as usize]) -> () { + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - let; - entry; - let; - age; + let entry: u32 = cache[(i) as usize]; + let age: u32 = get_age(entry); if (age < 255) { - cache[i] = update_age(entry, (age + 1)); + cache[(i) as usize] = update_age(entry, (age + 1)); } i = (i + 1); } @@ -202,16 +173,12 @@ pub fn calculate_utilization(current_size: u32) -> u32 { return ((current_size * 100) / MAX_CACHE_SIZE); } -pub fn find_most_popular(cache: Vec<>) -> u32 { - let; - max_access; - let; - popular_index; - let; - i; +pub fn find_most_popular(cache: [u32; MAX_ENTRIES as usize]) -> u32 { + let mut max_access: u32 = 0; + let mut popular_index: u32 = MAX_ENTRIES; + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - let; - access_count; + let access_count: u32 = get_access_count(cache[(i) as usize]); if (access_count > max_access) { max_access = access_count; popular_index = i; @@ -221,20 +188,14 @@ pub fn find_most_popular(cache: Vec<>) -> u32 { return popular_index; } -pub fn find_least_popular(cache: Vec<>) -> u32 { - let; - min_access; - let; - unpopular_index; - let; - i; +pub fn find_least_popular(cache: [u32; MAX_ENTRIES as usize]) -> u32 { + let mut min_access: u32 = 0xFFFFFFFF; + let mut unpopular_index: u32 = MAX_ENTRIES; + let mut i: u32 = 0; while (i < MAX_ENTRIES) { - let; - entry; - let; - data_id; - let; - access_count; + let entry: u32 = cache[(i) as usize]; + let data_id: u32 = get_data_id(entry); + let access_count: u32 = get_access_count(entry); if ((data_id != 0) && (access_count < min_access)) { min_access = access_count; unpopular_index = i; @@ -244,17 +205,13 @@ pub fn find_least_popular(cache: Vec<>) -> u32 { return unpopular_index; } -pub fn should_prefetch(cache: Vec<>, data_id: u32) -> u32 { - let; - popular_index; +pub fn should_prefetch(cache: [u32; MAX_ENTRIES as usize], data_id: u32) -> u32 { + let popular_index: u32 = find_most_popular(cache); if (popular_index < MAX_ENTRIES) { - let; - popular_access; - let; - entry_index; + let popular_access: u32 = get_access_count(cache[(popular_index) as usize]); + let entry_index: u32 = find_entry(cache, data_id); if (entry_index < MAX_ENTRIES) { - let; - access_count; + let access_count: u32 = get_access_count(cache[(entry_index) as usize]); if (access_count >= CACHE_HIT_THRESHOLD) { return 1; } @@ -264,10 +221,8 @@ pub fn should_prefetch(cache: Vec<>, data_id: u32) -> u32 { } pub fn calculate_efficiency(hits: u32, total_accesses: u32, current_size: u32) -> u32 { - let; - hit_rate; - let; - utilization; + let hit_rate: u32 = calculate_hit_rate(hits, total_accesses); + let utilization: u32 = calculate_utilization(current_size); if (utilization > 0) { return ((hit_rate * 100) / utilization); } else { @@ -296,14 +251,10 @@ pub fn get_evictions(stats: u32) -> u32 { } pub fn update_stats(stats: u32, hit: u32, evicted: u32) -> u32 { - let; - hits; - let; - misses; - let; - size; - let; - evictions; + let mut hits: u32 = get_hits(stats); + let mut misses: u32 = get_misses(stats); + let size: u32 = get_cache_size(stats); + let mut evictions: u32 = get_evictions(stats); if (hit == 1) { hits = (hits + 1); } else { diff --git a/gen/rust/compression_engine.rs b/gen/rust/compression_engine.rs index 9555fe2..7994a80 100644 --- a/gen/rust/compression_engine.rs +++ b/gen/rust/compression_engine.rs @@ -46,17 +46,12 @@ pub fn calculate_compression_ratio(original: u32, compressed: u32) -> u32 { } pub fn compress_rle(data: u32, length: u32) -> u32 { - let; - compressed; - let; - count; - let; - current; - let; - i; + let mut compressed: u32 = 0; + let mut count: u32 = 0; + let mut current: u32 = (data & 0xF); + let mut i: u32 = 0; while ((i < length) && (i < 8)) { - let; - value; + let value: u32 = ((data >> (i * 4)) & 0xF); if (value == current) { count = (count + 1); } else { @@ -73,17 +68,12 @@ pub fn compress_rle(data: u32, length: u32) -> u32 { } pub fn decompress_rle(compressed: u32) -> u32 { - let; - decompressed; - let; - pos; + let mut decompressed: u32 = 0; + let mut pos: u32 = 0; while (pos < 32) { - let; - count; - let; - value; - let; - i; + let count: u32 = ((compressed >> pos) & 0xF); + let value: u32 = ((compressed >> (pos + 4)) & 0xF); + let mut i: u32 = 0; while ((i < count) && (i < 8)) { decompressed = ((decompressed << 4) | value); i = (i + 1); @@ -93,25 +83,17 @@ pub fn decompress_rle(compressed: u32) -> u32 { return decompressed; } -pub fn compress_dictionary(data: u32, dictionary: Vec<>) -> u32 { - let; - best_match; - let; - best_score; - let; - i; +pub fn compress_dictionary(data: u32, dictionary: [u32; DICTIONARY_SIZE as usize]) -> u32 { + let mut best_match: u32 = 0; + let mut best_score: u32 = 0; + let mut i: u32 = 0; while (i < DICTIONARY_SIZE) { - let; - dict_value; - let; - score; - let; - j; + let dict_value: u32 = dictionary[(i) as usize]; + let mut score: u32 = 0; + let mut j: u32 = 0; while (j < 8) { - let; - data_nibble; - let; - dict_nibble; + let data_nibble: u32 = ((data >> (j * 4)) & 0xF); + let dict_nibble: u32 = ((dict_value >> (j * 4)) & 0xF); if (data_nibble == dict_nibble) { score = (score + 1); } @@ -126,17 +108,16 @@ pub fn compress_dictionary(data: u32, dictionary: Vec<>) -> u32 { return best_match; } -pub fn decompress_dictionary(index: u32, dictionary: Vec<>) -> u32 { +pub fn decompress_dictionary(index: u32, dictionary: [u32; DICTIONARY_SIZE as usize]) -> u32 { if (index < DICTIONARY_SIZE) { - return dictionary[index]; + return dictionary[(index) as usize]; } else { return 0; } } pub fn compress_delta(data: u32, previous: u32) -> u32 { - let; - delta; + let mut delta: u32 = 0; if (data > previous) { delta = (data - previous); } else { @@ -154,10 +135,8 @@ pub fn compress_delta(data: u32, previous: u32) -> u32 { } pub fn decompress_delta(encoded: u32, previous: u32) -> u32 { - let; - encoding_type; - let; - value; + let encoding_type: u32 = ((encoded >> 4) & 0x3); + let value: u32 = (encoded & 0xF); if (encoding_type == 0) { if (previous > value) { return (previous - value); @@ -166,16 +145,14 @@ pub fn decompress_delta(encoded: u32, previous: u32) -> u32 { } } else { if (encoding_type == 1) { - let; - delta; + let delta: u32 = (encoded & 0xFF); if (previous > delta) { return (previous - delta); } else { return (previous + delta); } } else { - let; - delta; + let delta: u32 = (encoded & 0xFFF); if (previous > delta) { return (previous - delta); } else { @@ -185,17 +162,12 @@ pub fn decompress_delta(encoded: u32, previous: u32) -> u32 { } } -pub fn choose_compression_method(data: u32, previous: u32, dictionary: Vec<>) -> u32 { - let; - data_nibbles; - let; - rle_compressed; - let; - rle_ratio; - let; - delta_compressed; - let; - delta_size; +pub fn choose_compression_method(data: u32, previous: u32, dictionary: [u32; DICTIONARY_SIZE as usize]) -> u32 { + let data_nibbles: u32 = 8; + let rle_compressed: u32 = compress_rle(data, data_nibbles); + let rle_ratio: u32 = calculate_compression_ratio(data_nibbles, rle_compressed); + let delta_compressed: u32 = compress_delta(data, previous); + let mut delta_size: u32 = 0; if (delta_compressed < 16) { delta_size = 1; } else { @@ -205,8 +177,7 @@ pub fn choose_compression_method(data: u32, previous: u32, dictionary: Vec<>) -> delta_size = 3; } } - let; - delta_ratio; + let delta_ratio: u32 = calculate_compression_ratio(data_nibbles, delta_size); if ((rle_ratio > delta_ratio) && (rle_ratio > 120)) { return METHOD_RLE; } else { @@ -218,13 +189,10 @@ pub fn choose_compression_method(data: u32, previous: u32, dictionary: Vec<>) -> } } -pub fn compress_block(data: u32, previous: u32, dictionary: Vec<>) -> u32 { - let; - method; - let; - compressed; - let; - compressed_size; +pub fn compress_block(data: u32, previous: u32, dictionary: [u32; DICTIONARY_SIZE as usize]) -> u32 { + let method: u32 = choose_compression_method(data, previous, dictionary); + let mut compressed: u32 = 0; + let mut compressed_size: u32 = 8; if (method == METHOD_RLE) { compressed = compress_rle(data, 8); compressed_size = 4; @@ -248,7 +216,7 @@ pub fn compress_block(data: u32, previous: u32, dictionary: Vec<>) -> u32 { return create_block_info(8, compressed_size, method, compressed_size); } -pub fn decompress_block(compressed_data: u32, method: u32, previous: u32, dictionary: Vec<>) -> u32 { +pub fn decompress_block(compressed_data: u32, method: u32, previous: u32, dictionary: [u32; DICTIONARY_SIZE as usize]) -> u32 { if (method == METHOD_RLE) { return decompress_rle(compressed_data); } else { @@ -264,16 +232,13 @@ pub fn decompress_block(compressed_data: u32, method: u32, previous: u32, dictio } } -pub fn calculate_total_savings(blocks: Vec<>, count: u32) -> u32 { - let; - total_original; - let; - total_compressed; - let; - i; +pub fn calculate_total_savings(blocks: [u32; MAX_BLOCKS as usize], count: u32) -> u32 { + let mut total_original: u32 = 0; + let mut total_compressed: u32 = 0; + let mut i: u32 = 0; while (i < count) { - total_original = (total_original + get_original_size(blocks[i])); - total_compressed = (total_compressed + get_compressed_size(blocks[i])); + total_original = (total_original + get_original_size(blocks[(i) as usize])); + total_compressed = (total_compressed + get_compressed_size(blocks[(i) as usize])); i = (i + 1); } if (total_compressed > 0) { @@ -283,9 +248,9 @@ pub fn calculate_total_savings(blocks: Vec<>, count: u32) -> u32 { } } -pub fn update_dictionary(dictionary: Vec<>, new_entry: u32, index: u32) -> u32 { +pub fn update_dictionary(dictionary: [u32; DICTIONARY_SIZE as usize], new_entry: u32, index: u32) -> u32 { if (index < DICTIONARY_SIZE) { - dictionary[index] = new_entry; + dictionary[(index) as usize] = new_entry; return 1; } else { return 0; @@ -293,13 +258,10 @@ pub fn update_dictionary(dictionary: Vec<>, new_entry: u32, index: u32) -> u32 { } pub fn find_pattern(data: u32, pattern: u32) -> u32 { - let; - mask; - let; - i; + let mask: u32 = 0xFFFFFFFF; + let mut i: u32 = 0; while (i < 32) { - let; - shifted; + let shifted: u32 = ((data >> i) & mask); if (shifted == pattern) { return i; } diff --git a/gen/rust/congestion_control.rs b/gen/rust/congestion_control.rs index c0346fc..2a05b9d 100644 --- a/gen/rust/congestion_control.rs +++ b/gen/rust/congestion_control.rs @@ -44,14 +44,10 @@ pub fn initialize_congestion() -> u32 { } pub fn on_ack(congestion: u32) -> u32 { - let; - cwnd; - let; - ssthresh; - let; - state; - let; - losses; + let mut cwnd: u32 = get_cwnd(congestion); + let ssthresh: u32 = get_ssthresh(congestion); + let mut state: u32 = get_congestion_state(congestion); + let losses: u32 = get_loss_count(congestion); if (state == STATE_SLOW_START) { cwnd = (cwnd + cwnd); if (cwnd >= ssthresh) { @@ -73,14 +69,10 @@ pub fn on_ack(congestion: u32) -> u32 { } pub fn on_loss(congestion: u32) -> u32 { - let; - cwnd; - let; - ssthresh; - let; - state; - let; - losses; + let mut cwnd: u32 = get_cwnd(congestion); + let mut ssthresh: u32 = get_ssthresh(congestion); + let mut state: u32 = get_congestion_state(congestion); + let mut losses: u32 = get_loss_count(congestion); losses = (losses + 1); if (losses >= CONGESTION_THRESHOLD) { ssthresh = (cwnd / 2); @@ -95,16 +87,11 @@ pub fn on_loss(congestion: u32) -> u32 { } pub fn on_triple_dup_ack(congestion: u32) -> u32 { - let; - cwnd; - let; - ssthresh; - let; - state; - let; - losses; - let; - old_cwnd; + let mut cwnd: u32 = get_cwnd(congestion); + let mut ssthresh: u32 = get_ssthresh(congestion); + let mut state: u32 = get_congestion_state(congestion); + let losses: u32 = get_loss_count(congestion); + let old_cwnd: u32 = cwnd; ssthresh = (cwnd / 2); if (ssthresh < MIN_WINDOW) { ssthresh = MIN_WINDOW; @@ -118,8 +105,7 @@ pub fn on_triple_dup_ack(congestion: u32) -> u32 { } pub fn get_effective_window(congestion: u32, receiver_window: u32) -> u32 { - let; - cwnd; + let cwnd: u32 = get_cwnd(congestion); if (cwnd < receiver_window) { return cwnd; } else { @@ -128,8 +114,7 @@ pub fn get_effective_window(congestion: u32, receiver_window: u32) -> u32 { } pub fn is_congested(congestion: u32) -> u32 { - let; - state; + let state: u32 = get_congestion_state(congestion); if ((state == STATE_FAST_RECOVERY) || (state == STATE_FAST_RETRANSMIT)) { return 1; } else { @@ -138,8 +123,7 @@ pub fn is_congested(congestion: u32) -> u32 { } pub fn calculate_sending_rate(congestion: u32, rtt: u32) -> u32 { - let; - cwnd; + let cwnd: u32 = get_cwnd(congestion); if (rtt > 0) { return ((cwnd * 1000) / rtt); } else { @@ -148,8 +132,7 @@ pub fn calculate_sending_rate(congestion: u32, rtt: u32) -> u32 { } pub fn estimate_bandwidth(congestion: u32, rtt: u32, packet_size: u32) -> u32 { - let; - cwnd; + let cwnd: u32 = get_cwnd(congestion); if (rtt > 0) { return ((cwnd * packet_size) / rtt); } else { @@ -157,9 +140,8 @@ pub fn estimate_bandwidth(congestion: u32, rtt: u32, packet_size: u32) -> u32 { } } -pub fn find_congestion_controller(controllers: Vec<>, flow_id: u32) -> u32 { - let; - i; +pub fn find_congestion_controller(controllers: [u32; MAX_FLOWS as usize], flow_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_FLOWS) { if (i == flow_id) { return i; @@ -169,11 +151,10 @@ pub fn find_congestion_controller(controllers: Vec<>, flow_id: u32) -> u32 { return MAX_FLOWS; } -pub fn is_any_flow_congested(controllers: Vec<>) -> u32 { - let; - i; +pub fn is_any_flow_congested(controllers: [u32; MAX_FLOWS as usize]) -> u32 { + let mut i: u32 = 0; while (i < MAX_FLOWS) { - if (is_congested(controllers[i]) == 1) { + if (is_congested(controllers[(i) as usize]) == 1) { return 1; } i = (i + 1); @@ -181,26 +162,21 @@ pub fn is_any_flow_congested(controllers: Vec<>) -> u32 { return 0; } -pub fn calculate_total_cwnd(controllers: Vec<>) -> u32 { - let; - total; - let; - i; +pub fn calculate_total_cwnd(controllers: [u32; MAX_FLOWS as usize]) -> u32 { + let mut total: u32 = 0; + let mut i: u32 = 0; while (i < MAX_FLOWS) { - total = (total + get_cwnd(controllers[i])); + total = (total + get_cwnd(controllers[(i) as usize])); i = (i + 1); } return total; } -pub fn allocate_fair_bandwidth(controllers: Vec<>, total_bandwidth: u32) -> u32 { - let; - active_flows; - let; - i; +pub fn allocate_fair_bandwidth(controllers: [u32; MAX_FLOWS as usize], total_bandwidth: u32) -> u32 { + let mut active_flows: u32 = 0; + let mut i: u32 = 0; while (i < MAX_FLOWS) { - let; - cwnd; + let cwnd: u32 = get_cwnd(controllers[(i) as usize]); if (cwnd > 0) { active_flows = (active_flows + 1); } @@ -214,14 +190,10 @@ pub fn allocate_fair_bandwidth(controllers: Vec<>, total_bandwidth: u32) -> u32 } pub fn probe_bandwidth(congestion: u32) -> u32 { - let; - cwnd; - let; - ssthresh; - let; - state; - let; - losses; + let mut cwnd: u32 = get_cwnd(congestion); + let ssthresh: u32 = get_ssthresh(congestion); + let state: u32 = get_congestion_state(congestion); + let losses: u32 = get_loss_count(congestion); cwnd = (cwnd + 1); if (cwnd > MAX_WINDOW) { cwnd = MAX_WINDOW; @@ -230,10 +202,8 @@ pub fn probe_bandwidth(congestion: u32) -> u32 { } pub fn reset_after_timeout(congestion: u32) -> u32 { - let; - cwnd; - let; - ssthresh; + let mut cwnd: u32 = get_cwnd(congestion); + let mut ssthresh: u32 = (cwnd / 2); if (ssthresh < MIN_WINDOW) { ssthresh = MIN_WINDOW; } diff --git a/gen/rust/cross_layer_optimizer.rs b/gen/rust/cross_layer_optimizer.rs index 1c04f66..f8bae51 100644 --- a/gen/rust/cross_layer_optimizer.rs +++ b/gen/rust/cross_layer_optimizer.rs @@ -58,69 +58,58 @@ pub fn get_optimization_target(state: u32) -> u32 { } pub fn create_layer_array(phy: u32, mac: u32, network: u32, transport: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((phy as u64) << 48) | ((mac as u64) << 32)) | ((network as u64) << 16)) | (transport as u64)); } pub fn get_layer_params(array: u64, layer: u32) -> u32 { if (layer == LAYER_PHY) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (layer == LAYER_MAC) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (layer == LAYER_NETWORK) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn update_layer_params(array: u64, layer: u32, new_params: u32) -> u64 { if (layer == LAYER_PHY) { - return ((array & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((array & 0x0000FFFFFFFFFFFF) | ((new_params as u64) << 48)); } else { if (layer == LAYER_MAC) { - return ((array & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((array & 0xFFFF0000FFFFFFFF) | ((new_params as u64) << 32)); } else { if (layer == LAYER_NETWORK) { - return ((array & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((array & 0xFFFFFFFF0000FFFF) | ((new_params as u64) << 16)); } else { - return ((array & 0xFFFFFFFFFFFF0000) | ()); + return ((array & 0xFFFFFFFFFFFF0000) | (new_params as u64)); } } } } pub fn calculate_joint_metric(phy_params: u32, mac_params: u32, net_params: u32) -> u32 { - let; - power_eff = (255 - get_power(phy_params)); - let; - rate = get_rate(mac_params); - let; - reliability = get_retries(net_params); - let; - metric = ((((power_eff * 5) / 10) + ((rate * 3) / 10)) + ((reliability << 1) / 10)); + let power_eff = (255 - get_power(phy_params)); + let rate = get_rate(mac_params); + let reliability = get_retries(net_params); + let metric = ((((power_eff * 5) / 10) + ((rate * 3) / 10)) + ((reliability * 2) / 10)); return metric; } pub fn needs_synchronization(state: u32, current_time: u32) -> bool { - let; - last_sync = get_last_sync(state); - let; - elapsed = (current_time - last_sync); + let last_sync = get_last_sync(state); + let elapsed = (current_time - last_sync); return (elapsed >= 100); } pub fn increment_updates(state: u32) -> u32 { - let; - mode = get_mode(state); - let; - counter = get_update_counter(state); - let; - last_sync = get_last_sync(state); - let; - target = get_optimization_target(state); - let; - new_counter = (counter + 1); + let mode = get_mode(state); + let counter = get_update_counter(state); + let last_sync = get_last_sync(state); + let target = get_optimization_target(state); + let mut new_counter = (counter + 1); if (new_counter > 255) { new_counter = 0; } @@ -128,12 +117,9 @@ pub fn increment_updates(state: u32) -> u32 { } pub fn switch_mode(state: u32, new_mode: u32) -> u32 { - let; - counter = get_update_counter(state); - let; - last_sync = get_last_sync(state); - let; - target = get_optimization_target(state); + let counter = get_update_counter(state); + let last_sync = get_last_sync(state); + let target = get_optimization_target(state); return create_cross_layer_state(new_mode, counter, last_sync, target); } diff --git a/gen/rust/docs_generator.rs b/gen/rust/docs_generator.rs index c461f1e..aeb64ae 100644 --- a/gen/rust/docs_generator.rs +++ b/gen/rust/docs_generator.rs @@ -80,8 +80,7 @@ pub fn get_toc_title_id(toc: u32) -> u32 { } pub fn generate_markdown_header(level: u32, title_id: u32) -> u32 { - let; - header_prefix; + let mut header_prefix: u32 = 0; if (level == 1) { header_prefix = 0x23; } else { @@ -232,22 +231,15 @@ pub fn get_margin_right(layout: u32) -> u32 { return (layout & 0xFF); } -pub fn calculate_document_stats(sections: Vec<>, section_count: u32) -> u32 { - let; - total_pages; - let; - total_words; - let; - total_tables; - let; - total_figures; - let; - i; +pub fn calculate_document_stats(sections: [u32; MAX_SECTIONS as usize], section_count: u32) -> u32 { + let mut total_pages: u32 = 0; + let mut total_words: u32 = 0; + let mut total_tables: u32 = 0; + let total_figures: u32 = 0; + let mut i: u32 = 0; while (i < section_count) { - let; - content_len; - let; - subsections; + let content_len: u32 = get_section_content_length(sections[(i) as usize]); + let subsections: u32 = get_section_subsection_count(sections[(i) as usize]); total_words = (total_words + (content_len / 5)); total_pages = (total_pages + (content_len / 300)); if (subsections > 0) { @@ -278,22 +270,17 @@ pub fn get_metadata_version(metadata: u32) -> u32 { return (metadata & 0xFF); } -pub fn format_document(sections: Vec<>, section_count: u32, format: u32, layout: u32) -> u32 { - let; - formatted_size; - let; - i; +pub fn format_document(sections: [u32; MAX_SECTIONS as usize], section_count: u32, format: u32, layout: u32) -> u32 { + let mut formatted_size: u32 = 0; + let mut i: u32 = 0; while (i < section_count) { - let; - content_len; + let content_len: u32 = get_section_content_length(sections[(i) as usize]); formatted_size = (formatted_size + content_len); i = (i + 1); } - let; - margin_overhead; + let margin_overhead: u32 = (get_margin_top(layout) + get_margin_bottom(layout)); formatted_size = (formatted_size + margin_overhead); - let; - format_id; + let format_id: u32 = get_format_id(format); if (format_id == FORMAT_HTML) { formatted_size = (formatted_size + (section_count * 20)); } else { @@ -304,41 +291,29 @@ pub fn format_document(sections: Vec<>, section_count: u32, format: u32, layout: return formatted_size; } -pub fn generate_complete_document(func_docs: Vec<>, func_count: u32, sections: Vec<>, section_count: u32, format: u32) -> u32 { - let; - metadata; - let; - layout; - let; - toc_size; - let; - body_size; - let; - index_size; - let; - total_size; +pub fn generate_complete_document(func_docs: [u32; 64 as usize], func_count: u32, sections: [u32; MAX_SECTIONS as usize], section_count: u32, format: u32) -> u32 { + let metadata: u32 = generate_document_metadata(1, 1, 20260703, 1); + let layout: u32 = generate_page_layout(20, 20, 15, 15); + let toc_size: u32 = (section_count * 10); + let body_size: u32 = format_document(sections, section_count, format, layout); + let index_size: u32 = (func_count * 5); + let total_size: u32 = ((toc_size + body_size) + index_size); return ((((total_size & 0xFFFF) << 16) | ((section_count & 0xFF) << 8)) | (func_count & 0xFF)); } pub fn validate_documentation(generated_doc: u32, expected_sections: u32, expected_funcs: u32) -> u32 { - let; - actual_sections; - let; - actual_funcs; - let; - section_match; - let; - func_match; + let actual_sections: u32 = ((generated_doc >> 8) & 0xFF); + let actual_funcs: u32 = (generated_doc & 0xFF); + let mut section_match: u32 = 0; + let mut func_match: u32 = 0; if (actual_sections >= expected_sections) { section_match = 1; } if (actual_funcs >= expected_funcs) { func_match = 1; } - let; - quality_score; - let; - completeness; + let quality_score: u32 = ((section_match * 50) + (func_match * 50)); + let completeness: u32 = (((actual_sections * 10) / expected_sections) * 10); return (((((section_match & 0x1) << 15) | ((func_match & 0x1) << 14)) | ((quality_score & 0xFF) << 8)) | (completeness & 0xFF)); } diff --git a/gen/rust/energy_aware_routing.rs b/gen/rust/energy_aware_routing.rs index 8a67bc6..c57174d 100644 --- a/gen/rust/energy_aware_routing.rs +++ b/gen/rust/energy_aware_routing.rs @@ -50,44 +50,37 @@ pub fn get_energy_score(energy: u32) -> u32 { } pub fn create_energy_array(e0: u32, e1: u32, e2: u32, e3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((e0 as u64) << 48) | ((e1 as u64) << 32)) | ((e2 as u64) << 16)) | (e3 as u64)); } pub fn get_path_energy(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn calculate_total_energy_cost(cost: u32) -> u32 { - let; - tx = get_tx_power(cost); - let; - rx = get_rx_power(cost); - let; - proc = get_processing_cost(cost); - let; - hops = get_hop_count_cost(cost); - let; - per_hop = ((tx + rx) + proc); + let tx = get_tx_power(cost); + let rx = get_rx_power(cost); + let proc = get_processing_cost(cost); + let hops = get_hop_count_cost(cost); + let per_hop = ((tx + rx) + proc); return (per_hop * hops); } pub fn calculate_energy_score(battery: u32, cost: u32) -> u32 { - let; - total_cost = calculate_total_energy_cost(cost); + let total_cost = calculate_total_energy_cost(cost); if (total_cost == 0) { return (battery * 10); } - let; - score = ((battery * 100) / total_cost); + let mut score = ((battery * 100) / total_cost); if (score > 32767) { score = 32767; } @@ -95,44 +88,37 @@ pub fn calculate_energy_score(battery: u32, cost: u32) -> u32 { } pub fn is_path_viable(energy: u32) -> bool { - let; - battery = get_battery_levels(energy); - let; - valid = get_path_valid(energy); + let battery = get_battery_levels(energy); + let valid = get_path_valid(energy); return ((valid == 1) && (battery > CRITICAL_BATTERY)); } pub fn find_energy_optimal_path(energy_array: u64) -> u32 { - let; - best_path = 0xFF; - let; + let mut best_path = 0xFF; + let mut best_score = 0; if is_path_viable(get_path_energy(energy_array, 0)) { - let; - score = get_energy_score(get_path_energy(energy_array, 0)); + let score = get_energy_score(get_path_energy(energy_array, 0)); if (score > best_score) { best_score = score; best_path = 0; } } if is_path_viable(get_path_energy(energy_array, 1)) { - let; - score = get_energy_score(get_path_energy(energy_array, 1)); + let score = get_energy_score(get_path_energy(energy_array, 1)); if (score > best_score) { best_score = score; best_path = 1; } } if is_path_viable(get_path_energy(energy_array, 2)) { - let; - score = get_energy_score(get_path_energy(energy_array, 2)); + let score = get_energy_score(get_path_energy(energy_array, 2)); if (score > best_score) { best_score = score; best_path = 2; } } if is_path_viable(get_path_energy(energy_array, 3)) { - let; - score = get_energy_score(get_path_energy(energy_array, 3)); + let score = get_energy_score(get_path_energy(energy_array, 3)); if (score > best_score) { best_score = score; best_path = 3; @@ -142,36 +128,31 @@ pub fn find_energy_optimal_path(energy_array: u64) -> u32 { } pub fn find_min_cost_path(energy_array: u64) -> u32 { - let; - best_path = 0xFF; - let; + let mut best_path = 0xFF; + let mut best_cost = 0xFFFFFFFF; if is_path_viable(get_path_energy(energy_array, 0)) { - let; - cost = get_total_cost(get_path_energy(energy_array, 0)); + let cost = get_total_cost(get_path_energy(energy_array, 0)); if (cost < best_cost) { best_cost = cost; best_path = 0; } } if is_path_viable(get_path_energy(energy_array, 1)) { - let; - cost = get_total_cost(get_path_energy(energy_array, 1)); + let cost = get_total_cost(get_path_energy(energy_array, 1)); if (cost < best_cost) { best_cost = cost; best_path = 1; } } if is_path_viable(get_path_energy(energy_array, 2)) { - let; - cost = get_total_cost(get_path_energy(energy_array, 2)); + let cost = get_total_cost(get_path_energy(energy_array, 2)); if (cost < best_cost) { best_cost = cost; best_path = 2; } } if is_path_viable(get_path_energy(energy_array, 3)) { - let; - cost = get_total_cost(get_path_energy(energy_array, 3)); + let cost = get_total_cost(get_path_energy(energy_array, 3)); if (cost < best_cost) { best_cost = cost; best_path = 3; @@ -181,36 +162,31 @@ pub fn find_min_cost_path(energy_array: u64) -> u32 { } pub fn select_balanced_path(energy_array: u64, current_path: u32) -> u32 { - let; - best_path = current_path; - let; + let mut best_path = current_path; + let mut best_battery = get_battery_levels(get_path_energy(energy_array, current_path)); if is_path_viable(get_path_energy(energy_array, 0)) { - let; - battery = get_battery_levels(get_path_energy(energy_array, 0)); + let battery = get_battery_levels(get_path_energy(energy_array, 0)); if (battery > best_battery) { best_battery = battery; best_path = 0; } } if is_path_viable(get_path_energy(energy_array, 1)) { - let; - battery = get_battery_levels(get_path_energy(energy_array, 1)); + let battery = get_battery_levels(get_path_energy(energy_array, 1)); if (battery > best_battery) { best_battery = battery; best_path = 1; } } if is_path_viable(get_path_energy(energy_array, 2)) { - let; - battery = get_battery_levels(get_path_energy(energy_array, 2)); + let battery = get_battery_levels(get_path_energy(energy_array, 2)); if (battery > best_battery) { best_battery = battery; best_path = 2; } } if is_path_viable(get_path_energy(energy_array, 3)) { - let; - battery = get_battery_levels(get_path_energy(energy_array, 3)); + let battery = get_battery_levels(get_path_energy(energy_array, 3)); if (battery > best_battery) { best_battery = battery; best_path = 3; @@ -220,8 +196,7 @@ pub fn select_balanced_path(energy_array: u64, current_path: u32) -> u32 { } pub fn estimate_path_lifetime(energy: u32, drain_rate: u32) -> u32 { - let; - battery = get_battery_levels(energy); + let battery = get_battery_levels(energy); if (drain_rate == 0) { return 0xFF; } diff --git a/gen/rust/etx.rs b/gen/rust/etx.rs index 81fd58b..aa46776 100644 --- a/gen/rust/etx.rs +++ b/gen/rust/etx.rs @@ -29,14 +29,14 @@ pub fn fp_mul(a: u8, b: u8) -> u8 { if ((a == 0) || (b == 0)) { return 0; } - return (); + return ((((a as u16) * (b as u16)) >> 8) as u8); } pub fn ewma_update(est: u8, sample: u8, alpha: u8) -> u8 { if ((est == 255) && (sample == 255)) { return 255; } - return (fp_mul(alpha, sample) + fp_mul((256 - alpha), est)); + return (fp_mul(alpha, sample) + fp_mul(((ONE_FP - (alpha as u16)) as u8), est)); } pub fn is_dead(ratio: u8) -> bool { diff --git a/gen/rust/failure_predictor.rs b/gen/rust/failure_predictor.rs index 1876233..83a6344 100644 --- a/gen/rust/failure_predictor.rs +++ b/gen/rust/failure_predictor.rs @@ -50,58 +50,49 @@ pub fn get_prediction_time(score: u32) -> u32 { } pub fn create_health_array(h0: u32, h1: u32, h2: u32, h3: u32, h4: u32, h5: u32, h6: u32, h7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((h0 as u64) << 56) | ((h1 as u64) << 48)) | ((h2 as u64) << 40)) | ((h3 as u64) << 32)) | ((h4 as u64) << 24)) | ((h5 as u64) << 16)) | ((h6 as u64) << 8)) | (h7 as u64)); } pub fn get_health_metrics(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { - return (); + return (((array >> 8) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn calculate_health_score(metrics: u32) -> u32 { - let; - cpu = get_cpu_usage(metrics); - let; - memory = get_memory_usage(metrics); - let; - errors = get_error_rate(metrics); - let; - temp = get_temperature(metrics); - let; - cpu_score = (100 - cpu); - let; - mem_score = (100 - memory); - let; - error_score = (100 - errors); - let; - temp_score = (100 - temp); - let; - total = (((((cpu_score << 2) + (mem_score * 3)) + (error_score << 1)) + temp_score) / 10); + let cpu = get_cpu_usage(metrics); + let memory = get_memory_usage(metrics); + let errors = get_error_rate(metrics); + let temp = get_temperature(metrics); + let cpu_score = (100 - cpu); + let mem_score = (100 - memory); + let error_score = (100 - errors); + let temp_score = (100 - temp); + let total = (((((cpu_score * 4) + (mem_score * 3)) + (error_score * 2)) + temp_score) / 10); return total; } pub fn predict_failure_probability(metrics: u32) -> u32 { - let; + let health = calculate_health_score(metrics); if (health >= 80) { return 0; } else { @@ -122,8 +113,8 @@ pub fn predict_failure_probability(metrics: u32) -> u32 { } pub fn is_trending_failure(current_metrics: u32, previous_metrics: u32) -> u32 { - let; - let; + let current_health = calculate_health_score(current_metrics); + let previous_health = calculate_health_score(previous_metrics); if (current_health < (previous_health - 10)) { return 1; } @@ -131,7 +122,7 @@ pub fn is_trending_failure(current_metrics: u32, previous_metrics: u32) -> u32 { } pub fn predict_time_to_failure(metrics: u32) -> u32 { - let; + let health = calculate_health_score(metrics); if (health >= 80) { return 0xFF; } else { @@ -152,10 +143,8 @@ pub fn predict_time_to_failure(metrics: u32) -> u32 { } pub fn calculate_failure_risk(metrics: u32, degradation_rate: u32) -> u32 { - let; - failure_prob = predict_failure_probability(metrics); - let; - adjusted_risk = (failure_prob + degradation_rate); + let failure_prob = predict_failure_probability(metrics); + let mut adjusted_risk = (failure_prob + degradation_rate); if (adjusted_risk > 100) { adjusted_risk = 100; } @@ -163,19 +152,15 @@ pub fn calculate_failure_risk(metrics: u32, degradation_rate: u32) -> u32 { } pub fn needs_immediate_action(metrics: u32) -> bool { - let; - cpu = get_cpu_usage(metrics); - let; - temp = get_temperature(metrics); - let; - errors = get_error_rate(metrics); + let cpu = get_cpu_usage(metrics); + let temp = get_temperature(metrics); + let errors = get_error_rate(metrics); return (((cpu > 95) || (temp > 95)) || (errors > 50)); } pub fn find_most_at_risk(health_array: u64) -> u32 { - let; - let; - highest_risk_node = 0xFF; + let mut highest_risk = 0xFF; + let mut highest_risk_node = 0xFF; if (calculate_failure_risk(get_health_metrics(health_array, 0), 0) > highest_risk) { highest_risk = calculate_failure_risk(get_health_metrics(health_array, 0), 0); highest_risk_node = 0; diff --git a/gen/rust/fault_detection.rs b/gen/rust/fault_detection.rs index 6714ab9..2a615fa 100644 --- a/gen/rust/fault_detection.rs +++ b/gen/rust/fault_detection.rs @@ -32,39 +32,37 @@ pub fn get_link_quality(state: u32) -> u32 { } pub fn create_node_table(n0: u32, n1: u32, n2: u32, n3: u32, n4: u32, n5: u32, n6: u32, n7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((n0 as u64) << 56) | ((n1 as u64) << 48)) | ((n2 as u64) << 40)) | ((n3 as u64) << 32)) | ((n4 as u64) << 24)) | ((n5 as u64) << 16)) | ((n6 as u64) << 8)) | (n7 as u64)); } pub fn get_node_state(table: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((table >> 56) & 0xFF) as u32); } if (index == 1) { - return (); + return (((table >> 48) & 0xFF) as u32); } if (index == 2) { - return (); + return (((table >> 40) & 0xFF) as u32); } if (index == 3) { - return (); + return (((table >> 32) & 0xFF) as u32); } if (index == 4) { - return (); + return (((table >> 24) & 0xFF) as u32); } if (index == 5) { - return (); + return (((table >> 16) & 0xFF) as u32); } if (index == 6) { - return (); + return (((table >> 8) & 0xFF) as u32); } - return (); + return ((table & 0xFF) as u32); } pub fn is_heartbeat_timeout(state: u32, current_time: u32) -> bool { - let; - last_seen = get_last_heartbeat(state); - let; - elapsed = (current_time - last_seen); + let last_seen = get_last_heartbeat(state); + let elapsed = (current_time - last_seen); return (elapsed >= HEARTBEAT_TIMEOUT); } @@ -76,24 +74,17 @@ pub fn detect_node_failure(state: u32, current_time: u32) -> u32 { } pub fn increment_failure_count(state: u32) -> u32 { - let; - alive = get_is_alive(state); - let; - failures = get_failure_count(state); - let; - heartbeat = get_last_heartbeat(state); - let; - quality = get_link_quality(state); - let; - new_failures = (failures + 1); + let alive = get_is_alive(state); + let failures = get_failure_count(state); + let heartbeat = get_last_heartbeat(state); + let quality = get_link_quality(state); + let new_failures = (failures + 1); return create_node_state(alive, new_failures, heartbeat, quality); } pub fn reset_failure_count(state: u32, current_time: u32) -> u32 { - let; - alive = get_is_alive(state); - let; - quality = get_link_quality(state); + let alive = get_is_alive(state); + let quality = get_link_quality(state); return create_node_state(alive, 0, current_time, quality); } @@ -102,8 +93,7 @@ pub fn is_node_failed(state: u32) -> bool { } pub fn is_node_warning(state: u32) -> bool { - let; - failures = get_failure_count(state); + let failures = get_failure_count(state); return ((failures >= WARNING_THRESHOLD) && (failures < FAILURE_THRESHOLD)); } @@ -112,34 +102,26 @@ pub fn is_poor_link(state: u32) -> bool { } pub fn update_link_quality(state: u32, new_quality: u32) -> u32 { - let; - alive = get_is_alive(state); - let; - failures = get_failure_count(state); - let; - heartbeat = get_last_heartbeat(state); + let alive = get_is_alive(state); + let failures = get_failure_count(state); + let heartbeat = get_last_heartbeat(state); return create_node_state(alive, failures, heartbeat, new_quality); } pub fn mark_node_dead(state: u32) -> u32 { - let; - failures = get_failure_count(state); - let; - heartbeat = get_last_heartbeat(state); - let; - quality = get_link_quality(state); + let failures = get_failure_count(state); + let heartbeat = get_last_heartbeat(state); + let quality = get_link_quality(state); return create_node_state(0, failures, heartbeat, quality); } pub fn mark_node_alive(state: u32, current_time: u32) -> u32 { - let; - quality = get_link_quality(state); + let quality = get_link_quality(state); return create_node_state(1, 0, current_time, quality); } pub fn count_failed_nodes(table: u64) -> u32 { - let; - count = 0; + let mut count = 0; if is_node_failed(get_node_state(table, 0)) { count = (count + 1); } diff --git a/gen/rust/flow_control.rs b/gen/rust/flow_control.rs index f1630e4..ec51047 100644 --- a/gen/rust/flow_control.rs +++ b/gen/rust/flow_control.rs @@ -30,18 +30,14 @@ pub fn get_credits(flow: u32) -> u32 { } pub fn update_credits(flow: u32, new_credits: u32) -> u32 { - let; - sender; - let; - receiver; - let; - window; + let sender: u32 = get_sender_id(flow); + let receiver: u32 = get_receiver_id(flow); + let window: u32 = get_window_size(flow); return create_flow_state(sender, receiver, window, new_credits); } pub fn has_credits(flow: u32) -> u32 { - let; - credits; + let credits: u32 = get_credits(flow); if (credits > 0) { return 1; } else { @@ -50,8 +46,7 @@ pub fn has_credits(flow: u32) -> u32 { } pub fn consume_credit(flow: u32) -> u32 { - let; - credits; + let credits: u32 = get_credits(flow); if (credits > 0) { return update_credits(flow, (credits - 1)); } else { @@ -60,12 +55,9 @@ pub fn consume_credit(flow: u32) -> u32 { } pub fn add_credits(flow: u32, additional: u32) -> u32 { - let; - credits; - let; - window; - let; - new_credits; + let credits: u32 = get_credits(flow); + let window: u32 = get_window_size(flow); + let mut new_credits: u32 = (credits + additional); if (new_credits > window) { new_credits = window; } @@ -73,12 +65,9 @@ pub fn add_credits(flow: u32, additional: u32) -> u32 { } pub fn is_under_backpressure(flow: u32) -> u32 { - let; - credits; - let; - window; - let; - used; + let credits: u32 = get_credits(flow); + let window: u32 = get_window_size(flow); + let used: u32 = (window - credits); if (used >= BACKPRESSURE_THRESHOLD) { return 1; } else { @@ -87,12 +76,9 @@ pub fn is_under_backpressure(flow: u32) -> u32 { } pub fn calculate_backpressure_level(flow: u32) -> u32 { - let; - credits; - let; - window; - let; - used; + let credits: u32 = get_credits(flow); + let window: u32 = get_window_size(flow); + let used: u32 = (window - credits); if (used >= BACKPRESSURE_THRESHOLD) { return 2; } else { @@ -133,16 +119,13 @@ pub const MSG_CREDIT_UPDATE: u32 = 2; pub const MSG_BACKPRESSURE: u32 = 3; pub fn process_message(flow: u32, msg: u32) -> u32 { - let; - msg_type; + let msg_type: u32 = get_message_type(msg); if (msg_type == MSG_ACK) { - let; - credits; + let credits: u32 = get_message_credits(msg); return add_credits(flow, credits); } else { if (msg_type == MSG_CREDIT_UPDATE) { - let; - credits; + let credits: u32 = get_message_credits(msg); return update_credits(flow, credits); } else { return flow; @@ -152,10 +135,8 @@ pub fn process_message(flow: u32, msg: u32) -> u32 { pub fn send_data(flow: u32, seq: u32) -> u32 { if (has_credits(flow) == 1) { - let; - new_flow; - let; - msg; + let new_flow: u32 = consume_credit(flow); + let msg: u32 = create_flow_message(MSG_DATA, 0, 0, seq); return new_flow; } else { return flow; @@ -163,23 +144,17 @@ pub fn send_data(flow: u32, seq: u32) -> u32 { } pub fn send_ack(flow: u32, flow_id: u32, seq: u32) -> u32 { - let; - credits; - let; - window; - let; - credit_grant; - let; - msg; + let credits: u32 = get_credits(flow); + let window: u32 = get_window_size(flow); + let credit_grant: u32 = (window - credits); + let msg: u32 = create_flow_message(MSG_ACK, flow_id, credit_grant, seq); return msg; } -pub fn find_flow_by_sender(flows: Vec<>, sender: u32) -> u32 { - let; - i; +pub fn find_flow_by_sender(flows: [u32; MAX_FLOWS as usize], sender: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_FLOWS) { - let; - flow_sender; + let flow_sender: u32 = get_sender_id(flows[(i) as usize]); if (flow_sender == sender) { return i; } @@ -188,12 +163,10 @@ pub fn find_flow_by_sender(flows: Vec<>, sender: u32) -> u32 { return MAX_FLOWS; } -pub fn find_flow_by_receiver(flows: Vec<>, receiver: u32) -> u32 { - let; - i; +pub fn find_flow_by_receiver(flows: [u32; MAX_FLOWS as usize], receiver: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_FLOWS) { - let; - flow_receiver; + let flow_receiver: u32 = get_receiver_id(flows[(i) as usize]); if (flow_receiver == receiver) { return i; } @@ -202,11 +175,10 @@ pub fn find_flow_by_receiver(flows: Vec<>, receiver: u32) -> u32 { return MAX_FLOWS; } -pub fn is_any_flow_blocked(flows: Vec<>) -> u32 { - let; - i; +pub fn is_any_flow_blocked(flows: [u32; MAX_FLOWS as usize]) -> u32 { + let mut i: u32 = 0; while (i < MAX_FLOWS) { - if (has_credits(flows[i]) == 0) { + if (has_credits(flows[(i) as usize]) == 0) { return 1; } i = (i + 1); @@ -214,14 +186,11 @@ pub fn is_any_flow_blocked(flows: Vec<>) -> u32 { return 0; } -pub fn count_active_flows(flows: Vec<>) -> u32 { - let; - count; - let; - i; +pub fn count_active_flows(flows: [u32; MAX_FLOWS as usize]) -> u32 { + let mut count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_FLOWS) { - let; - sender; + let sender: u32 = get_sender_id(flows[(i) as usize]); if (sender != 0) { count = (count + 1); } @@ -230,37 +199,28 @@ pub fn count_active_flows(flows: Vec<>) -> u32 { return count; } -pub fn calculate_total_credits(flows: Vec<>) -> u32 { - let; - total; - let; - i; +pub fn calculate_total_credits(flows: [u32; MAX_FLOWS as usize]) -> u32 { + let mut total: u32 = 0; + let mut i: u32 = 0; while (i < MAX_FLOWS) { - total = (total + get_credits(flows[i])); + total = (total + get_credits(flows[(i) as usize])); i = (i + 1); } return total; } -pub fn apply_backpressure(flows: Vec<>, flow_index: u32) -> u32 { - let; - flow; - let; - window; - let; - credits; - let; - reduction; - let; - new_credits; +pub fn apply_backpressure(flows: [u32; MAX_FLOWS as usize], flow_index: u32) -> u32 { + let flow: u32 = flows[(flow_index) as usize]; + let window: u32 = get_window_size(flow); + let credits: u32 = get_credits(flow); + let reduction: u32 = (credits / 2); + let new_credits: u32 = (credits - reduction); return update_credits(flow, new_credits); } -pub fn release_backpressure(flows: Vec<>, flow_index: u32) -> u32 { - let; - flow; - let; - window; +pub fn release_backpressure(flows: [u32; MAX_FLOWS as usize], flow_index: u32) -> u32 { + let flow: u32 = flows[(flow_index) as usize]; + let window: u32 = get_window_size(flow); return update_credits(flow, window); } diff --git a/gen/rust/frame_buffer.rs b/gen/rust/frame_buffer.rs index fb2bcee..aa5bd0a 100644 --- a/gen/rust/frame_buffer.rs +++ b/gen/rust/frame_buffer.rs @@ -2,15 +2,15 @@ // DO NOT EDIT — generated by t27c pub fn get_src(meta: u32) -> u8 { - return (); + return (((meta >> 1) & 15) as u8); } pub fn get_dst(meta: u32) -> u8 { - return (); + return (((meta >> 5) & 15) as u8); } pub fn get_ttl(meta: u32) -> u8 { - return (); + return (((meta >> 9) & 15) as u8); } pub fn get_valid(meta: u32) -> bool { @@ -18,7 +18,7 @@ pub fn get_valid(meta: u32) -> bool { } pub fn create_meta(src: u8, dst: u8, ttl: u8) -> u32 { - return (((1 | (() << 1)) | (() << 5)) | (() << 9)); + return (((1 | (((src & 15) as u32) << 1)) | (((dst & 15) as u32) << 5)) | (((ttl & 15) as u32) << 9)); } pub fn empty_meta() -> u32 { diff --git a/gen/rust/health_dashboard.rs b/gen/rust/health_dashboard.rs index b634fb1..7debe3c 100644 --- a/gen/rust/health_dashboard.rs +++ b/gen/rust/health_dashboard.rs @@ -67,23 +67,17 @@ pub fn get_score_timestamp(score: u32) -> u32 { return (score & 0xFF); } -pub fn calculate_node_health(metrics: Vec<>, count: u32) -> u32 { +pub fn calculate_node_health(metrics: [u32; MAX_METRICS as usize], count: u32) -> u32 { if (count == 0) { return 100; } - let; - total_score; - let; - metric_count; - let; - i; - while ((i < count) && (metrics[i] != 0)) { - let; - metric_type; - let; - value; - let; - metric_score; + let mut total_score: u32 = 0; + let mut metric_count: u32 = 0; + let mut i: u32 = 0; + while ((i < count) && (metrics[(i) as usize] != 0)) { + let metric_type: u32 = get_health_metric_type(metrics[(i) as usize]); + let value: u32 = get_health_value(metrics[(i) as usize]); + let mut metric_score: u32 = 0; if ((metric_type == METRIC_CPU) || (metric_type == METRIC_MEMORY)) { metric_score = (100 - value); } else { @@ -112,35 +106,27 @@ pub fn calculate_node_health(metrics: Vec<>, count: u32) -> u32 { } } -pub fn calculate_network_health(node_metrics: Vec<>, node_count: u32) -> u32 { +pub fn calculate_network_health(node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { if (node_count == 0) { return 100; } - let; - total_health; - let; - i; + let mut total_health: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - node_health; + let node_health: u32 = node_metrics[(i) as usize]; total_health = (total_health + node_health); i = (i + 1); } return (total_health / node_count); } -pub fn detect_critical_issues(metrics: Vec<>, count: u32) -> u32 { - let; - critical_count; - let; - i; - while ((i < count) && (metrics[i] != 0)) { - let; - metric_type; - let; - value; - let; - is_critical; +pub fn detect_critical_issues(metrics: [u32; MAX_METRICS as usize], count: u32) -> u32 { + let mut critical_count: u32 = 0; + let mut i: u32 = 0; + while ((i < count) && (metrics[(i) as usize] != 0)) { + let metric_type: u32 = get_health_metric_type(metrics[(i) as usize]); + let value: u32 = get_health_value(metrics[(i) as usize]); + let mut is_critical: u32 = 0; if ((metric_type == METRIC_CPU) || (metric_type == METRIC_MEMORY)) { if (value > CRITICAL_THRESHOLD) { is_critical = 1; @@ -166,18 +152,13 @@ pub fn detect_critical_issues(metrics: Vec<>, count: u32) -> u32 { return critical_count; } -pub fn detect_warning_issues(metrics: Vec<>, count: u32) -> u32 { - let; - warning_count; - let; - i; - while ((i < count) && (metrics[i] != 0)) { - let; - metric_type; - let; - value; - let; - is_warning; +pub fn detect_warning_issues(metrics: [u32; MAX_METRICS as usize], count: u32) -> u32 { + let mut warning_count: u32 = 0; + let mut i: u32 = 0; + while ((i < count) && (metrics[(i) as usize] != 0)) { + let metric_type: u32 = get_health_metric_type(metrics[(i) as usize]); + let value: u32 = get_health_value(metrics[(i) as usize]); + let mut is_warning: u32 = 0; if ((metric_type == METRIC_CPU) || (metric_type == METRIC_MEMORY)) { if ((value > ALERT_THRESHOLD) && (value <= CRITICAL_THRESHOLD)) { is_warning = 1; @@ -203,13 +184,10 @@ pub fn detect_warning_issues(metrics: Vec<>, count: u32) -> u32 { return warning_count; } -pub fn generate_health_report(node_metrics: Vec<>, count: u32, timestamp: u32) -> u32 { - let; - node_health; - let; - critical_count; - let; - warning_count; +pub fn generate_health_report(node_metrics: [u32; MAX_METRICS as usize], count: u32, timestamp: u32) -> u32 { + let node_health: u32 = calculate_node_health(node_metrics, count); + let critical_count: u32 = detect_critical_issues(node_metrics, count); + let warning_count: u32 = detect_warning_issues(node_metrics, count); return create_health_score(node_health, critical_count, warning_count, timestamp); } @@ -246,8 +224,7 @@ pub const ALERT_CONGESTION: u32 = 4; pub const ALERT_SECURITY: u32 = 5; pub fn generate_alert(node_id: u32, alert_type: u32, value: u32, timestamp: u32) -> u32 { - let; - severity; + let mut severity: u32 = 0; if ((value > CRITICAL_THRESHOLD) || (value < (100 - CRITICAL_THRESHOLD))) { severity = 3; } else { @@ -262,8 +239,7 @@ pub fn generate_alert(node_id: u32, alert_type: u32, value: u32, timestamp: u32) pub fn analyze_health_trend(current_health: u32, previous_health: u32) -> u32 { if (current_health > previous_health) { - let; - improvement; + let improvement: u32 = (current_health - previous_health); if (improvement > 10) { return 2; } else { @@ -271,8 +247,7 @@ pub fn analyze_health_trend(current_health: u32, previous_health: u32) -> u32 { } } else { if (current_health < previous_health) { - let; - degradation; + let degradation: u32 = (previous_health - current_health); if (degradation > 10) { return 3; } else { @@ -284,13 +259,11 @@ pub fn analyze_health_trend(current_health: u32, previous_health: u32) -> u32 { } } -pub fn find_unhealthy_nodes(node_healths: Vec<>, threshold: u32) -> u32 { - let; - count; - let; - i; +pub fn find_unhealthy_nodes(node_healths: [u32; MAX_NODES as usize], threshold: u32) -> u32 { + let mut count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_NODES) { - if (node_healths[i] < threshold) { + if (node_healths[(i) as usize] < threshold) { count = (count + 1); } i = (i + 1); @@ -298,16 +271,12 @@ pub fn find_unhealthy_nodes(node_healths: Vec<>, threshold: u32) -> u32 { return count; } -pub fn calculate_network_trend(current_scores: Vec<>, previous_scores: Vec<>, node_count: u32) -> u32 { - let; - improving; - let; - degrading; - let; - i; +pub fn calculate_network_trend(current_scores: [u32; MAX_NODES as usize], previous_scores: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut improving: u32 = 0; + let mut degrading: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - trend; + let trend: u32 = analyze_health_trend(current_scores[(i) as usize], previous_scores[(i) as usize]); if ((trend == 1) || (trend == 2)) { improving = (improving + 1); } else { @@ -333,8 +302,7 @@ pub fn generate_summary_report(network_health: u32, critical_count: u32, warning } pub fn is_monitoring_active(last_update: u32, current_time: u32) -> u32 { - let; - elapsed; + let elapsed: u32 = (current_time - last_update); if (elapsed < (HEALTH_UPDATE_INTERVAL * 3)) { return 1; } else { diff --git a/gen/rust/health_monitoring.rs b/gen/rust/health_monitoring.rs index 98dc1d5..38e9eeb 100644 --- a/gen/rust/health_monitoring.rs +++ b/gen/rust/health_monitoring.rs @@ -56,57 +56,57 @@ pub const RESULT_FAIL: u32 = 2; pub const RESULT_SKIP: u32 = 3; pub fn create_health_array(c0: u32, c1: u32, c2: u32, c3: u32, c4: u32, c5: u32, c6: u32, c7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((c0 as u64) << 56) | ((c1 as u64) << 48)) | ((c2 as u64) << 40)) | ((c3 as u64) << 32)) | ((c4 as u64) << 24)) | ((c5 as u64) << 16)) | ((c6 as u64) << 8)) | (c7 as u64)); } pub fn get_health_check(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { - return (); + return (((array >> 8) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn update_health_check(array: u64, index: u32, new_check: u32) -> u64 { if (index == 0) { - return ((array & 0x00FFFFFFFFFFFFFF) | (() << 56)); + return ((array & 0x00FFFFFFFFFFFFFF) | ((new_check as u64) << 56)); } else { if (index == 1) { - return ((array & 0xFF00FFFFFFFFFFFF) | (() << 48)); + return ((array & 0xFF00FFFFFFFFFFFF) | ((new_check as u64) << 48)); } else { if (index == 2) { - return ((array & 0xFFFF00FFFFFFFFFF) | (() << 40)); + return ((array & 0xFFFF00FFFFFFFFFF) | ((new_check as u64) << 40)); } else { if (index == 3) { - return ((array & 0xFFFFFF00FFFFFFFF) | (() << 32)); + return ((array & 0xFFFFFF00FFFFFFFF) | ((new_check as u64) << 32)); } else { if (index == 4) { - return ((array & 0xFFFFFFFF00FFFFFF) | (() << 24)); + return ((array & 0xFFFFFFFF00FFFFFF) | ((new_check as u64) << 24)); } else { if (index == 5) { - return ((array & 0xFFFFFFFFFF00FFFF) | (() << 16)); + return ((array & 0xFFFFFFFFFF00FFFF) | ((new_check as u64) << 16)); } else { if (index == 6) { - return ((array & 0xFFFFFFFFFFFF00FF) | (() << 8)); + return ((array & 0xFFFFFFFFFFFF00FF) | ((new_check as u64) << 8)); } else { - return ((array & 0xFFFFFFFFFFFFFF00) | ()); + return ((array & 0xFFFFFFFFFFFFFF00) | (new_check as u64)); } } } @@ -117,8 +117,8 @@ pub fn update_health_check(array: u64, index: u32, new_check: u32) -> u64 { } pub fn calculate_overall_health(array: u64) -> u32 { - let; - let; + let mut failed = 0; + let mut warnings = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_FAIL) { failed = (failed + 1); } @@ -179,8 +179,7 @@ pub fn calculate_overall_health(array: u64) -> u32 { } pub fn count_failed_checks(array: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_FAIL) { count = (count + 1); } @@ -209,8 +208,7 @@ pub fn count_failed_checks(array: u64) -> u32 { } pub fn count_warning_checks(array: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_WARN) { count = (count + 1); } @@ -250,10 +248,8 @@ pub fn is_check_failing(array: u64, check_type: u32) -> bool { } pub fn get_health_percentage(array: u64) -> u32 { - let; - total = 0; - let; - passing = 0; + let mut total = 0; + let mut passing = 0; if (get_check_result(get_health_check(array, 0)) != RESULT_FAIL) { passing = (passing + 1); } diff --git a/gen/rust/hello.rs b/gen/rust/hello.rs index fdc9752..ac0cfaf 100644 --- a/gen/rust/hello.rs +++ b/gen/rust/hello.rs @@ -7,15 +7,15 @@ pub const HEADER_LEN: usize = 13; pub fn u32_byte(w: u32, idx: usize) -> u8 { if (idx == 0) { - return (); + return (((w >> 24) & 255) as u8); } else { if (idx == 1) { - return (); + return (((w >> 16) & 255) as u8); } else { if (idx == 2) { - return (); + return (((w >> 8) & 255) as u8); } else { - return (); + return ((w & 255) as u8); } } } @@ -42,7 +42,7 @@ pub fn hello_byte(src: u32, seq: u32, heard0: u32, heard1: u32, heard2: u32, n: } pub fn u32_from_bytes(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 { - return ((((() << 24) | (() << 16)) | (() << 8)) | ()); + return (((((b0 as u32) << 24) | ((b1 as u32) << 16)) | ((b2 as u32) << 8)) | (b3 as u32)); } pub fn parse_hello_src(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 { diff --git a/gen/rust/integration_framework.rs b/gen/rust/integration_framework.rs index edde1b6..b80f0c7 100644 --- a/gen/rust/integration_framework.rs +++ b/gen/rust/integration_framework.rs @@ -81,19 +81,14 @@ pub const MSG_ERROR: u32 = 3; pub const MSG_EVENT: u32 = 4; -pub fn send_message(modules: Vec<>, message: u32) -> u32 { - let; - dest; - let; - msg_type; - let; - i; +pub fn send_message(modules: [u32; MAX_MODULES as usize], message: u32) -> u32 { + let dest: u32 = get_integration_message_dest(message); + let msg_type: u32 = get_integration_message_type(message); + let mut i: u32 = 0; while (i < MAX_MODULES) { - let; - module_id; + let module_id: u32 = get_registered_module_id(modules[(i) as usize]); if (module_id == dest) { - let; - status; + let status: u32 = get_registered_module_status(modules[(i) as usize]); if ((status == STATUS_ACTIVE) || (status == STATUS_BUSY)) { return 1; } else { @@ -105,12 +100,10 @@ pub fn send_message(modules: Vec<>, message: u32) -> u32 { return 0; } -pub fn receive_message(messages: Vec<>, message_count: u32, module_id: u32) -> u32 { - let; - i; +pub fn receive_message(messages: [u32; MAX_MESSAGES as usize], message_count: u32, module_id: u32) -> u32 { + let mut i: u32 = 0; while (i < message_count) { - let; - dest; + let dest: u32 = get_integration_message_dest(messages[(i) as usize]); if (dest == module_id) { return i; } @@ -149,14 +142,12 @@ pub const EVENT_SIMULATION_STEP: u32 = 3; pub const EVENT_VISUALIZATION_UPDATE: u32 = 4; -pub fn subscribe_to_event(module_id: u32, event_type: u32, subscriptions: Vec<>) -> u32 { - let; - subscription_id; - let; - i; +pub fn subscribe_to_event(module_id: u32, event_type: u32, subscriptions: [u32; MAX_EVENTS as usize]) -> u32 { + let subscription_id: u32 = ((module_id * 10) + event_type); + let mut i: u32 = 0; while (i < MAX_EVENTS) { - if (subscriptions[i] == 0) { - subscriptions[i] = create_event(subscription_id, event_type, module_id, 0); + if (subscriptions[(i) as usize] == 0) { + subscriptions[(i) as usize] = create_event(subscription_id, event_type, module_id, 0); return 1; } i = (i + 1); @@ -164,23 +155,16 @@ pub fn subscribe_to_event(module_id: u32, event_type: u32, subscriptions: Vec<>) return 0; } -pub fn publish_event(event: u32, subscriptions: Vec<>, modules: Vec<>) -> u32 { - let; - event_type; - let; - notified_count; - let; - i; +pub fn publish_event(event: u32, subscriptions: [u32; MAX_EVENTS as usize], modules: [u32; MAX_MODULES as usize]) -> u32 { + let event_type: u32 = get_event_type(event); + let mut notified_count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_EVENTS) { - let; - sub_event_type; + let sub_event_type: u32 = get_event_type(subscriptions[(i) as usize]); if (sub_event_type == event_type) { - let; - source; - let; - module_id; - let; - msg; + let source: u32 = get_event_source(subscriptions[(i) as usize]); + let module_id: u32 = source; + let msg: u32 = create_integration_message(i, 0, module_id, MSG_EVENT); if (send_message(modules, msg) == 1) { notified_count = (notified_count + 1); } @@ -210,25 +194,17 @@ pub fn get_sync_checksum(sync: u32) -> u32 { return (sync & 0xFF); } -pub fn synchronize_states(modules: Vec<>, module_count: u32, sync_requests: u32) -> u32 { - let; - synced_count; - let; - i; +pub fn synchronize_states(modules: [u32; MAX_MODULES as usize], module_count: u32, sync_requests: u32) -> u32 { + let mut synced_count: u32 = 0; + let mut i: u32 = 0; while (i < module_count) { - let; - module_id; - let; - status; + let module_id: u32 = get_registered_module_id(modules[(i) as usize]); + let status: u32 = get_registered_module_status(modules[(i) as usize]); if ((status == STATUS_ACTIVE) && (sync_requests > 0)) { - let; - state_version; - let; - state_data; - let; - checksum; - let; - sync; + let state_version: u32 = 1; + let state_data: u32 = (i * 10); + let checksum: u32 = ((state_data + state_version) & 0xFF); + let sync: u32 = create_state_sync(module_id, state_version, state_data, checksum); synced_count = (synced_count + 1); } i = (i + 1); @@ -264,27 +240,21 @@ pub const SEVERITY_ERROR: u32 = 2; pub const SEVERITY_CRITICAL: u32 = 3; -pub fn propagate_error(error: u32, modules: Vec<>, module_count: u32) -> u32 { - let; - severity; - let; - notified_count; - let; - i; +pub fn propagate_error(error: u32, modules: [u32; MAX_MODULES as usize], module_count: u32) -> u32 { + let severity: u32 = get_error_severity(error); + let mut notified_count: u32 = 0; + let mut i: u32 = 0; while (i < module_count) { - let; - module_type; + let module_type: u32 = get_registered_module_type(modules[(i) as usize]); if (severity == SEVERITY_CRITICAL) { - let; - msg; + let msg: u32 = create_integration_message(0, 0, i, MSG_ERROR); if (send_message(modules, msg) == 1) { notified_count = (notified_count + 1); } } else { if ((severity == SEVERITY_WARNING) || (severity == SEVERITY_ERROR)) { if ((module_type == TYPE_TESTING) || (module_type == TYPE_SIMULATION)) { - let; - msg; + let msg: u32 = create_integration_message(0, 0, i, MSG_ERROR); if (send_message(modules, msg) == 1) { notified_count = (notified_count + 1); } @@ -296,12 +266,11 @@ pub fn propagate_error(error: u32, modules: Vec<>, module_count: u32) -> u32 { return notified_count; } -pub fn load_module(module_id: u32, module_type: u32, priority: u32, modules: Vec<>) -> u32 { - let; - i; +pub fn load_module(module_id: u32, module_type: u32, priority: u32, modules: [u32; MAX_MODULES as usize]) -> u32 { + let mut i: u32 = 0; while (i < MAX_MODULES) { - if (get_registered_module_id(modules[i]) == 0) { - modules[i] = create_module_registration(module_id, module_type, priority, STATUS_IDLE); + if (get_registered_module_id(modules[(i) as usize]) == 0) { + modules[(i) as usize] = create_module_registration(module_id, module_type, priority, STATUS_IDLE); return 1; } i = (i + 1); @@ -309,14 +278,12 @@ pub fn load_module(module_id: u32, module_type: u32, priority: u32, modules: Vec return 0; } -pub fn unload_module(module_id: u32, modules: Vec<>) -> u32 { - let; - i; +pub fn unload_module(module_id: u32, modules: [u32; MAX_MODULES as usize]) -> u32 { + let mut i: u32 = 0; while (i < MAX_MODULES) { - let; - registered_id; + let registered_id: u32 = get_registered_module_id(modules[(i) as usize]); if (registered_id == module_id) { - modules[i] = 0; + modules[(i) as usize] = 0; return 1; } i = (i + 1); @@ -344,27 +311,19 @@ pub fn get_dependency_required(dep: u32) -> u32 { return (dep & 0xFFF); } -pub fn check_dependencies(module_id: u32, dependencies: Vec<>, loaded_modules: Vec<>, module_count: u32) -> u32 { - let; - satisfied; - let; - i; +pub fn check_dependencies(module_id: u32, dependencies: [u32; MAX_MODULES as usize], loaded_modules: [u32; MAX_MODULES as usize], module_count: u32) -> u32 { + let mut satisfied: u32 = 1; + let mut i: u32 = 0; while (i < MAX_MODULES) { - let; - dep_module_id; + let dep_module_id: u32 = get_dependency_module_id(dependencies[(i) as usize]); if (dep_module_id == module_id) { - let; - depends_on; - let; - required; + let depends_on: u32 = get_dependency_depends_on(dependencies[(i) as usize]); + let required: u32 = get_dependency_required(dependencies[(i) as usize]); if (required == 1) { - let; - j; - let; - found; + let mut j: u32 = 0; + let mut found: u32 = 0; while (j < module_count) { - let; - loaded_id; + let loaded_id: u32 = get_registered_module_id(loaded_modules[(j) as usize]); if (loaded_id == depends_on) { found = 1; break; @@ -409,31 +368,23 @@ pub const RESOURCE_BANDWIDTH: u32 = 2; pub const RESOURCE_STORAGE: u32 = 3; -pub fn allocate_resources(requests: Vec<>, request_count: u32, available_resources: u32) -> u32 { - let; - total_requested; - let; - allocated_count; - let; - i; +pub fn allocate_resources(requests: [u32; MAX_MESSAGES as usize], request_count: u32, available_resources: u32) -> u32 { + let mut total_requested: u32 = 0; + let mut allocated_count: u32 = 0; + let mut i: u32 = 0; while (i < request_count) { - let; - amount; + let amount: u32 = get_resource_request_amount(requests[(i) as usize]); total_requested = (total_requested + amount); i = (i + 1); } if (total_requested <= available_resources) { return total_requested; } else { - let; - allocated; - let; - j; + let mut allocated: u32 = 0; + let mut j: u32 = 0; while ((j < request_count) && (allocated < available_resources)) { - let; - amount; - let; - priority; + let amount: u32 = get_resource_request_amount(requests[(j) as usize]); + let priority: u32 = get_resource_request_priority(requests[(j) as usize]); if ((priority > 7) && ((allocated + amount) <= available_resources)) { allocated = (allocated + amount); allocated_count = (allocated_count + 1); @@ -448,33 +399,25 @@ pub fn create_integration_report(loaded_modules: u32, active_messages: u32, even return (((((loaded_modules & 0xFF) << 24) | ((active_messages & 0xFF) << 16)) | ((events_processed & 0xFF) << 8)) | (errors_handled & 0xFF)); } -pub fn generate_integration_stats(modules: Vec<>, module_count: u32, messages: Vec<>, message_count: u32, events: Vec<>, event_count: u32) -> u32 { - let; - active_modules; - let; - active_messages; - let; - events_processed; - let; - errors_handled; - let; - i; +pub fn generate_integration_stats(modules: [u32; MAX_MODULES as usize], module_count: u32, messages: [u32; MAX_MESSAGES as usize], message_count: u32, events: [u32; MAX_EVENTS as usize], event_count: u32) -> u32 { + let mut active_modules: u32 = 0; + let mut active_messages: u32 = 0; + let mut events_processed: u32 = 0; + let errors_handled: u32 = 0; + let mut i: u32 = 0; while (i < module_count) { - let; - status; + let status: u32 = get_registered_module_status(modules[(i) as usize]); if ((status == STATUS_ACTIVE) || (status == STATUS_BUSY)) { active_modules = (active_modules + 1); } i = (i + 1); } - let; - j; + let mut j: u32 = 0; while (j < message_count) { active_messages = (active_messages + 1); j = (j + 1); } - let; - k; + let mut k: u32 = 0; while (k < event_count) { events_processed = (events_processed + 1); k = (k + 1); @@ -482,16 +425,12 @@ pub fn generate_integration_stats(modules: Vec<>, module_count: u32, messages: V return create_integration_report(active_modules, active_messages, events_processed, errors_handled); } -pub fn validate_integration_health(modules: Vec<>, module_count: u32) -> u32 { - let; - active_count; - let; - error_count; - let; - i; +pub fn validate_integration_health(modules: [u32; MAX_MODULES as usize], module_count: u32) -> u32 { + let mut active_count: u32 = 0; + let mut error_count: u32 = 0; + let mut i: u32 = 0; while (i < module_count) { - let; - status; + let status: u32 = get_registered_module_status(modules[(i) as usize]); if (status == STATUS_ACTIVE) { active_count = (active_count + 1); } else { @@ -501,8 +440,7 @@ pub fn validate_integration_health(modules: Vec<>, module_count: u32) -> u32 { } i = (i + 1); } - let; - active_percentage; + let mut active_percentage: u32 = 0; if (module_count > 0) { active_percentage = ((active_count * 100) / module_count); } diff --git a/gen/rust/integration_tests.rs b/gen/rust/integration_tests.rs index 97143b9..e947793 100644 --- a/gen/rust/integration_tests.rs +++ b/gen/rust/integration_tests.rs @@ -13,10 +13,10 @@ pub fn header_byte(kind: u8, src: u32, dst: u32, ttl: u8, idx: usize) -> u8 { return kind; } else { if (idx <= 5) { - return (); + return (((src >> (24 - (8 * (idx - 2)))) & 255) as u8); } else { if (idx <= 9) { - return (); + return (((dst >> (48 - (8 * (idx - 6)))) & 255) as u8); } else { return ttl; } diff --git a/gen/rust/key_management.rs b/gen/rust/key_management.rs index 569d548..76c5443 100644 --- a/gen/rust/key_management.rs +++ b/gen/rust/key_management.rs @@ -32,20 +32,20 @@ pub fn get_key_timestamp(entry: u32) -> u32 { } pub fn create_key_store(k0: u32, k1: u32, k2: u32, k3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((k0 as u64) << 48) | ((k1 as u64) << 32)) | ((k2 as u64) << 16)) | (k3 as u64)); } pub fn get_key_entry(store: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((store >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((store >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((store >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((store & 0xFFFFFFFF) as u32); } pub fn find_key_by_id(store: u64, key_id: u32) -> u32 { @@ -69,16 +69,16 @@ pub fn find_key_by_id(store: u64, key_id: u32) -> u32 { pub fn add_key(store: u64, key_id: u32, key_value: u32, timestamp: u32) -> u64 { if (get_key_valid(get_key_entry(store, 0)) == KEY_INVALID) { - return ((store & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((store & 0x0000FFFFFFFFFFFF) | ((create_key_entry(KEY_VALID, key_id, key_value, timestamp) as u64) << 48)); } else { if (get_key_valid(get_key_entry(store, 1)) == KEY_INVALID) { - return ((store & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((store & 0xFFFF0000FFFFFFFF) | ((create_key_entry(KEY_VALID, key_id, key_value, timestamp) as u64) << 32)); } else { if (get_key_valid(get_key_entry(store, 2)) == KEY_INVALID) { - return ((store & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((store & 0xFFFFFFFF0000FFFF) | ((create_key_entry(KEY_VALID, key_id, key_value, timestamp) as u64) << 16)); } else { if (get_key_valid(get_key_entry(store, 3)) == KEY_INVALID) { - return ((store & 0xFFFFFFFFFFFF0000) | ()); + return ((store & 0xFFFFFFFFFFFF0000) | (create_key_entry(KEY_VALID, key_id, key_value, timestamp) as u64)); } } } @@ -87,22 +87,20 @@ pub fn add_key(store: u64, key_id: u32, key_value: u32, timestamp: u32) -> u64 { } pub fn invalidate_key(store: u64, key_id: u32) -> u64 { - let; + let index = find_key_by_id(store, key_id); if (index != 0xFF) { - let; - entry = get_key_entry(store, index); - let; - new_entry = create_key_entry(KEY_INVALID, get_key_id(entry), get_key_value(entry), get_key_timestamp(entry)); + let entry = get_key_entry(store, index); + let new_entry = create_key_entry(KEY_INVALID, get_key_id(entry), get_key_value(entry), get_key_timestamp(entry)); if (index == 0) { - return ((store & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((store & 0x0000FFFFFFFFFFFF) | ((new_entry as u64) << 48)); } else { if (index == 1) { - return ((store & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((store & 0xFFFF0000FFFFFFFF) | ((new_entry as u64) << 32)); } else { if (index == 2) { - return ((store & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((store & 0xFFFFFFFF0000FFFF) | ((new_entry as u64) << 16)); } else { - return ((store & 0xFFFFFFFFFFFF0000) | ()); + return ((store & 0xFFFFFFFFFFFF0000) | (new_entry as u64)); } } } @@ -114,26 +112,24 @@ pub fn needs_rotation(entry: u32, current_time: u32) -> bool { if (get_key_valid(entry) == KEY_INVALID) { return false; } - let; - age = (current_time - get_key_timestamp(entry)); + let age = (current_time - get_key_timestamp(entry)); return (age >= ROTATION_INTERVAL); } pub fn rotate_key(store: u64, key_id: u32, new_value: u32, current_time: u32) -> u64 { - let; + let index = find_key_by_id(store, key_id); if (index != 0xFF) { - let; - new_entry = create_key_entry(KEY_VALID, key_id, new_value, current_time); + let new_entry = create_key_entry(KEY_VALID, key_id, new_value, current_time); if (index == 0) { - return ((store & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((store & 0x0000FFFFFFFFFFFF) | ((new_entry as u64) << 48)); } else { if (index == 1) { - return ((store & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((store & 0xFFFF0000FFFFFFFF) | ((new_entry as u64) << 32)); } else { if (index == 2) { - return ((store & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((store & 0xFFFFFFFF0000FFFF) | ((new_entry as u64) << 16)); } else { - return ((store & 0xFFFFFFFFFFFF0000) | ()); + return ((store & 0xFFFFFFFFFFFF0000) | (new_entry as u64)); } } } @@ -142,35 +138,31 @@ pub fn rotate_key(store: u64, key_id: u32, new_value: u32, current_time: u32) -> } pub fn get_active_key(store: u64) -> u32 { - let; - let; + let mut best_index = 0xFF; + let mut best_timestamp = 0; if (get_key_valid(get_key_entry(store, 0)) == KEY_VALID) { - let; - ts = get_key_timestamp(get_key_entry(store, 0)); + let ts = get_key_timestamp(get_key_entry(store, 0)); if (ts >= best_timestamp) { best_timestamp = ts; best_index = 0; } } if (get_key_valid(get_key_entry(store, 1)) == KEY_VALID) { - let; - ts = get_key_timestamp(get_key_entry(store, 1)); + let ts = get_key_timestamp(get_key_entry(store, 1)); if (ts >= best_timestamp) { best_timestamp = ts; best_index = 1; } } if (get_key_valid(get_key_entry(store, 2)) == KEY_VALID) { - let; - ts = get_key_timestamp(get_key_entry(store, 2)); + let ts = get_key_timestamp(get_key_entry(store, 2)); if (ts >= best_timestamp) { best_timestamp = ts; best_index = 2; } } if (get_key_valid(get_key_entry(store, 3)) == KEY_VALID) { - let; - ts = get_key_timestamp(get_key_entry(store, 3)); + let ts = get_key_timestamp(get_key_entry(store, 3)); if (ts >= best_timestamp) { best_timestamp = ts; best_index = 3; @@ -183,8 +175,7 @@ pub fn get_active_key(store: u64) -> u32 { } pub fn count_valid_keys(store: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_key_valid(get_key_entry(store, 0)) == KEY_VALID) { count = (count + 1); } diff --git a/gen/rust/link_quality_monitor.rs b/gen/rust/link_quality_monitor.rs index 8cad2c9..f7c57e3 100644 --- a/gen/rust/link_quality_monitor.rs +++ b/gen/rust/link_quality_monitor.rs @@ -16,24 +16,18 @@ pub const QUALITY_POOR: u8 = 0x60; pub const TREND_THRESHOLD: u8 = 0x05; pub fn update_ewma(current: u8, sample: u8) -> u8 { - let; - term1; - let; - term2; - let; - new_estimate; + let mut term1: u16 = (((ALPHA_Q8 as u16) * (sample as u16)) >> 8); + let mut term2: u16 = (((ONE_MINUS_ALPHA_Q8 as u16) * (current as u16)) >> 8); + let new_estimate: u16 = (term1 + term2); } -pub fn calculate_trend(history: Vec<>) -> i8 { - let; - recent_avg; - let; - older_avg; +pub fn calculate_trend(history: [u8; 8 as usize]) -> i8 { + let recent_avg: u8 = ((((((history[7] as u16) + (history[6] as u16)) + (history[5] as u16)) + (history[4] as u16)) >> 2) as u8); + let older_avg: u8 = ((((((history[3] as u16) + (history[2] as u16)) + (history[1] as u16)) + (history[0] as u16)) >> 2) as u8); } pub fn predict_next_etx(current: u8, trend: i8) -> u8 { - let; - prediction; + let prediction: i16 = ((current as i16) + (trend as i16)); } pub fn is_degrading(current_etx: u8, trend: i8) -> bool { @@ -41,12 +35,9 @@ pub fn is_degrading(current_etx: u8, trend: i8) -> bool { } pub fn quality_score(etx: u8, latency_ms: u16) -> u8 { - let; - etx_component; - let; - latency_component; - let; - combined; + let etx_component: u16 = (((etx as u16) * 7) / 10); + let latency_component: u16 = (latency_ms / 100); + let combined: u16 = (etx_component + latency_component); } pub fn classify_quality(score: u8) -> u8 { unimplemented!() } diff --git a/gen/rust/link_statistics.rs b/gen/rust/link_statistics.rs index 96da1cc..d349741 100644 --- a/gen/rust/link_statistics.rs +++ b/gen/rust/link_statistics.rs @@ -2,11 +2,11 @@ // DO NOT EDIT — generated by t27c pub fn get_sent(stats: u32) -> u16 { - return (); + return ((stats & 0xFFFF) as u16); } pub fn get_recv(stats: u32) -> u16 { - return (); + return (((stats >> 16) & 0xFFFF) as u16); } pub fn inc_sent(stats: u32) -> u32 { diff --git a/gen/rust/lite_crypto.rs b/gen/rust/lite_crypto.rs index d9c963f..5e2003c 100644 --- a/gen/rust/lite_crypto.rs +++ b/gen/rust/lite_crypto.rs @@ -8,29 +8,22 @@ pub const MD5_BLOCK_SIZE: u32 = 64; pub const CHACHA20_STATE_SIZE: u32 = 16; pub fn md5_digest(hash1: u32, hash2: u32) -> u64 { - return ((() << 32) | ()); + return (((hash1 as u64) << 32) | (hash2 as u64)); } pub fn quarter_round(state: u32, input: u32) -> u32 { - let; - s0 = ((state >> 96) & 0xFFFFFFFF); - let; - s1 = ((state >> 64) & 0xFFFFFFFF); - let; - s2 = ((state >> 32) & 0xFFFFFFFF); - let; - s3 = (state & 0xFFFFFFFF); - let; - c0 = 0x61707865; - let; - c1 = 0x3320646E; - let; - c2 = 0x79622D2E; - let; - let; - let; - let; - let; + let s0 = ((state >> 96) & 0xFFFFFFFF); + let s1 = ((state >> 64) & 0xFFFFFFFF); + let s2 = ((state >> 32) & 0xFFFFFFFF); + let s3 = (state & 0xFFFFFFFF); + let c0 = 0x61707865; + let c1 = 0x3320646E; + let c2 = 0x79622D2E; + let c3 = 0x6B206574; + let new_s0 = ((s0 + input) & 0xFFFFFFFF); + let new_s1 = ((s1 + c0) & 0xFFFFFFFF); + let new_s2 = ((s2 + c1) & 0xFFFFFFFF); + let new_s3 = ((s3 + c2) & 0xFFFFFFFF); } pub fn generate_psk(seed: u32) -> u32 { diff --git a/gen/rust/load_predictor.rs b/gen/rust/load_predictor.rs index a5299da..ec227ea 100644 --- a/gen/rust/load_predictor.rs +++ b/gen/rust/load_predictor.rs @@ -51,14 +51,11 @@ pub fn get_time_horizon(prediction: u32) -> u32 { return (prediction & 0x3FFF); } -pub fn calculate_moving_average(history: Vec<>, count: u32) -> u32 { - let; - sum; - let; - i; +pub fn calculate_moving_average(history: [u32; HISTORY_SIZE as usize], count: u32) -> u32 { + let mut sum: u32 = 0; + let mut i: u32 = 0; while (i < count) { - let; - metrics = history[i]; + let metrics = history[(i) as usize]; sum = (sum + get_bandwidth_usage(metrics)); i = (i + 1); } @@ -69,16 +66,13 @@ pub fn calculate_moving_average(history: Vec<>, count: u32) -> u32 { } } -pub fn detect_trend(history: Vec<>, count: u32) -> u32 { +pub fn detect_trend(history: [u32; HISTORY_SIZE as usize], count: u32) -> u32 { if (count < 3) { return 0; } - let; - recent; - let; - previous; - let; - diff; + let recent: u32 = get_bandwidth_usage(history[((count - 1)) as usize]); + let previous: u32 = get_bandwidth_usage(history[((count - 3)) as usize]); + let mut diff: u32 = 0; if (recent > previous) { diff = (recent - previous); } else { @@ -95,26 +89,20 @@ pub fn detect_trend(history: Vec<>, count: u32) -> u32 { } } -pub fn predict_load(history: Vec<>, count: u32) -> u32 { +pub fn predict_load(history: [u32; HISTORY_SIZE as usize], count: u32) -> u32 { if (count == 0) { return 0; } - let; - current; - let; - trend; - let; - avg; - let; - predicted; + let current: u32 = get_bandwidth_usage(history[((count - 1)) as usize]); + let trend: u32 = detect_trend(history, count); + let avg: u32 = calculate_moving_average(history, count); + let mut predicted: u32 = current; if (trend == 1) { - let; - increase; + let increase: u32 = ((current - avg) / 2); predicted = (current + increase); } else { if (trend == 2) { - let; - decrease; + let decrease: u32 = ((avg - current) / 2); if (current > decrease) { predicted = (current - decrease); } else { @@ -128,21 +116,16 @@ pub fn predict_load(history: Vec<>, count: u32) -> u32 { return predicted; } -pub fn calculate_confidence(history: Vec<>, count: u32) -> u32 { +pub fn calculate_confidence(history: [u32; HISTORY_SIZE as usize], count: u32) -> u32 { if (count < 3) { return 20; } - let; - variance; - let; - avg; - let; - i; + let mut variance: u32 = 0; + let avg: u32 = calculate_moving_average(history, count); + let mut i: u32 = 0; while (i < count) { - let; - value; - let; - diff; + let value: u32 = get_bandwidth_usage(history[(i) as usize]); + let mut diff: u32 = 0; if (value > avg) { diff = (value - avg); } else { @@ -151,8 +134,7 @@ pub fn calculate_confidence(history: Vec<>, count: u32) -> u32 { variance = (variance + diff); i = (i + 1); } - let; - avg_variance; + let mut avg_variance: u32 = 0; if (count > 0) { avg_variance = (variance / count); } @@ -171,23 +153,17 @@ pub fn calculate_confidence(history: Vec<>, count: u32) -> u32 { } } -pub fn create_load_prediction(history: Vec<>, count: u32) -> u32 { - let; - predicted; - let; - confidence; - let; - trend; - let; - horizon; +pub fn create_load_prediction(history: [u32; HISTORY_SIZE as usize], count: u32) -> u32 { + let predicted: u32 = predict_load(history, count); + let confidence: u32 = calculate_confidence(history, count); + let trend: u32 = detect_trend(history, count); + let horizon: u32 = PREDICTION_WINDOW; return create_prediction(predicted, confidence, trend, horizon); } pub fn is_congestion_predicted(prediction: u32) -> u32 { - let; - load; - let; - confidence; + let load: u32 = get_predicted_load(prediction); + let confidence: u32 = get_confidence(prediction); if ((confidence > 50) && (load >= CONGESTION_THRESHOLD)) { return 1; } else { @@ -196,10 +172,8 @@ pub fn is_congestion_predicted(prediction: u32) -> u32 { } pub fn is_warning_predicted(prediction: u32) -> u32 { - let; - load; - let; - confidence; + let load: u32 = get_predicted_load(prediction); + let confidence: u32 = get_confidence(prediction); if ((confidence > 50) && (load >= WARNING_THRESHOLD)) { return 1; } else { @@ -207,14 +181,11 @@ pub fn is_warning_predicted(prediction: u32) -> u32 { } } -pub fn calculate_network_load(node_metrics: Vec<>, node_count: u32) -> u32 { - let; - total_load; - let; - i; +pub fn calculate_network_load(node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut total_load: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - load; + let load: u32 = get_bandwidth_usage(node_metrics[(i) as usize]); total_load = (total_load + load); i = (i + 1); } @@ -225,16 +196,12 @@ pub fn calculate_network_load(node_metrics: Vec<>, node_count: u32) -> u32 { } } -pub fn find_most_loaded_node(node_metrics: Vec<>, node_count: u32) -> u32 { - let; - max_load; - let; - max_node; - let; - i; +pub fn find_most_loaded_node(node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut max_load: u32 = 0; + let mut max_node: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - load; + let load: u32 = get_bandwidth_usage(node_metrics[(i) as usize]); if (load > max_load) { max_load = load; max_node = i; @@ -244,16 +211,12 @@ pub fn find_most_loaded_node(node_metrics: Vec<>, node_count: u32) -> u32 { return max_node; } -pub fn find_least_loaded_node(node_metrics: Vec<>, node_count: u32) -> u32 { - let; - min_load; - let; - min_node; - let; - i; +pub fn find_least_loaded_node(node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut min_load: u32 = 255; + let mut min_node: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - load; + let load: u32 = get_bandwidth_usage(node_metrics[(i) as usize]); if (load < min_load) { min_load = load; min_node = i; @@ -263,16 +226,12 @@ pub fn find_least_loaded_node(node_metrics: Vec<>, node_count: u32) -> u32 { return min_node; } -pub fn calculate_load_imbalance(node_metrics: Vec<>, node_count: u32) -> u32 { - let; - max_load; - let; - min_load; - let; - i; +pub fn calculate_load_imbalance(node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut max_load: u32 = 0; + let mut min_load: u32 = 255; + let mut i: u32 = 0; while (i < node_count) { - let; - load; + let load: u32 = get_bandwidth_usage(node_metrics[(i) as usize]); if (load > max_load) { max_load = load; } @@ -284,17 +243,15 @@ pub fn calculate_load_imbalance(node_metrics: Vec<>, node_count: u32) -> u32 { if (min_load == 0) { return max_load; } - let; - imbalance; + let imbalance: u32 = ((max_load - min_load) / 10); return imbalance; } -pub fn recommend_rerouting(prediction: u32, current_node: u32, node_metrics: Vec<>, node_count: u32) -> u32 { +pub fn recommend_rerouting(prediction: u32, current_node: u32, node_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { if !(is_congestion_predicted(prediction)) { return current_node; } - let; - least_loaded; + let least_loaded: u32 = find_least_loaded_node(node_metrics, node_count); if (least_loaded != current_node) { return least_loaded; } else { diff --git a/gen/rust/local_processing.rs b/gen/rust/local_processing.rs index ef775e6..ccd766c 100644 --- a/gen/rust/local_processing.rs +++ b/gen/rust/local_processing.rs @@ -62,37 +62,28 @@ pub const STATUS_COMPLETED: u32 = 2; pub const STATUS_FAILED: u32 = 3; pub fn process_task(task: u32) -> u32 { - let; - task_id; - let; - data_size; - let; - proc_time; - let; - result_value; + let task_id: u32 = get_task_id(task); + let data_size: u32 = get_data_size(task); + let proc_time: u32 = get_processing_time(task); + let result_value: u32 = (data_size * proc_time); return create_result(task_id, STATUS_COMPLETED, data_size, result_value); } -pub fn aggregate_results(results: Vec<>, count: u32) -> u32 { - let; - sum; - let; - i; +pub fn aggregate_results(results: [u32; MAX_RESULTS as usize], count: u32) -> u32 { + let mut sum: u32 = 0; + let mut i: u32 = 0; while (i < count) { - let; - value; + let value: u32 = get_result_value(results[(i) as usize]); sum = (sum + value); i = (i + 1); } return sum; } -pub fn find_task_by_priority(tasks: Vec<>, priority: u32) -> u32 { - let; - i; +pub fn find_task_by_priority(tasks: [u32; MAX_TASKS as usize], priority: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_TASKS) { - let; - task_priority; + let task_priority: u32 = get_priority(tasks[(i) as usize]); if (task_priority == priority) { return i; } @@ -101,16 +92,12 @@ pub fn find_task_by_priority(tasks: Vec<>, priority: u32) -> u32 { return MAX_TASKS; } -pub fn find_highest_priority_task(tasks: Vec<>) -> u32 { - let; - highest_priority; - let; - task_index; - let; - i; +pub fn find_highest_priority_task(tasks: [u32; MAX_TASKS as usize]) -> u32 { + let mut highest_priority: u32 = TASK_PRIORITY_LOW; + let mut task_index: u32 = MAX_TASKS; + let mut i: u32 = 0; while (i < MAX_TASKS) { - let; - task_priority; + let task_priority: u32 = get_priority(tasks[(i) as usize]); if (task_priority < highest_priority) { highest_priority = task_priority; task_index = i; @@ -120,14 +107,11 @@ pub fn find_highest_priority_task(tasks: Vec<>) -> u32 { return task_index; } -pub fn count_pending_tasks(tasks: Vec<>) -> u32 { - let; - count; - let; - i; +pub fn count_pending_tasks(tasks: [u32; MAX_TASKS as usize]) -> u32 { + let mut count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_TASKS) { - let; - task_id; + let task_id: u32 = get_task_id(tasks[(i) as usize]); if (task_id != 0) { count = (count + 1); } @@ -136,27 +120,21 @@ pub fn count_pending_tasks(tasks: Vec<>) -> u32 { return count; } -pub fn calculate_processing_load(tasks: Vec<>) -> u32 { - let; - total_load; - let; - i; +pub fn calculate_processing_load(tasks: [u32; MAX_TASKS as usize]) -> u32 { + let mut total_load: u32 = 0; + let mut i: u32 = 0; while (i < MAX_TASKS) { - let; - proc_time; + let proc_time: u32 = get_processing_time(tasks[(i) as usize]); total_load = (total_load + proc_time); i = (i + 1); } return total_load; } -pub fn can_accept_task(tasks: Vec<>, new_task: u32) -> u32 { - let; - current_load; - let; - new_load; - let; - total_load; +pub fn can_accept_task(tasks: [u32; MAX_TASKS as usize], new_task: u32) -> u32 { + let current_load: u32 = calculate_processing_load(tasks); + let new_load: u32 = get_processing_time(new_task); + let total_load: u32 = (current_load + new_load); if (total_load <= PROCESSING_TIMEOUT) { return 1; } else { @@ -164,14 +142,11 @@ pub fn can_accept_task(tasks: Vec<>, new_task: u32) -> u32 { } } -pub fn find_completed_result(results: Vec<>, task_id: u32, count: u32) -> u32 { - let; - i; +pub fn find_completed_result(results: [u32; MAX_RESULTS as usize], task_id: u32, count: u32) -> u32 { + let mut i: u32 = 0; while (i < count) { - let; - result_task_id; - let; - status; + let result_task_id: u32 = get_result_task_id(results[(i) as usize]); + let status: u32 = get_status(results[(i) as usize]); if ((result_task_id == task_id) && (status == STATUS_COMPLETED)) { return i; } @@ -180,20 +155,17 @@ pub fn find_completed_result(results: Vec<>, task_id: u32, count: u32) -> u32 { return MAX_RESULTS; } -pub fn calculate_efficiency(tasks: Vec<>, results: Vec<>, result_count: u32) -> u32 { - let; - total_input; - let; - total_output; - let; - i; +pub fn calculate_efficiency(tasks: [u32; MAX_TASKS as usize], results: [u32; MAX_RESULTS as usize], result_count: u32) -> u32 { + let mut total_input: u32 = 0; + let mut total_output: u32 = 0; + let mut i: u32 = 0; while (i < MAX_TASKS) { - total_input = (total_input + get_data_size(tasks[i])); + total_input = (total_input + get_data_size(tasks[(i) as usize])); i = (i + 1); } i = 0; while (i < result_count) { - total_output = (total_output + get_result_size(results[i])); + total_output = (total_output + get_result_size(results[(i) as usize])); i = (i + 1); } if (total_input > 0) { @@ -203,28 +175,24 @@ pub fn calculate_efficiency(tasks: Vec<>, results: Vec<>, result_count: u32) -> } } -pub fn aggregate_data(data_values: Vec<>, count: u32) -> u32 { +pub fn aggregate_data(data_values: [u32; MAX_RESULTS as usize], count: u32) -> u32 { if (count == 0) { return 0; } - let; - sum; - let; - i; + let mut sum: u32 = 0; + let mut i: u32 = 0; while (i < count) { - sum = (sum + data_values[i]); + sum = (sum + data_values[(i) as usize]); i = (i + 1); } return (sum / count); } -pub fn filter_data(data_values: Vec<>, count: u32, threshold: u32) -> u32 { - let; - filtered_count; - let; - i; +pub fn filter_data(data_values: [u32; MAX_RESULTS as usize], count: u32, threshold: u32) -> u32 { + let mut filtered_count: u32 = 0; + let mut i: u32 = 0; while (i < count) { - if (data_values[i] > threshold) { + if (data_values[(i) as usize] > threshold) { filtered_count = (filtered_count + 1); } i = (i + 1); @@ -232,11 +200,9 @@ pub fn filter_data(data_values: Vec<>, count: u32, threshold: u32) -> u32 { return filtered_count; } -pub fn make_local_decision(tasks: Vec<>, results: Vec<>, result_count: u32) -> u32 { - let; - efficiency; - let; - pending; +pub fn make_local_decision(tasks: [u32; MAX_TASKS as usize], results: [u32; MAX_RESULTS as usize], result_count: u32) -> u32 { + let efficiency: u32 = calculate_efficiency(tasks, results, result_count); + let pending: u32 = count_pending_tasks(tasks); if ((efficiency > 50) && (pending < (MAX_TASKS / 2))) { return 1; } else { @@ -265,14 +231,10 @@ pub fn get_available_resources(state: u32) -> u32 { } pub fn update_resources(state: u32, cpu_delta: u32, memory_delta: u32, task_delta: u32) -> u32 { - let; - cpu; - let; - memory; - let; - tasks; - let; - available; + let mut cpu: u32 = get_cpu_usage(state); + let mut memory: u32 = get_memory_usage(state); + let mut tasks: u32 = get_task_count(state); + let mut available: u32 = get_available_resources(state); cpu = (cpu + cpu_delta); memory = (memory + memory_delta); tasks = (tasks + task_delta); @@ -287,10 +249,8 @@ pub fn update_resources(state: u32, cpu_delta: u32, memory_delta: u32, task_delt } pub fn has_resources(state: u32, required_cpu: u32, required_memory: u32) -> u32 { - let; - available_cpu; - let; - available_memory; + let available_cpu: u32 = (100 - get_cpu_usage(state)); + let available_memory: u32 = (100 - get_memory_usage(state)); if ((available_cpu >= required_cpu) && (available_memory >= required_memory)) { return 1; } else { diff --git a/gen/rust/m3_multihop.rs b/gen/rust/m3_multihop.rs index b5b75e9..b6f3cae 100644 --- a/gen/rust/m3_multihop.rs +++ b/gen/rust/m3_multihop.rs @@ -20,29 +20,45 @@ pub const ATTEN_MAX: u8 = 30; pub const IPERF3_HDR_LEN: u8 = 8; pub fn iperf3_sequence(packet_byte: u8) -> u32 { - (); + (packet_byte as u32); } pub fn expected_loss_rate_p10(attenuation_db: u8) -> u8 { - let; - base_loss; - let; - att_factor; - let; - add_loss; - let; - total; + let base_loss: u8 = 0x10; + let att_factor: u8 = ((attenuation_db / 3) as u8); + let add_loss: u8 = (att_factor * 0x10); + let total: u16 = ((base_loss as u16) + (add_loss as u16)); } pub fn throughput_factor_p8(attenuation_db: u8) -> u8 { - let; - loss_p10; - let; - loss_p8; + let loss_p10: u8 = expected_loss_rate_p10(attenuation_db); + let loss_p8: u8 = (((loss_p10 as u16) / 10) as u8); wrapping_sub(loss_p8); } -pub fn signal_quality(attenuation_db: u8) -> u8 { - match; +pub fn signal_quality(attenuation_db: u8) -> u8 { unimplemented!() } + +pub fn total_attenuation(hop1_db: u8, hop2_db: u8) -> u8 { + let sum: u16 = ((hop1_db as u16) + (hop2_db as u16)); +} + +pub fn delivery_rate_p8(hop1_db: u8, hop2_db: u8) -> u8 { + let factor1: u8 = throughput_factor_p8(hop1_db); + let factor2: u8 = throughput_factor_p8(hop2_db); + let product: u16 = ((factor1 as u16) * (factor2 as u16)); + ((product >> 8) as u8); +} + +pub fn simulate_hop(attenuation_db: u8, packet_seq: u8) -> bool { + let success_p8: u8 = throughput_factor_p8(attenuation_db); + let random_factor: u8 = (packet_seq % 100); + let random_threshold: u8 = ((((random_factor as u16) * 0x100_) / 100) as u8); + (random_threshold < success_p8); } +pub fn forward_packet(hop1_db: u8, hop2_db: u8, packet_seq: u8) -> bool { unimplemented!() } + +pub fn tcp_packet_byte(seq: u32, byte_index: u8, data_byte: u8) -> u8 { unimplemented!() } + +pub fn udp_packet_byte(seq: u16, byte_index: u8, data_byte: u8) -> u8 { unimplemented!() } + diff --git a/gen/rust/mesh_node_sim.rs b/gen/rust/mesh_node_sim.rs index 73a6085..3e48a3c 100644 --- a/gen/rust/mesh_node_sim.rs +++ b/gen/rust/mesh_node_sim.rs @@ -10,7 +10,7 @@ pub const NODE_3: u32 = 3; pub const NODE_4: u32 = 4; pub fn create_link_quality(from: u32, to: u32, quality: u8) -> u32 { - return ((((from & 0xFF) << 16) | ((to & 0xFF) << 8)) | ()); + return ((((from & 0xFF) << 16) | ((to & 0xFF) << 8)) | (quality as u32)); } pub fn link_from(link: u32) -> u32 { @@ -22,7 +22,7 @@ pub fn link_to(link: u32) -> u32 { } pub fn link_quality(link: u32) -> u8 { - return (); + return ((link & 0xFF) as u8); } pub fn is_link_good(link: u32, threshold: u8) -> bool { diff --git a/gen/rust/mesh_protocol_stack.rs b/gen/rust/mesh_protocol_stack.rs index 3c33ee3..d18db7f 100644 --- a/gen/rust/mesh_protocol_stack.rs +++ b/gen/rust/mesh_protocol_stack.rs @@ -12,7 +12,7 @@ pub const NODE_B: u32 = 2; pub const NODE_C: u32 = 3; pub fn build_packet(src: u32, dst: u32, ttl: u8, payload: u8) -> u32 { - return (((((src & 0xFF) << 24) | ((dst & 0xFF) << 16)) | ((() & 0xF) << 12)) | (() & 0xF)); + return (((((src & 0xFF) << 24) | ((dst & 0xFF) << 16)) | (((ttl as u32) & 0xF) << 12)) | ((payload as u32) & 0xF)); } pub fn extract_src(packet: u32) -> u32 { @@ -24,11 +24,11 @@ pub fn extract_dst(packet: u32) -> u32 { } pub fn extract_ttl(packet: u32) -> u8 { - return (); + return (((packet >> 12) & 0xF) as u8); } pub fn extract_payload(packet: u32) -> u8 { - return (); + return ((packet & 0xF) as u8); } pub fn route_packet(src: u32, dst: u32, next_hop: u32) -> u32 { @@ -60,7 +60,7 @@ pub fn route_packet(src: u32, dst: u32, next_hop: u32) -> u32 { } pub fn tx_path(src: u32, dst: u32, payload: u8) -> u32 { - return build_packet(src, dst, (), payload); + return build_packet(src, dst, (MAX_HOPS as u8), payload); } pub fn rx_path(packet: u32) -> u8 { diff --git a/gen/rust/multipath_router.rs b/gen/rust/multipath_router.rs index 9125b5e..03e1001 100644 --- a/gen/rust/multipath_router.rs +++ b/gen/rust/multipath_router.rs @@ -7,43 +7,31 @@ pub const ETX_THRESHOLD_GOOD: u8 = 0x30; pub const ETX_THRESHOLD_POOR: u8 = 0x60; -pub fn select_path_index(etx_values: Vec<>) -> u8 { - let; - min_etx; - let; - mut; - best_idx; +pub fn select_path_index(etx_values: [u8; 3 as usize]) -> u8 { + let min_etx: u8 = etx_values[0]; + let mut best_idx: u8 = 0; } pub fn path_quality_score(etx: u8, latency: u16, loss_p8: u8) -> u8 { - let; - etx_component; - let; - latency_component; - let; - loss_component; - let; - total; + let etx_component: u16 = ((etx as u16) * 7); + let latency_component: u16 = ((latency / 10) * 2); + let loss_component: u16 = ((loss_p8 as u16) * 1); + let total: u16 = (((etx_component + latency_component) + loss_component) / 10); } pub fn needs_failover(current_etx: u8, current_idx: u8, max_paths: u8) -> bool { - let; - etx_degraded; - let; - has_backup; + let etx_degraded: bool = (current_etx > ETX_THRESHOLD_POOR); + let has_backup: bool = (current_idx < max_paths); (etx_degraded && has_backup); } pub fn next_path_index(current_idx: u8, max_paths: u8) -> u8 { - let; - next; + let next: u8 = (current_idx + 1); } pub fn path_reliability(etx: u8, loss_rate: u8) -> u8 { - let; - product; - let; - unreliability; + let product: u16 = ((etx as u16) * (loss_rate as u16)); + let unreliability: u8 = ((product / 256) as u8); wrapping_sub(unreliability); } diff --git a/gen/rust/multipath_routing.rs b/gen/rust/multipath_routing.rs index 9ac2ae8..fdce5c0 100644 --- a/gen/rust/multipath_routing.rs +++ b/gen/rust/multipath_routing.rs @@ -52,25 +52,24 @@ pub fn get_multipath_last_update(state: u32) -> u32 { } pub fn create_path_array(p0: u32, p1: u32, p2: u32, p3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((p0 as u64) << 48) | ((p1 as u64) << 32)) | ((p2 as u64) << 16)) | (p3 as u64)); } pub fn get_multipath(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn count_valid_paths(path_array: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_path_valid(get_multipath(path_array, 0)) == PATH_VALID) { count = (count + 1); } @@ -86,7 +85,7 @@ pub fn count_valid_paths(path_array: u64) -> u32 { return count; } -pub fn is_multipath_viable(path_array: u64) -> u32 { +pub fn is_multipath_viable(path_array: u64) -> bool { return (count_valid_paths(path_array) >= MIN_PATHS); } @@ -110,8 +109,8 @@ pub fn select_primary_path(path_array: u64, quality_array: u64) -> u32 { } pub fn calculate_path_diversity(path_array: u64) -> u32 { - let; - let; + let diversity_score = 0; + let mut hop1_set = 0; if (get_path_valid(get_multipath(path_array, 0)) == PATH_VALID) { hop1_set = (hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 0)))); } @@ -121,11 +120,10 @@ pub fn calculate_path_diversity(path_array: u64) -> u32 { if (get_path_valid(get_multipath(path_array, 2)) == PATH_VALID) { hop1_set = (hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 2)))); } - if ((get_path_valid(get_multipath(path_array, 3)) == path_valid) == PATH_VALID) { + if (get_path_valid(get_multipath(path_array, 3)) == PATH_VALID) { hop1_set = (hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 3)))); } - let; - count = 0; + let mut count = 0; if ((hop1_set & 0x01) == 0x01) { count = (count + 1); } @@ -154,14 +152,13 @@ pub fn calculate_path_diversity(path_array: u64) -> u32 { } pub fn distribute_load(path_array: u64, current_path: u32, load_ratio: u32) -> u32 { - let; - total_paths = count_valid_paths(path_array); + let total_paths = count_valid_paths(path_array); if (total_paths < 2) { return current_path; } - let; - let; - let; + let mut next_path = ((current_path + 1) % total_paths); + let mut found = 0; + let mut attempts = 0; while ((found == 0) && (attempts < 4)) { if (get_path_valid(get_multipath(path_array, next_path)) == PATH_VALID) { found = 1; @@ -184,12 +181,11 @@ pub fn needs_failover(path_array: u64, current_path: u32) -> bool { } pub fn perform_failover(state: u32, path_array: u64, failed_path: u32) -> u32 { - let; - let; - let; + let active = get_active_paths(state); + let current = get_current_path(state); + let flow = get_flow_id(state); if needs_failover(path_array, current) { - let; - backup = distribute_load(path_array, current, 0); + let backup = distribute_load(path_array, current, 0); if ((backup != current) && (backup != 0xFF)) { return create_multipath_state(active, backup, flow, 0); } @@ -198,7 +194,7 @@ pub fn perform_failover(state: u32, path_array: u64, failed_path: u32) -> u32 { } pub fn calculate_multipath_gain(path_array: u64) -> u32 { - let; + let valid_paths = count_valid_paths(path_array); if (valid_paths >= 2) { return (valid_paths * 30); } diff --git a/gen/rust/network_analytics.rs b/gen/rust/network_analytics.rs index a38fb35..dd63ab3 100644 --- a/gen/rust/network_analytics.rs +++ b/gen/rust/network_analytics.rs @@ -32,23 +32,23 @@ pub fn get_error_count(stats: u32) -> u32 { } pub fn create_analysis_data(node_id: u32, traffic: u32, window_start: u32, pattern: u32) -> u64 { - return ((((() << 48) | (() << 24)) | (() << 12)) | ()); + return (((((node_id as u64) << 48) | ((traffic as u64) << 24)) | ((window_start as u64) << 12)) | (pattern as u64)); } pub fn get_analysis_node_id(data: u64) -> u32 { - return (); + return (((data >> 48) & 0xFF) as u32); } pub fn get_analysis_traffic(data: u64) -> u32 { - return (); + return (((data >> 24) & 0xFF) as u32); } pub fn get_analysis_window_start(data: u64) -> u32 { - return (); + return (((data >> 12) & 0xFFF) as u32); } pub fn get_analysis_pattern(data: u64) -> u32 { - return (); + return ((data & 0xFFF) as u32); } pub const PATTERN_NORMAL: u32 = 0; @@ -72,16 +72,13 @@ pub fn is_traffic_high(stats: u32) -> bool { } pub fn is_traffic_normal(stats: u32) -> bool { - let; - total = calculate_total_traffic(stats); + let total = calculate_total_traffic(stats); return ((total >= TRAFFIC_LOW) && (total <= TRAFFIC_HIGH)); } pub fn calculate_error_rate(stats: u32) -> u32 { - let; - packets = get_packet_count(stats); - let; - errors = get_error_count(stats); + let packets = get_packet_count(stats); + let errors = get_error_count(stats); if (packets == 0) { return 0; } @@ -93,8 +90,8 @@ pub fn is_high_error_rate(stats: u32) -> bool { } pub fn detect_pattern(stats: u32, previous_stats: u32) -> u32 { - let; - let; + let current_total = calculate_total_traffic(stats); + let previous_total = calculate_total_traffic(previous_stats); if (current_total > (previous_total + ANOMALY_THRESHOLD)) { return PATTERN_SPIKE; } @@ -108,30 +105,22 @@ pub fn detect_pattern(stats: u32, previous_stats: u32) -> u32 { } pub fn update_traffic(stats: u32, sent_add: u32, recv_add: u32, packets_add: u32, errors_add: u32) -> u32 { - let; - sent = get_bytes_sent(stats); - let; - recv = get_bytes_recv(stats); - let; - packets = get_packet_count(stats); - let; - errors = get_error_count(stats); + let sent = get_bytes_sent(stats); + let recv = get_bytes_recv(stats); + let packets = get_packet_count(stats); + let errors = get_error_count(stats); return create_traffic_stats((sent + sent_add), (recv + recv_add), (packets + packets_add), (errors + errors_add)); } pub fn needs_attention(data: u64) -> bool { - let; - pattern = get_analysis_pattern(data); - let; - traffic = get_analysis_traffic(data); - let; - stats = traffic; + let pattern = get_analysis_pattern(data); + let traffic = get_analysis_traffic(data); + let stats = traffic; return ((pattern != PATTERN_NORMAL) || is_high_error_rate(stats)); } pub fn calculate_utilization(stats: u32, max_capacity: u32) -> u32 { - let; - total = calculate_total_traffic(stats); + let total = calculate_total_traffic(stats); if (max_capacity == 0) { return 0; } diff --git a/gen/rust/network_coding.rs b/gen/rust/network_coding.rs index 56d8b60..dee9fcc 100644 --- a/gen/rust/network_coding.rs +++ b/gen/rust/network_coding.rs @@ -52,38 +52,28 @@ pub fn xor_packets(pkt1: u32, pkt2: u32) -> u32 { } pub fn create_xoded_native(pkt1: u32, pkt2: u32, generation: u32, seq: u32) -> u32 { - let; - coded_payload = xor_packets(get_packet_payload(pkt1), get_packet_payload(pkt2)); - let; - coeff = 0b11; + let coded_payload = xor_packets(get_packet_payload(pkt1), get_packet_payload(pkt2)); + let coeff = 0b11; return create_coded_packet(coeff, coded_payload, generation, seq); } pub fn decode_xoded_packet(coded: u32, known_pkt: u32) -> u32 { - let; - coded_payload = get_coded_payload(coded); - let; - known_payload = get_packet_payload(known_pkt); - let; - decoded_payload = (coded_payload ^ known_payload); + let coded_payload = get_coded_payload(coded); + let known_payload = get_packet_payload(known_pkt); + let decoded_payload = (coded_payload ^ known_payload); return create_packet(get_packet_src(known_pkt), get_packet_dst(known_pkt), decoded_payload, get_coded_seq(coded)); } pub fn same_generation(pkt1: u32, pkt2: u32) -> bool { - let; - seq1 = get_packet_seq(pkt1); - let; - seq2 = get_packet_seq(pkt2); - let; - gen1 = (seq1 / MAX_GENERATION_SIZE); - let; - gen2 = (seq2 / MAX_GENERATION_SIZE); + let seq1 = get_packet_seq(pkt1); + let seq2 = get_packet_seq(pkt2); + let gen1 = (seq1 / MAX_GENERATION_SIZE); + let gen2 = (seq2 / MAX_GENERATION_SIZE); return (gen1 == gen2); } pub fn get_generation_id(packet: u32) -> u32 { - let; - seq = get_packet_seq(packet); + let seq = get_packet_seq(packet); return (seq / MAX_GENERATION_SIZE); } @@ -92,8 +82,7 @@ pub fn is_coding_beneficial(pkt1: u32, pkt2: u32, next_hop1: u32, next_hop2: u32 } pub fn linear_code_packets(pkt1: u32, pkt2: u32, coeff1: u32, coeff2: u32) -> u32 { - let; - result = 0; + let mut result = 0; if ((coeff1 & 1) == 1) { result = (result ^ pkt1); } @@ -104,25 +93,24 @@ pub fn linear_code_packets(pkt1: u32, pkt2: u32, coeff1: u32, coeff2: u32) -> u3 } pub fn create_coded_generation(p0: u32, p1: u32, p2: u32, p3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((p0 as u64) << 48) | ((p1 as u64) << 32)) | ((p2 as u64) << 16)) | (p3 as u64)); } pub fn get_coded_packet_gen(gen: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((gen >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((gen >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((gen >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((gen & 0xFFFFFFFF) as u32); } pub fn count_generation_packets(gen: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_coded_packet_gen(gen, 0) != 0) { count = (count + 1); } @@ -139,7 +127,7 @@ pub fn count_generation_packets(gen: u64) -> u32 { } pub fn is_generation_decodable(gen: u64, original_count: u32) -> u32 { - let; + let coded_count = count_generation_packets(gen); if (coded_count >= original_count) { return 1; } diff --git a/gen/rust/network_metrics.rs b/gen/rust/network_metrics.rs index a899578..80fadcf 100644 --- a/gen/rust/network_metrics.rs +++ b/gen/rust/network_metrics.rs @@ -30,7 +30,7 @@ pub fn success_rate(sent: u32, success: u32) -> u8 { return 100; } if (sent >= success) { - return (); + return ((((success as u16) * 100) / (sent as u16)) as u8); } else { return 0; } diff --git a/gen/rust/network_orchestrator.rs b/gen/rust/network_orchestrator.rs index 49f3790..82ad975 100644 --- a/gen/rust/network_orchestrator.rs +++ b/gen/rust/network_orchestrator.rs @@ -68,20 +68,15 @@ pub const STATE_EXECUTING: u32 = 3; pub const STATE_COMPLETED: u32 = 4; pub fn initiate_coordination(current_state: u32, coordinator_id: u32, current_time: u32) -> u32 { - let; - timeout; + let timeout: u32 = (current_time + COORDINATION_TIMEOUT); return create_coordination_state(coordinator_id, STATE_INITIATING, 0, timeout); } pub fn advance_phase(state: u32) -> u32 { - let; - coordinator_id; - let; - coord_state; - let; - phase; - let; - timeout; + let coordinator_id: u32 = get_coordinator_id(state); + let coord_state: u32 = get_coordination_state(state); + let phase: u32 = get_coordination_phase(state); + let timeout: u32 = get_coordination_timeout(state); if (coord_state == STATE_INITIATING) { return create_coordination_state(coordinator_id, STATE_NEGOTIATING, (phase + 1), timeout); } else { @@ -102,8 +97,7 @@ pub fn advance_phase(state: u32) -> u32 { } pub fn is_coordination_complete(state: u32) -> u32 { - let; - coord_state; + let coord_state: u32 = get_coordination_state(state); if (coord_state == STATE_COMPLETED) { return 1; } else { @@ -112,10 +106,8 @@ pub fn is_coordination_complete(state: u32) -> u32 { } pub fn is_coordination_timeout(state: u32, current_time: u32) -> u32 { - let; - timeout; - let; - coord_state; + let timeout: u32 = get_coordination_timeout(state); + let coord_state: u32 = get_coordination_state(state); if ((coord_state != STATE_IDLE) && (coord_state != STATE_COMPLETED)) { if (current_time >= timeout) { return 1; @@ -124,17 +116,14 @@ pub fn is_coordination_timeout(state: u32, current_time: u32) -> u32 { return 0; } -pub fn apply_policy(policies: Vec<>, policy_id: u32, node_id: u32) -> u32 { - let; - i; +pub fn apply_policy(policies: [u32; MAX_POLICIES as usize], policy_id: u32, node_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_POLICIES) { - let; - current_policy_id; - let; - scope; + let current_policy_id: u32 = get_policy_id(policies[(i) as usize]); + let scope: u32 = get_policy_scope(policies[(i) as usize]); if (current_policy_id == policy_id) { if ((scope == SCOPE_NODE) || (scope == SCOPE_GLOBAL)) { - return get_policy_parameter(policies[i]); + return get_policy_parameter(policies[(i) as usize]); } } i = (i + 1); @@ -142,18 +131,13 @@ pub fn apply_policy(policies: Vec<>, policy_id: u32, node_id: u32) -> u32 { return 0; } -pub fn find_highest_priority_policy(policies: Vec<>, scope: u32) -> u32 { - let; - highest_priority; - let; - policy_index; - let; - i; +pub fn find_highest_priority_policy(policies: [u32; MAX_POLICIES as usize], scope: u32) -> u32 { + let mut highest_priority: u32 = 0; + let mut policy_index: u32 = MAX_POLICIES; + let mut i: u32 = 0; while (i < MAX_POLICIES) { - let; - policy_scope; - let; - priority; + let policy_scope: u32 = get_policy_scope(policies[(i) as usize]); + let priority: u32 = get_policy_priority(policies[(i) as usize]); if ((policy_scope == scope) || (policy_scope == SCOPE_GLOBAL)) { if (priority > highest_priority) { highest_priority = priority; @@ -193,11 +177,9 @@ pub const OPT_LATENCY_REDUCTION: u32 = 2; pub const OPT_BANDWIDTH_MAXIMIZATION: u32 = 3; -pub fn process_optimization(request: u32, policies: Vec<>) -> u32 { - let; - opt_type; - let; - target; +pub fn process_optimization(request: u32, policies: [u32; MAX_POLICIES as usize]) -> u32 { + let opt_type: u32 = get_optimization_type(request); + let target: u32 = get_optimization_target(request); if (opt_type == OPT_LOAD_BALANCE) { return apply_policy(policies, 1, target); } else { @@ -246,12 +228,9 @@ pub const ACTION_BANDWIDTH_ALLOCATE: u32 = 2; pub const ACTION_QOS_SET: u32 = 3; pub fn execute_action(action: u32, current_time: u32) -> u32 { - let; - action_type; - let; - target; - let; - parameter; + let action_type: u32 = get_action_type(action); + let target: u32 = get_action_target(action); + let parameter: u32 = get_action_parameter(action); if (action_type == ACTION_ROUTE_UPDATE) { return 1; } else { @@ -271,21 +250,17 @@ pub fn execute_action(action: u32, current_time: u32) -> u32 { } } -pub fn coordinate_nodes(node_states: Vec<>, node_count: u32, coordinator_id: u32, current_time: u32) -> u32 { - let; - coord_state; - let; - participating_nodes; - let; - i; +pub fn coordinate_nodes(node_states: [u32; MAX_NODES as usize], node_count: u32, coordinator_id: u32, current_time: u32) -> u32 { + let coord_state: u32 = initiate_coordination(0, coordinator_id, current_time); + let mut participating_nodes: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - if (node_states[i] != 0) { + if (node_states[(i) as usize] != 0) { participating_nodes = (participating_nodes + 1); } i = (i + 1); } - let; - required_nodes; + let required_nodes: u32 = ((node_count / 2) + 1); if (participating_nodes >= required_nodes) { return advance_phase(coord_state); } else { @@ -293,13 +268,11 @@ pub fn coordinate_nodes(node_states: Vec<>, node_count: u32, coordinator_id: u32 } } -pub fn calculate_optimization_score(metrics: Vec<>, metric_count: u32) -> u32 { - let; - total_score; - let; - i; +pub fn calculate_optimization_score(metrics: [u32; MAX_NODES as usize], metric_count: u32) -> u32 { + let mut total_score: u32 = 0; + let mut i: u32 = 0; while (i < metric_count) { - total_score = (total_score + metrics[i]); + total_score = (total_score + metrics[(i) as usize]); i = (i + 1); } if (metric_count > 0) { @@ -309,11 +282,9 @@ pub fn calculate_optimization_score(metrics: Vec<>, metric_count: u32) -> u32 { } } -pub fn detect_optimization_opportunity(load_metrics: Vec<>, energy_metrics: Vec<>, node_count: u32) -> u32 { - let; - load_score; - let; - energy_score; +pub fn detect_optimization_opportunity(load_metrics: [u32; MAX_NODES as usize], energy_metrics: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let load_score: u32 = calculate_optimization_score(load_metrics, node_count); + let energy_score: u32 = calculate_optimization_score(energy_metrics, node_count); if ((load_score > 70) || (energy_score < 30)) { return 1; } else { @@ -325,13 +296,11 @@ pub fn generate_optimization_plan(opportunity_type: u32, affected_nodes: u32) -> return create_optimization_request(0, opportunity_type, affected_nodes, 50); } -pub fn monitor_network_health(node_states: Vec<>, node_count: u32) -> u32 { - let; - healthy_nodes; - let; - i; +pub fn monitor_network_health(node_states: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let mut healthy_nodes: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - if (node_states[i] != 0) { + if (node_states[(i) as usize] != 0) { healthy_nodes = (healthy_nodes + 1); } i = (i + 1); diff --git a/gen/rust/network_simulator.rs b/gen/rust/network_simulator.rs index f08ab5d..c890345 100644 --- a/gen/rust/network_simulator.rs +++ b/gen/rust/network_simulator.rs @@ -70,33 +70,24 @@ pub const NODE_FAILED: u32 = 2; pub const NODE_SLEEPING: u32 = 3; pub fn update_node_status(state: u32, new_status: u32) -> u32 { - let; - node_id; - let; - energy; - let; - position; + let node_id: u32 = get_node_id(state); + let energy: u32 = get_node_energy(state); + let position: u32 = get_node_position(state); return create_node_state(node_id, new_status, energy, position); } pub fn update_node_energy(state: u32, energy_delta: u32) -> u32 { - let; - node_id; - let; - status; - let; - energy; - let; - position; - let; - new_energy; + let node_id: u32 = get_node_id(state); + let status: u32 = get_node_status(state); + let energy: u32 = get_node_energy(state); + let position: u32 = get_node_position(state); + let mut new_energy: u32 = energy; if (energy_delta > energy) { new_energy = 0; } else { new_energy = (energy - energy_delta); } - let; - new_status; + let mut new_status: u32 = status; if ((new_energy == 0) && (status == NODE_ACTIVE)) { new_status = NODE_FAILED; } @@ -124,18 +115,14 @@ pub fn get_link_latency(link: u32) -> u32 { } pub fn update_link_quality(link: u32, new_quality: u32) -> u32 { - let; - source; - let; - dest; - let; - latency; + let source: u32 = get_link_source(link); + let dest: u32 = get_link_dest(link); + let latency: u32 = get_link_latency(link); return create_link_state(source, dest, new_quality, latency); } pub fn is_link_operational(link: u32) -> u32 { - let; - quality; + let quality: u32 = get_link_quality(link); if (quality >= 30) { return 1; } else { @@ -168,12 +155,9 @@ pub fn get_packet_sequence(packet: u32) -> u32 { } pub fn calculate_transmission_time(packet: u32, link: u32) -> u32 { - let; - size; - let; - latency; - let; - transmission_time; + let size: u32 = get_packet_size(packet); + let latency: u32 = get_link_latency(link); + let transmission_time: u32 = (latency + (size / 10)); return transmission_time; } @@ -194,22 +178,16 @@ pub fn get_sim_node_count(state: u32) -> u32 { } pub fn advance_simulation(state: u32, time_delta: u32) -> u32 { - let; - current_time; - let; - event_count; - let; - node_count; - let; - new_time; + let current_time: u32 = get_sim_time(state); + let event_count: u32 = get_sim_event_count(state); + let node_count: u32 = get_sim_node_count(state); + let new_time: u32 = (current_time + time_delta); return create_sim_state(new_time, event_count, node_count); } -pub fn process_event(event: u32, node_states: Vec<>, link_states: Vec<>) -> u32 { - let; - event_type; - let; - node_id; +pub fn process_event(event: u32, node_states: [u32; MAX_NODES as usize], link_states: [u32; MAX_NODES as usize]) -> u32 { + let event_type: u32 = get_event_type(event); + let node_id: u32 = get_event_node_id(event); if (event_type == EVENT_PACKET_SEND) { return 1; } else { @@ -217,9 +195,8 @@ pub fn process_event(event: u32, node_states: Vec<>, link_states: Vec<>) -> u32 return 1; } else { if (event_type == EVENT_NODE_FAILURE) { - let; - current_state; - node_states[node_id] = update_node_status(current_state, NODE_FAILED); + let current_state: u32 = node_states[(node_id) as usize]; + node_states[(node_id) as usize] = update_node_status(current_state, NODE_FAILED); return 1; } else { if (event_type == EVENT_LINK_FAILURE) { @@ -257,10 +234,8 @@ pub fn get_total_latency(stats: u32) -> u32 { } pub fn calculate_delivery_ratio(stats: u32) -> u32 { - let; - sent; - let; - recv; + let sent: u32 = get_packets_sent(stats); + let recv: u32 = get_packets_recv(stats); if (sent > 0) { return ((recv * 100) / sent); } else { @@ -269,10 +244,8 @@ pub fn calculate_delivery_ratio(stats: u32) -> u32 { } pub fn calculate_average_latency(stats: u32) -> u32 { - let; - recv; - let; - total_latency; + let recv: u32 = get_packets_recv(stats); + let total_latency: u32 = get_total_latency(stats); if (recv > 0) { return (total_latency / recv); } else { @@ -281,19 +254,17 @@ pub fn calculate_average_latency(stats: u32) -> u32 { } pub fn create_topology(node_count: u32, density: u32) -> u32 { - let; - link_count; + let mut link_count: u32 = ((node_count * density) / 100); if (link_count > ((node_count * (node_count - 1)) / 2)) { link_count = ((node_count * (node_count - 1)) / 2); } return link_count; } -pub fn inject_fault(fault_type: u32, target_id: u32, node_states: Vec<>) -> u32 { +pub fn inject_fault(fault_type: u32, target_id: u32, node_states: [u32; MAX_NODES as usize]) -> u32 { if (fault_type == EVENT_NODE_FAILURE) { - let; - current_state; - node_states[target_id] = update_node_status(current_state, NODE_FAILED); + let current_state: u32 = node_states[(target_id) as usize]; + node_states[(target_id) as usize] = update_node_status(current_state, NODE_FAILED); return 1; } else { if (fault_type == EVENT_LINK_FAILURE) { @@ -304,32 +275,25 @@ pub fn inject_fault(fault_type: u32, target_id: u32, node_states: Vec<>) -> u32 } } -pub fn run_simulation_step(state: u32, events: Vec<>, event_count: u32, node_states: Vec<>, link_states: Vec<>) -> u32 { - let; - current_time; - let; - processed_count; - let; - i; +pub fn run_simulation_step(state: u32, events: [u32; MAX_EVENTS as usize], event_count: u32, node_states: [u32; MAX_NODES as usize], link_states: [u32; MAX_NODES as usize]) -> u32 { + let current_time: u32 = get_sim_time(state); + let mut processed_count: u32 = 0; + let mut i: u32 = 0; while (i < event_count) { - let; - event_time; + let event_time: u32 = get_event_timestamp(events[(i) as usize]); if (event_time <= current_time) { - process_event(events[i], node_states, link_states); + process_event(events[(i) as usize], node_states, link_states); processed_count = (processed_count + 1); } i = (i + 1); } - let; - new_state; + let new_state: u32 = advance_simulation(state, SIMULATION_TICK_MS); return create_sim_state(get_sim_time(new_state), (get_sim_event_count(new_state) - processed_count), get_sim_node_count(new_state)); } pub fn generate_simulation_report(stats: u32, duration: u32, node_count: u32) -> u32 { - let; - delivery_ratio; - let; - avg_latency; + let delivery_ratio: u32 = calculate_delivery_ratio(stats); + let avg_latency: u32 = calculate_average_latency(stats); return (((((delivery_ratio & 0xFF) << 24) | ((avg_latency & 0xFF) << 16)) | ((duration & 0xFF) << 8)) | (node_count & 0xFF)); } diff --git a/gen/rust/olsr_routing.rs b/gen/rust/olsr_routing.rs index dbcb5b9..473744f 100644 --- a/gen/rust/olsr_routing.rs +++ b/gen/rust/olsr_routing.rs @@ -64,13 +64,13 @@ pub fn find_index(table: u32, target_id: u32) -> u32 { pub fn set_entry(table: u32, index: u32, new_entry: u32) -> u32 { if (index == 0) { - return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | (() << 192)); + return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | ((new_entry as u64) << 192)); } else { if (index == 1) { - return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | (() << 128)); + return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | ((new_entry as u64) << 128)); } else { if (index == 2) { - return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | (() << 64)); + return ((table & 0xFFFFFFFFFFFFFFFF0000000000000000) | ((new_entry as u64) << 64)); } else { return (table & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); } @@ -106,10 +106,8 @@ pub fn get_second_best(table: u32, best_id: u32) -> u32 { } pub fn select_mprs(table: u32) -> u32 { - let; - best = get_best_neighbor(table); - let; - second = get_second_best(table, best); + let best = get_best_neighbor(table); + let second = get_second_best(table, best); return (((best & 0xFF) << 8) | (second & 0xFF)); } diff --git a/gen/rust/packet_loss_injection.rs b/gen/rust/packet_loss_injection.rs index 4f2b9a4..fbfa074 100644 --- a/gen/rust/packet_loss_injection.rs +++ b/gen/rust/packet_loss_injection.rs @@ -22,7 +22,7 @@ pub fn inject_bit_flip(packet: u32, bit_pos: u8) -> u32 { } pub fn calculate_crc(packet: u32) -> u16 { - return (); + return ((((((packet >> 24) & 0xFF) + ((packet >> 16) & 0xFF)) + ((packet >> 8) & 0xFF)) + (packet & 0xFF)) as u16); } pub fn verify_crc(packet: u32, received_crc: u16) -> bool { diff --git a/gen/rust/packet_queue.rs b/gen/rust/packet_queue.rs index 0ae4f77..0157cd8 100644 --- a/gen/rust/packet_queue.rs +++ b/gen/rust/packet_queue.rs @@ -4,7 +4,7 @@ pub const QUEUE_SIZE: u8 = 8; pub fn get_count(state: u32) -> u8 { - return (); + return (((state >> 6) & 255) as u8); } pub fn is_full(state: u32) -> bool { diff --git a/gen/rust/pattern_predictor.rs b/gen/rust/pattern_predictor.rs index ccd4892..205f383 100644 --- a/gen/rust/pattern_predictor.rs +++ b/gen/rust/pattern_predictor.rs @@ -44,7 +44,7 @@ pub fn get_trend_direction(storage: u32) -> u32 { } pub fn create_sample_array(s0: u32, s1: u32, s2: u32, s3: u32, s4: u32, s5: u32, s6: u32, s7: u32, s8: u32, s9: u32, s10: u32, s11: u32, s12: u32, s13: u32, s14: u32, s15: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((s0 as u64) << 56) | ((s1 as u64) << 48)) | ((s2 as u64) << 40)) | ((s3 as u64) << 32)) | ((s4 as u64) << 24)) | ((s5 as u64) << 16)) | ((s6 as u64) << 8)) | (s7 as u64)); } pub fn get_sample_array_upper(array: u64) -> u64 { unimplemented!() } @@ -55,21 +55,17 @@ pub fn get_sample_array_lower(array: u64) -> u32 { pub fn get_sample_at(array: u64, index: u32) -> u32 { if (index < 8) { - let; - lower = get_sample_array_lower(array); - return (); + let lower = get_sample_array_lower(array); + return (((lower >> ((7 - index) * 8)) & 0xFF) as u32); } else { - let; - upper = get_sample_array_upper(array); - return (); + let upper = get_sample_array_upper(array); + return (((upper >> ((15 - index) * 8)) & 0xFF) as u32); } } pub fn calculate_moving_average(array: u64, window: u32) -> u32 { - let; - sum = 0; - let; - count = window; + let mut sum = 0; + let mut count = window; if (count > 16) { count = 16; } @@ -102,8 +98,8 @@ pub fn detect_trend(array: u64, samples: u32) -> u32 { if (samples < 2) { return 0; } - let; - let; + let first = get_sample_value(get_sample_at(array, 0)); + let last = get_sample_value(get_sample_at(array, (samples - 1))); if (last > (first + 5)) { return 1; } else { @@ -116,14 +112,13 @@ pub fn detect_trend(array: u64, samples: u32) -> u32 { } pub fn predict_next_value(array: u64, samples: u32) -> u32 { - let; - let; + let trend = detect_trend(array, samples); + let current = get_sample_value(get_sample_at(array, (samples - 1))); if (trend == 1) { return (current + 10); } else { if (trend == 2) { - let; - predicted = (current - 10); + let mut predicted = (current - 10); if (predicted < 0) { predicted = 0; } @@ -135,7 +130,7 @@ pub fn predict_next_value(array: u64, samples: u32) -> u32 { } pub fn is_anomalous(array: u64, samples: u32, current_value: u32) -> u32 { - let; + let predicted = predict_next_value(array, samples); if (predicted > current_value) { return (predicted - current_value); } else { @@ -147,18 +142,16 @@ pub fn detect_repeating_pattern(array: u64, samples: u32) -> u32 { if (samples < 4) { return 0; } - let; - let; - let; - let; + let v0 = get_sample_value(get_sample_at(array, 0)); + let v1 = get_sample_value(get_sample_at(array, 1)); + let v2 = get_sample_value(get_sample_at(array, 2)); + let v3 = get_sample_value(get_sample_at(array, 3)); if (((v0 == v2) && (v1 == v3)) && (v0 != v1)) { return 1; } if (samples >= 6) { - let; - v4 = get_sample_value(get_sample_at(array, 4)); - let; - v5 = get_sample_value(get_sample_at(array, 5)); + let v4 = get_sample_value(get_sample_at(array, 4)); + let v5 = get_sample_value(get_sample_at(array, 5)); if (((v0 == v3) && (v1 == v4)) && (v2 == v5)) { return 1; } @@ -170,27 +163,22 @@ pub fn calculate_variance(array: u64, samples: u32) -> u32 { if (samples < 2) { return 0; } - let; - let; - sum_sq_diff = 0; + let avg = calculate_moving_average(array, samples); + let mut sum_sq_diff = 0; if (samples >= 1) { - let; - diff = (get_sample_value(get_sample_at(array, 0)) - avg); + let diff = (get_sample_value(get_sample_at(array, 0)) - avg); sum_sq_diff = (sum_sq_diff + (diff * diff)); } if (samples >= 2) { - let; - diff = (get_sample_value(get_sample_at(array, 1)) - avg); + let diff = (get_sample_value(get_sample_at(array, 1)) - avg); sum_sq_diff = (sum_sq_diff + (diff * diff)); } if (samples >= 3) { - let; - diff = (get_sample_value(get_sample_at(array, 2)) - avg); + let diff = (get_sample_value(get_sample_at(array, 2)) - avg); sum_sq_diff = (sum_sq_diff + (diff * diff)); } if (samples >= 4) { - let; - diff = (get_sample_value(get_sample_at(array, 3)) - avg); + let diff = (get_sample_value(get_sample_at(array, 3)) - avg); sum_sq_diff = (sum_sq_diff + (diff * diff)); } if (samples < 2) { diff --git a/gen/rust/performance_profiler.rs b/gen/rust/performance_profiler.rs index 9807d14..3840f11 100644 --- a/gen/rust/performance_profiler.rs +++ b/gen/rust/performance_profiler.rs @@ -65,16 +65,13 @@ pub fn get_hotspot_impact(hotspot: u32) -> u32 { return (hotspot & 0xFF); } -pub fn calculate_average_cpu(samples: Vec<>, sample_count: u32, func_id: u32) -> u32 { - let; - total_cpu; - let; - matching_samples; - let; - i; +pub fn calculate_average_cpu(samples: [u32; MAX_SAMPLES as usize], sample_count: u32, func_id: u32) -> u32 { + let mut total_cpu: u32 = 0; + let mut matching_samples: u32 = 0; + let mut i: u32 = 0; while (i < sample_count) { - if (get_sample_function_id(samples[i]) == func_id) { - total_cpu = (total_cpu + get_sample_cpu(samples[i])); + if (get_sample_function_id(samples[(i) as usize]) == func_id) { + total_cpu = (total_cpu + get_sample_cpu(samples[(i) as usize])); matching_samples = (matching_samples + 1); } i = (i + 1); @@ -86,16 +83,13 @@ pub fn calculate_average_cpu(samples: Vec<>, sample_count: u32, func_id: u32) -> } } -pub fn calculate_average_memory(samples: Vec<>, sample_count: u32, func_id: u32) -> u32 { - let; - total_memory; - let; - matching_samples; - let; - i; +pub fn calculate_average_memory(samples: [u32; MAX_SAMPLES as usize], sample_count: u32, func_id: u32) -> u32 { + let mut total_memory: u32 = 0; + let mut matching_samples: u32 = 0; + let mut i: u32 = 0; while (i < sample_count) { - if (get_sample_function_id(samples[i]) == func_id) { - total_memory = (total_memory + get_sample_memory(samples[i])); + if (get_sample_function_id(samples[(i) as usize]) == func_id) { + total_memory = (total_memory + get_sample_memory(samples[(i) as usize])); matching_samples = (matching_samples + 1); } i = (i + 1); @@ -107,29 +101,22 @@ pub fn calculate_average_memory(samples: Vec<>, sample_count: u32, func_id: u32) } } -pub fn identify_hotspots(profiles: Vec<>, profile_count: u32) -> u32 { - let; - max_calls; - let; - max_cpu; - let; - hotspot_func; - let; - i; +pub fn identify_hotspots(profiles: [u32; MAX_FUNCTIONS as usize], profile_count: u32) -> u32 { + let mut max_calls: u32 = 0; + let mut max_cpu: u32 = 0; + let mut hotspot_func: u32 = 0; + let mut i: u32 = 0; while (i < profile_count) { - let; - calls; - let; - cpu; + let calls: u32 = get_profile_call_count(profiles[(i) as usize]); + let cpu: u32 = get_profile_total_cpu(profiles[(i) as usize]); if ((calls > max_calls) || ((calls == max_calls) && (cpu > max_cpu))) { max_calls = calls; max_cpu = cpu; - hotspot_func = get_profile_function_id(profiles[i]); + hotspot_func = get_profile_function_id(profiles[(i) as usize]); } i = (i + 1); } - let; - score; + let mut score: u32 = ((max_calls * 10) + max_cpu); if (score > 255) { score = 255; } @@ -140,10 +127,8 @@ pub fn calculate_profiling_overhead(base_runtime: u32, profiled_runtime: u32) -> if (base_runtime == 0) { return 0; } - let; - overhead; - let; - overhead_percentage; + let overhead: u32 = (profiled_runtime - base_runtime); + let overhead_percentage: u32 = ((overhead * 100) / base_runtime); return overhead_percentage; } @@ -175,12 +160,11 @@ pub fn get_allocation_pool(alloc: u32) -> u32 { return (alloc & 0xFF); } -pub fn track_allocation(allocations: Vec<>, alloc_id: u32, size: u32, pool: u32) -> u32 { - let; - i; +pub fn track_allocation(allocations: [u32; MAX_SAMPLES as usize], alloc_id: u32, size: u32, pool: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_SAMPLES) { - if (get_allocation_id(allocations[i]) == 0) { - allocations[i] = create_allocation(alloc_id, size, 255, pool); + if (get_allocation_id(allocations[(i) as usize]) == 0) { + allocations[(i) as usize] = create_allocation(alloc_id, size, 255, pool); return 1; } i = (i + 1); @@ -188,24 +172,20 @@ pub fn track_allocation(allocations: Vec<>, alloc_id: u32, size: u32, pool: u32) return 0; } -pub fn calculate_total_memory(allocations: Vec<>, sample_count: u32) -> u32 { - let; - total_memory; - let; - i; +pub fn calculate_total_memory(allocations: [u32; MAX_SAMPLES as usize], sample_count: u32) -> u32 { + let mut total_memory: u32 = 0; + let mut i: u32 = 0; while (i < sample_count) { - let; - size; + let size: u32 = get_allocation_size(allocations[(i) as usize]); total_memory = (total_memory + size); i = (i + 1); } return total_memory; } -pub fn detect_memory_leak(allocations: Vec<>, current_count: u32, previous_count: u32) -> u32 { +pub fn detect_memory_leak(allocations: [u32; MAX_SAMPLES as usize], current_count: u32, previous_count: u32) -> u32 { if (current_count > previous_count) { - let; - growth; + let growth: u32 = (current_count - previous_count); if (growth > 5) { return 1; } @@ -233,26 +213,20 @@ pub fn get_stack_cpu_contribution(entry: u32) -> u32 { return (entry & 0xFF); } -pub fn analyze_call_tree(call_stack: Vec<>, stack_size: u32) -> u32 { - let; - max_depth; - let; - total_cpu; - let; - i; +pub fn analyze_call_tree(call_stack: [u32; MAX_SAMPLES as usize], stack_size: u32) -> u32 { + let mut max_depth: u32 = 0; + let mut total_cpu: u32 = 0; + let mut i: u32 = 0; while (i < stack_size) { - let; - depth; - let; - cpu; + let depth: u32 = get_stack_depth(call_stack[(i) as usize]); + let cpu: u32 = get_stack_cpu_contribution(call_stack[(i) as usize]); if (depth > max_depth) { max_depth = depth; } total_cpu = (total_cpu + cpu); i = (i + 1); } - let; - avg_cpu; + let mut avg_cpu: u32 = 0; if (max_depth > 0) { avg_cpu = (total_cpu / max_depth); } @@ -280,20 +254,13 @@ pub fn get_report_overhead(report: u32) -> u32 { } pub fn generate_recommendations(report: u32, hotspot: u32) -> u32 { - let; - total_cpu; - let; - hotspot_score; - let; - overhead; - let; - rec_optimize_cpu; - let; - rec_optimize_memory; - let; - rec_reduce_overhead; - let; - rec_parallelize; + let total_cpu: u32 = get_report_total_cpu(report); + let hotspot_score: u32 = get_hotspot_score(hotspot); + let overhead: u32 = get_report_overhead(report); + let mut rec_optimize_cpu: u32 = 0; + let rec_optimize_memory: u32 = 0; + let mut rec_reduce_overhead: u32 = 0; + let mut rec_parallelize: u32 = 0; if (total_cpu > 80) { rec_optimize_cpu = 1; } @@ -310,10 +277,8 @@ pub fn calculate_improvement_opportunity(current_performance: u32, target_perfor if (current_performance >= target_performance) { return 0; } - let; - gap; - let; - opportunity; + let gap: u32 = (target_performance - current_performance); + let opportunity: u32 = ((gap * 100) / target_performance); return opportunity; } diff --git a/gen/rust/power_monitoring.rs b/gen/rust/power_monitoring.rs index c699e2a..d8089a1 100644 --- a/gen/rust/power_monitoring.rs +++ b/gen/rust/power_monitoring.rs @@ -40,8 +40,7 @@ pub fn is_battery_critical(state: u32) -> bool { } pub fn is_battery_low(state: u32) -> bool { - let; - battery = get_battery_level(state); + let battery = get_battery_level(state); return ((battery > BATTERY_CRITICAL) && (battery <= BATTERY_LOW)); } @@ -50,10 +49,8 @@ pub fn is_battery_healthy(state: u32) -> bool { } pub fn estimate_remaining_time(state: u32) -> u32 { - let; - battery = get_battery_level(state); - let; - consumption = get_consumption(state); + let battery = get_battery_level(state); + let consumption = get_consumption(state); if (consumption == 0) { return 0xFF; } @@ -61,14 +58,10 @@ pub fn estimate_remaining_time(state: u32) -> u32 { } pub fn update_power_mode(state: u32) -> u32 { - let; - battery = get_battery_level(state); - let; - consumption = get_consumption(state); - let; - uptime = get_uptime(state); - let; - new_mode = POWER_NORMAL; + let battery = get_battery_level(state); + let consumption = get_consumption(state); + let uptime = get_uptime(state); + let mut new_mode = POWER_NORMAL; if (battery <= BATTERY_CRITICAL) { new_mode = POWER_EMERGENCY; } else { @@ -80,16 +73,11 @@ pub fn update_power_mode(state: u32) -> u32 { } pub fn reduce_consumption(state: u32, reduction: u32) -> u32 { - let; - battery = get_battery_level(state); - let; - mode = get_power_mode(state); - let; - current_consumption = get_consumption(state); - let; - uptime = get_uptime(state); - let; - new_consumption = (current_consumption - reduction); + let battery = get_battery_level(state); + let mode = get_power_mode(state); + let current_consumption = get_consumption(state); + let uptime = get_uptime(state); + let mut new_consumption = (current_consumption - reduction); if (new_consumption < 1) { new_consumption = 1; } @@ -97,16 +85,11 @@ pub fn reduce_consumption(state: u32, reduction: u32) -> u32 { } pub fn drain_battery(state: u32, amount: u32) -> u32 { - let; - battery = get_battery_level(state); - let; - mode = get_power_mode(state); - let; - consumption = get_consumption(state); - let; - uptime = get_uptime(state); - let; - new_battery = (battery - amount); + let battery = get_battery_level(state); + let mode = get_power_mode(state); + let consumption = get_consumption(state); + let uptime = get_uptime(state); + let mut new_battery = (battery - amount); if (new_battery < 0) { new_battery = 0; } @@ -114,7 +97,7 @@ pub fn drain_battery(state: u32, amount: u32) -> u32 { } pub fn get_power_priority(state: u32) -> u32 { - let; + let battery = get_battery_level(state); if (battery <= BATTERY_CRITICAL) { return 3; } else { @@ -127,7 +110,7 @@ pub fn get_power_priority(state: u32) -> u32 { } pub fn should_sleep(state: u32, current_time: u32, sleep_start: u32, sleep_end: u32) -> bool { - let; + let battery = get_battery_level(state); if (battery <= BATTERY_CRITICAL) { return ((current_time >= sleep_start) && (current_time <= sleep_end)); } diff --git a/gen/rust/production_scenarios.rs b/gen/rust/production_scenarios.rs index a0509c1..b01d0d9 100644 --- a/gen/rust/production_scenarios.rs +++ b/gen/rust/production_scenarios.rs @@ -12,11 +12,11 @@ pub const STATE_PARTITIONED: u8 = 3; pub const STATE_RECOVERING: u8 = 4; pub fn create_node_state(state: u8, neighbors: u32, uptime: u32) -> u32 { - return ((((() & 0xFF) << 24) | ((neighbors & 0xFF) << 16)) | (uptime & 0xFFFF)); + return (((((state as u32) & 0xFF) << 24) | ((neighbors & 0xFF) << 16)) | (uptime & 0xFFFF)); } pub fn node_state(state: u32) -> u8 { - return (); + return (((state >> 24) & 0xFF) as u8); } pub fn node_neighbors(state: u32) -> u32 { diff --git a/gen/rust/quarantine_manager.rs b/gen/rust/quarantine_manager.rs index da38af5..808ecb6 100644 --- a/gen/rust/quarantine_manager.rs +++ b/gen/rust/quarantine_manager.rs @@ -38,8 +38,7 @@ pub const STATUS_SUSPENDED: u32 = 2; pub const STATUS_BANNED: u32 = 3; pub fn is_quarantined(state: u32) -> u32 { - let; - status; + let status: u32 = get_quarantine_status(state); if (((status == STATUS_QUARANTINED) || (status == STATUS_SUSPENDED)) || (status == STATUS_BANNED)) { return 1; } else { @@ -48,43 +47,33 @@ pub fn is_quarantined(state: u32) -> u32 { } pub fn quarantine_node(state: u32, current_time: u32) -> u32 { - let; - node_id; - let; - violations; + let node_id: u32 = get_quarantine_node_id(state); + let violations: u32 = get_violation_count(state); return create_quarantine_state(node_id, STATUS_QUARANTINED, current_time, (violations + 1)); } pub fn release_quarantine(state: u32) -> u32 { - let; - node_id; - let; - violations; + let node_id: u32 = get_quarantine_node_id(state); + let violations: u32 = get_violation_count(state); return create_quarantine_state(node_id, STATUS_NORMAL, 0, violations); } pub fn suspend_node(state: u32, current_time: u32) -> u32 { - let; - node_id; - let; - violations; + let node_id: u32 = get_quarantine_node_id(state); + let violations: u32 = get_violation_count(state); return create_quarantine_state(node_id, STATUS_SUSPENDED, current_time, (violations + 2)); } pub fn ban_node(state: u32) -> u32 { - let; - node_id; + let node_id: u32 = get_quarantine_node_id(state); return create_quarantine_state(node_id, STATUS_BANNED, 0, 0xFFFF); } pub fn should_release_quarantine(state: u32, current_time: u32) -> u32 { - let; - status; - let; - start_time; + let status: u32 = get_quarantine_status(state); + let start_time: u32 = get_start_time(state); if (status == STATUS_QUARANTINED) { - let; - elapsed; + let elapsed: u32 = (current_time - start_time); if (elapsed >= QUARANTINE_DURATION) { return 1; } @@ -133,31 +122,22 @@ pub const VIOLATION_RESOURCE_ABUSE: u32 = 4; pub const VIOLATION_TRUST_VIOLATION: u32 = 5; pub fn record_violation(state: u32, violation_record: u32) -> u32 { - let; - node_id; - let; - violation_node_id; + let node_id: u32 = get_quarantine_node_id(state); + let violation_node_id: u32 = get_violation_node_id(violation_record); if (node_id != violation_node_id) { return state; } - let; - current_violations; - let; - new_violations; - let; - node_id_ret; - let; - status; - let; - start_time; + let current_violations: u32 = get_violation_count(state); + let new_violations: u32 = (current_violations + 1); + let node_id_ret: u32 = get_quarantine_node_id(state); + let status: u32 = get_quarantine_status(state); + let start_time: u32 = get_start_time(state); return create_quarantine_state(node_id_ret, status, start_time, new_violations); } pub fn should_quarantine(state: u32) -> u32 { - let; - violations; - let; - status; + let violations: u32 = get_violation_count(state); + let status: u32 = get_quarantine_status(state); if ((status == STATUS_NORMAL) && (violations >= VIOLATION_THRESHOLD)) { return 1; } else { @@ -166,10 +146,8 @@ pub fn should_quarantine(state: u32) -> u32 { } pub fn calculate_quarantine_severity(state: u32) -> u32 { - let; - violations; - let; - status; + let violations: u32 = get_violation_count(state); + let status: u32 = get_quarantine_status(state); if (status == STATUS_BANNED) { return 100; } else { @@ -177,8 +155,7 @@ pub fn calculate_quarantine_severity(state: u32) -> u32 { return 70; } else { if (status == STATUS_QUARANTINED) { - let; - severity; + let severity: u32 = (violations * 10); if (severity > 50) { return 50; } else { @@ -191,12 +168,10 @@ pub fn calculate_quarantine_severity(state: u32) -> u32 { } } -pub fn find_quarantined_node(states: Vec<>, node_id: u32) -> u32 { - let; - i; +pub fn find_quarantined_node(states: [u32; MAX_NODES as usize], node_id: u32) -> u32 { + let mut i: u32 = 0; while (i < MAX_NODES) { - let; - state_node_id; + let state_node_id: u32 = get_quarantine_node_id(states[(i) as usize]); if (state_node_id == node_id) { return i; } @@ -205,13 +180,11 @@ pub fn find_quarantined_node(states: Vec<>, node_id: u32) -> u32 { return MAX_NODES; } -pub fn count_quarantined_nodes(states: Vec<>) -> u32 { - let; - count; - let; - i; +pub fn count_quarantined_nodes(states: [u32; MAX_NODES as usize]) -> u32 { + let mut count: u32 = 0; + let mut i: u32 = 0; while (i < MAX_NODES) { - if (is_quarantined(states[i]) == 1) { + if (is_quarantined(states[(i) as usize]) == 1) { count = (count + 1); } i = (i + 1); @@ -248,8 +221,7 @@ pub fn get_quarantine_reason(violation_type: u32) -> u32 { } pub fn is_communication_allowed(state: u32, trust_score: u32) -> u32 { - let; - status; + let status: u32 = get_quarantine_status(state); if (status == STATUS_BANNED) { return 0; } @@ -262,11 +234,9 @@ pub fn is_communication_allowed(state: u32, trust_score: u32) -> u32 { return 1; } -pub fn calculate_health_impact(states: Vec<>) -> u32 { - let; - quarantined_count; - let; - total_nodes; +pub fn calculate_health_impact(states: [u32; MAX_NODES as usize]) -> u32 { + let quarantined_count: u32 = count_quarantined_nodes(states); + let total_nodes: u32 = MAX_NODES; if (total_nodes > 0) { return ((quarantined_count * 100) / total_nodes); } else { @@ -275,10 +245,8 @@ pub fn calculate_health_impact(states: Vec<>) -> u32 { } pub fn recommend_quarantine_action(state: u32, trust_score: u32) -> u32 { - let; - violations; - let; - status; + let violations: u32 = get_violation_count(state); + let status: u32 = get_quarantine_status(state); if (status == STATUS_BANNED) { return 4; } else { diff --git a/gen/rust/redundancy_management.rs b/gen/rust/redundancy_management.rs index 8a31ca7..015561c 100644 --- a/gen/rust/redundancy_management.rs +++ b/gen/rust/redundancy_management.rs @@ -30,20 +30,20 @@ pub fn get_hop3(path: u32) -> u32 { } pub fn create_path_set(p0: u32, p1: u32, p2: u32, p3: u32) -> u64 { - return ((((() << 48) | (() << 32)) | (() << 16)) | ()); + return (((((p0 as u64) << 48) | ((p1 as u64) << 32)) | ((p2 as u64) << 16)) | (p3 as u64)); } pub fn get_path(path_set: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((path_set >> 48) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((path_set >> 32) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((path_set >> 16) & 0xFFFFFFFF) as u32); } - return (); + return ((path_set & 0xFFFFFFFF) as u32); } pub fn find_primary_path(path_set: u64) -> u32 { @@ -85,46 +85,43 @@ pub fn find_backup_path(path_set: u64, failed_path: u32) -> u32 { } pub fn invalidate_path(path_set: u64, path_index: u32) -> u64 { - let; - path = get_path(path_set, path_index); - let; + let path = get_path(path_set, path_index); + let new_path = create_path(PATH_INVALID, get_hop1(path), get_hop2(path), get_hop3(path)); if (path_index == 0) { - return ((path_set & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((path_set & 0x0000FFFFFFFFFFFF) | ((new_path as u64) << 48)); } else { if (path_index == 1) { - return ((path_set & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((path_set & 0xFFFF0000FFFFFFFF) | ((new_path as u64) << 32)); } else { if (path_index == 2) { - return ((path_set & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((path_set & 0xFFFFFFFF0000FFFF) | ((new_path as u64) << 16)); } else { - return ((path_set & 0xFFFFFFFFFFFF0000) | ()); + return ((path_set & 0xFFFFFFFFFFFF0000) | (new_path as u64)); } } } } pub fn validate_path(path_set: u64, path_index: u32) -> u64 { - let; - path = get_path(path_set, path_index); - let; + let path = get_path(path_set, path_index); + let new_path = create_path(PATH_VALID, get_hop1(path), get_hop2(path), get_hop3(path)); if (path_index == 0) { - return ((path_set & 0x0000FFFFFFFFFFFF) | (() << 48)); + return ((path_set & 0x0000FFFFFFFFFFFF) | ((new_path as u64) << 48)); } else { if (path_index == 1) { - return ((path_set & 0xFFFF0000FFFFFFFF) | (() << 32)); + return ((path_set & 0xFFFF0000FFFFFFFF) | ((new_path as u64) << 32)); } else { if (path_index == 2) { - return ((path_set & 0xFFFFFFFF0000FFFF) | (() << 16)); + return ((path_set & 0xFFFFFFFF0000FFFF) | ((new_path as u64) << 16)); } else { - return ((path_set & 0xFFFFFFFFFFFF0000) | ()); + return ((path_set & 0xFFFFFFFFFFFF0000) | (new_path as u64)); } } } } pub fn count_valid_paths(path_set: u64) -> u32 { - let; - count = 0; + let mut count = 0; if (get_path_valid(get_path(path_set, 0)) == PATH_VALID) { count = (count + 1); } @@ -145,8 +142,7 @@ pub fn has_redundancy(path_set: u64) -> bool { } pub fn get_hop_count(path: u32) -> u32 { - let; - count = 0; + let mut count = 0; if (get_hop1(path) != 0) { count = (count + 1); } @@ -160,36 +156,31 @@ pub fn get_hop_count(path: u32) -> u32 { } pub fn find_shortest_path(path_set: u64) -> u32 { - let; - best_path = 0xFF; - let; + let mut best_path = 0xFF; + let mut best_hops = 255; if (get_path_valid(get_path(path_set, 0)) == PATH_VALID) { - let; - hops = get_hop_count(get_path(path_set, 0)); + let hops = get_hop_count(get_path(path_set, 0)); if (hops < best_hops) { best_hops = hops; best_path = 0; } } if (get_path_valid(get_path(path_set, 1)) == PATH_VALID) { - let; - hops = get_hop_count(get_path(path_set, 1)); + let hops = get_hop_count(get_path(path_set, 1)); if (hops < best_hops) { best_hops = hops; best_path = 1; } } if (get_path_valid(get_path(path_set, 2)) == PATH_VALID) { - let; - hops = get_hop_count(get_path(path_set, 2)); + let hops = get_hop_count(get_path(path_set, 2)); if (hops < best_hops) { best_hops = hops; best_path = 2; } } if (get_path_valid(get_path(path_set, 3)) == PATH_VALID) { - let; - hops = get_hop_count(get_path(path_set, 3)); + let hops = get_hop_count(get_path(path_set, 3)); if (hops < best_hops) { best_hops = hops; best_path = 3; @@ -199,7 +190,7 @@ pub fn find_shortest_path(path_set: u64) -> u32 { } pub fn failover(path_set: u64, failed_path: u32) -> u64 { - let; + let backup = find_backup_path(path_set, failed_path); if (backup != 0xFF) { return invalidate_path(path_set, failed_path); } diff --git a/gen/rust/resource_scheduler.rs b/gen/rust/resource_scheduler.rs index 9285377..4d9282c 100644 --- a/gen/rust/resource_scheduler.rs +++ b/gen/rust/resource_scheduler.rs @@ -54,173 +54,136 @@ pub fn get_sched_tick(state: u32) -> u32 { } pub fn create_task_array(t0: u32, t1: u32, t2: u32, t3: u32, t4: u32, t5: u32, t6: u32, t7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((t0 as u64) << 56) | ((t1 as u64) << 48)) | ((t2 as u64) << 40)) | ((t3 as u64) << 32)) | ((t4 as u64) << 24)) | ((t5 as u64) << 16)) | ((t6 as u64) << 8)) | (t7 as u64)); } pub fn get_task_resource(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { - return (); + return (((array >> 8) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn can_admit_task(state: u32, task: u32) -> bool { - let; - cpu_req = get_cpu_req(task); - let; - mem_req = get_mem_req(task); - let; - used_cpu = get_used_cpu(state); - let; - used_mem = get_used_mem(state); - let; - available_cpu = (CPU_CAPACITY - used_cpu); - let; - available_mem = (MEMORY_CAPACITY - used_mem); + let cpu_req = get_cpu_req(task); + let mem_req = get_mem_req(task); + let used_cpu = get_used_cpu(state); + let used_mem = get_used_mem(state); + let available_cpu = (CPU_CAPACITY - used_cpu); + let available_mem = (MEMORY_CAPACITY - used_mem); return ((cpu_req <= available_cpu) && (mem_req <= available_mem)); } pub fn has_cpu_capacity(state: u32, cpu_req: u32) -> bool { - let; - used_cpu = get_used_cpu(state); - let; - available_cpu = (CPU_CAPACITY - used_cpu); + let used_cpu = get_used_cpu(state); + let available_cpu = (CPU_CAPACITY - used_cpu); return (cpu_req <= available_cpu); } pub fn has_memory_capacity(state: u32, mem_req: u32) -> bool { - let; - used_mem = get_used_mem(state); - let; - available_mem = (MEMORY_CAPACITY - used_mem); + let used_mem = get_used_mem(state); + let available_mem = (MEMORY_CAPACITY - used_mem); return (mem_req <= available_mem); } pub fn allocate_resources(state: u32, task: u32) -> u32 { - let; - cpu_req = get_cpu_req(task); - let; - mem_req = get_mem_req(task); - let; - used_cpu = get_used_cpu(state); - let; - used_mem = get_used_mem(state); - let; - active_tasks = get_active_tasks(state); - let; - tick = get_sched_tick(state); - let; - new_cpu = (used_cpu + cpu_req); - let; - new_mem = (used_mem + mem_req); - let; - new_tasks = (active_tasks + 1); + let cpu_req = get_cpu_req(task); + let mem_req = get_mem_req(task); + let used_cpu = get_used_cpu(state); + let used_mem = get_used_mem(state); + let active_tasks = get_active_tasks(state); + let tick = get_sched_tick(state); + let new_cpu = (used_cpu + cpu_req); + let new_mem = (used_mem + mem_req); + let new_tasks = (active_tasks + 1); return create_system_state(new_cpu, new_mem, new_tasks, tick); } pub fn release_resources(state: u32, task: u32) -> u32 { - let; - cpu_req = get_cpu_req(task); - let; - mem_req = get_mem_req(task); - let; - used_cpu = get_used_cpu(state); - let; - used_mem = get_used_mem(state); - let; - active_tasks = get_active_tasks(state); - let; - tick = get_sched_tick(state); - let; - new_cpu = (used_cpu - cpu_req); - let; - new_mem = (used_mem - mem_req); - let; - new_tasks = (active_tasks - 1); + let cpu_req = get_cpu_req(task); + let mem_req = get_mem_req(task); + let used_cpu = get_used_cpu(state); + let used_mem = get_used_mem(state); + let active_tasks = get_active_tasks(state); + let tick = get_sched_tick(state); + let new_cpu = (used_cpu - cpu_req); + let new_mem = (used_mem - mem_req); + let new_tasks = (active_tasks - 1); return create_system_state(new_cpu, new_mem, new_tasks, tick); } pub fn find_admittable_task(state: u32, task_array: u64) -> u32 { - let; - best_task = 0xFF; - let; + let mut best_task = 0xFF; + let mut best_priority = 0xFF; if can_admit_task(state, get_task_resource(task_array, 0)) { - let; - priority = get_priority(get_task_resource(task_array, 0)); + let priority = get_priority(get_task_resource(task_array, 0)); if (priority < best_priority) { best_priority = priority; best_task = 0; } } if can_admit_task(state, get_task_resource(task_array, 1)) { - let; - priority = get_priority(get_task_resource(task_array, 1)); + let priority = get_priority(get_task_resource(task_array, 1)); if (priority < best_priority) { best_priority = priority; best_task = 1; } } if can_admit_task(state, get_task_resource(task_array, 2)) { - let; - priority = get_priority(get_task_resource(task_array, 2)); + let priority = get_priority(get_task_resource(task_array, 2)); if (priority < best_priority) { best_priority = priority; best_task = 2; } } if can_admit_task(state, get_task_resource(task_array, 3)) { - let; - priority = get_priority(get_task_resource(task_array, 3)); + let priority = get_priority(get_task_resource(task_array, 3)); if (priority < best_priority) { best_priority = priority; best_task = 3; } } if can_admit_task(state, get_task_resource(task_array, 4)) { - let; - priority = get_priority(get_task_resource(task_array, 4)); + let priority = get_priority(get_task_resource(task_array, 4)); if (priority < best_priority) { best_priority = priority; best_task = 4; } } if can_admit_task(state, get_task_resource(task_array, 5)) { - let; - priority = get_priority(get_task_resource(task_array, 5)); + let priority = get_priority(get_task_resource(task_array, 5)); if (priority < best_priority) { best_priority = priority; best_task = 5; } } if can_admit_task(state, get_task_resource(task_array, 6)) { - let; - priority = get_priority(get_task_resource(task_array, 6)); + let priority = get_priority(get_task_resource(task_array, 6)); if (priority < best_priority) { best_priority = priority; best_task = 6; } } if can_admit_task(state, get_task_resource(task_array, 7)) { - let; - priority = get_priority(get_task_resource(task_array, 7)); + let priority = get_priority(get_task_resource(task_array, 7)); if (priority < best_priority) { best_priority = priority; best_task = 7; @@ -234,28 +197,21 @@ pub fn calculate_cpu_utilization(state: u32) -> u32 { } pub fn calculate_memory_utilization(state: u32) -> u32 { - let; - used_mem = get_used_mem(state); + let used_mem = get_used_mem(state); return ((used_mem * 100) / MEMORY_CAPACITY); } pub fn is_overloaded(state: u32) -> bool { - let; - cpu_util = calculate_cpu_utilization(state); + let cpu_util = calculate_cpu_utilization(state); return (cpu_util > 90); } pub fn increment_tick(state: u32) -> u32 { - let; - used_cpu = get_used_cpu(state); - let; - used_mem = get_used_mem(state); - let; - active_tasks = get_active_tasks(state); - let; - tick = get_sched_tick(state); - let; - new_tick = (tick + 1); + let used_cpu = get_used_cpu(state); + let used_mem = get_used_mem(state); + let active_tasks = get_active_tasks(state); + let tick = get_sched_tick(state); + let mut new_tick = (tick + 1); if (new_tick > 255) { new_tick = 0; } @@ -263,8 +219,7 @@ pub fn increment_tick(state: u32) -> u32 { } pub fn count_tasks_by_priority(task_array: u64, priority: u32) -> u32 { - let; - count = 0; + let mut count = 0; if (get_priority(get_task_resource(task_array, 0)) == priority) { count = (count + 1); } diff --git a/gen/rust/self_healing.rs b/gen/rust/self_healing.rs index d03d5ec..b2097bd 100644 --- a/gen/rust/self_healing.rs +++ b/gen/rust/self_healing.rs @@ -30,46 +30,36 @@ pub fn get_success_count(state: u32) -> u32 { } pub fn can_recover(state: u32, current_time: u32) -> bool { - let; - let; - last = get_last_attempt(state); - let; + let attempts = get_attempts(state); + let last = get_last_attempt(state); + let in_progress = get_in_progress(state); if (attempts >= MAX_RECOVERY_ATTEMPTS) { return false; } if (in_progress == 1) { return false; } - let; - elapsed = (current_time - last); + let elapsed = (current_time - last); return (elapsed >= RECOVERY_COOLDOWN); } pub fn start_recovery(state: u32, current_time: u32) -> u32 { - let; - attempts = get_attempts(state); - let; - success_count = get_success_count(state); + let attempts = get_attempts(state); + let success_count = get_success_count(state); return create_recovery_state(attempts, current_time, 1, success_count); } pub fn complete_recovery_success(state: u32) -> u32 { - let; - attempts = get_attempts(state); - let; - last = get_last_attempt(state); - let; - success_count = get_success_count(state); + let attempts = get_attempts(state); + let last = get_last_attempt(state); + let success_count = get_success_count(state); return create_recovery_state(attempts, last, 0, (success_count + 1)); } pub fn complete_recovery_failure(state: u32) -> u32 { - let; - attempts = get_attempts(state); - let; - last = get_last_attempt(state); - let; - success_count = get_success_count(state); + let attempts = get_attempts(state); + let last = get_last_attempt(state); + let success_count = get_success_count(state); return create_recovery_state((attempts + 1), last, 0, success_count); } @@ -102,10 +92,8 @@ pub fn get_total_links(state: u32) -> u32 { } pub fn network_health_percent(state: u32) -> u32 { - let; - healthy = get_healthy_nodes(state); - let; - total = get_total_nodes(state); + let healthy = get_healthy_nodes(state); + let total = get_total_nodes(state); if (total == 0) { return 100; } @@ -117,8 +105,7 @@ pub fn is_network_healthy(state: u32) -> bool { } pub fn is_network_degraded(state: u32) -> bool { - let; - health = network_health_percent(state); + let health = network_health_percent(state); return ((health >= 50) && (health < 75)); } @@ -137,14 +124,10 @@ pub fn should_initiate_healing(recovery_state: u32, network_state: u32, current_ } pub fn update_network_after_recovery(network_state: u32, nodes_recovered: u32, links_restored: u32) -> u32 { - let; - healthy = (get_healthy_nodes(network_state) + nodes_recovered); - let; - total = get_total_nodes(network_state); - let; - degraded = (get_degraded_links(network_state) - links_restored); - let; - total_links = get_total_links(network_state); + let healthy = (get_healthy_nodes(network_state) + nodes_recovered); + let total = get_total_nodes(network_state); + let degraded = (get_degraded_links(network_state) - links_restored); + let total_links = get_total_links(network_state); return create_network_state(healthy, total, degraded, total_links); } diff --git a/gen/rust/swarm_coordinator.rs b/gen/rust/swarm_coordinator.rs index 93f1145..b7aa124 100644 --- a/gen/rust/swarm_coordinator.rs +++ b/gen/rust/swarm_coordinator.rs @@ -54,37 +54,36 @@ pub fn get_vote_timestamp(vote: u32) -> u32 { } pub fn create_vote_array(v0: u32, v1: u32, v2: u32, v3: u32, v4: u32, v5: u32, v6: u32, v7: u32) -> u64 { - return ((((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) | (() << 16)) | (() << 8)) | ()); + return (((((((((v0 as u64) << 56) | ((v1 as u64) << 48)) | ((v2 as u64) << 40)) | ((v3 as u64) << 32)) | ((v4 as u64) << 24)) | ((v5 as u64) << 16)) | ((v6 as u64) << 8)) | (v7 as u64)); } pub fn get_vote(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { - return (); + return (((array >> 8) & 0xFFFFFFFF) as u32); } - return (); + return ((array & 0xFFFFFFFF) as u32); } pub fn has_quorum(yes_count: u32, no_count: u32, abstain_count: u32) -> bool { - let; - total_voting = ((yes_count + no_count) + abstain_count); + let total_voting = ((yes_count + no_count) + abstain_count); return (total_voting >= QUORUM_THRESHOLD); } @@ -93,10 +92,8 @@ pub fn proposal_passes(yes_count: u32, no_count: u32) -> bool { } pub fn calculate_consensus_value(vote_array: u64, proposal_id: u32) -> u32 { - let; - sum = 0; - let; - count = 0; + let mut sum = 0; + let mut count = 0; if (get_vote_proposal_id(get_vote(vote_array, 0)) == proposal_id) { sum = (sum + get_proposal_value(get_vote(vote_array, 0))); count = (count + 1); @@ -136,12 +133,9 @@ pub fn calculate_consensus_value(vote_array: u64, proposal_id: u32) -> u32 { } pub fn cooperative_decision(neighbor_values: u32, my_value: u32, weight_neighbors: u32) -> u32 { - let; - neighbor_avg = neighbor_values; - let; - weighted_neighbors = ((neighbor_avg * weight_neighbors) / 100); - let; - weighted_self = ((my_value * (100 - weight_neighbors)) / 100); + let neighbor_avg = neighbor_values; + let weighted_neighbors = ((neighbor_avg * weight_neighbors) / 100); + let weighted_self = ((my_value * (100 - weight_neighbors)) / 100); return (weighted_neighbors + weighted_self); } diff --git a/gen/rust/test_framework.rs b/gen/rust/test_framework.rs index de43964..30cfe76 100644 --- a/gen/rust/test_framework.rs +++ b/gen/rust/test_framework.rs @@ -90,12 +90,9 @@ pub const ASSERT_RANGE: u32 = 4; pub const ASSERT_BITMASK: u32 = 5; pub fn check_assertion(assertion: u32) -> u32 { - let; - assert_type; - let; - actual; - let; - expected; + let assert_type: u32 = get_assertion_type(assertion); + let actual: u32 = get_actual_value(assertion); + let expected: u32 = get_expected_value(assertion); if (assert_type == ASSERT_EQUAL) { if (actual == expected) { return 1; @@ -125,10 +122,8 @@ pub fn check_assertion(assertion: u32) -> u32 { } } else { if (assert_type == ASSERT_RANGE) { - let; - min; - let; - max; + let min: u32 = (expected & 0xF); + let max: u32 = ((expected >> 4) & 0xF); if ((actual >= min) && (actual <= max)) { return 1; } else { @@ -152,20 +147,13 @@ pub fn check_assertion(assertion: u32) -> u32 { } pub fn run_test_case(test_case: u32, function_ptr: u32) -> u32 { - let; - test_id; - let; - function_id; - let; - input; - let; - expected; - let; - actual; - let; - assertion; - let; - passed; + let test_id: u32 = get_test_case_id(test_case); + let function_id: u32 = get_function_id(test_case); + let input: u32 = get_test_input(test_case); + let expected: u32 = get_expected_output(test_case); + let actual: u32 = input; + let assertion: u32 = create_assertion(ASSERT_EQUAL, actual, expected, 0); + let passed: u32 = check_assertion(assertion); if (passed == 1) { return create_test_result(test_id, STATUS_PASS, 1, 0); } else { @@ -193,26 +181,17 @@ pub fn get_teardown_id(suite: u32) -> u32 { return (suite & 0xFF); } -pub fn run_test_suite(suite: u32, tests: Vec<>, test_count: u32) -> u32 { - let; - suite_id; - let; - total_assertions; - let; - total_failures; - let; - passed_tests; - let; - i; +pub fn run_test_suite(suite: u32, tests: [u32; MAX_TESTS as usize], test_count: u32) -> u32 { + let suite_id: u32 = get_suite_id(suite); + let mut total_assertions: u32 = 0; + let mut total_failures: u32 = 0; + let mut passed_tests: u32 = 0; + let mut i: u32 = 0; while (i < test_count) { - let; - result; - let; - assertions; - let; - failures; - let; - status; + let result: u32 = run_test_case(tests[(i) as usize], 0); + let assertions: u32 = get_assertion_count(result); + let failures: u32 = get_failure_count(result); + let status: u32 = get_test_status(result); total_assertions = (total_assertions + assertions); total_failures = (total_failures + failures); if (status == STATUS_PASS) { @@ -244,10 +223,8 @@ pub fn get_line_count(coverage: u32) -> u32 { } pub fn calculate_coverage_percentage(coverage: u32) -> u32 { - let; - total_branches; - let; - covered_branches; + let total_branches: u32 = get_branch_count(coverage); + let covered_branches: u32 = get_covered_branches(coverage); if (total_branches > 0) { return ((covered_branches * 100) / total_branches); } else { @@ -255,16 +232,13 @@ pub fn calculate_coverage_percentage(coverage: u32) -> u32 { } } -pub fn aggregate_coverage(coverage_data: Vec<>, count: u32) -> u32 { - let; - total_branches; - let; - total_covered; - let; - i; +pub fn aggregate_coverage(coverage_data: [u32; MAX_TESTS as usize], count: u32) -> u32 { + let mut total_branches: u32 = 0; + let mut total_covered: u32 = 0; + let mut i: u32 = 0; while (i < count) { - total_branches = (total_branches + get_branch_count(coverage_data[i])); - total_covered = (total_covered + get_covered_branches(coverage_data[i])); + total_branches = (total_branches + get_branch_count(coverage_data[(i) as usize])); + total_covered = (total_covered + get_covered_branches(coverage_data[(i) as usize])); i = (i + 1); } if (total_branches > 0) { @@ -295,8 +269,7 @@ pub fn get_property_failure_count(prop_test: u32) -> u32 { } pub fn generate_test_input(generator_id: u32, seed: u32) -> u32 { - let; - generated; + let generated: u32 = (((seed * 1103515245) + 12345) & 0x7FFFFFFF); if (generator_id == 0) { return (generated & 0xFF); } else { @@ -313,16 +286,12 @@ pub fn generate_test_input(generator_id: u32, seed: u32) -> u32 { } pub fn run_property_test(prop_id: u32, generator_count: u32, test_count: u32) -> u32 { - let; - failures; - let; - i; + let failures: u32 = 0; + let mut i: u32 = 0; while (i < test_count) { - let; - j; + let mut j: u32 = 0; while (j < generator_count) { - let; - input; + let input: u32 = generate_test_input(j, i); j = (j + 1); } i = (i + 1); @@ -351,10 +320,8 @@ pub fn get_skipped_tests(summary: u32) -> u32 { } pub fn calculate_pass_rate(summary: u32) -> u32 { - let; - total; - let; - passed; + let total: u32 = get_total_tests(summary); + let passed: u32 = get_passed_tests(summary); if (total > 0) { return ((passed * 100) / total); } else { @@ -371,12 +338,9 @@ pub fn meets_coverage_target(coverage_percentage: u32, target: u32) -> u32 { } pub fn generate_test_report(summary: u32, coverage: u32, duration_ms: u32) -> u32 { - let; - pass_rate; - let; - coverage_pct; - let; - status; + let pass_rate: u32 = calculate_pass_rate(summary); + let coverage_pct: u32 = calculate_coverage_percentage(coverage); + let mut status: u32 = 0; if ((pass_rate >= 90) && (coverage_pct >= COVERAGE_TARGET)) { status = 1; } else { diff --git a/gen/rust/test_validator.rs b/gen/rust/test_validator.rs index cd58e65..c600386 100644 --- a/gen/rust/test_validator.rs +++ b/gen/rust/test_validator.rs @@ -66,15 +66,12 @@ pub fn get_visibility(sig: u32) -> u32 { } pub fn validate_function_signature(sig: u32) -> u32 { - let; - func_id; - let; - param_count; + let func_id: u32 = get_sig_function_id(sig); + let param_count: u32 = get_param_count(sig); if (param_count > 8) { return create_validation_error(func_id, ERROR_CONSTRAINT_VIOLATION, 0, SEVERITY_ERROR); } - let; - return_type; + let return_type: u32 = get_return_type(sig); if (return_type > 3) { return create_validation_error(func_id, ERROR_TYPE_MISMATCH, 0, SEVERITY_ERROR); } @@ -134,8 +131,7 @@ pub fn check_no_dynamic_arrays(line_content: u32) -> u32 { } pub fn check_integer_only(line_content: u32) -> u32 { - let; - has_float; + let has_float: u32 = ((line_content >> 8) & 0xF); if (has_float == 1) { return create_constraint_check(CONSTRAINT_INTEGER_ONLY, CONSTRAINT_FAIL, 4, 0); } else { @@ -164,10 +160,8 @@ pub fn get_type_line(check: u32) -> u32 { } pub fn perform_type_check(check: u32) -> u32 { - let; - declared; - let; - inferred; + let declared: u32 = get_declared_type(check); + let inferred: u32 = get_inferred_type(check); if (declared == inferred) { return 0; } else { @@ -196,8 +190,7 @@ pub fn get_last_use(check: u32) -> u32 { } pub fn check_unused_variable(check: u32) -> u32 { - let; - usage_count; + let usage_count: u32 = get_usage_count(check); if (usage_count == 0) { return create_validation_error(get_unused_var_id(check), ERROR_UNUSED_VARIABLE, get_first_use(check), SEVERITY_WARNING); } else { @@ -231,20 +224,14 @@ pub const VALIDATION_FAIL: u32 = 1; pub const VALIDATION_WARNING: u32 = 2; -pub fn run_validation(errors: Vec<>, error_count: u32, warnings: Vec<>, warning_count: u32) -> u32 { - let; - total_errors; - let; - total_warnings; - let; - total_info; - let; - status; - let; - i; +pub fn run_validation(errors: [u32; MAX_ERRORS as usize], error_count: u32, warnings: [u32; MAX_WARNINGS as usize], warning_count: u32) -> u32 { + let mut total_errors: u32 = 0; + let mut total_warnings: u32 = 0; + let mut total_info: u32 = 0; + let mut status: u32 = VALIDATION_PASS; + let mut i: u32 = 0; while (i < error_count) { - let; - severity; + let severity: u32 = get_error_severity(errors[(i) as usize]); if (severity == SEVERITY_ERROR) { total_errors = (total_errors + 1); } else { @@ -292,8 +279,7 @@ pub fn get_technical_debt(metrics: u32) -> u32 { } pub fn calculate_complexity(function_length: u32, branch_count: u32, loop_count: u32) -> u32 { - let; - complexity; + let mut complexity: u32 = ((1 + branch_count) + loop_count); if (function_length > 100) { complexity = (complexity + (function_length / 50)); } @@ -304,14 +290,10 @@ pub fn calculate_complexity(function_length: u32, branch_count: u32, loop_count: } pub fn is_quality_acceptable(metrics: u32) -> u32 { - let; - complexity; - let; - readability; - let; - maintainability; - let; - tech_debt; + let complexity: u32 = get_complexity(metrics); + let readability: u32 = get_readability(metrics); + let maintainability: u32 = get_maintainability(metrics); + let tech_debt: u32 = get_technical_debt(metrics); if (complexity > 20) { return 0; } else { @@ -332,14 +314,10 @@ pub fn is_quality_acceptable(metrics: u32) -> u32 { } pub fn generate_validation_report(summary: u32, metrics: u32, filename_id: u32) -> u32 { - let; - status; - let; - errors; - let; - warnings; - let; - quality_ok; + let status: u32 = get_validation_status(summary); + let errors: u32 = get_error_count(summary); + let warnings: u32 = get_warning_count(summary); + let quality_ok: u32 = is_quality_acceptable(metrics); return (((((status & 0xF) << 28) | ((errors & 0xFF) << 20)) | ((warnings & 0xFF) << 12)) | (quality_ok & 0xFFF)); } diff --git a/gen/rust/timing_closure.rs b/gen/rust/timing_closure.rs index 166b407..1981ba1 100644 --- a/gen/rust/timing_closure.rs +++ b/gen/rust/timing_closure.rs @@ -66,7 +66,7 @@ pub fn retiming_needed(current_slack: u32, threshold: u32) -> bool { } pub fn balance_registers(stage_delay: u32, target_period: u32) -> bool { - return (stage_delay > (target_period << 1)); + return (stage_delay > (target_period * 2)); } pub fn compare_critical_paths(path1: u32, path2: u32) -> u32 { diff --git a/gen/rust/topology_visualizer.rs b/gen/rust/topology_visualizer.rs index 87c32bb..1eb3ce5 100644 --- a/gen/rust/topology_visualizer.rs +++ b/gen/rust/topology_visualizer.rs @@ -139,63 +139,45 @@ pub const ALGORITHM_HIERARCHICAL: u32 = 2; pub const ALGORITHM_GRID: u32 = 3; -pub fn calculate_force_layout(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32, params: u32) -> u32 { - let; - iterations; - let; - temperature; - let; - placed_nodes; - let; - i; +pub fn calculate_force_layout(nodes: [u32; MAX_NODES as usize], edges: [u32; MAX_EDGES as usize], node_count: u32, edge_count: u32, params: u32) -> u32 { + let iterations: u32 = get_layout_iterations(params); + let mut temperature: u32 = get_layout_temperature(params); + let mut placed_nodes: u32 = 0; + let mut i: u32 = 0; while ((i < iterations) && (placed_nodes < node_count)) { - let; - j; + let mut j: u32 = 0; while (j < node_count) { - let; - node_id; - let; - x; - let; - y; - let; - k; + let node_id: u32 = get_viz_node_id(nodes[(j) as usize]); + let x: u32 = get_node_x_position(nodes[(j) as usize]); + let y: u32 = get_node_y_position(nodes[(j) as usize]); + let mut k: u32 = 0; while (k < node_count) { if (k != j) { - let; - other_x; - let; - other_y; - let; - dx; + let other_x: u32 = get_node_x_position(nodes[(k) as usize]); + let other_y: u32 = get_node_y_position(nodes[(k) as usize]); + let mut dx: u32 = 0; if (x > other_x) { dx = (x - other_x); } else { dx = (other_x - x); } - let; - dy; + let mut dy: u32 = 0; if (y > other_y) { dy = (y - other_y); } else { dy = (other_y - y); } - let; - distance; + let distance: u32 = (dx + dy); if (distance < 100) { - let; - force; + let force: u32 = ((100 - distance) / 10); } } k = (k + 1); } - let; - l; + let mut l: u32 = 0; while (l < edge_count) { - let; - source; - let; - dest; + let source: u32 = get_viz_edge_source(edges[(l) as usize]); + let dest: u32 = get_viz_edge_dest(edges[(l) as usize]); if ((source == node_id) || (dest == node_id)) { } l = (l + 1); @@ -211,53 +193,35 @@ pub fn calculate_force_layout(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_ return placed_nodes; } -pub fn calculate_circular_layout(nodes: Vec<>, node_count: u32) -> u32 { - let; - center_x; - let; - center_y; - let; - radius; - let; - i; +pub fn calculate_circular_layout(nodes: [u32; MAX_NODES as usize], node_count: u32) -> u32 { + let center_x: u32 = (CANVAS_SIZE / 2); + let center_y: u32 = (CANVAS_SIZE / 2); + let radius: u32 = (CANVAS_SIZE / 3); + let mut i: u32 = 0; while (i < node_count) { - let; - angle; - let; - x; - let; - y; - let; - node_id; - let; - status; - nodes[i] = create_visual_node(node_id, x, y, status); + let angle: u32 = ((i * 360) / node_count); + let x: u32 = (center_x + ((radius * angle) / 360)); + let y: u32 = (center_y + ((radius * angle) / 360)); + let node_id: u32 = get_viz_node_id(nodes[(i) as usize]); + let status: u32 = get_node_visual_status(nodes[(i) as usize]); + nodes[(i) as usize] = create_visual_node(node_id, x, y, status); i = (i + 1); } return node_count; } -pub fn calculate_hierarchical_layout(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32) -> u32 { - let; - level_count; - let; - nodes_per_level; - let; - i; - let; - current_level; - let; - nodes_in_level; +pub fn calculate_hierarchical_layout(nodes: [u32; MAX_NODES as usize], edges: [u32; MAX_EDGES as usize], node_count: u32, edge_count: u32) -> u32 { + let level_count: u32 = 4; + let nodes_per_level: u32 = (node_count / level_count); + let mut i: u32 = 0; + let mut current_level: u32 = 0; + let mut nodes_in_level: u32 = 0; while (i < node_count) { - let; - y; - let; - x; - let; - node_id; - let; - status; - nodes[i] = create_visual_node(node_id, x, y, status); + let y: u32 = ((current_level * CANVAS_SIZE) / level_count); + let x: u32 = ((nodes_in_level * CANVAS_SIZE) / nodes_per_level); + let node_id: u32 = get_viz_node_id(nodes[(i) as usize]); + let status: u32 = get_node_visual_status(nodes[(i) as usize]); + nodes[(i) as usize] = create_visual_node(node_id, x, y, status); nodes_in_level = (nodes_in_level + 1); if (nodes_in_level >= nodes_per_level) { nodes_in_level = 0; @@ -268,9 +232,8 @@ pub fn calculate_hierarchical_layout(nodes: Vec<>, edges: Vec<>, node_count: u32 return node_count; } -pub fn apply_layout(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32, params: u32) -> u32 { - let; - algorithm; +pub fn apply_layout(nodes: [u32; MAX_NODES as usize], edges: [u32; MAX_EDGES as usize], node_count: u32, edge_count: u32, params: u32) -> u32 { + let algorithm: u32 = get_layout_algorithm(params); if (algorithm == ALGORITHM_FORCE_DIRECTED) { return calculate_force_layout(nodes, edges, node_count, edge_count, params); } else { @@ -287,49 +250,35 @@ pub fn apply_layout(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32 } pub fn render_node(node: u32, size: u32, color: u32) -> u32 { - let; - x; - let; - y; - let; - status; - let; - node_color; + let x: u32 = get_node_x_position(node); + let y: u32 = get_node_y_position(node); + let status: u32 = get_node_visual_status(node); + let node_color: u32 = get_status_color(status); return (((((x & 0xFF) << 24) | ((y & 0xFF) << 16)) | ((size & 0xFF) << 8)) | (node_color & 0xFF)); } -pub fn render_edge(edge: u32, nodes: Vec<>, thickness: u32) -> u32 { - let; - source; - let; - dest; - let; - quality; - let; - source_x; - let; - source_y; - let; - dest_x; - let; - dest_y; - let; - i; +pub fn render_edge(edge: u32, nodes: [u32; MAX_NODES as usize], thickness: u32) -> u32 { + let source: u32 = get_viz_edge_source(edge); + let dest: u32 = get_viz_edge_dest(edge); + let quality: u32 = get_viz_edge_quality(edge); + let mut source_x: u32 = 0; + let mut source_y: u32 = 0; + let mut dest_x: u32 = 0; + let mut dest_y: u32 = 0; + let mut i: u32 = 0; while (i < MAX_NODES) { - let; - node_id; + let node_id: u32 = get_viz_node_id(nodes[(i) as usize]); if (node_id == source) { - source_x = get_node_x_position(nodes[i]); - source_y = get_node_y_position(nodes[i]); + source_x = get_node_x_position(nodes[(i) as usize]); + source_y = get_node_y_position(nodes[(i) as usize]); } if (node_id == dest) { - dest_x = get_node_x_position(nodes[i]); - dest_y = get_node_y_position(nodes[i]); + dest_x = get_node_x_position(nodes[(i) as usize]); + dest_y = get_node_y_position(nodes[(i) as usize]); } i = (i + 1); } - let; - edge_color; + let mut edge_color: u32 = 0; if (quality > 70) { edge_color = COLOR_GREEN; } else { @@ -342,22 +291,17 @@ pub fn render_edge(edge: u32, nodes: Vec<>, thickness: u32) -> u32 { return (((((source_x & 0xFF) << 24) | ((source_y & 0xFF) << 16)) | ((dest_x & 0xFF) << 8)) | (dest_y & 0xFF)); } -pub fn create_visualization_frame(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32) -> u32 { - let; - frame_size; - let; - i; +pub fn create_visualization_frame(nodes: [u32; MAX_NODES as usize], edges: [u32; MAX_EDGES as usize], node_count: u32, edge_count: u32) -> u32 { + let mut frame_size: u32 = 0; + let mut i: u32 = 0; while (i < node_count) { - let; - rendered; + let rendered: u32 = render_node(nodes[(i) as usize], 20, COLOR_GREEN); frame_size = (frame_size + 1); i = (i + 1); } - let; - j; + let mut j: u32 = 0; while (j < edge_count) { - let; - rendered; + let rendered: u32 = render_edge(edges[(j) as usize], nodes, 2); frame_size = (frame_size + 1); j = (j + 1); } @@ -365,38 +309,28 @@ pub fn create_visualization_frame(nodes: Vec<>, edges: Vec<>, node_count: u32, e } pub fn calculate_viz_complexity(node_count: u32, edge_count: u32) -> u32 { - let; - base_complexity; - let; - rendering_overhead; + let base_complexity: u32 = (node_count + edge_count); + let rendering_overhead: u32 = ((node_count * 10) + (edge_count * 5)); return (base_complexity + rendering_overhead); } pub fn optimize_rendering(node_count: u32, edge_count: u32, target_fps: u32) -> u32 { - let; - complexity; - let; - max_complexity; + let complexity: u32 = calculate_viz_complexity(node_count, edge_count); + let max_complexity: u32 = (1000 / target_fps); if (complexity > max_complexity) { - let; - detail_level; + let detail_level: u32 = ((max_complexity * 100) / complexity); return detail_level; } else { return 100; } } -pub fn generate_topology_visualization(nodes: Vec<>, edges: Vec<>, node_count: u32, edge_count: u32, layout_params: u32) -> u32 { - let; - layout_result; - let; - frame; - let; - fps; - let; - detail_level; - let; - complexity; +pub fn generate_topology_visualization(nodes: [u32; MAX_NODES as usize], edges: [u32; MAX_EDGES as usize], node_count: u32, edge_count: u32, layout_params: u32) -> u32 { + let layout_result: u32 = apply_layout(nodes, edges, node_count, edge_count, layout_params); + let frame: u32 = create_visualization_frame(nodes, edges, node_count, edge_count); + let fps: u32 = 30; + let detail_level: u32 = optimize_rendering(node_count, edge_count, fps); + let complexity: u32 = calculate_viz_complexity(node_count, edge_count); return (((((layout_result & 0xFF) << 24) | ((frame & 0xFF) << 16)) | ((detail_level & 0xFF) << 8)) | (complexity & 0xFF)); } diff --git a/gen/rust/traffic_animator.rs b/gen/rust/traffic_animator.rs index eaf0a1d..d84f2e0 100644 --- a/gen/rust/traffic_animator.rs +++ b/gen/rust/traffic_animator.rs @@ -30,16 +30,11 @@ pub fn get_anim_packet_progress(packet: u32) -> u32 { } pub fn update_packet_progress(packet: u32, delta: u32) -> u32 { - let; - packet_id; - let; - source; - let; - dest; - let; - progress; - let; - new_progress; + let packet_id: u32 = get_anim_packet_id(packet); + let source: u32 = get_anim_packet_source(packet); + let dest: u32 = get_anim_packet_dest(packet); + let progress: u32 = get_anim_packet_progress(packet); + let mut new_progress: u32 = (progress + delta); if (new_progress > 100) { new_progress = 100; } @@ -183,18 +178,12 @@ pub fn get_timeline_speed(timeline: u32) -> u32 { } pub fn advance_animation_frame(timeline: u32) -> u32 { - let; - current; - let; - total; - let; - loops; - let; - speed; - let; - new_current; - let; - new_loops; + let current: u32 = get_timeline_current_frame(timeline); + let total: u32 = get_timeline_total_frames(timeline); + let loops: u32 = get_timeline_loop_count(timeline); + let speed: u32 = get_timeline_speed(timeline); + let mut new_current: u32 = (current + speed); + let mut new_loops: u32 = loops; if (new_current >= total) { new_current = 0; new_loops = (loops + 1); @@ -223,15 +212,11 @@ pub fn get_pattern_duration(pattern: u32) -> u32 { } pub fn generate_traffic_burst(pattern: u32, source: u32, dest: u32) -> u32 { - let; - burst_size; - let; - packet_count; - let; - i; + let burst_size: u32 = get_pattern_burst_size(pattern); + let mut packet_count: u32 = 0; + let mut i: u32 = 0; while (i < burst_size) { - let; - packet; + let packet: u32 = create_anim_packet(i, source, dest, 0); packet_count = (packet_count + 1); i = (i + 1); } @@ -239,36 +224,26 @@ pub fn generate_traffic_burst(pattern: u32, source: u32, dest: u32) -> u32 { } pub fn calculate_packet_position(source_x: u32, source_y: u32, dest_x: u32, dest_y: u32, progress: u32) -> u32 { - let; - current_x; - let; - current_y; + let current_x: u32 = (source_x + (((dest_x - source_x) * progress) / 100)); + let current_y: u32 = (source_y + (((dest_y - source_y) * progress) / 100)); return (((current_x & 0xFF) << 24) | ((current_y & 0xFF) << 16)); } -pub fn update_animation_packets(packets: Vec<>, packet_count: u32, speed: u32) -> u32 { - let; - updated_count; - let; - completed_count; - let; - i; +pub fn update_animation_packets(packets: [u32; MAX_PACKETS as usize], packet_count: u32, speed: u32) -> u32 { + let mut updated_count: u32 = 0; + let mut completed_count: u32 = 0; + let mut i: u32 = 0; while (i < packet_count) { - let; - progress; + let progress: u32 = get_anim_packet_progress(packets[(i) as usize]); if (progress < 100) { - let; - new_progress; + let mut new_progress: u32 = (progress + speed); if (new_progress > 100) { new_progress = 100; } - let; - packet_id; - let; - source; - let; - dest; - packets[i] = create_anim_packet(packet_id, source, dest, new_progress); + let packet_id: u32 = get_anim_packet_id(packets[(i) as usize]); + let source: u32 = get_anim_packet_source(packets[(i) as usize]); + let dest: u32 = get_anim_packet_dest(packets[(i) as usize]); + packets[(i) as usize] = create_anim_packet(packet_id, source, dest, new_progress); updated_count = (updated_count + 1); } else { completed_count = (completed_count + 1); @@ -278,100 +253,75 @@ pub fn update_animation_packets(packets: Vec<>, packet_count: u32, speed: u32) - return ((((updated_count & 0xFF) << 24) | ((completed_count & 0xFF) << 16)) | ((packet_count & 0xFF) << 8)); } -pub fn render_animation_frame(packets: Vec<>, packet_count: u32, paths: Vec<>, path_count: u32, frame_id: u32) -> u32 { - let; - timestamp; - let; - duration; +pub fn render_animation_frame(packets: [u32; MAX_PACKETS as usize], packet_count: u32, paths: [u32; MAX_PATHS as usize], path_count: u32, frame_id: u32) -> u32 { + let timestamp: u32 = (frame_id * (1000 / ANIMATION_FPS)); + let duration: u32 = (1000 / ANIMATION_FPS); return create_animation_frame(frame_id, timestamp, packet_count, duration); } pub fn calculate_animation_complexity(packet_count: u32, path_count: u32, node_count: u32) -> u32 { - let; - base_complexity; - let; - rendering_overhead; + let base_complexity: u32 = ((packet_count + path_count) + node_count); + let rendering_overhead: u32 = ((packet_count * 20) + (path_count * 10)); return (base_complexity + rendering_overhead); } pub fn optimize_animation_performance(packet_count: u32, target_fps: u32) -> u32 { - let; - max_packets; + let max_packets: u32 = ((1000 / target_fps) * 2); if (packet_count > max_packets) { - let; - reduction_needed; + let reduction_needed: u32 = (packet_count - max_packets); return reduction_needed; } else { return 0; } } -pub fn generate_traffic_heat_map(packets: Vec<>, packet_count: u32, node_count: u32) -> u32 { - let; - traffic_counts; - 32; - 32; - let; - max_traffic; - let; - i; +pub fn generate_traffic_heat_map(packets: [u32; MAX_PACKETS as usize], packet_count: u32, node_count: u32) -> u32 { + let traffic_counts: [u32; 32 as usize] = vec![]; + let mut max_traffic: u32 = 0; + let mut i: u32 = 0; while (i < packet_count) { - let; - source; - let; - dest; + let source: u32 = get_anim_packet_source(packets[(i) as usize]); + let dest: u32 = get_anim_packet_dest(packets[(i) as usize]); if (source < 32) { - traffic_counts[source] = (traffic_counts[source] + 1); - if (traffic_counts[source] > max_traffic) { - max_traffic = traffic_counts[source]; + traffic_counts[(source) as usize] = (traffic_counts[(source) as usize] + 1); + if (traffic_counts[(source) as usize] > max_traffic) { + max_traffic = traffic_counts[(source) as usize]; } } if (dest < 32) { - traffic_counts[dest] = (traffic_counts[dest] + 1); - if (traffic_counts[dest] > max_traffic) { - max_traffic = traffic_counts[dest]; + traffic_counts[(dest) as usize] = (traffic_counts[(dest) as usize] + 1); + if (traffic_counts[(dest) as usize] > max_traffic) { + max_traffic = traffic_counts[(dest) as usize]; } } i = (i + 1); } - let; - total_active; - let; - total_traffic; - let; - j; + let mut total_active: u32 = 0; + let mut total_traffic: u32 = 0; + let mut j: u32 = 0; while ((j < node_count) && (j < 32)) { - if (traffic_counts[j] > 0) { + if (traffic_counts[(j) as usize] > 0) { total_active = (total_active + 1); - total_traffic = (total_traffic + traffic_counts[j]); + total_traffic = (total_traffic + traffic_counts[(j) as usize]); } j = (j + 1); } - let; - avg_traffic; + let mut avg_traffic: u32 = 0; if (total_active > 0) { avg_traffic = (total_traffic / total_active); } return ((((max_traffic & 0xFF) << 24) | ((total_active & 0xFF) << 16)) | ((avg_traffic & 0xFF) << 8)); } -pub fn generate_traffic_animation(packets: Vec<>, packet_count: u32, paths: Vec<>, path_count: u32, node_count: u32, duration_frames: u32) -> u32 { - let; - total_frames; - let; - current_frame; - let; - complexity; - let; - optimization; - let; - actual_packet_count; - let; - timeline; - let; - heat_map; - let; - max_traffic; +pub fn generate_traffic_animation(packets: [u32; MAX_PACKETS as usize], packet_count: u32, paths: [u32; MAX_PATHS as usize], path_count: u32, node_count: u32, duration_frames: u32) -> u32 { + let total_frames: u32 = duration_frames; + let current_frame: u32 = 0; + let complexity: u32 = calculate_animation_complexity(packet_count, path_count, node_count); + let optimization: u32 = optimize_animation_performance(packet_count, ANIMATION_FPS); + let actual_packet_count: u32 = (packet_count - optimization); + let timeline: u32 = create_animation_timeline(0, total_frames, 0, 1); + let heat_map: u32 = generate_traffic_heat_map(packets, actual_packet_count, node_count); + let max_traffic: u32 = ((heat_map >> 24) & 0xFF); return (((((total_frames & 0xFF) << 24) | ((complexity & 0xFF) << 16)) | ((actual_packet_count & 0xFF) << 8)) | (max_traffic & 0xFF)); } @@ -380,15 +330,11 @@ pub fn create_animation_controls(play_pause: u32, step_forward: u32, step_backwa } pub fn process_animation_control(control: u32, timeline: u32) -> u32 { - let; - play_pause; - let; - reset; + let play_pause: u32 = ((control >> 3) & 0x1); + let reset: u32 = (control & 0x1); if (reset == 1) { - let; - total_frames; - let; - speed; + let total_frames: u32 = get_timeline_total_frames(timeline); + let speed: u32 = get_timeline_speed(timeline); return create_animation_timeline(0, total_frames, 0, speed); } else { if (play_pause == 1) { @@ -399,18 +345,13 @@ pub fn process_animation_control(control: u32, timeline: u32) -> u32 { } } -pub fn calculate_animation_stats(frames: Vec<>, frame_count: u32) -> u32 { - let; - total_packets; - let; - total_bytes; - let; - avg_latency; - let; - i; +pub fn calculate_animation_stats(frames: [u32; MAX_FRAMES as usize], frame_count: u32) -> u32 { + let mut total_packets: u32 = 0; + let mut total_bytes: u32 = 0; + let mut avg_latency: u32 = 0; + let mut i: u32 = 0; while (i < frame_count) { - let; - packet_count; + let packet_count: u32 = get_anim_frame_packet_count(frames[(i) as usize]); total_packets = (total_packets + packet_count); total_bytes = (total_bytes + (packet_count * 256)); i = (i + 1); diff --git a/gen/rust/transport_tx_fsm.rs b/gen/rust/transport_tx_fsm.rs index 3bdc6e6..3d5bf83 100644 --- a/gen/rust/transport_tx_fsm.rs +++ b/gen/rust/transport_tx_fsm.rs @@ -105,28 +105,28 @@ pub fn header_byte(kind: u8, src: u32, dst: u32, ttl: u8, idx: usize) -> u8 { return kind; } else { if (idx == 2) { - return (); + return (((src >> 24) & 255) as u8); } else { if (idx == 3) { - return (); + return (((src >> 16) & 255) as u8); } else { if (idx == 4) { - return (); + return (((src >> 8) & 255) as u8); } else { if (idx == 5) { - return (); + return ((src & 255) as u8); } else { if (idx == 6) { - return (); + return (((dst >> 24) & 255) as u8); } else { if (idx == 7) { - return (); + return (((dst >> 16) & 255) as u8); } else { if (idx == 8) { - return (); + return (((dst >> 8) & 255) as u8); } else { if (idx == 9) { - return (); + return ((dst & 255) as u8); } else { if (idx == 10) { return ttl; diff --git a/gen/rust/trust_manager.rs b/gen/rust/trust_manager.rs index 0386338..859c040 100644 --- a/gen/rust/trust_manager.rs +++ b/gen/rust/trust_manager.rs @@ -52,27 +52,27 @@ pub fn get_trust_verified(rel: u32) -> u32 { } pub fn create_trust_array(t0: u32, t1: u32, t2: u32, t3: u32, t4: u32, t5: u32, t6: u32, t7: u32) -> u64 { - return ((((((() << 56) | (() << 48)) | (() << 40)) | (() << 32)) | (() << 24)) || (((() << 16) | (() << 8)) | ())); + return (((((((t0 as u64) << 56) | ((t1 as u64) << 48)) | ((t2 as u64) << 40)) | ((t3 as u64) << 32)) | ((t4 as u64) << 24)) || ((((t5 as u64) << 16) | ((t6 as u64) << 8)) | (t7 as u64))); } pub fn get_trust_score(array: u64, index: u32) -> u32 { if (index == 0) { - return (); + return (((array >> 56) & 0xFFFFFFFF) as u32); } if (index == 1) { - return (); + return (((array >> 48) & 0xFFFFFFFF) as u32); } if (index == 2) { - return (); + return (((array >> 40) & 0xFFFFFFFF) as u32); } if (index == 3) { - return (); + return (((array >> 32) & 0xFFFFFFFF) as u32); } if (index == 4) { - return (); + return (((array >> 24) & 0xFFFFFFFF) as u32); } if (index == 5) { - return (); + return (((array >> 16) & 0xFFFFFFFF) as u32); } if (index == 6) { } diff --git a/gen/rust/wire.rs b/gen/rust/wire.rs index 99123c7..404a8a1 100644 --- a/gen/rust/wire.rs +++ b/gen/rust/wire.rs @@ -15,22 +15,22 @@ pub fn frame_kind_valid(k: u8) -> bool { pub fn be_byte(w: u32, i: usize) -> u8 { if (i == 0) { - return (); + return (((w >> 24) & 255) as u8); } else { if (i == 1) { - return (); + return (((w >> 16) & 255) as u8); } else { if (i == 2) { - return (); + return (((w >> 8) & 255) as u8); } else { - return (); + return ((w & 255) as u8); } } } } pub fn u32_be(b0: u8, b1: u8, b2: u8, b3: u8) -> u32 { - return ((((() << 24) | (() << 16)) | (() << 8)) | ()); + return (((((b0 as u32) << 24) | ((b1 as u32) << 16)) | ((b2 as u32) << 8)) | (b3 as u32)); } pub fn header_byte(kind: u8, src: u32, dst: u32, ttl: u8, idx: usize) -> u8 { diff --git a/lefthook.yml b/lefthook.yml index 33b66e0..90b8a20 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -81,8 +81,10 @@ pre-push: cargo-build: run: | - cargo build --release 2>&1 | tail -3 - if [ $? -ne 0 ]; then + # NOTE: `cargo build | tail` makes `$?` the exit code of `tail` (always + # 0), so the old form passed even on a failed build — this is how the + # broken 2026-07-07 build reached main. Check cargo's exit directly. + if ! cargo build --release; then echo "cargo build FAILED" exit 1 fi diff --git a/specs/adaptive_routing.t27 b/specs/adaptive_routing.t27 index 5f0e4e4..28f7632 100644 --- a/specs/adaptive_routing.t27 +++ b/specs/adaptive_routing.t27 @@ -77,12 +77,12 @@ module AdaptiveRouting { fn calculate_score(metrics: u32, metric_type: u32) -> u32 { if (metric_type == METRIC_LATENCY) { // Lower latency = better (inverse scoring) - let latency = get_latency(metrics); + var latency = get_latency(metrics); if (latency == 0) { return 255; } return (255 / latency); } else if (metric_type == METRIC_HOPS) { // Fewer hops = better (inverse scoring) - let hops = get_hops(metrics); + var hops = get_hops(metrics); if (hops == 0) { return 255; } return (255 / hops); } else if (metric_type == METRIC_BANDWIDTH) { @@ -95,8 +95,8 @@ module AdaptiveRouting { // Find best path based on metric type fn find_best_path(metrics_array: u64, metric_type: u32) -> u32 { - let best_path = 0xFF; - let best_score = 0; + var best_path = 0xFF; + var best_score = 0; if (calculate_score(get_path_metrics(metrics_array, 0), metric_type) > best_score) { best_score = calculate_score(get_path_metrics(metrics_array, 0), metric_type); @@ -149,8 +149,8 @@ module AdaptiveRouting { // Find least congested path fn find_least_congested(metrics_array: u64) -> u32 { - let best_path = 0; - let best_load = get_load(get_path_metrics(metrics_array, 0)); + var best_path = 0; + var best_load = get_load(get_path_metrics(metrics_array, 0)); if (get_load(get_path_metrics(metrics_array, 1)) < best_load) { best_load = get_load(get_path_metrics(metrics_array, 1)); diff --git a/specs/anomaly_detector.t27 b/specs/anomaly_detector.t27 index b820fb5..a2206e1 100644 --- a/specs/anomaly_detector.t27 +++ b/specs/anomaly_detector.t27 @@ -66,9 +66,9 @@ module anomaly_detector { // Calculate baseline from historical data fn calculate_baseline(history: [u32; MAX_METRICS], count: u32) -> u32 { - let sum: u32 = 0; - let valid_count: u32 = 0; - let i: u32 = 0; + var sum: u32 = 0; + var valid_count: u32 = 0; + var i: u32 = 0; while (i < count) { let value: u32 = get_metric_value(history[i]); @@ -86,12 +86,12 @@ module anomaly_detector { // Calculate variance fn calculate_variance(history: [u32; MAX_METRICS], count: u32, baseline: u32) -> u32 { - let sum_diff: u32 = 0; - let i: u32 = 0; + var sum_diff: u32 = 0; + var i: u32 = 0; while (i < count) { let value: u32 = get_metric_value(history[i]); - let diff: u32 = 0; + var diff: u32 = 0; if (value > baseline) { diff = value - baseline; @@ -155,8 +155,8 @@ module anomaly_detector { } // Check for repeating unusual pattern - let pattern_count: u32 = 0; - let i: u32 = 0; + var pattern_count: u32 = 0; + var i: u32 = 0; while (i < count - 2) { let val1: u32 = get_metric_value(history[i]); @@ -185,9 +185,9 @@ module anomaly_detector { } // Calculate trend direction - let increases: u32 = 0; - let decreases: u32 = 0; - let i: u32 = 0; + var increases: u32 = 0; + var decreases: u32 = 0; + var i: u32 = 0; while (i < count - 1) { let current: u32 = get_metric_value(history[i]); @@ -218,7 +218,7 @@ module anomaly_detector { // Calculate anomaly severity fn calculate_severity(current: u32, baseline: u32) -> u32 { - let diff: u32 = 0; + var diff: u32 = 0; if (current > baseline) { diff = current - baseline; } else { @@ -246,8 +246,8 @@ module anomaly_detector { let metric_id: u32 = get_metric_id(current_reading); // Check different anomaly types - let anomaly_type: u32 = 0; - let severity: u32 = 0; + var anomaly_type: u32 = 0; + var severity: u32 = 0; if (detect_spike(current, baseline, variance) == 1) { anomaly_type = TYPE_SPIKE; @@ -307,8 +307,8 @@ module anomaly_detector { } // Simple correlation: do both metrics move in same direction? - let same_direction: u32 = 0; - let i: u32 = 0; + var same_direction: u32 = 0; + var i: u32 = 0; while (i < count - 1) { let val1_current: u32 = get_metric_value(history1[i]); @@ -316,11 +316,11 @@ module anomaly_detector { let val2_current: u32 = get_metric_value(history2[i]); let val2_next: u32 = get_metric_value(history2[i + 1]); - let direction1: u32 = 0; + var direction1: u32 = 0; if (val1_next > val1_current) { direction1 = 1; } else if (val1_next < val1_current) { direction1 = 2; } - let direction2: u32 = 0; + var direction2: u32 = 0; if (val2_next > val2_current) { direction2 = 1; } else if (val2_next < val2_current) { direction2 = 2; } @@ -341,8 +341,8 @@ module anomaly_detector { // Detect coordinated attack (multiple metrics anomalous) fn detect_coordinated_attack(anomalies: [u32; MAX_METRICS], count: u32) -> u32 { - let critical_count: u32 = 0; - let i: u32 = 0; + var critical_count: u32 = 0; + var i: u32 = 0; while (i < count) { if (is_critical_anomaly(anomalies[i]) == 1) { diff --git a/specs/api_documenter.t27 b/specs/api_documenter.t27 index 9e34ac4..b920973 100644 --- a/specs/api_documenter.t27 +++ b/specs/api_documenter.t27 @@ -150,7 +150,7 @@ module api_documenter { let return_type: u32 = get_doc_return_type(func_doc); // Calculate description length based on complexity - let desc_length: u32 = 50 + (complexity * 10); + var desc_length: u32 = 50 + (complexity * 10); if (desc_length > 255) { desc_length = 255; } @@ -222,8 +222,8 @@ module api_documenter { // Calculate average module complexity fn calculate_average_complexity(func_docs: [u32; MAX_FUNCTIONS], func_count: u32) -> u32 { - let total_complexity: u32 = 0; - let i: u32 = 0; + var total_complexity: u32 = 0; + var i: u32 = 0; while (i < func_count) { total_complexity = total_complexity + get_doc_complexity(func_docs[i]); @@ -240,9 +240,9 @@ module api_documenter { // Generate complete API documentation fn generate_api_documentation(func_docs: [u32; MAX_FUNCTIONS], func_count: u32, param_docs: [u32; MAX_PARAMETERS], param_count: u32) -> u32 { - let total_complexity: u32 = 0; - let documented_funcs: u32 = 0; - let i: u32 = 0; + var total_complexity: u32 = 0; + var documented_funcs: u32 = 0; + var i: u32 = 0; while (i < func_count) { let func_doc: u32 = func_docs[i]; @@ -287,9 +287,9 @@ module api_documenter { // Create dependency graph fn create_dependency_graph(xrefs: [u32; MAX_FUNCTIONS], xref_count: u32) -> u32 { - let total_connections: u32 = 0; - let strong_connections: u32 = 0; - let i: u32 = 0; + var total_connections: u32 = 0; + var strong_connections: u32 = 0; + var i: u32 = 0; while (i < xref_count) { let strength: u32 = get_xref_strength(xrefs[i]); @@ -303,7 +303,7 @@ module api_documenter { } // Return graph stats: [total_connections][strong_connections][avg_strength][complexity] - let avg_strength: u32 = 0; + var avg_strength: u32 = 0; if (total_connections > 0) { avg_strength = strong_connections / total_connections; } @@ -316,10 +316,10 @@ module api_documenter { // Validate documentation completeness fn validate_documentation(func_docs: [u32; MAX_FUNCTIONS], func_count: u32) -> u32 { - let missing_descriptions: u32 = 0; + var missing_descriptions: u32 = 0; let missing_examples: u32 = 0; - let missing_params: u32 = 0; - let i: u32 = 0; + var missing_params: u32 = 0; + var i: u32 = 0; while (i < func_count) { let func_doc: u32 = func_docs[i]; @@ -338,7 +338,7 @@ module api_documenter { } // Return validation: [missing_descriptions][missing_examples][missing_params][quality_score] - let quality_score: u32 = 100 - ((missing_descriptions * 10) + (missing_params * 5)); + var quality_score: u32 = 100 - ((missing_descriptions * 10) + (missing_params * 5)); if (quality_score > 100) { quality_score = 100; } diff --git a/specs/auto_config.t27 b/specs/auto_config.t27 index 3cbed2c..416a114 100644 --- a/specs/auto_config.t27 +++ b/specs/auto_config.t27 @@ -74,7 +74,7 @@ module auto_config { // Get configuration value fn get_config_value(config: [u32; MAX_PARAMS], param_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let current_param_id: u32 = get_param_id(config[i]); @@ -89,7 +89,7 @@ module auto_config { // Set configuration value fn set_config_value(config: [u32; MAX_PARAMS], param_id: u32, new_value: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let current_param_id: u32 = get_param_id(config[i]); @@ -110,7 +110,7 @@ module auto_config { let config: [u32; MAX_PARAMS] = create_default_config(); // Auto-configure TX power based on node count - let tx_power: u32 = 50; + var tx_power: u32 = 50; if (node_count < 4) { tx_power = 30; // lower power for small networks } else if (node_count > 6) { @@ -119,7 +119,7 @@ module auto_config { set_config_value(config, PARAM_TX_POWER, tx_power); // Auto-configure channel based on interference - let channel: u32 = 0; + var channel: u32 = 0; if (interference_level > 70) { channel = 2; // switch to less crowded channel } else if (interference_level > 40) { @@ -128,7 +128,7 @@ module auto_config { set_config_value(config, PARAM_CHANNEL, channel); // Auto-configure hello interval based on network size - let hello_interval: u32 = 2000; + var hello_interval: u32 = 2000; if (node_count < 4) { hello_interval = 5000; // slower for small networks } else if (node_count > 6) { @@ -141,7 +141,7 @@ module auto_config { // Apply configuration fn apply_config(config: [u32; MAX_PARAMS], param_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let current_param_id: u32 = get_param_id(config[i]); @@ -162,8 +162,8 @@ module auto_config { // Apply all pending configurations fn apply_all_pending(config: [u32; MAX_PARAMS]) -> u32 { - let applied_count: u32 = 0; - let i: u32 = 0; + var applied_count: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let status: u32 = get_param_status(config[i]); @@ -222,7 +222,7 @@ module auto_config { // Auto-optimize configuration fn optimize_config(config: [u32; MAX_PARAMS], network_load: u32, error_rate: u32) -> u32 { - let optimizations: u32 = 0; + var optimizations: u32 = 0; // Optimize based on network conditions if (network_load > 80) { @@ -257,8 +257,8 @@ module auto_config { // Sync configuration across nodes fn sync_config(local_config: [u32; MAX_PARAMS], remote_config: [u32; MAX_PARAMS]) -> u32 { - let synced_count: u32 = 0; - let i: u32 = 0; + var synced_count: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let local_param_id: u32 = get_param_id(local_config[i]); @@ -266,7 +266,7 @@ module auto_config { let local_scope: u32 = get_param_scope(local_config[i]); // Find corresponding remote parameter - let j: u32 = 0; + var j: u32 = 0; while (j < MAX_PARAMS) { let remote_param_id: u32 = get_param_id(remote_config[j]); @@ -295,8 +295,8 @@ module auto_config { // Rollback configuration fn rollback_config(config: [u32; MAX_PARAMS], backup_config: [u32; MAX_PARAMS]) -> u32 { - let rolled_back: u32 = 0; - let i: u32 = 0; + var rolled_back: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let backup_param_id: u32 = get_param_id(backup_config[i]); @@ -304,7 +304,7 @@ module auto_config { let backup_scope: u32 = get_param_scope(backup_config[i]); // Restore from backup - let j: u32 = 0; + var j: u32 = 0; while (j < MAX_PARAMS) { let local_param_id: u32 = get_param_id(config[j]); if (local_param_id == backup_param_id) { @@ -324,7 +324,7 @@ module auto_config { // Create configuration backup fn create_backup(config: [u32; MAX_PARAMS]) -> [u32; MAX_PARAMS] { let backup: [u32; MAX_PARAMS]; - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { backup[i] = config[i]; @@ -336,15 +336,15 @@ module auto_config { // Calculate configuration drift fn calculate_config_drift(config1: [u32; MAX_PARAMS], config2: [u32; MAX_PARAMS]) -> u32 { - let drift_count: u32 = 0; - let total_params: u32 = 0; - let i: u32 = 0; + var drift_count: u32 = 0; + var total_params: u32 = 0; + var i: u32 = 0; while (i < MAX_PARAMS) { let param1_id: u32 = get_param_id(config1[i]); let param1_value: u32 = get_param_value(config1[i]); - let j: u32 = 0; + var j: u32 = 0; while (j < MAX_PARAMS) { let param2_id: u32 = get_param_id(config2[j]); if (param1_id == param2_id) { @@ -372,8 +372,8 @@ module auto_config { // Auto-discover neighboring nodes fn discover_neighbors(node_id: u32, scan_count: u32) -> u32 { - let discovered_count: u32 = 0; - let i: u32 = 0; + var discovered_count: u32 = 0; + var i: u32 = 0; // Simulate neighbor discovery while (i < scan_count) { @@ -388,7 +388,7 @@ module auto_config { // Auto-assign node roles fn assign_node_role(node_id: u32, capabilities: u32) -> u32 { // Roles: 0=normal, 1=coordinator, 2=relay, 3=edge - let role: u32 = 0; + var role: u32 = 0; if (capabilities & 0x1) { role = 1; // coordinator capability diff --git a/specs/bandwidth_allocator.t27 b/specs/bandwidth_allocator.t27 index d99b35b..bfd1157 100644 --- a/specs/bandwidth_allocator.t27 +++ b/specs/bandwidth_allocator.t27 @@ -95,7 +95,7 @@ module BandwidthAllocator { let allocated = get_allocated_bw(state); // Priority 0 = high, Priority 2 = low - let allocation = 0; + var allocation = 0; if (priority == 0) { // High priority: allocate up to max bandwidth @@ -142,7 +142,7 @@ module BandwidthAllocator { // Count active flows (flows with allocated bandwidth) fn count_active_flows(flow_array: u64) -> u32 { - let count = 0; + var count = 0; if (get_current_bandwidth(get_flow_req(flow_array, 0)) > 0) { count = count + 1; } if (get_current_bandwidth(get_flow_req(flow_array, 1)) > 0) { count = count + 1; } @@ -159,7 +159,7 @@ module BandwidthAllocator { // Find underutilized bandwidth (available bandwidth that can be reclaimed) fn find_reclaimable_bandwidth(state: u32, flow_array: u64) -> u32 { let allocated = get_allocated_bw(state); - let total_used = 0; + var total_used = 0; if (get_current_bandwidth(get_flow_req(flow_array, 0)) > 0) { total_used = total_used + get_current_bandwidth(get_flow_req(flow_array, 0)); diff --git a/specs/cache_management.t27 b/specs/cache_management.t27 index 9ef7787..671b6bf 100644 --- a/specs/cache_management.t27 +++ b/specs/cache_management.t27 @@ -36,7 +36,7 @@ module cache_management { // Update access count fn update_access_count(entry: u32) -> u32 { let data_id: u32 = get_data_id(entry); - let access_count: u32 = get_access_count(entry); + var access_count: u32 = get_access_count(entry); let age: u32 = get_age(entry); let size: u32 = get_entry_size(entry); @@ -58,7 +58,7 @@ module cache_management { // Find cache entry by data ID fn find_entry(cache: [u32; MAX_ENTRIES], data_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_ENTRIES) { let entry_data_id: u32 = get_data_id(cache[i]); @@ -103,8 +103,8 @@ module cache_management { } // Find empty slot - let empty_index: u32 = MAX_ENTRIES; - let i: u32 = 0; + var empty_index: u32 = MAX_ENTRIES; + var i: u32 = 0; while (i < MAX_ENTRIES) { if (get_data_id(cache[i]) == 0) { @@ -139,9 +139,9 @@ module cache_management { // Find eviction candidate (LRU with low access count) fn find_eviction_candidate(cache: [u32; MAX_ENTRIES]) -> u32 { - let worst_score: u32 = 0xFFFFFFFF; - let candidate: u32 = MAX_ENTRIES; - let i: u32 = 0; + var worst_score: u32 = 0xFFFFFFFF; + var candidate: u32 = MAX_ENTRIES; + var i: u32 = 0; while (i < MAX_ENTRIES) { let entry: u32 = cache[i]; @@ -195,7 +195,7 @@ module cache_management { // Age all cache entries fn age_cache(cache: [u32; MAX_ENTRIES]) { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_ENTRIES) { let entry: u32 = cache[i]; @@ -225,9 +225,9 @@ module cache_management { // Find most popular entry fn find_most_popular(cache: [u32; MAX_ENTRIES]) -> u32 { - let max_access: u32 = 0; - let popular_index: u32 = MAX_ENTRIES; - let i: u32 = 0; + var max_access: u32 = 0; + var popular_index: u32 = MAX_ENTRIES; + var i: u32 = 0; while (i < MAX_ENTRIES) { let access_count: u32 = get_access_count(cache[i]); @@ -245,9 +245,9 @@ module cache_management { // Find least popular entry fn find_least_popular(cache: [u32; MAX_ENTRIES]) -> u32 { - let min_access: u32 = 0xFFFFFFFF; - let unpopular_index: u32 = MAX_ENTRIES; - let i: u32 = 0; + var min_access: u32 = 0xFFFFFFFF; + var unpopular_index: u32 = MAX_ENTRIES; + var i: u32 = 0; while (i < MAX_ENTRIES) { let entry: u32 = cache[i]; @@ -326,10 +326,10 @@ module cache_management { // Update cache statistics fn update_stats(stats: u32, hit: u32, evicted: u32) -> u32 { - let hits: u32 = get_hits(stats); - let misses: u32 = get_misses(stats); + var hits: u32 = get_hits(stats); + var misses: u32 = get_misses(stats); let size: u32 = get_cache_size(stats); - let evictions: u32 = get_evictions(stats); + var evictions: u32 = get_evictions(stats); if (hit == 1) { hits = hits + 1; diff --git a/specs/compression_engine.t27 b/specs/compression_engine.t27 index 1ebf9f6..734bf22 100644 --- a/specs/compression_engine.t27 +++ b/specs/compression_engine.t27 @@ -51,10 +51,10 @@ module compression_engine { // Run-length encoding compression fn compress_rle(data: u32, length: u32) -> u32 { // Simple RLE: count consecutive values - let compressed: u32 = 0; - let count: u32 = 0; - let current: u32 = data & 0xF; - let i: u32 = 0; + var compressed: u32 = 0; + var count: u32 = 0; + var current: u32 = data & 0xF; + var i: u32 = 0; while (i < length && i < 8) { let value: u32 = (data >> (i * 4)) & 0xF; @@ -80,14 +80,14 @@ module compression_engine { // Run-length encoding decompression fn decompress_rle(compressed: u32) -> u32 { - let decompressed: u32 = 0; - let pos: u32 = 0; + var decompressed: u32 = 0; + var pos: u32 = 0; while (pos < 32) { let count: u32 = (compressed >> pos) & 0xF; let value: u32 = (compressed >> (pos + 4)) & 0xF; - let i: u32 = 0; + var i: u32 = 0; while (i < count && i < 8) { decompressed = (decompressed << 4) | value; i = i + 1; @@ -102,16 +102,16 @@ module compression_engine { // Dictionary-based compression fn compress_dictionary(data: u32, dictionary: [u32; DICTIONARY_SIZE]) -> u32 { // Find best dictionary match - let best_match: u32 = 0; - let best_score: u32 = 0; - let i: u32 = 0; + var best_match: u32 = 0; + var best_score: u32 = 0; + var i: u32 = 0; while (i < DICTIONARY_SIZE) { let dict_value: u32 = dictionary[i]; - let score: u32 = 0; + var score: u32 = 0; // Count matching nibbles - let j: u32 = 0; + var j: u32 = 0; while (j < 8) { let data_nibble: u32 = (data >> (j * 4)) & 0xF; let dict_nibble: u32 = (dict_value >> (j * 4)) & 0xF; @@ -146,7 +146,7 @@ module compression_engine { // Delta encoding compression fn compress_delta(data: u32, previous: u32) -> u32 { // Calculate difference - let delta: u32 = 0; + var delta: u32 = 0; if (data > previous) { delta = data - previous; @@ -205,7 +205,7 @@ module compression_engine { // Try delta let delta_compressed: u32 = compress_delta(data, previous); - let delta_size: u32 = 0; + var delta_size: u32 = 0; if (delta_compressed < 16) { delta_size = 1; } else if (delta_compressed < 256) { @@ -228,8 +228,8 @@ module compression_engine { // Compress data block fn compress_block(data: u32, previous: u32, dictionary: [u32; DICTIONARY_SIZE]) -> u32 { let method: u32 = choose_compression_method(data, previous, dictionary); - let compressed: u32 = 0; - let compressed_size: u32 = 8; + var compressed: u32 = 0; + var compressed_size: u32 = 8; if (method == METHOD_RLE) { compressed = compress_rle(data, 8); @@ -266,9 +266,9 @@ module compression_engine { // Calculate total compression savings fn calculate_total_savings(blocks: [u32; MAX_BLOCKS], count: u32) -> u32 { - let total_original: u32 = 0; - let total_compressed: u32 = 0; - let i: u32 = 0; + var total_original: u32 = 0; + var total_compressed: u32 = 0; + var i: u32 = 0; while (i < count) { total_original = total_original + get_original_size(blocks[i]); @@ -296,7 +296,7 @@ module compression_engine { // Find pattern in data fn find_pattern(data: u32, pattern: u32) -> u32 { let mask: u32 = 0xFFFFFFFF; - let i: u32 = 0; + var i: u32 = 0; while (i < 32) { let shifted: u32 = (data >> i) & mask; diff --git a/specs/congestion_control.t27 b/specs/congestion_control.t27 index 1ff09ea..017ddb4 100644 --- a/specs/congestion_control.t27 +++ b/specs/congestion_control.t27 @@ -47,9 +47,9 @@ module congestion_control { // Update congestion window on ACK fn on_ack(congestion: u32) -> u32 { - let cwnd: u32 = get_cwnd(congestion); + var cwnd: u32 = get_cwnd(congestion); let ssthresh: u32 = get_ssthresh(congestion); - let state: u32 = get_congestion_state(congestion); + var state: u32 = get_congestion_state(congestion); let losses: u32 = get_loss_count(congestion); if (state == STATE_SLOW_START) { @@ -74,10 +74,10 @@ module congestion_control { // Handle packet loss fn on_loss(congestion: u32) -> u32 { - let cwnd: u32 = get_cwnd(congestion); - let ssthresh: u32 = get_ssthresh(congestion); - let state: u32 = get_congestion_state(congestion); - let losses: u32 = get_loss_count(congestion); + var cwnd: u32 = get_cwnd(congestion); + var ssthresh: u32 = get_ssthresh(congestion); + var state: u32 = get_congestion_state(congestion); + var losses: u32 = get_loss_count(congestion); losses = losses + 1; @@ -97,9 +97,9 @@ module congestion_control { // Handle triple duplicate ACK (fast retransmit) fn on_triple_dup_ack(congestion: u32) -> u32 { - let cwnd: u32 = get_cwnd(congestion); - let ssthresh: u32 = get_ssthresh(congestion); - let state: u32 = get_congestion_state(congestion); + var cwnd: u32 = get_cwnd(congestion); + var ssthresh: u32 = get_ssthresh(congestion); + var state: u32 = get_congestion_state(congestion); let losses: u32 = get_loss_count(congestion); // Save old cwnd @@ -168,7 +168,7 @@ module congestion_control { // Manage multiple congestion controllers fn find_congestion_controller(controllers: [u32; MAX_FLOWS], flow_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { if (i == flow_id) { @@ -182,7 +182,7 @@ module congestion_control { // Check if any flow is congested fn is_any_flow_congested(controllers: [u32; MAX_FLOWS]) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { if (is_congested(controllers[i]) == 1) { @@ -196,8 +196,8 @@ module congestion_control { // Calculate total congestion window fn calculate_total_cwnd(controllers: [u32; MAX_FLOWS]) -> u32 { - let total: u32 = 0; - let i: u32 = 0; + var total: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { total = total + get_cwnd(controllers[i]); @@ -209,8 +209,8 @@ module congestion_control { // Fair bandwidth allocation fn allocate_fair_bandwidth(controllers: [u32; MAX_FLOWS], total_bandwidth: u32) -> u32 { - let active_flows: u32 = 0; - let i: u32 = 0; + var active_flows: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { let cwnd: u32 = get_cwnd(controllers[i]); @@ -229,7 +229,7 @@ module congestion_control { // Probe for available bandwidth fn probe_bandwidth(congestion: u32) -> u32 { - let cwnd: u32 = get_cwnd(congestion); + var cwnd: u32 = get_cwnd(congestion); let ssthresh: u32 = get_ssthresh(congestion); let state: u32 = get_congestion_state(congestion); let losses: u32 = get_loss_count(congestion); @@ -246,10 +246,10 @@ module congestion_control { // Reset to safe state after timeout fn reset_after_timeout(congestion: u32) -> u32 { - let cwnd: u32 = get_cwnd(congestion); + var cwnd: u32 = get_cwnd(congestion); // Set ssthresh to half of current window - let ssthresh: u32 = cwnd / 2; + var ssthresh: u32 = cwnd / 2; if (ssthresh < MIN_WINDOW) { ssthresh = MIN_WINDOW; } diff --git a/specs/cross_layer_optimizer.t27 b/specs/cross_layer_optimizer.t27 index 332583e..1f2c6eb 100644 --- a/specs/cross_layer_optimizer.t27 +++ b/specs/cross_layer_optimizer.t27 @@ -109,15 +109,15 @@ module CrossLayerOptimizer { if (mode == MODE_CONSERVATIVE) { // Reduce power across layers - let new_phy = current_phy_power - 10; - let new_mac = current_mac_power - 5; + var new_phy = current_phy_power - 10; + var new_mac = current_mac_power - 5; if (new_phy < 10) { new_phy = 10; } if (new_mac < 10) { new_mac = 10; } return (new_phy, new_mac); } else if (mode == MODE_AGGRESSIVE) { // Increase power for performance - let new_phy = current_phy_power + 10; - let new_mac = current_mac_power + 5; + var new_phy = current_phy_power + 10; + var new_mac = current_mac_power + 5; if (new_phy > 255) { new_phy = 255; } if (new_mac > 255) { new_mac = 255; } return (new_phy, new_mac); @@ -133,21 +133,21 @@ module CrossLayerOptimizer { if (target == 0) { // Latency optimization // Increase rate, decrease retries - let new_rate = get_rate(mac_params) + 20; - let new_retries = get_retries(phy_params) - 1; + var new_rate = get_rate(mac_params) + 20; + var new_retries = get_retries(phy_params) - 1; if (new_rate > 255) { new_rate = 255; } if (new_retries < 1) { new_retries = 1; } return (new_rate, new_retries); } else if (target == 1) { // Throughput optimization // Maximize rate and window - let new_rate = 255; - let new_window = get_window(mac_params) + 10; + var new_rate = 255; + var new_window = get_window(mac_params) + 10; if (new_window > 255) { new_window = 255; } return (new_rate, new_window); } else { // Reliability optimization // Increase retries and power - let new_retries = get_retries(phy_params) + 3; - let new_power = get_power(phy_params) + 15; + var new_retries = get_retries(phy_params) + 3; + var new_power = get_power(phy_params) + 15; if (new_retries > 255) { new_retries = 255; } if (new_power > 255) { new_power = 255; } return (new_retries, new_power); @@ -168,7 +168,7 @@ module CrossLayerOptimizer { let last_sync = get_last_sync(state); let target = get_optimization_target(state); - let new_counter = counter + 1; + var new_counter = counter + 1; if (new_counter > 255) { new_counter = 0; } // Wrap around return create_cross_layer_state(mode, new_counter, last_sync, target); diff --git a/specs/docs_generator.t27 b/specs/docs_generator.t27 index db2ee8e..6487bae 100644 --- a/specs/docs_generator.t27 +++ b/specs/docs_generator.t27 @@ -91,7 +91,7 @@ module docs_generator { // Generate Markdown header fn generate_markdown_header(level: u32, title_id: u32) -> u32 { // Markdown uses # for headers, ## for subsections, etc. - let header_prefix: u32 = 0; + var header_prefix: u32 = 0; if (level == 1) { header_prefix = 0x23; // '#' } else if (level == 2) { @@ -261,11 +261,11 @@ module docs_generator { // Calculate document statistics fn calculate_document_stats(sections: [u32; MAX_SECTIONS], section_count: u32) -> u32 { - let total_pages: u32 = 0; - let total_words: u32 = 0; - let total_tables: u32 = 0; + var total_pages: u32 = 0; + var total_words: u32 = 0; + var total_tables: u32 = 0; let total_figures: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < section_count) { let content_len: u32 = get_section_content_length(sections[i]); @@ -315,8 +315,8 @@ module docs_generator { // Format document for output fn format_document(sections: [u32; MAX_SECTIONS], section_count: u32, format: u32, layout: u32) -> u32 { - let formatted_size: u32 = 0; - let i: u32 = 0; + var formatted_size: u32 = 0; + var i: u32 = 0; while (i < section_count) { let content_len: u32 = get_section_content_length(sections[i]); @@ -364,8 +364,8 @@ module docs_generator { let actual_sections: u32 = (generated_doc >> 8) & 0xFF; let actual_funcs: u32 = generated_doc & 0xFF; - let section_match: u32 = 0; - let func_match: u32 = 0; + var section_match: u32 = 0; + var func_match: u32 = 0; if (actual_sections >= expected_sections) { section_match = 1; diff --git a/specs/energy_aware_routing.t27 b/specs/energy_aware_routing.t27 index 7c23bf7..1eb73ab 100644 --- a/specs/energy_aware_routing.t27 +++ b/specs/energy_aware_routing.t27 @@ -94,7 +94,7 @@ module EnergyAwareRouting { } // Score = (battery * 100) / cost - let score = (battery * 100) / total_cost; + var score = (battery * 100) / total_cost; if (score > 32767) { score = 32767; } // Max score return score; } @@ -109,8 +109,8 @@ module EnergyAwareRouting { // Find most energy-efficient path fn find_energy_optimal_path(energy_array: u64) -> u32 { - let best_path = 0xFF; - let best_score = 0; + var best_path = 0xFF; + var best_score = 0; if (is_path_viable(get_path_energy(energy_array, 0))) { let score = get_energy_score(get_path_energy(energy_array, 0)); @@ -149,8 +149,8 @@ module EnergyAwareRouting { // Find path with minimum energy cost fn find_min_cost_path(energy_array: u64) -> u32 { - let best_path = 0xFF; - let best_cost = 0xFFFFFFFF; + var best_path = 0xFF; + var best_cost = 0xFFFFFFFF; if (is_path_viable(get_path_energy(energy_array, 0))) { let cost = get_total_cost(get_path_energy(energy_array, 0)); @@ -189,8 +189,8 @@ module EnergyAwareRouting { // Balance load across paths based on battery levels fn select_balanced_path(energy_array: u64, current_path: u32) -> u32 { - let best_path = current_path; - let best_battery = get_battery_levels(get_path_energy(energy_array, current_path)); + var best_path = current_path; + var best_battery = get_battery_levels(get_path_energy(energy_array, current_path)); // Find path with highest battery level if (is_path_viable(get_path_energy(energy_array, 0))) { diff --git a/specs/etx.t27 b/specs/etx.t27 index b43b4f6..8d52f2b 100644 --- a/specs/etx.t27 +++ b/specs/etx.t27 @@ -42,7 +42,7 @@ module MeshEtx { if (est == 255 && sample == 255) { return 255; } - return fp_mul(alpha, sample) + fp_mul(256 - alpha, est); + return fp_mul(alpha, sample) + fp_mul((ONE_FP - alpha as u16) as u8, est); } // Check if delivery ratio is dead diff --git a/specs/failure_predictor.t27 b/specs/failure_predictor.t27 index 889ef01..97d8159 100644 --- a/specs/failure_predictor.t27 +++ b/specs/failure_predictor.t27 @@ -148,7 +148,7 @@ module failure_predictor { let failure_prob = predict_failure_probability(metrics); // Adjust by degradation rate - let adjusted_risk = failure_prob + degradation_rate; + var adjusted_risk = failure_prob + degradation_rate; if (adjusted_risk > 100) { adjusted_risk = 100; } return adjusted_risk; @@ -165,8 +165,8 @@ module failure_predictor { // Find most at-risk node fn find_most_at_risk(health_array: u64) -> u32 { - let highest_risk = 0xFF; - let highest_risk_node = 0xFF; + var highest_risk = 0xFF; + var highest_risk_node = 0xFF; if (calculate_failure_risk(get_health_metrics(health_array, 0), 0) > highest_risk) { highest_risk = calculate_failure_risk(get_health_metrics(health_array, 0), 0); diff --git a/specs/fault_detection.t27 b/specs/fault_detection.t27 index 599c1bf..5acac8e 100644 --- a/specs/fault_detection.t27 +++ b/specs/fault_detection.t27 @@ -126,7 +126,7 @@ module FaultDetection { // Count failed nodes in table fn count_failed_nodes(table: u64) -> u32 { - let count = 0; + var count = 0; if (is_node_failed(get_node_state(table, 0))) { count = count + 1; } if (is_node_failed(get_node_state(table, 1))) { count = count + 1; } if (is_node_failed(get_node_state(table, 2))) { count = count + 1; } diff --git a/specs/flow_control.t27 b/specs/flow_control.t27 index ad3c3d2..54d302a 100644 --- a/specs/flow_control.t27 +++ b/specs/flow_control.t27 @@ -69,7 +69,7 @@ module flow_control { let credits: u32 = get_credits(flow); let window: u32 = get_window_size(flow); - let new_credits: u32 = credits + additional; + var new_credits: u32 = credits + additional; if (new_credits > window) { new_credits = window; } @@ -176,7 +176,7 @@ module flow_control { // Manage multiple flows fn find_flow_by_sender(flows: [u32; MAX_FLOWS], sender: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { let flow_sender: u32 = get_sender_id(flows[i]); @@ -191,7 +191,7 @@ module flow_control { // Find flow by receiver fn find_flow_by_receiver(flows: [u32; MAX_FLOWS], receiver: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { let flow_receiver: u32 = get_receiver_id(flows[i]); @@ -206,7 +206,7 @@ module flow_control { // Check if any flow is blocked fn is_any_flow_blocked(flows: [u32; MAX_FLOWS]) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { if (has_credits(flows[i]) == 0) { @@ -220,8 +220,8 @@ module flow_control { // Count active flows fn count_active_flows(flows: [u32; MAX_FLOWS]) -> u32 { - let count: u32 = 0; - let i: u32 = 0; + var count: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { let sender: u32 = get_sender_id(flows[i]); @@ -236,8 +236,8 @@ module flow_control { // Calculate total available credits fn calculate_total_credits(flows: [u32; MAX_FLOWS]) -> u32 { - let total: u32 = 0; - let i: u32 = 0; + var total: u32 = 0; + var i: u32 = 0; while (i < MAX_FLOWS) { total = total + get_credits(flows[i]); diff --git a/specs/health_dashboard.t27 b/specs/health_dashboard.t27 index a6b4ba4..2692eb3 100644 --- a/specs/health_dashboard.t27 +++ b/specs/health_dashboard.t27 @@ -74,14 +74,14 @@ module health_dashboard { return 100; // assume healthy if no metrics } - let total_score: u32 = 0; - let metric_count: u32 = 0; - let i: u32 = 0; + var total_score: u32 = 0; + var metric_count: u32 = 0; + var i: u32 = 0; while (i < count && metrics[i] != 0) { let metric_type: u32 = get_health_metric_type(metrics[i]); let value: u32 = get_health_value(metrics[i]); - let metric_score: u32 = 0; + var metric_score: u32 = 0; // Convert metric to health score (higher is better) if (metric_type == METRIC_CPU || metric_type == METRIC_MEMORY) { @@ -118,8 +118,8 @@ module health_dashboard { return 100; } - let total_health: u32 = 0; - let i: u32 = 0; + var total_health: u32 = 0; + var i: u32 = 0; while (i < node_count) { let node_health: u32 = node_metrics[i]; @@ -132,15 +132,15 @@ module health_dashboard { // Detect critical issues fn detect_critical_issues(metrics: [u32; MAX_METRICS], count: u32) -> u32 { - let critical_count: u32 = 0; - let i: u32 = 0; + var critical_count: u32 = 0; + var i: u32 = 0; while (i < count && metrics[i] != 0) { let metric_type: u32 = get_health_metric_type(metrics[i]); let value: u32 = get_health_value(metrics[i]); // Check if metric is in critical range - let is_critical: u32 = 0; + var is_critical: u32 = 0; if (metric_type == METRIC_CPU || metric_type == METRIC_MEMORY) { if (value > CRITICAL_THRESHOLD) { is_critical = 1; @@ -167,15 +167,15 @@ module health_dashboard { // Detect warning issues fn detect_warning_issues(metrics: [u32; MAX_METRICS], count: u32) -> u32 { - let warning_count: u32 = 0; - let i: u32 = 0; + var warning_count: u32 = 0; + var i: u32 = 0; while (i < count && metrics[i] != 0) { let metric_type: u32 = get_health_metric_type(metrics[i]); let value: u32 = get_health_value(metrics[i]); // Check if metric is in warning range - let is_warning: u32 = 0; + var is_warning: u32 = 0; if (metric_type == METRIC_CPU || metric_type == METRIC_MEMORY) { if (value > ALERT_THRESHOLD && value <= CRITICAL_THRESHOLD) { is_warning = 1; @@ -243,7 +243,7 @@ module health_dashboard { // Generate health alert fn generate_alert(node_id: u32, alert_type: u32, value: u32, timestamp: u32) -> u32 { - let severity: u32 = 0; + var severity: u32 = 0; if (value > CRITICAL_THRESHOLD || value < (100 - CRITICAL_THRESHOLD)) { severity = 3; // critical @@ -279,8 +279,8 @@ module health_dashboard { // Find unhealthy nodes fn find_unhealthy_nodes(node_healths: [u32; MAX_NODES], threshold: u32) -> u32 { - let count: u32 = 0; - let i: u32 = 0; + var count: u32 = 0; + var i: u32 = 0; while (i < MAX_NODES) { if (node_healths[i] < threshold) { @@ -296,9 +296,9 @@ module health_dashboard { fn calculate_network_trend(current_scores: [u32; MAX_NODES], previous_scores: [u32; MAX_NODES], node_count: u32) -> u32 { - let improving: u32 = 0; - let degrading: u32 = 0; - let i: u32 = 0; + var improving: u32 = 0; + var degrading: u32 = 0; + var i: u32 = 0; while (i < node_count) { let trend: u32 = analyze_health_trend(current_scores[i], previous_scores[i]); diff --git a/specs/health_monitoring.t27 b/specs/health_monitoring.t27 index 40b75bd..451f0b1 100644 --- a/specs/health_monitoring.t27 +++ b/specs/health_monitoring.t27 @@ -96,8 +96,8 @@ module HealthMonitoring { // Calculate overall health status fn calculate_overall_health(array: u64) -> u32 { - let failed = 0; - let warnings = 0; + var failed = 0; + var warnings = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_FAIL) { failed = failed + 1; } if (get_check_result(get_health_check(array, 1)) == RESULT_FAIL) { failed = failed + 1; } @@ -128,7 +128,7 @@ module HealthMonitoring { // Count failed checks fn count_failed_checks(array: u64) -> u32 { - let count = 0; + var count = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_FAIL) { count = count + 1; } if (get_check_result(get_health_check(array, 1)) == RESULT_FAIL) { count = count + 1; } if (get_check_result(get_health_check(array, 2)) == RESULT_FAIL) { count = count + 1; } @@ -142,7 +142,7 @@ module HealthMonitoring { // Count warning checks fn count_warning_checks(array: u64) -> u32 { - let count = 0; + var count = 0; if (get_check_result(get_health_check(array, 0)) == RESULT_WARN) { count = count + 1; } if (get_check_result(get_health_check(array, 1)) == RESULT_WARN) { count = count + 1; } if (get_check_result(get_health_check(array, 2)) == RESULT_WARN) { count = count + 1; } @@ -167,8 +167,8 @@ module HealthMonitoring { // Get health percentage (passing checks / total checks) fn get_health_percentage(array: u64) -> u32 { - let total = 0; - let passing = 0; + var total = 0; + var passing = 0; if (get_check_result(get_health_check(array, 0)) != RESULT_FAIL) { passing = passing + 1; } if (get_check_result(get_health_check(array, 0)) != RESULT_SKIP) { total = total + 1; } diff --git a/specs/integration_framework.t27 b/specs/integration_framework.t27 index b05b0c6..91cc2e5 100644 --- a/specs/integration_framework.t27 +++ b/specs/integration_framework.t27 @@ -85,7 +85,7 @@ module integration_framework { let msg_type: u32 = get_integration_message_type(message); // Find destination module - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_MODULES) { let module_id: u32 = get_registered_module_id(modules[i]); @@ -109,7 +109,7 @@ module integration_framework { // Receive message fn receive_message(messages: [u32; MAX_MESSAGES], message_count: u32, module_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < message_count) { let dest: u32 = get_integration_message_dest(messages[i]); @@ -160,7 +160,7 @@ module integration_framework { let subscription_id: u32 = module_id * 10 + event_type; // Create subscription record - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_EVENTS) { if (subscriptions[i] == 0) { subscriptions[i] = create_event(subscription_id, event_type, module_id, 0); @@ -175,9 +175,9 @@ module integration_framework { // Publish event fn publish_event(event: u32, subscriptions: [u32; MAX_EVENTS], modules: [u32; MAX_MODULES]) -> u32 { let event_type: u32 = get_event_type(event); - let notified_count: u32 = 0; + var notified_count: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_EVENTS) { let sub_event_type: u32 = get_event_type(subscriptions[i]); @@ -224,8 +224,8 @@ module integration_framework { // Synchronize module states fn synchronize_states(modules: [u32; MAX_MODULES], module_count: u32, sync_requests: u32) -> u32 { - let synced_count: u32 = 0; - let i: u32 = 0; + var synced_count: u32 = 0; + var i: u32 = 0; while (i < module_count) { let module_id: u32 = get_registered_module_id(modules[i]); @@ -280,10 +280,10 @@ module integration_framework { // Propagate error through system fn propagate_error(error: u32, modules: [u32; MAX_MODULES], module_count: u32) -> u32 { let severity: u32 = get_error_severity(error); - let notified_count: u32 = 0; + var notified_count: u32 = 0; // Notify modules based on severity - let i: u32 = 0; + var i: u32 = 0; while (i < module_count) { let module_type: u32 = get_registered_module_type(modules[i]); @@ -313,7 +313,7 @@ module integration_framework { // Module lifecycle management fn load_module(module_id: u32, module_type: u32, priority: u32, modules: [u32; MAX_MODULES]) -> u32 { // Find empty slot - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_MODULES) { if (get_registered_module_id(modules[i]) == 0) { modules[i] = create_module_registration(module_id, module_type, priority, STATUS_IDLE); @@ -327,7 +327,7 @@ module integration_framework { // Unload module fn unload_module(module_id: u32, modules: [u32; MAX_MODULES]) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_MODULES) { let registered_id: u32 = get_registered_module_id(modules[i]); @@ -369,8 +369,8 @@ module integration_framework { // Check if dependencies are satisfied fn check_dependencies(module_id: u32, dependencies: [u32; MAX_MODULES], loaded_modules: [u32; MAX_MODULES], module_count: u32) -> u32 { - let satisfied: u32 = 1; - let i: u32 = 0; + var satisfied: u32 = 1; + var i: u32 = 0; while (i < MAX_MODULES) { let dep_module_id: u32 = get_dependency_module_id(dependencies[i]); @@ -381,8 +381,8 @@ module integration_framework { if (required == 1) { // Check if dependency is loaded - let j: u32 = 0; - let found: u32 = 0; + var j: u32 = 0; + var found: u32 = 0; while (j < module_count) { let loaded_id: u32 = get_registered_module_id(loaded_modules[j]); @@ -438,10 +438,10 @@ module integration_framework { // Allocate resources fn allocate_resources(requests: [u32; MAX_MESSAGES], request_count: u32, available_resources: u32) -> u32 { - let total_requested: u32 = 0; - let allocated_count: u32 = 0; + var total_requested: u32 = 0; + var allocated_count: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < request_count) { let amount: u32 = get_resource_request_amount(requests[i]); total_requested = total_requested + amount; @@ -453,8 +453,8 @@ module integration_framework { return total_requested; } else { // Allocate based on priority - let allocated: u32 = 0; - let j: u32 = 0; + var allocated: u32 = 0; + var j: u32 = 0; while (j < request_count && allocated < available_resources) { let amount: u32 = get_resource_request_amount(requests[j]); @@ -485,12 +485,12 @@ module integration_framework { fn generate_integration_stats(modules: [u32; MAX_MODULES], module_count: u32, messages: [u32; MAX_MESSAGES], message_count: u32, events: [u32; MAX_EVENTS], event_count: u32) -> u32 { - let active_modules: u32 = 0; - let active_messages: u32 = 0; - let events_processed: u32 = 0; + var active_modules: u32 = 0; + var active_messages: u32 = 0; + var events_processed: u32 = 0; let errors_handled: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < module_count) { let status: u32 = get_registered_module_status(modules[i]); if (status == STATUS_ACTIVE || status == STATUS_BUSY) { @@ -499,13 +499,13 @@ module integration_framework { i = i + 1; } - let j: u32 = 0; + var j: u32 = 0; while (j < message_count) { active_messages = active_messages + 1; j = j + 1; } - let k: u32 = 0; + var k: u32 = 0; while (k < event_count) { events_processed = events_processed + 1; k = k + 1; @@ -516,9 +516,9 @@ module integration_framework { // Validate integration health fn validate_integration_health(modules: [u32; MAX_MODULES], module_count: u32) -> u32 { - let active_count: u32 = 0; - let error_count: u32 = 0; - let i: u32 = 0; + var active_count: u32 = 0; + var error_count: u32 = 0; + var i: u32 = 0; while (i < module_count) { let status: u32 = get_registered_module_status(modules[i]); @@ -533,7 +533,7 @@ module integration_framework { } // Health score: [active_percentage][error_count][0][0] - let active_percentage: u32 = 0; + var active_percentage: u32 = 0; if (module_count > 0) { active_percentage = (active_count * 100) / module_count; } diff --git a/specs/key_management.t27 b/specs/key_management.t27 index a549dfa..4a88123 100644 --- a/specs/key_management.t27 +++ b/specs/key_management.t27 @@ -129,8 +129,8 @@ module KeyManagement { // Get active key (most recent) fn get_active_key(store: u64) -> u32 { - let best_index = 0xFF; - let best_timestamp = 0; + var best_index = 0xFF; + var best_timestamp = 0; if (get_key_valid(get_key_entry(store, 0)) == KEY_VALID) { let ts = get_key_timestamp(get_key_entry(store, 0)); @@ -172,7 +172,7 @@ module KeyManagement { // Count valid keys fn count_valid_keys(store: u64) -> u32 { - let count = 0; + var count = 0; if (get_key_valid(get_key_entry(store, 0)) == KEY_VALID) { count = count + 1; } if (get_key_valid(get_key_entry(store, 1)) == KEY_VALID) { count = count + 1; } if (get_key_valid(get_key_entry(store, 2)) == KEY_VALID) { count = count + 1; } diff --git a/specs/link_quality_monitor.t27 b/specs/link_quality_monitor.t27 index 830fbef..5766bac 100644 --- a/specs/link_quality_monitor.t27 +++ b/specs/link_quality_monitor.t27 @@ -20,10 +20,10 @@ module LinkQualityMonitor { fn update_ewma(current: u8, sample: u8) -> u8 { // Fixed-point Q8 calculation // term1 = α * sample - let term1: u16 = ((ALPHA_Q8 as u16) * (sample as u16)) >> 8; + var term1: u16 = ((ALPHA_Q8 as u16) * (sample as u16)) >> 8; // term2 = (1-α) * current - let term2: u16 = ((ONE_MINUS_ALPHA_Q8 as u16) * (current as u16)) >> 8; + var term2: u16 = ((ONE_MINUS_ALPHA_Q8 as u16) * (current as u16)) >> 8; let new_estimate: u16 = term1 + term2; diff --git a/specs/load_predictor.t27 b/specs/load_predictor.t27 index daa7994..87505fd 100644 --- a/specs/load_predictor.t27 +++ b/specs/load_predictor.t27 @@ -60,8 +60,8 @@ module load_predictor { // Calculate moving average of historical load fn calculate_moving_average(history: [u32; HISTORY_SIZE], count: u32) -> u32 { - let sum: u32 = 0; - let i: u32 = 0; + var sum: u32 = 0; + var i: u32 = 0; while (i < count) { let metrics = history[i]; @@ -85,7 +85,7 @@ module load_predictor { let recent: u32 = get_bandwidth_usage(history[count - 1]); let previous: u32 = get_bandwidth_usage(history[count - 3]); - let diff: u32 = 0; + var diff: u32 = 0; if (recent > previous) { diff = recent - previous; } else { @@ -113,7 +113,7 @@ module load_predictor { let trend: u32 = detect_trend(history, count); let avg: u32 = calculate_moving_average(history, count); - let predicted: u32 = current; + var predicted: u32 = current; if (trend == 1) { // increasing let increase: u32 = (current - avg) / 2; @@ -140,13 +140,13 @@ module load_predictor { return 20; } - let variance: u32 = 0; + var variance: u32 = 0; let avg: u32 = calculate_moving_average(history, count); - let i: u32 = 0; + var i: u32 = 0; while (i < count) { let value: u32 = get_bandwidth_usage(history[i]); - let diff: u32 = 0; + var diff: u32 = 0; if (value > avg) { diff = value - avg; @@ -158,7 +158,7 @@ module load_predictor { i = i + 1; } - let avg_variance: u32 = 0; + var avg_variance: u32 = 0; if (count > 0) { avg_variance = variance / count; } @@ -210,8 +210,8 @@ module load_predictor { // Calculate overall network load fn calculate_network_load(node_metrics: [u32; MAX_NODES], node_count: u32) -> u32 { - let total_load: u32 = 0; - let i: u32 = 0; + var total_load: u32 = 0; + var i: u32 = 0; while (i < node_count) { let load: u32 = get_bandwidth_usage(node_metrics[i]); @@ -228,9 +228,9 @@ module load_predictor { // Find most loaded node fn find_most_loaded_node(node_metrics: [u32; MAX_NODES], node_count: u32) -> u32 { - let max_load: u32 = 0; - let max_node: u32 = 0; - let i: u32 = 0; + var max_load: u32 = 0; + var max_node: u32 = 0; + var i: u32 = 0; while (i < node_count) { let load: u32 = get_bandwidth_usage(node_metrics[i]); @@ -246,9 +246,9 @@ module load_predictor { // Find least loaded node fn find_least_loaded_node(node_metrics: [u32; MAX_NODES], node_count: u32) -> u32 { - let min_load: u32 = 255; - let min_node: u32 = 0; - let i: u32 = 0; + var min_load: u32 = 255; + var min_node: u32 = 0; + var i: u32 = 0; while (i < node_count) { let load: u32 = get_bandwidth_usage(node_metrics[i]); @@ -264,9 +264,9 @@ module load_predictor { // Calculate load imbalance factor fn calculate_load_imbalance(node_metrics: [u32; MAX_NODES], node_count: u32) -> u32 { - let max_load: u32 = 0; - let min_load: u32 = 255; - let i: u32 = 0; + var max_load: u32 = 0; + var min_load: u32 = 255; + var i: u32 = 0; while (i < node_count) { let load: u32 = get_bandwidth_usage(node_metrics[i]); diff --git a/specs/local_processing.t27 b/specs/local_processing.t27 index ee168a8..9ad1a8c 100644 --- a/specs/local_processing.t27 +++ b/specs/local_processing.t27 @@ -79,8 +79,8 @@ module local_processing { // Aggregate multiple results fn aggregate_results(results: [u32; MAX_RESULTS], count: u32) -> u32 { - let sum: u32 = 0; - let i: u32 = 0; + var sum: u32 = 0; + var i: u32 = 0; while (i < count) { let value: u32 = get_result_value(results[i]); @@ -93,7 +93,7 @@ module local_processing { // Find task by priority fn find_task_by_priority(tasks: [u32; MAX_TASKS], priority: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_TASKS) { let task_priority: u32 = get_priority(tasks[i]); @@ -108,9 +108,9 @@ module local_processing { // Find highest priority task fn find_highest_priority_task(tasks: [u32; MAX_TASKS]) -> u32 { - let highest_priority: u32 = TASK_PRIORITY_LOW; - let task_index: u32 = MAX_TASKS; - let i: u32 = 0; + var highest_priority: u32 = TASK_PRIORITY_LOW; + var task_index: u32 = MAX_TASKS; + var i: u32 = 0; while (i < MAX_TASKS) { let task_priority: u32 = get_priority(tasks[i]); @@ -126,8 +126,8 @@ module local_processing { // Count pending tasks fn count_pending_tasks(tasks: [u32; MAX_TASKS]) -> u32 { - let count: u32 = 0; - let i: u32 = 0; + var count: u32 = 0; + var i: u32 = 0; while (i < MAX_TASKS) { let task_id: u32 = get_task_id(tasks[i]); @@ -142,8 +142,8 @@ module local_processing { // Calculate total processing load fn calculate_processing_load(tasks: [u32; MAX_TASKS]) -> u32 { - let total_load: u32 = 0; - let i: u32 = 0; + var total_load: u32 = 0; + var i: u32 = 0; while (i < MAX_TASKS) { let proc_time: u32 = get_processing_time(tasks[i]); @@ -169,7 +169,7 @@ module local_processing { // Find completed task result fn find_completed_result(results: [u32; MAX_RESULTS], task_id: u32, count: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < count) { let result_task_id: u32 = get_result_task_id(results[i]); @@ -186,9 +186,9 @@ module local_processing { // Calculate processing efficiency fn calculate_efficiency(tasks: [u32; MAX_TASKS], results: [u32; MAX_RESULTS], result_count: u32) -> u32 { - let total_input: u32 = 0; - let total_output: u32 = 0; - let i: u32 = 0; + var total_input: u32 = 0; + var total_output: u32 = 0; + var i: u32 = 0; while (i < MAX_TASKS) { total_input = total_input + get_data_size(tasks[i]); @@ -214,8 +214,8 @@ module local_processing { return 0; } - let sum: u32 = 0; - let i: u32 = 0; + var sum: u32 = 0; + var i: u32 = 0; while (i < count) { sum = sum + data_values[i]; @@ -227,8 +227,8 @@ module local_processing { // Filter data by threshold fn filter_data(data_values: [u32; MAX_RESULTS], count: u32, threshold: u32) -> u32 { - let filtered_count: u32 = 0; - let i: u32 = 0; + var filtered_count: u32 = 0; + var i: u32 = 0; while (i < count) { if (data_values[i] > threshold) { @@ -279,10 +279,10 @@ module local_processing { // Update resource state fn update_resources(state: u32, cpu_delta: u32, memory_delta: u32, task_delta: u32) -> u32 { - let cpu: u32 = get_cpu_usage(state); - let memory: u32 = get_memory_usage(state); - let tasks: u32 = get_task_count(state); - let available: u32 = get_available_resources(state); + var cpu: u32 = get_cpu_usage(state); + var memory: u32 = get_memory_usage(state); + var tasks: u32 = get_task_count(state); + var available: u32 = get_available_resources(state); cpu = cpu + cpu_delta; memory = memory + memory_delta; diff --git a/specs/multipath_router.t27 b/specs/multipath_router.t27 index 616b98a..3fe95ae 100644 --- a/specs/multipath_router.t27 +++ b/specs/multipath_router.t27 @@ -13,7 +13,7 @@ module MultiPathRouter { fn select_path_index(etx_values: [u8; 3]) -> u8 { // Compare ETX values to find minimum (best quality) let min_etx: u8 = etx_values[0]; - let mut best_idx: u8 = 0; + var best_idx: u8 = 0; if etx_values[1] < min_etx { best_idx = 1; diff --git a/specs/multipath_routing.t27 b/specs/multipath_routing.t27 index b9843fa..aa752fd 100644 --- a/specs/multipath_routing.t27 +++ b/specs/multipath_routing.t27 @@ -75,7 +75,7 @@ module multipath_routing { // Count valid paths fn count_valid_paths(path_array: u64) -> u32 { - let count = 0; + var count = 0; if (get_path_valid(get_multipath(path_array, 0)) == PATH_VALID) { count = count + 1; } if (get_path_valid(get_multipath(path_array, 1)) == PATH_VALID) { count = count + 1; } if (get_path_valid(get_multipath(path_array, 2)) == PATH_VALID) { count = count + 1; } @@ -84,7 +84,7 @@ module multipath_routing { } // Check if multipath routing is viable - fn is_multipath_viable(path_array: u64) -> u32 { + fn is_multipath_viable(path_array: u64) -> bool { return (count_valid_paths(path_array) >= MIN_PATHS); } @@ -111,7 +111,7 @@ module multipath_routing { let diversity_score = 0; // Simple diversity calculation: count different first hops - let hop1_set = 0; + var hop1_set = 0; if (get_path_valid(get_multipath(path_array, 0)) == PATH_VALID) { hop1_set = hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 0))); @@ -125,12 +125,12 @@ module multipath_routing { hop1_set = hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 2))); } - if (get_path_valid(get_multipath(path_array, 3)) == path_valid == PATH_VALID) { + if (get_path_valid(get_multipath(path_array, 3)) == PATH_VALID) { hop1_set = hop1_set | (1 << get_multipath_hop1(get_multipath(path_array, 3))); } // Count bits set - let count = 0; + var count = 0; if ((hop1_set & 0x01) == 0x01) { count = count + 1; } if ((hop1_set & 0x02) == 0x02) { count = count + 1; } if ((hop1_set & 0x04) == 0x04) { count = count + 1; } @@ -151,11 +151,11 @@ module multipath_routing { } // Simple round-robin selection - let next_path = (current_path + 1) % total_paths; + var next_path = (current_path + 1) % total_paths; // Find next valid path - let found = 0; - let attempts = 0; + var found = 0; + var attempts = 0; while (found == 0 && attempts < 4) { if (get_path_valid(get_multipath(path_array, next_path)) == PATH_VALID) { diff --git a/specs/network_coding.t27 b/specs/network_coding.t27 index c773580..52f2da8 100644 --- a/specs/network_coding.t27 +++ b/specs/network_coding.t27 @@ -109,7 +109,7 @@ module NetworkCoding { fn linear_code_packets(pkt1: u32, pkt2: u32, coeff1: u32, coeff2: u32) -> u32 { // Simple linear combination: coeff1 * pkt1 + coeff2 * pkt2 // For T27: use XOR when coefficients are odd - let result = 0; + var result = 0; if ((coeff1 & 1) == 1) { result = result ^ pkt1; @@ -139,7 +139,7 @@ module NetworkCoding { // Count packets in generation fn count_generation_packets(gen: u64) -> u32 { - let count = 0; + var count = 0; if (get_coded_packet_gen(gen, 0) != 0) { count = count + 1; } if (get_coded_packet_gen(gen, 1) != 0) { count = count + 1; } if (get_coded_packet_gen(gen, 2) != 0) { count = count + 1; } diff --git a/specs/network_orchestrator.t27 b/specs/network_orchestrator.t27 index c8c39d5..fbf6247 100644 --- a/specs/network_orchestrator.t27 +++ b/specs/network_orchestrator.t27 @@ -124,7 +124,7 @@ module network_orchestrator { // Apply network policy fn apply_policy(policies: [u32; MAX_POLICIES], policy_id: u32, node_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_POLICIES) { let current_policy_id: u32 = get_policy_id(policies[i]); @@ -144,9 +144,9 @@ module network_orchestrator { // Find highest priority policy fn find_highest_priority_policy(policies: [u32; MAX_POLICIES], scope: u32) -> u32 { - let highest_priority: u32 = 0; - let policy_index: u32 = MAX_POLICIES; - let i: u32 = 0; + var highest_priority: u32 = 0; + var policy_index: u32 = MAX_POLICIES; + var i: u32 = 0; while (i < MAX_POLICIES) { let policy_scope: u32 = get_policy_scope(policies[i]); @@ -269,8 +269,8 @@ module network_orchestrator { coordinator_id: u32, current_time: u32) -> u32 { let coord_state: u32 = initiate_coordination(0, coordinator_id, current_time); - let participating_nodes: u32 = 0; - let i: u32 = 0; + var participating_nodes: u32 = 0; + var i: u32 = 0; while (i < node_count) { // Check if node is available @@ -291,8 +291,8 @@ module network_orchestrator { // Calculate network optimization score fn calculate_optimization_score(metrics: [u32; MAX_NODES], metric_count: u32) -> u32 { - let total_score: u32 = 0; - let i: u32 = 0; + var total_score: u32 = 0; + var i: u32 = 0; while (i < metric_count) { total_score = total_score + metrics[i]; @@ -328,8 +328,8 @@ module network_orchestrator { // Monitor network health fn monitor_network_health(node_states: [u32; MAX_NODES], node_count: u32) -> u32 { - let healthy_nodes: u32 = 0; - let i: u32 = 0; + var healthy_nodes: u32 = 0; + var i: u32 = 0; while (i < node_count) { if (node_states[i] != 0) { diff --git a/specs/network_simulator.t27 b/specs/network_simulator.t27 index a73e98c..9356774 100644 --- a/specs/network_simulator.t27 +++ b/specs/network_simulator.t27 @@ -87,7 +87,7 @@ module network_simulator { let energy: u32 = get_node_energy(state); let position: u32 = get_node_position(state); - let new_energy: u32 = energy; + var new_energy: u32 = energy; if (energy_delta > energy) { new_energy = 0; } else { @@ -95,7 +95,7 @@ module network_simulator { } // Check if node failed due to low energy - let new_status: u32 = status; + var new_status: u32 = status; if (new_energy == 0 && status == NODE_ACTIVE) { new_status = NODE_FAILED; } @@ -295,7 +295,7 @@ module network_simulator { // Create network topology fn create_topology(node_count: u32, density: u32) -> u32 { // Simple topology creation based on density - let link_count: u32 = (node_count * density) / 100; + var link_count: u32 = (node_count * density) / 100; if (link_count > (node_count * (node_count - 1)) / 2) { link_count = (node_count * (node_count - 1)) / 2; @@ -322,8 +322,8 @@ module network_simulator { fn run_simulation_step(state: u32, events: [u32; MAX_EVENTS], event_count: u32, node_states: [u32; MAX_NODES], link_states: [u32; MAX_NODES]) -> u32 { let current_time: u32 = get_sim_time(state); - let processed_count: u32 = 0; - let i: u32 = 0; + var processed_count: u32 = 0; + var i: u32 = 0; while (i < event_count) { let event_time: u32 = get_event_timestamp(events[i]); diff --git a/specs/pattern_predictor.t27 b/specs/pattern_predictor.t27 index 9491adc..c6bce3c 100644 --- a/specs/pattern_predictor.t27 +++ b/specs/pattern_predictor.t27 @@ -85,8 +85,8 @@ module pattern_predictor { // Calculate simple moving average fn calculate_moving_average(array: u64, window: u32) -> u32 { - let sum = 0; - let count = window; + var sum = 0; + var count = window; if (count > 16) { count = 16; } @@ -145,7 +145,7 @@ module pattern_predictor { return current + 10; } else if (trend == 2) { // Decreasing trend - let predicted = current - 10; + var predicted = current - 10; if (predicted < 0) { predicted = 0; } return predicted; } else { @@ -197,7 +197,7 @@ module pattern_predictor { if (samples < 2) { return 0; } let avg = calculate_moving_average(array, samples); - let sum_sq_diff = 0; + var sum_sq_diff = 0; if (samples >= 1) { let diff = get_sample_value(get_sample_at(array, 0)) - avg; diff --git a/specs/performance_profiler.t27 b/specs/performance_profiler.t27 index 1577887..f694704 100644 --- a/specs/performance_profiler.t27 +++ b/specs/performance_profiler.t27 @@ -78,9 +78,9 @@ module performance_profiler { // Calculate average CPU usage fn calculate_average_cpu(samples: [u32; MAX_SAMPLES], sample_count: u32, func_id: u32) -> u32 { - let total_cpu: u32 = 0; - let matching_samples: u32 = 0; - let i: u32 = 0; + var total_cpu: u32 = 0; + var matching_samples: u32 = 0; + var i: u32 = 0; while (i < sample_count) { if (get_sample_function_id(samples[i]) == func_id) { @@ -99,9 +99,9 @@ module performance_profiler { // Calculate average memory usage fn calculate_average_memory(samples: [u32; MAX_SAMPLES], sample_count: u32, func_id: u32) -> u32 { - let total_memory: u32 = 0; - let matching_samples: u32 = 0; - let i: u32 = 0; + var total_memory: u32 = 0; + var matching_samples: u32 = 0; + var i: u32 = 0; while (i < sample_count) { if (get_sample_function_id(samples[i]) == func_id) { @@ -120,10 +120,10 @@ module performance_profiler { // Identify performance hotspots fn identify_hotspots(profiles: [u32; MAX_FUNCTIONS], profile_count: u32) -> u32 { - let max_calls: u32 = 0; - let max_cpu: u32 = 0; - let hotspot_func: u32 = 0; - let i: u32 = 0; + var max_calls: u32 = 0; + var max_cpu: u32 = 0; + var hotspot_func: u32 = 0; + var i: u32 = 0; while (i < profile_count) { let calls: u32 = get_profile_call_count(profiles[i]); @@ -139,7 +139,7 @@ module performance_profiler { } // Calculate hotspot score - let score: u32 = (max_calls * 10) + max_cpu; + var score: u32 = (max_calls * 10) + max_cpu; if (score > 255) { score = 255; } @@ -195,7 +195,7 @@ module performance_profiler { // Track memory allocation fn track_allocation(allocations: [u32; MAX_SAMPLES], alloc_id: u32, size: u32, pool: u32) -> u32 { // Find empty slot - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_SAMPLES) { if (get_allocation_id(allocations[i]) == 0) { allocations[i] = create_allocation(alloc_id, size, 255, pool); @@ -208,8 +208,8 @@ module performance_profiler { // Calculate total memory usage fn calculate_total_memory(allocations: [u32; MAX_SAMPLES], sample_count: u32) -> u32 { - let total_memory: u32 = 0; - let i: u32 = 0; + var total_memory: u32 = 0; + var i: u32 = 0; while (i < sample_count) { let size: u32 = get_allocation_size(allocations[i]); @@ -260,9 +260,9 @@ module performance_profiler { // Analyze call tree fn analyze_call_tree(call_stack: [u32; MAX_SAMPLES], stack_size: u32) -> u32 { - let max_depth: u32 = 0; - let total_cpu: u32 = 0; - let i: u32 = 0; + var max_depth: u32 = 0; + var total_cpu: u32 = 0; + var i: u32 = 0; while (i < stack_size) { let depth: u32 = get_stack_depth(call_stack[i]); @@ -277,7 +277,7 @@ module performance_profiler { } // Return summary: [max_depth][total_cpu][average_cpu_per_level][0] - let avg_cpu: u32 = 0; + var avg_cpu: u32 = 0; if (max_depth > 0) { avg_cpu = total_cpu / max_depth; } @@ -318,10 +318,10 @@ module performance_profiler { let overhead: u32 = get_report_overhead(report); // Recommendations: [optimize_cpu][optimize_memory][reduce_overhead][parallelize] - let rec_optimize_cpu: u32 = 0; + var rec_optimize_cpu: u32 = 0; let rec_optimize_memory: u32 = 0; - let rec_reduce_overhead: u32 = 0; - let rec_parallelize: u32 = 0; + var rec_reduce_overhead: u32 = 0; + var rec_parallelize: u32 = 0; if (total_cpu > 80) { rec_optimize_cpu = 1; diff --git a/specs/power_monitoring.t27 b/specs/power_monitoring.t27 index d42922c..ff245de 100644 --- a/specs/power_monitoring.t27 +++ b/specs/power_monitoring.t27 @@ -70,7 +70,7 @@ module PowerMonitoring { let consumption = get_consumption(state); let uptime = get_uptime(state); - let new_mode = POWER_NORMAL; + var new_mode = POWER_NORMAL; if (battery <= BATTERY_CRITICAL) { new_mode = POWER_EMERGENCY; } else if (battery <= BATTERY_LOW) { @@ -87,7 +87,7 @@ module PowerMonitoring { let current_consumption = get_consumption(state); let uptime = get_uptime(state); - let new_consumption = current_consumption - reduction; + var new_consumption = current_consumption - reduction; if (new_consumption < 1) { new_consumption = 1; // Minimum consumption } @@ -102,7 +102,7 @@ module PowerMonitoring { let consumption = get_consumption(state); let uptime = get_uptime(state); - let new_battery = battery - amount; + var new_battery = battery - amount; if (new_battery < 0) { new_battery = 0; // Battery empty } diff --git a/specs/quarantine_manager.t27 b/specs/quarantine_manager.t27 index 303b2ef..13bfdf6 100644 --- a/specs/quarantine_manager.t27 +++ b/specs/quarantine_manager.t27 @@ -191,7 +191,7 @@ module quarantine_manager { // Find quarantined node fn find_quarantined_node(states: [u32; MAX_NODES], node_id: u32) -> u32 { - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_NODES) { let state_node_id: u32 = get_quarantine_node_id(states[i]); @@ -206,8 +206,8 @@ module quarantine_manager { // Count quarantined nodes fn count_quarantined_nodes(states: [u32; MAX_NODES]) -> u32 { - let count: u32 = 0; - let i: u32 = 0; + var count: u32 = 0; + var i: u32 = 0; while (i < MAX_NODES) { if (is_quarantined(states[i]) == 1) { diff --git a/specs/redundancy_management.t27 b/specs/redundancy_management.t27 index 5dcec76..d5352fb 100644 --- a/specs/redundancy_management.t27 +++ b/specs/redundancy_management.t27 @@ -110,7 +110,7 @@ module RedundancyManagement { // Count valid paths fn count_valid_paths(path_set: u64) -> u32 { - let count = 0; + var count = 0; if (get_path_valid(get_path(path_set, 0)) == PATH_VALID) { count = count + 1; } if (get_path_valid(get_path(path_set, 1)) == PATH_VALID) { count = count + 1; } if (get_path_valid(get_path(path_set, 2)) == PATH_VALID) { count = count + 1; } @@ -125,7 +125,7 @@ module RedundancyManagement { // Get path hop count (non-zero hops) fn get_hop_count(path: u32) -> u32 { - let count = 0; + var count = 0; if (get_hop1(path) != 0) { count = count + 1; } if (get_hop2(path) != 0) { count = count + 1; } if (get_hop3(path) != 0) { count = count + 1; } @@ -134,8 +134,8 @@ module RedundancyManagement { // Find shortest valid path (by hop count) fn find_shortest_path(path_set: u64) -> u32 { - let best_path = 0xFF; - let best_hops = 255; + var best_path = 0xFF; + var best_hops = 255; if (get_path_valid(get_path(path_set, 0)) == PATH_VALID) { let hops = get_hop_count(get_path(path_set, 0)); diff --git a/specs/resource_scheduler.t27 b/specs/resource_scheduler.t27 index 989752f..a7e8d56 100644 --- a/specs/resource_scheduler.t27 +++ b/specs/resource_scheduler.t27 @@ -142,8 +142,8 @@ module ResourceScheduler { // Find highest priority task that can be admitted fn find_admittable_task(state: u32, task_array: u64) -> u32 { - let best_task = 0xFF; - let best_priority = 0xFF; + var best_task = 0xFF; + var best_priority = 0xFF; if (can_admit_task(state, get_task_resource(task_array, 0))) { let priority = get_priority(get_task_resource(task_array, 0)); @@ -235,7 +235,7 @@ module ResourceScheduler { let active_tasks = get_active_tasks(state); let tick = get_sched_tick(state); - let new_tick = tick + 1; + var new_tick = tick + 1; if (new_tick > 255) { new_tick = 0; } // Wrap around return create_system_state(used_cpu, used_mem, active_tasks, new_tick); @@ -243,7 +243,7 @@ module ResourceScheduler { // Count tasks by priority fn count_tasks_by_priority(task_array: u64, priority: u32) -> u32 { - let count = 0; + var count = 0; if (get_priority(get_task_resource(task_array, 0)) == priority) { count = count + 1; } if (get_priority(get_task_resource(task_array, 1)) == priority) { count = count + 1; } diff --git a/specs/swarm_coordinator.t27 b/specs/swarm_coordinator.t27 index 18ee6c9..4eb27d0 100644 --- a/specs/swarm_coordinator.t27 +++ b/specs/swarm_coordinator.t27 @@ -84,9 +84,9 @@ module SwarmCoordinator { // Count votes for a proposal fn count_votes(vote_array: u64, proposal_id: u32) -> (u32, u32, u32) { - let yes_count = 0; - let no_count = 0; - let abstain_count = 0; + var yes_count = 0; + var no_count = 0; + var abstain_count = 0; if (get_vote_proposal_id(get_vote(vote_array, 0)) == proposal_id) { if (get_vote_value(get_vote(vote_array, 0)) == VOTE_YES) { yes_count = yes_count + 1; } @@ -152,8 +152,8 @@ module SwarmCoordinator { // Calculate consensus value (average of proposals) fn calculate_consensus_value(vote_array: u64, proposal_id: u32) -> u32 { - let sum = 0; - let count = 0; + var sum = 0; + var count = 0; if (get_vote_proposal_id(get_vote(vote_array, 0)) == proposal_id) { sum = sum + get_proposal_value(get_vote(vote_array, 0)); diff --git a/specs/test_framework.t27 b/specs/test_framework.t27 index df20282..403de4a 100644 --- a/specs/test_framework.t27 +++ b/specs/test_framework.t27 @@ -191,10 +191,10 @@ module test_framework { // Run test suite fn run_test_suite(suite: u32, tests: [u32; MAX_TESTS], test_count: u32) -> u32 { let suite_id: u32 = get_suite_id(suite); - let total_assertions: u32 = 0; - let total_failures: u32 = 0; - let passed_tests: u32 = 0; - let i: u32 = 0; + var total_assertions: u32 = 0; + var total_failures: u32 = 0; + var passed_tests: u32 = 0; + var i: u32 = 0; while (i < test_count) { let result: u32 = run_test_case(tests[i], 0); @@ -254,9 +254,9 @@ module test_framework { // Aggregate coverage data fn aggregate_coverage(coverage_data: [u32; MAX_TESTS], count: u32) -> u32 { - let total_branches: u32 = 0; - let total_covered: u32 = 0; - let i: u32 = 0; + var total_branches: u32 = 0; + var total_covered: u32 = 0; + var i: u32 = 0; while (i < count) { total_branches = total_branches + get_branch_count(coverage_data[i]); @@ -314,10 +314,10 @@ module test_framework { // Run property test fn run_property_test(prop_id: u32, generator_count: u32, test_count: u32) -> u32 { let failures: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < test_count) { - let j: u32 = 0; + var j: u32 = 0; while (j < generator_count) { let input: u32 = generate_test_input(j, i); // In real system, would test property with input @@ -380,7 +380,7 @@ module test_framework { let coverage_pct: u32 = calculate_coverage_percentage(coverage); // Report: [pass_rate][coverage_pct][duration_ms][status] - let status: u32 = 0; + var status: u32 = 0; if (pass_rate >= 90 && coverage_pct >= COVERAGE_TARGET) { status = 1; // excellent } else if (pass_rate >= 70 && coverage_pct >= 70) { diff --git a/specs/test_validator.t27 b/specs/test_validator.t27 index 49eeb54..dbaf030 100644 --- a/specs/test_validator.t27 +++ b/specs/test_validator.t27 @@ -259,12 +259,12 @@ module test_validator { // Run full validation fn run_validation(errors: [u32; MAX_ERRORS], error_count: u32, warnings: [u32; MAX_WARNINGS], warning_count: u32) -> u32 { - let total_errors: u32 = 0; - let total_warnings: u32 = 0; - let total_info: u32 = 0; - let status: u32 = VALIDATION_PASS; + var total_errors: u32 = 0; + var total_warnings: u32 = 0; + var total_info: u32 = 0; + var status: u32 = VALIDATION_PASS; - let i: u32 = 0; + var i: u32 = 0; while (i < error_count) { let severity: u32 = get_error_severity(errors[i]); if (severity == SEVERITY_ERROR) { @@ -319,7 +319,7 @@ module test_validator { // Calculate cyclomatic complexity fn calculate_complexity(function_length: u32, branch_count: u32, loop_count: u32) -> u32 { // Base complexity + branches + loops - let complexity: u32 = 1 + branch_count + loop_count; + var complexity: u32 = 1 + branch_count + loop_count; // Adjust for function length if (function_length > 100) { diff --git a/specs/topology_visualizer.t27 b/specs/topology_visualizer.t27 index 683fac8..d55c286 100644 --- a/specs/topology_visualizer.t27 +++ b/specs/topology_visualizer.t27 @@ -147,34 +147,34 @@ module topology_visualizer { fn calculate_force_layout(nodes: [u32; MAX_NODES], edges: [u32; MAX_EDGES], node_count: u32, edge_count: u32, params: u32) -> u32 { let iterations: u32 = get_layout_iterations(params); - let temperature: u32 = get_layout_temperature(params); + var temperature: u32 = get_layout_temperature(params); - let placed_nodes: u32 = 0; - let i: u32 = 0; + var placed_nodes: u32 = 0; + var i: u32 = 0; while (i < iterations && placed_nodes < node_count) { // Simple force calculation - let j: u32 = 0; + var j: u32 = 0; while (j < node_count) { let node_id: u32 = get_viz_node_id(nodes[j]); let x: u32 = get_node_x_position(nodes[j]); let y: u32 = get_node_y_position(nodes[j]); // Calculate repulsive forces - let k: u32 = 0; + var k: u32 = 0; while (k < node_count) { if (k != j) { let other_x: u32 = get_node_x_position(nodes[k]); let other_y: u32 = get_node_y_position(nodes[k]); - let dx: u32 = 0; + var dx: u32 = 0; if (x > other_x) { dx = x - other_x; } else { dx = other_x - x; } - let dy: u32 = 0; + var dy: u32 = 0; if (y > other_y) { dy = y - other_y; } else { @@ -192,7 +192,7 @@ module topology_visualizer { } // Calculate attractive forces along edges - let l: u32 = 0; + var l: u32 = 0; while (l < edge_count) { let source: u32 = get_viz_edge_source(edges[l]); let dest: u32 = get_viz_edge_dest(edges[l]); @@ -224,7 +224,7 @@ module topology_visualizer { let center_y: u32 = CANVAS_SIZE / 2; let radius: u32 = CANVAS_SIZE / 3; - let i: u32 = 0; + var i: u32 = 0; while (i < node_count) { let angle: u32 = (i * 360) / node_count; @@ -249,9 +249,9 @@ module topology_visualizer { let level_count: u32 = 4; let nodes_per_level: u32 = node_count / level_count; - let i: u32 = 0; - let current_level: u32 = 0; - let nodes_in_level: u32 = 0; + var i: u32 = 0; + var current_level: u32 = 0; + var nodes_in_level: u32 = 0; while (i < node_count) { let y: u32 = (current_level * CANVAS_SIZE) / level_count; @@ -312,12 +312,12 @@ module topology_visualizer { let quality: u32 = get_viz_edge_quality(edge); // Find source and dest positions - let source_x: u32 = 0; - let source_y: u32 = 0; - let dest_x: u32 = 0; - let dest_y: u32 = 0; + var source_x: u32 = 0; + var source_y: u32 = 0; + var dest_x: u32 = 0; + var dest_y: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < MAX_NODES) { let node_id: u32 = get_viz_node_id(nodes[i]); if (node_id == source) { @@ -332,7 +332,7 @@ module topology_visualizer { } // Calculate edge color based on quality - let edge_color: u32 = 0; + var edge_color: u32 = 0; if (quality > 70) { edge_color = COLOR_GREEN; } else if (quality > 40) { @@ -351,10 +351,10 @@ module topology_visualizer { // Create visualization frame fn create_visualization_frame(nodes: [u32; MAX_NODES], edges: [u32; MAX_EDGES], node_count: u32, edge_count: u32) -> u32 { - let frame_size: u32 = 0; + var frame_size: u32 = 0; // Render all nodes - let i: u32 = 0; + var i: u32 = 0; while (i < node_count) { let rendered: u32 = render_node(nodes[i], 20, COLOR_GREEN); frame_size = frame_size + 1; @@ -362,7 +362,7 @@ module topology_visualizer { } // Render all edges - let j: u32 = 0; + var j: u32 = 0; while (j < edge_count) { let rendered: u32 = render_edge(edges[j], nodes, 2); frame_size = frame_size + 1; diff --git a/specs/traffic_animator.t27 b/specs/traffic_animator.t27 index 2b9421c..91820e0 100644 --- a/specs/traffic_animator.t27 +++ b/specs/traffic_animator.t27 @@ -40,7 +40,7 @@ module traffic_animator { let dest: u32 = get_anim_packet_dest(packet); let progress: u32 = get_anim_packet_progress(packet); - let new_progress: u32 = progress + delta; + var new_progress: u32 = progress + delta; if (new_progress > 100) { new_progress = 100; } @@ -205,8 +205,8 @@ module traffic_animator { let loops: u32 = get_timeline_loop_count(timeline); let speed: u32 = get_timeline_speed(timeline); - let new_current: u32 = current + speed; - let new_loops: u32 = loops; + var new_current: u32 = current + speed; + var new_loops: u32 = loops; if (new_current >= total) { new_current = 0; @@ -243,9 +243,9 @@ module traffic_animator { // Generate traffic burst fn generate_traffic_burst(pattern: u32, source: u32, dest: u32) -> u32 { let burst_size: u32 = get_pattern_burst_size(pattern); - let packet_count: u32 = 0; + var packet_count: u32 = 0; - let i: u32 = 0; + var i: u32 = 0; while (i < burst_size) { // Create animated packet let packet: u32 = create_anim_packet(i, source, dest, 0); @@ -269,15 +269,15 @@ module traffic_animator { // Update all packets in animation fn update_animation_packets(packets: [u32; MAX_PACKETS], packet_count: u32, speed: u32) -> u32 { - let updated_count: u32 = 0; - let completed_count: u32 = 0; - let i: u32 = 0; + var updated_count: u32 = 0; + var completed_count: u32 = 0; + var i: u32 = 0; while (i < packet_count) { let progress: u32 = get_anim_packet_progress(packets[i]); if (progress < 100) { - let new_progress: u32 = progress + speed; + var new_progress: u32 = progress + speed; if (new_progress > 100) { new_progress = 100; } @@ -334,8 +334,8 @@ module traffic_animator { fn generate_traffic_heat_map(packets: [u32; MAX_PACKETS], packet_count: u32, node_count: u32) -> u32 { let traffic_counts: [u32; 32] = [0; 32]; - let max_traffic: u32 = 0; - let i: u32 = 0; + var max_traffic: u32 = 0; + var i: u32 = 0; // Count traffic per node while (i < packet_count) { @@ -360,9 +360,9 @@ module traffic_animator { } // Return heat map data: [max_traffic][total_active_nodes][avg_traffic][0] - let total_active: u32 = 0; - let total_traffic: u32 = 0; - let j: u32 = 0; + var total_active: u32 = 0; + var total_traffic: u32 = 0; + var j: u32 = 0; while (j < node_count && j < 32) { if (traffic_counts[j] > 0) { @@ -372,7 +372,7 @@ module traffic_animator { j = j + 1; } - let avg_traffic: u32 = 0; + var avg_traffic: u32 = 0; if (total_active > 0) { avg_traffic = total_traffic / total_active; } @@ -438,10 +438,10 @@ module traffic_animator { // Calculate animation statistics fn calculate_animation_stats(frames: [u32; MAX_FRAMES], frame_count: u32) -> u32 { - let total_packets: u32 = 0; - let total_bytes: u32 = 0; - let avg_latency: u32 = 0; - let i: u32 = 0; + var total_packets: u32 = 0; + var total_bytes: u32 = 0; + var avg_latency: u32 = 0; + var i: u32 = 0; while (i < frame_count) { let packet_count: u32 = get_anim_frame_packet_count(frames[i]); diff --git a/specs/trust_manager.t27 b/specs/trust_manager.t27 index 3099b45..d64daae 100644 --- a/specs/trust_manager.t27 +++ b/specs/trust_manager.t27 @@ -88,7 +88,7 @@ module trust_manager { return 50; // Neutral trust for new nodes } - let score = (positive * 100) / total; + var score = (positive * 100) / total; if (score > MAX_TRUST_SCORE) { score = MAX_TRUST_SCORE; } return score; } @@ -123,8 +123,8 @@ module trust_manager { // Find most trusted node fn find_most_trusted(trust_array: u64) -> u32 { - let highest_score = 0; - let most_trusted = 0xFF; + var highest_score = 0; + var most_trusted = 0xFF; if (get_trust_score_value(get_trust_score(trust_array, 0)) > highest_score) { highest_score = get_trust_score_value(get_trust_score(trust_array, 0)); @@ -173,7 +173,7 @@ module trust_manager { fn should_route_via_node(trust_array: u64, node_index: u32, min_trust: u32) -> bool { if (node_index >= MAX_NODES) { return false; } - let score = get_trust_score(trust_array, node_index); + var score = get_trust_score(trust_array, node_index); return (get_trust_score_value(score) >= min_trust); } @@ -218,17 +218,17 @@ module trust_manager { } test calculate_trust_score_balanced { - let score = calculate_trust_score(10, 10); + var score = calculate_trust_score(10, 10); assert(score == 50, "balanced trust"); } test calculate_trust_score_mostly_positive { - let score = calculate_trust_score(18, 2); + var score = calculate_trust_score(18, 2); assert(score == 90, "high trust"); } test calculate_trust_score_mostly_negative { - let score = calculate_trust_score(2, 18); + var score = calculate_trust_score(2, 18); assert(score == 10, "low trust"); } diff --git a/src/bin/trios_meshd.rs b/src/bin/trios_meshd.rs index 879dc58..61c85bf 100644 --- a/src/bin/trios_meshd.rs +++ b/src/bin/trios_meshd.rs @@ -19,6 +19,7 @@ use sha2::{Digest, Sha256}; use std::collections::{HashMap, HashSet}; use std::io; use std::net::{SocketAddr, UdpSocket}; +use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex}; use std::thread; use std::time::{Duration, Instant}; @@ -32,6 +33,9 @@ const HELLO_TYPE: u8 = 0; const DATA_TYPE: u8 = 1; const FETCH_REQ: u8 = 2; // "fetch the internet for me" (M4 shared uplink) const FETCH_RESP: u8 = 3; // gateway's reply carrying the fetched bytes +/// Max concurrent gateway internet-fetches. Caps the amplification a flood of +/// FETCH_REQ can cause (each spawns a thread + an outbound TCP connect). +const MAX_INFLIGHT_FETCHES: usize = 4; /// Deterministic demo static key from a node id. fn seed_for(id: NodeId) -> [u8; 32] { @@ -45,7 +49,14 @@ fn seed_for(id: NodeId) -> [u8; 32] { /// the node that actually has an uplink; the result travels back over the mesh. fn fetch_public_ip() -> String { use std::io::{Read, Write}; - match std::net::TcpStream::connect("api.ipify.org:80") { + use std::net::ToSocketAddrs; + // Bound connect time too: without a timeout a hung/unreachable host would + // pin a fetch slot indefinitely and defeat MAX_INFLIGHT_FETCHES. + let addr = match "api.ipify.org:80".to_socket_addrs().ok().and_then(|mut a| a.next()) { + Some(a) => a, + None => return "ERR: resolve".to_string(), + }; + match std::net::TcpStream::connect_timeout(&addr, Duration::from_secs(4)) { Ok(mut s) => { let _ = s.set_read_timeout(Some(Duration::from_secs(6))); let _ = @@ -144,13 +155,21 @@ fn main() { } let router = Arc::new(Mutex::new(router)); let rx = Arc::new(Mutex::new(RxShared::default())); - // Peers whose link is simulated-failed (ids in /tmp/mesh.drop) — for M5 demo. + // Peers whose link is simulated-failed — for the M5 self-heal demo. let dropped: Arc>> = Arc::new(Mutex::new(HashSet::new())); + // M5 demo hook, OFF by default. When TRIOS_SIM_DROPS names a file, node ids + // listed in it are treated as link-failed. Opt-in + operator-chosen path: the + // previous build read a hardcoded world-writable /tmp/mesh.drop every tick, so + // any local user could drop any mesh link on a running node (local DoS). + let sim_drops_path: Option = std::env::var("TRIOS_SIM_DROPS").ok(); let watch: Option = std::env::var("TRIOS_WATCH") .ok() .and_then(|s| s.parse().ok()); // M4: this node has a real internet uplink and serves FETCH requests. let gateway = std::env::var("TRIOS_GATEWAY").is_ok(); + // N7: bound concurrent gateway fetches so a FETCH_REQ flood cannot spawn + // unbounded threads + outbound TCP connections (amplification DoS). + let inflight_fetches = Arc::new(AtomicUsize::new(0)); let started = Instant::now(); println!("[meshd] node {me} on {} — peers {peer_ids:?}", cfg.listen); @@ -197,16 +216,29 @@ fn main() { if p.first() == Some(&FETCH_REQ) && gateway && p.len() >= 5 => { let origin = u32::from_le_bytes([p[1], p[2], p[3], p[4]]); - let router = router.clone(); - thread::spawn(move || { - let ip = fetch_public_ip(); - let mut resp = vec![FETCH_RESP]; - resp.extend_from_slice(ip.as_bytes()); - let d = router.lock().unwrap().send_ip(origin, &resp); - println!( - "[meshd] gateway fetched \"{ip}\" -> reply to {origin}: {d:?}" + // N7: refuse the fetch if we are already at the concurrency + // cap, instead of spawning without bound. + if inflight_fetches.fetch_add(1, Ordering::SeqCst) + >= MAX_INFLIGHT_FETCHES + { + inflight_fetches.fetch_sub(1, Ordering::SeqCst); + eprintln!( + "[meshd] FETCH from {origin} dropped: {MAX_INFLIGHT_FETCHES} already in flight" ); - }); + } else { + let router = router.clone(); + let inflight = inflight_fetches.clone(); + thread::spawn(move || { + let ip = fetch_public_ip(); + let mut resp = vec![FETCH_RESP]; + resp.extend_from_slice(ip.as_bytes()); + let d = router.lock().unwrap().send_ip(origin, &resp); + println!( + "[meshd] gateway fetched \"{ip}\" -> reply to {origin}: {d:?}" + ); + inflight.fetch_sub(1, Ordering::SeqCst); + }); + } } // M4: the gateway's reply — internet reached us over the mesh. Delivery::Local(p) if p.first() == Some(&FETCH_RESP) => { @@ -270,9 +302,11 @@ fn main() { v.sort(); v }; - // Refresh the simulated link-failure set from /tmp/mesh.drop (M5 control). - let dset: HashSet = std::fs::read_to_string("/tmp/mesh.drop") - .ok() + // Refresh the simulated link-failure set (M5 control; opt-in via + // TRIOS_SIM_DROPS, off by default — no file is read when unset). + let dset: HashSet = sim_drops_path + .as_deref() + .and_then(|p| std::fs::read_to_string(p).ok()) .map(|s| { s.split_whitespace() .filter_map(|x| x.parse().ok()) diff --git a/src/lib.rs b/src/lib.rs index 600b6c1..ec8dd09 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,68 +17,60 @@ pub mod gf16; pub mod daemon; pub mod discovery; -// Re-export generated mesh components +// Re-export generated mesh components. Produced from specs/*.t27 by t27c (golden +// pipeline) and kept byte-in-sync by the pinned-t27c drift-guard (see +// .t27c-version + .github/workflows/spec-drift-guard.yml). +// +// WIRED. These 9 modules now compile: the pinned t27c (fix commit d7f3a73 = +// gHashTag/t27 #1456 optimizer removal + #1457 array/index codegen) generates +// correct Rust, and the source specs had their genuine bugs fixed (path_valid +// typo, is_multipath_viable bool return, etx Q8.8 width, reassigned let -> var; +// see gHashTag/tri-net#61). They have zero call sites yet, so each carries an +// `#[allow(...)]` for dead-code/unused lints on generated theater. See +// docs/PIPELINE.md. +// +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/mesh_routing.rs"] pub mod mesh_routing; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/etx.rs"] pub mod etx; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/adaptive_routing.rs"] pub mod adaptive_routing; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/multipath_routing.rs"] pub mod multipath_routing; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/frame_buffer.rs"] pub mod frame_buffer; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/flow_control.rs"] pub mod flow_control; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/health_dashboard.rs"] pub mod health_dashboard; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/anomaly_detector.rs"] pub mod anomaly_detector; - +#[allow(dead_code, unused, unused_parens, clippy::all)] #[path = "../gen/rust/quarantine_manager.rs"] pub mod quarantine_manager; +// Re-export the real, hand-written module APIs at the crate root so binaries +// and downstream code resolve `trios_mesh::Delivery` etc. to the actual +// implementations. Every type below exists in a submodule; the crate root only +// re-exports. Earlier a set of empty root "shadow stubs" (a struct Delivery +// with no variants, a struct Hello with no parse/authenticated, a struct +// StaticKey with no from_seed, and a second Transport trait with send_to/ +// recv_from) shadowed these real types and made the binaries and the M1 smoke +// harness uncompilable even though the real code was fine. Those stubs were dead +// (zero call sites in src/; router.rs and modem.rs already use daemon::Transport) +// and are removed. See docs/WAVE_REPORT_2026-07-10.md P0b. +pub use crypto::{Handshake, MeshError, Session, StaticKey}; +pub use daemon::{Node, Transport}; +pub use discovery::Hello; +pub use router::{Delivery, DropReason, MeshRouter}; + // Types used across the crate pub type NodeId = u32; - -/// Delivery confirmation for mesh forwarding. -#[derive(Debug, Clone)] -pub struct Delivery { - pub src: NodeId, - pub dst: NodeId, - pub hops: u8, -} - -/// Hello beacon payload. -#[derive(Debug, Clone)] -pub struct Hello { - pub src: NodeId, - pub seq: u32, - pub neighbors: Vec<(NodeId, u8)>, -} - -/// Static key type for pre-shared-key mesh. -pub struct StaticKey { - pub secret: [u8; 32], -} - -/// Transport abstraction (UDP now, radio later). -pub trait Transport: Send { - fn send_to(&self, data: &[u8], dst: std::net::SocketAddr) -> std::io::Result<()>; - fn recv_from(&self, buf: &mut [u8]) -> std::io::Result<(usize, std::net::SocketAddr)>; -} - -/// Mesh router trait. -pub trait MeshRouter: Send { - fn add_neighbor(&mut self, id: NodeId, addr: std::net::SocketAddr, etx: u8); - fn remove_neighbor(&mut self, id: NodeId); - fn next_hop(&self, dst: NodeId) -> Option<(NodeId, std::net::SocketAddr)>; - fn neighbors(&self) -> Vec<(NodeId, std::net::SocketAddr)>; -} diff --git a/src/router.rs b/src/router.rs index c04b014..8b8f774 100644 --- a/src/router.rs +++ b/src/router.rs @@ -52,6 +52,9 @@ pub enum DropReason { SealFailed(MeshError), /// E3.2 — Frame header.src != actual link peer (spoof attempt). SrcSpoof, + /// Loop prevention: the frame was originated by this node (looped back), or + /// its only next hop is the neighbor it just arrived from (split-horizon). + Loop, } /// Outcome of handling one frame. @@ -408,11 +411,21 @@ impl MeshRouter { if hdr.dst == self.id { return Delivery::Local(payload); } + // Loop prevention (TTL is only a backstop). Never re-forward a frame this + // node originated (looped back to us), and never bounce a frame straight + // back to the neighbor it arrived from (split-horizon). Without these, a + // pair of nodes whose only route toward the dst is via each other + // ping-pongs the packet until the hop budget is burned, making zero + // forward progress. + if hdr.src == self.id { + return Delivery::Dropped(DropReason::Loop); + } if hdr.ttl == 0 { return Delivery::Dropped(DropReason::TtlExpired); } let nh = match self.next_hop(hdr.dst) { - Some(n) => n, + Some(n) if n != from => n, + Some(_) => return Delivery::Dropped(DropReason::Loop), None => return Delivery::Dropped(DropReason::NoRoute), }; // Re-seal end-to-end payload under the outgoing link, TTL-1. @@ -576,6 +589,58 @@ mod tests { ); } + #[test] + fn frame_looped_back_to_origin_is_dropped() { + // A frame whose end-to-end src is THIS node has looped back to its + // origin; it must be dropped, never re-forwarded. + let (sa, sb) = sessions(); // A(1) <-> C(3) + let mut a = MeshRouter::new(1, 16); + let mut c = MeshRouter::new(3, 16); + a.add_link(3, sa, Box::new(VecTransport::default())); + c.add_link(1, sb, Box::new(VecTransport::default())); + + // src = 3 (C's own id), dst = B(2), sealed under the A/C link. + let hdr = Header::new(FrameKind::Data, 3, 2, 8).to_bytes(); + let body = { + let link = a.links.get_mut(&3).unwrap(); + link.session.seal(&hdr, b"x").unwrap() + }; + let mut frame = hdr.to_vec(); + frame.extend_from_slice(&body); + assert_eq!(c.handle_frame(1, &frame), Delivery::Dropped(DropReason::Loop)); + } + + #[test] + fn split_horizon_no_bounce_back_to_sender() { + // C's only route toward B(2) resolves back to A(1), the neighbor the + // frame arrived from. Without split-horizon C would re-send it to A and + // the pair would ping-pong until TTL is burned; instead C drops it. + let (sa, sb) = sessions(); // A(1) <-> C(3) + let mut a = MeshRouter::new(1, 16); + let mut c = MeshRouter::new(3, 16); + a.add_link(3, sa, Box::new(VecTransport::default())); + c.add_link(1, sb, Box::new(VecTransport::default())); + + // C only knows neighbor A(1), so its next hop toward any unknown dst is 1. + for _ in 0..4 { + c.observe(1, true, true); + } + assert_eq!(c.next_hop(2), Some(1), "C's only next hop toward B is A"); + + let hdr = Header::new(FrameKind::Data, 1, 2, 8).to_bytes(); + let body = { + let link = a.links.get_mut(&3).unwrap(); + link.session.seal(&hdr, b"x").unwrap() + }; + let mut frame = hdr.to_vec(); + frame.extend_from_slice(&body); + assert_eq!( + c.handle_frame(1, &frame), + Delivery::Dropped(DropReason::Loop), + "split-horizon: never bounce a frame back to the sender" + ); + } + #[test] fn no_route_is_dropped() { let mut a = MeshRouter::new(1, 16);