/* harkaq-uapi.h — las constantes del ABI de Landlock/audit, con respaldo propio.
 *
 * Por qué existe: **el kernel y los headers envejecen por separado**. El worker de la granja
 * corre kernel 6.17 (Landlock ABI 7, con audit de denegaciones) pero su `linux-libc-dev` es
 * 6.8 y no define NADA de lo que hace falta — ni los flags de log de ABI 7/8, ni
 * `AUDIT_LANDLOCK_ACCESS`, ni `IOCTL_DEV` de ABI 5. El kernel puede; el compilador no sabe
 * pedírselo. Medido en Ubuntu 24.04 + HWE 6.17 (SDD 16 §4.8).
 *
 * Es el mismo error de fondo que §3.1 advierte al revés: allá, deducir el ABI de la versión del
 * kernel; acá, deducirlo de la versión de los headers. **Ninguna de las dos dice la verdad.** La
 * única fuente es el syscall en runtime (`LANDLOCK_CREATE_RULESET_VERSION`), y estas constantes
 * son números de contrato del kernel — estables por definición de UAPI, seguros de fijar.
 *
 * Sin esto, harkaq sólo compila en distros con headers al día, que es justo lo que un
 * compilador continuo NO puede exigir.
 */
#ifndef HARKAQ_UAPI_H
#define HARKAQ_UAPI_H

#include <linux/audit.h>
#include <linux/landlock.h>

/* ABI 1 */
#ifndef LANDLOCK_CREATE_RULESET_VERSION
#define LANDLOCK_CREATE_RULESET_VERSION (1U << 0)
#endif

/* ABI 2 — sin REFER no compila software real (D7) */
#ifndef LANDLOCK_ACCESS_FS_REFER
#define LANDLOCK_ACCESS_FS_REFER (1ULL << 13)
#endif

/* ABI 3 */
#ifndef LANDLOCK_ACCESS_FS_TRUNCATE
#define LANDLOCK_ACCESS_FS_TRUNCATE (1ULL << 14)
#endif

/* ABI 5 */
#ifndef LANDLOCK_ACCESS_FS_IOCTL_DEV
#define LANDLOCK_ACCESS_FS_IOCTL_DEV (1ULL << 15)
#endif

/* ABI 6 — scoping de IPC (D8) */
#ifndef LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET
#define LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET (1ULL << 0)
#endif
#ifndef LANDLOCK_SCOPE_SIGNAL
#define LANDLOCK_SCOPE_SIGNAL (1ULL << 1)
#endif

/* ABI 7 — los flags de logging. LOG_NEW_EXEC_ON es del que cuelga TODO el proyecto: sin él el
 * kernel no audita ninguna denegación posterior al execve y harkaq certificaría como herméticos
 * todos los builds, sin un solo error visible (§3.4). */
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF
#define LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF (1U << 0)
#endif
#ifndef LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON
#define LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON (1U << 1)
#endif
#ifndef LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF
#define LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF (1U << 2)
#endif

/* ABI 8 */
#ifndef LANDLOCK_RESTRICT_SELF_TSYNC
#define LANDLOCK_RESTRICT_SELF_TSYNC (1U << 3)
#endif

/* Tipos de registro de audit. Sin éstos el lector no reconoce la evidencia AUNQUE el kernel la
 * emita: filtraría por un número que no conoce y vería cero denegaciones — el falso `Hermetico`
 * de D9, esta vez por headers viejos. */
#ifndef AUDIT_LANDLOCK_ACCESS
#define AUDIT_LANDLOCK_ACCESS 1423
#endif
#ifndef AUDIT_LANDLOCK_DOMAIN
#define AUDIT_LANDLOCK_DOMAIN 1424
#endif

/* Grupo multicast de sólo-lectura del audit (requiere CAP_AUDIT_READ). */
#ifndef AUDIT_NLGRP_READLOG
#define AUDIT_NLGRP_READLOG 1
#endif

#endif /* HARKAQ_UAPI_H */
