Files
vrpmdv-yocto-recipes/recipes-vrpmdv/recipes-base/vrpmdv-monitoring-controler/files/vrpmdv-monitoring-cmd.h
Markus Lehr 454ae2f46e added vrpmdv-rtservice, vrpmdv-mon-datafile,
vrpmdv-monitoring-controler, vrpmdv-mon-tty
2024-06-21 08:51:47 +02:00

98 lines
4.0 KiB
C

/* Copyright 2021 Philipp Schuster
*
* This Software is owned by Markus Lehr.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#pragma once
/*
* This file describes the common properties of our custom Netlink family on top of Generic Netlink.
* It is used by all C projects, i.e. the Kernel driver, and the userland components.
*/
/**
* Generic Netlink will create a Netlink family with this name. Kernel will asign
* a numeric ID and afterwards we can talk to the family with its ID. To get
* the ID we use Generic Netlink in the userland and pass the family name.
*
* Short for: Generic Netlink VRPMDV Monitoring gnl_foobar_mcmd
*/
#define FAMILY_NAME "gnl-vrpmdv-mcmd"
/**
* These are the attributes that we want to share in gnl_foobar_xmpl.
* You can understand an attribute as a semantic type. This is
* the payload of Netlink messages.
* GNl: Generic Netlink
*/
enum GNL_VRPMDV_XMPL_ATTRIBUTE {
/**
* 0 is never used (=> UNSPEC), you can also see this in other family definitions in Linux code.
* We do the same, although I'm not sure, if this is really enforced by code.
*/
GNL_VRPMDV_MCMD_A_UNSPEC,
/** We expect a MSG to be a null-terminated C-string. */
GNL_VRPMDV_MCMD_A_MSG,
/** Unused marker field to get the length/count of enum entries. No real attribute. */
__GNL_VRPMDV_MCMD_A_MAX,
};
/**
* Number of elements in `enum GNL_VRPMDV_MCMD_COMMAND`.
*/
#define GNL_FOOBAR_XMPL_ATTRIBUTE_ENUM_LEN (__GNL_VRPMDV_MCMD_A_MAX)
/**
* The number of actual usable attributes in `enum GNL_VRPMDV_MCMD_ATTRIBUTE`.
* This is `GNL_VRPMDV_MCMD_ATTRIBUTE_ENUM_LEN` - 1 because "UNSPEC" is never used.
*/
#define GNL_VRPMDV_MCMD_ATTRIBUTE_COUNT (GNL_VRPMDV_MCMD_ATTRIBUTE_ENUM_LEN - 1)
/**
* Enumeration of all commands (functions) that our custom protocol on top
* of generic netlink supports. This can be understood as the action that
* we want to trigger on the receiving side.
*/
enum GNL_VRPMDV_MCMD_COMMAND {
/**
* 0 is never used (=> UNSPEC), you can also see this in other family definitions in Linux code.
* We do the same, although I'm not sure, if this is really enforced by code.
*/
GNL_VRPMDV_MCMD_C_UNSPEC,
// first real command is "1" (>0)
/**
* When this command is received, we expect the attribute `GNL_VRPMDV_MCMD_ATTRIBUTE::GNL_VRPMDV_MCMD_A_MSG` to
* be present in the Generic Netlink request message. The kernel reads the message from the packet and
* sent it to the copro. THe result will be return by creating a new Generic Netlink response message
* with an corresponding attribute/payload.
*
* This command/signaling mechanism is independent of the Netlink flag `NLM_F_ECHO (0x08)`. We use it as
* "echo specific data" instead of return a 1:1 copy of the package, which you could do with
* `NLM_F_ECHO (0x08)` for example.
*/
GNL_VRPMDV_MCMD_C_MSG,
/**
* Provokes a NLMSG_ERR answer to this request as described in netlink manpage
* (https://man7.org/linux/man-pages/man7/netlink.7.html).
*/
GNL_VRPMDV_MCMD_C_REPLY_WITH_NLMSG_ERR,
/** Unused marker field to get the length/count of enum entries. No real attribute. */
__GNL_VRPMDV_MCMD_C_MAX,
};
/**
* Number of elements in `enum GNL_VRPMDV_MCMD_COMMAND`.
*/
#define GNL_VRPMDV_MCMD_COMMAND_ENUM_LEN (__GNL_VRPMDV_MCMD_C_MAX)
/**
* The number of actual usable commands in `enum GNL_FOOBAR_XMPL_COMMAND`.
* This is `GNL_VRPMDV_MCMD_COMMAND_ENUM_LEN` - 1 because "UNSPEC" is never used.
*/
#define GNL_VRPMDV_MCMD_COMMAND_COUNT (GNL_VRPMDV_MCMD_COMMAND_ENUM_LEN - 1)