mirror of
https://dev.lirent.ru/Vatrog/vm-automation-signaling.git
synced 2026-06-26 04:36:37 +03:00
41 lines
2.2 KiB
C
41 lines
2.2 KiB
C
|
|
#ifndef VMSIG_ROSTER_H
|
||
|
|
#define VMSIG_ROSTER_H
|
||
|
|
#include <stdint.h>
|
||
|
|
|
||
|
|
/* vmsig_roster.h — NEUTRAL inventory-coherence contract.
|
||
|
|
*
|
||
|
|
* The signaling daemon owns the discovery namespace and assigns each running VM a stable
|
||
|
|
* ENDPOINT slot [0,64). The roster is the per-endpoint datum "which VM currently occupies
|
||
|
|
* this slot, by what name, in what coarse lifecycle state". It is published as an UP event
|
||
|
|
* VMSIG_EV_ROSTER (source=CORE), retained per endpoint and replayed to a late subscriber —
|
||
|
|
* exactly like the MEMCTX datum, but carrying identity rather than an address-space handle.
|
||
|
|
*
|
||
|
|
* This is COHERENCE of shared state (the endpoint roster is shared across all controls),
|
||
|
|
* NOT perception and NOT access-brokering. A consumer decodes it WITHOUT any host/Proxmox
|
||
|
|
* knowledge: `endpoint` rides in the event header (ev->endpoint), the rest in inln[48].
|
||
|
|
* CAP_ROSTER gates RECEIVING the datum (subscription), not access — access stays OS-DAC. */
|
||
|
|
|
||
|
|
/* Roster transition (entry->action). */
|
||
|
|
enum {
|
||
|
|
VMSIG_ROSTER_ATTACH = 0, /* endpoint is now occupied by `vmid` */
|
||
|
|
VMSIG_ROSTER_DETACH = 1, /* endpoint vacated (the slot bit is being released) */
|
||
|
|
VMSIG_ROSTER_UPDATE = 2 /* same vmid on the slot; state and/or name changed */
|
||
|
|
};
|
||
|
|
|
||
|
|
/* roster->flags bits */
|
||
|
|
#define VMSIG_ROSTER_NAME_TRUNC 0x1u /* the VM name did not fit and was truncated */
|
||
|
|
|
||
|
|
#define VMSIG_ROSTER_NAME_MAX 32 /* inline, NUL-terminated, truncated name */
|
||
|
|
|
||
|
|
/* The roster datum, carried inline (inln[48]). `endpoint` is NOT here — it is the event
|
||
|
|
* header's ev->endpoint (where every event carries it, and what the wire serializes). */
|
||
|
|
typedef struct {
|
||
|
|
uint32_t vmid; /* host VM id (e.g. Proxmox vmid 100..1e9) — does NOT fit endpoint */
|
||
|
|
uint32_t state; /* coarse lifecycle: VMSIG_VM_* (vmsig_event.h), from the host plane */
|
||
|
|
uint32_t action; /* VMSIG_ROSTER_ATTACH/DETACH/UPDATE */
|
||
|
|
uint32_t flags; /* VMSIG_ROSTER_* (e.g. NAME_TRUNC) */
|
||
|
|
char name[VMSIG_ROSTER_NAME_MAX]; /* NUL-terminated, truncated display name */
|
||
|
|
} vmsig_roster; /* 4+4+4+4+32 = 48 — exactly inln[48] */
|
||
|
|
|
||
|
|
#endif /* VMSIG_ROSTER_H */
|