user@devops:~$ cat README.md
ifinet6-watch
# Description
ifinet6-watch (cpp-ifinet6-watch) es un monitor de direcciones IPv6 asignadas a interfaces del kernel Linux escrito en C++23 sin dependencias externas. Lee /proc/net/if_inet6 (if6_seq_show en net/ipv6/addrconf.c, formato exacto del kernel 6.8: %pi6 ifindex plen scope flags ifname) y muestra cada direccion en forma comprimida RFC 5952 (run mas larga de words cero, tie -> primera): ::1, fe80::, 2001:db8::1, 2001:db8:1234::1. Decodifica el scope del kernel (__ipv6_addr_type & IPV6_ADDR_SCOPE_MASK): 0x10 host, 0x20 link, 0x40 site, 0x80 org, 0x00 global — el primer campo hex es el IFINDEX de la interfaz, no el scope (pitfall de documentacion antigua). Decodifica flags IFA_F_* (uapi/linux/if_addr.h): PERMANENT, TENTATIVE, DEPRECATED, SECONDARY, DADFAILED, OPTIMISTIC, NODAD, HOME — dadfailed/deprecated resaltados en rojo, tentative en amarillo. Clasifica direcciones well-known: loopback, link-local, ULA (fc00::/7), doc-range (2001:db8::/32), NAT64 (64:ff9b::/96), Teredo, 6to4. Filtros --iface NAME, --scope NAME (global|host|link|site|org), --flag NAME (permanent|tentative|deprecated|secondary|dadfailed|optimistic|nodad|home), --global, --link, --host, --ula, --permanent y --top N. Modo watch (--watch N) con deltas de direcciones nuevas/eliminadas y cambios de flags/scope (p.ej. TENTATIVE -> PERMANENT cuando el DAD completa); flush por frame en pipes. Salida JSON (--json) con summary + array addresses validable con python -m json.tool. --demo con 10 direcciones de un host sintetico (5 interfaces: lo, eth0, docker0, wlan0, tailscale0 con address temporal SECONDARY, DEPRECATED y TENTATIVE) y --file para dumps con comentarios # (incluye sample-ifinet6.table). Selftest 75 checks: parse/comprimir IPv6, clasificacion, scope/flags, parser, filtros, demo, JSON, watch y lectura real de /proc. Zero deps: g++ -std=c++23 -O2 -Wall -Wextra.
# Key features
$ Lectura de /proc/net/if_inet6: formato exacto del kernel (ifindex, plen, scope, flags, ifname)
$ Compresion IPv6 RFC 5952: run mas larga de words cero, tie -> primera (2001:db8:0:0:1:0:0:1 -> 2001:db8::1:0:0:1)
$ Scope decodificado: 0x10 host, 0x20 link, 0x00 global, 0x40 site, 0x80 org
$ Flags IFA_F_*: PERMANENT, TENTATIVE, DEPRECATED, SECONDARY, DADFAILED (rojo) y mas
$ Clasificacion well-known: loopback, link-local, ULA, doc-range, NAT64, Teredo, 6to4
$ Modo watch (--watch N) con deltas de nuevas/eliminadas y cambios de flags/scope
$ Salida JSON validable; --demo con 10 direcciones (5 interfaces); --file tolera comentarios #; --no-color con paleta ANSI mutable
# Gallery
# Technologies used