42fee6fcbc
Tres mensajes y un EtherType propio bastan para extender el grafo de
objetos —direccionado por contenido, ya BLAKE3— a otras maquinas
renaser que escuchen en la misma red de capa-2. Sin TCP, sin IP,
sin DNS.
Crate nueva 'akasha/' (no_std compartido, gemela de 'formato',
excluida del workspace):
- MensajeAkasha enum con SolicitarObjeto(id), ProveedorObjeto(id,
payload), AnunciarRaiz(id).
- Codec: postcard (mismo que ya usa el grafo en disco).
- EtherType: 0x88B5. MAX_PAYLOAD_AKASHA = 1486 (MTU sin fragmentar).
- Helpers componer_frame(src, dst, msg) y analizar_frame(bytes) que
distinguen EtherType ajeno, frame truncado y payload basura.
- 6 pruebas unitarias en verde.
Modulo nuevo 'kernel/src/akasha.rs' con tres oficios:
1. Demuxer (drenar_y_demultiplexar): drena la cola RX del dispositivo
virtio-net y demultiplexa: frames AoE con payload valido los
procesa el respondedor; el resto va a una cola del userspace que
'sys_net_recibir' ahora lee. Frames 0x88B5 con payload
no-postcard (saludo de pregon) se cuentan y tambien viajan al
userspace.
2. Atencion de mensajes (procesar):
- SolicitarObjeto(id): consulta almacen::recuperar; si tenemos el
objeto, respondemos ProveedorObjeto unicast con objeto.serializar()
y re-hashing de defensa en profundidad.
- ProveedorObjeto(id, payload): verifica blake3(payload)==id antes
de absorber con almacen::almacenar.
- AnunciarRaiz(id): si ignoramos el nodo, le solicitamos al emisor.
3. Faro periodico (difundir_raiz cada 5 s): broadcast del hash del
manifiesto actual. Cadencia medida contra reloj::milisegundos(),
no contra los awaits — el interprete wasmi de los apps degrada
la cadencia de EsperaFrame::await a varios cientos de ms, asi
que se mide contra el reloj monotono y los oficios per-fotograma
se enganchan al tic del compositor (cuyo latido es fiable).
Contadores ResumenAkasha (rx/tx por variante, descartados, cola del
usuario) listos para un futuro indicador AoE en la barra de tareas.
Cambios complementarios:
- sys_net_recibir lee de akasha::pop_usuario, no de
drivers::red::recibir_en (que queda #[allow(dead_code)] como
primitiva del driver para diagnostico).
- tarea_red queda corta: envia un ARP al gateway y termina. El
demuxer y el faro viven en el tic del compositor.
Verificacion:
- 'cargo test -p akasha' → 6 pruebas en verde.
- QEMU headless 60 s con -object filter-dump → 14 frames: 11
AnunciarRaiz (Δ promedio 5.86 s sobre 5.00 s de target), 2 ARP
y el pregon hello. Cada AnunciarRaiz lleva el hash del manifiesto
'2f3deadfcc7dae25..' en 33 bytes postcard sobre 47 bytes de frame.
- COM1 vuelca 'akasha :: ANUNCIO emitido :: raiz=2f3deadfcc7dae25..'
en cada disparo.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
39 lines
1.8 KiB
TOML
39 lines
1.8 KiB
TOML
# =============================================================================
|
|
# renaser :: akasha — protocolo Akasha Over Ether (AoE)
|
|
# -----------------------------------------------------------------------------
|
|
# Nucleo `#![no_std]` COMPARTIDO: la verdad UNICA del protocolo de red nativo
|
|
# de renaser. Lo enlaza el kernel bare-metal (target `x86_64-unknown-none`) y,
|
|
# por ser no_std, lo compila tambien sin friccion el anfitrion `boot` y
|
|
# cualquier otra pieza que quiera dialogar en el mismo idioma — incluida
|
|
# alguna futura app del userspace.
|
|
#
|
|
# El protocolo extiende el GRAFO de objetos persistentes (Fase 6) sobre una
|
|
# red Ethernet cruda, sin pasar por TCP/IP. Tres mensajes bastan: solicitar
|
|
# un objeto por su hash BLAKE3, proveerlo de vuelta, anunciar la raiz actual
|
|
# del sistema. Se serializa con `postcard` —compacto y deterministico— y
|
|
# viaja en frames de EtherType experimental `0x88B5`.
|
|
#
|
|
# Queda EXCLUIDO del espacio de trabajo (ver el Cargo.toml raiz), como el
|
|
# kernel y como `formato`: lo consume un paquete bare-metal, asi que fija
|
|
# sus versiones de forma explicita.
|
|
# =============================================================================
|
|
|
|
[package]
|
|
name = "akasha"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
license = "MPL-2.0"
|
|
authors = ["JL Soltech <gerencia@jlsoltech.com>"]
|
|
description = "renaser :: protocolo Akasha Over Ether (AoE) — grafo distribuido sobre Ethernet"
|
|
|
|
[lib]
|
|
bench = false
|
|
doctest = false
|
|
|
|
[dependencies]
|
|
# `serde` aporta los rasgos de (de)serializacion; `postcard` los materializa en
|
|
# un formato binario compacto, el mismo que ya usa `formato` para el disco.
|
|
# Asi el grafo habla el mismo idioma en el disco y en el cable.
|
|
serde = { version = "1", default-features = false, features = ["alloc", "derive"] }
|
|
postcard = { version = "1", default-features = false, features = ["alloc"] }
|