feat(renaser): Fase 19 — voz del userspace hacia la red (pregon)
Tres capacidades nuevas en wasm/env (12-14): - sys_net_mac(salida) -> i32: escribe los seis bytes del MAC del dispositivo. 0 OK, -1 si no hay red. - sys_net_enviar(ptr, len) -> i32: envia un frame Ethernet crudo. Valida rango contra la memoria lineal del modulo. - sys_net_recibir(salida, capacidad) -> i32: drena UN paquete por llamada hacia el buffer del modulo. Devuelve los bytes copiados, 0 si nada pendiente, codigos negativos diagnosticos. Añadida red::recibir_en(buf) -> usize como su contraparte del driver: gemelo cooperativo de drenar_rx que aterriza en un buffer del usuario. App nueva pregon (apps/pregon/, 4.2 KiB WASM): lienzo 480x160, tipografia 8x8 (font8x8) escalada x2. Al init pide su MAC y anuncia su presencia con un broadcast Ethernet — destino FF:FF:FF:FF:FF:FF, EtherType experimental 0x88B5, payload ASCII 'renaser :: hola desde mi red'. En cada tick drena un paquete con sys_net_recibir y muestra el titulo, el MAC propio, las cuentas TX/RX, y los datos del ultimo frame entrante. GENESIS 8 -> 9 apps (pregon en posicion 2 detras de bitacora); CELDA_TASKBAR_ANCHO 130 -> 116 px para que las nueve pestañas + lanzador + reloj caben holgadas en 1280 px. tarea_red del kernel ya no drena RX (la cola pertenece al userspace), conserva solo el envio del ARP de prueba al arrancar. Verificada en QEMU con -object filter-dump. El pcap captura tres frames en orden: (1) broadcast 88B5 de pregon con su payload, (2) ARP request del kernel, (3) ARP reply del gateway 52:55:0a:00:02:02. La consola anuncia 'manifiesto :: 9 apps nacidas del grafo'. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -323,6 +323,40 @@ Líneas abiertas posteriores: capacidades `sys_net_*` para que los apps
|
||||
también hablen; una pila mínima ARP/IP/UDP; reciclado de las ranuras de
|
||||
ventana cerradas; audio con varias voces (PCM).
|
||||
|
||||
## Fase 19 — voz del userspace hacia la red (completada)
|
||||
|
||||
La Fase 18 hizo que el kernel hablara con la red. La Fase 19 le da la
|
||||
misma capacidad a los apps con tres capacidades nuevas, y estrena la
|
||||
primera app que las usa.
|
||||
|
||||
- `drivers::red::recibir_en(buf) -> usize`: drena UN paquete por
|
||||
llamada, recicla el descriptor a la cola RX. El gemelo cooperativo de
|
||||
`drenar_rx`, dimensionado para el patrón que los apps usan.
|
||||
- Tres capacidades `wasm/env` nuevas: `sys_net_mac` (escribe la MAC en
|
||||
un buffer del módulo), `sys_net_enviar(ptr, len)` (envía un frame
|
||||
Ethernet crudo) y `sys_net_recibir(salida, capacidad)` (drena un
|
||||
paquete, devuelve los bytes copiados). Todas validan rango contra la
|
||||
memoria lineal del módulo y devuelven códigos negativos diagnósticos.
|
||||
- App `pregon` (4.2 KiB WASM): al arrancar pide su MAC, anuncia su
|
||||
presencia con un broadcast Ethernet (EtherType `0x88B5`, payload
|
||||
`"renaser :: hola desde mi red"`) y en cada `tick` drena un paquete y
|
||||
lo muestra en su lienzo 480×160 — título, MAC, cuentas TX/RX y datos
|
||||
del último frame entrante (tamaño, EtherType, src MAC).
|
||||
- `tarea_red` ya no drena RX: la posesión de la cola pasa al userspace.
|
||||
El kernel conserva sólo el envío del ARP de prueba al arrancar.
|
||||
- `GENESIS` crece de 8 a 9 apps; `pregon` queda en posición 2 (detrás
|
||||
de `bitacora`). `CELDA_TASKBAR_ANCHO` baja de 130 a 116 px para que
|
||||
las nueve pestañas + lanzador + reloj caben en 1280 px.
|
||||
|
||||
Verificada con `-object filter-dump,...,file=/tmp/renaser.pcap`. El
|
||||
pcap captura tres frames: el broadcast `0x88B5` de `pregon`, el ARP
|
||||
request del kernel y el ARP reply del gateway. El primero es el del
|
||||
huésped — la voz del userspace ya pasó al cable.
|
||||
|
||||
Líneas abiertas posteriores: una pila mínima ARP/IP/UDP para los apps;
|
||||
un servidor de eco / un cliente DNS de juguete; reciclado de las
|
||||
ranuras de ventana cerradas; audio con varias voces (PCM).
|
||||
|
||||
## Principios que persisten entre fases
|
||||
|
||||
- Reutilizar infraestructura madura de la comunidad antes que reinventar.
|
||||
|
||||
Reference in New Issue
Block a user