root/tools/lib/bpf/nlattr.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. libbpf_nla_data
  2. libbpf_nla_getattr_u8
  3. libbpf_nla_getattr_u32
  4. libbpf_nla_getattr_str
  5. libbpf_nla_len

   1 /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
   2 
   3 /*
   4  * NETLINK      Netlink attributes
   5  *
   6  * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>
   7  */
   8 
   9 #ifndef __LIBBPF_NLATTR_H
  10 #define __LIBBPF_NLATTR_H
  11 
  12 #include <stdint.h>
  13 #include <linux/netlink.h>
  14 /* avoid multiple definition of netlink features */
  15 #define __LINUX_NETLINK_H
  16 
  17 /**
  18  * Standard attribute types to specify validation policy
  19  */
  20 enum {
  21         LIBBPF_NLA_UNSPEC,      /**< Unspecified type, binary data chunk */
  22         LIBBPF_NLA_U8,          /**< 8 bit integer */
  23         LIBBPF_NLA_U16,         /**< 16 bit integer */
  24         LIBBPF_NLA_U32,         /**< 32 bit integer */
  25         LIBBPF_NLA_U64,         /**< 64 bit integer */
  26         LIBBPF_NLA_STRING,      /**< NUL terminated character string */
  27         LIBBPF_NLA_FLAG,        /**< Flag */
  28         LIBBPF_NLA_MSECS,       /**< Micro seconds (64bit) */
  29         LIBBPF_NLA_NESTED,      /**< Nested attributes */
  30         __LIBBPF_NLA_TYPE_MAX,
  31 };
  32 
  33 #define LIBBPF_NLA_TYPE_MAX (__LIBBPF_NLA_TYPE_MAX - 1)
  34 
  35 /**
  36  * @ingroup attr
  37  * Attribute validation policy.
  38  *
  39  * See section @core_doc{core_attr_parse,Attribute Parsing} for more details.
  40  */
  41 struct libbpf_nla_policy {
  42         /** Type of attribute or LIBBPF_NLA_UNSPEC */
  43         uint16_t        type;
  44 
  45         /** Minimal length of payload required */
  46         uint16_t        minlen;
  47 
  48         /** Maximal length of payload allowed */
  49         uint16_t        maxlen;
  50 };
  51 
  52 /**
  53  * @ingroup attr
  54  * Iterate over a stream of attributes
  55  * @arg pos     loop counter, set to current attribute
  56  * @arg head    head of attribute stream
  57  * @arg len     length of attribute stream
  58  * @arg rem     initialized to len, holds bytes currently remaining in stream
  59  */
  60 #define libbpf_nla_for_each_attr(pos, head, len, rem) \
  61         for (pos = head, rem = len; \
  62              nla_ok(pos, rem); \
  63              pos = nla_next(pos, &(rem)))
  64 
  65 /**
  66  * libbpf_nla_data - head of payload
  67  * @nla: netlink attribute
  68  */
  69 static inline void *libbpf_nla_data(const struct nlattr *nla)
  70 {
  71         return (char *) nla + NLA_HDRLEN;
  72 }
  73 
  74 static inline uint8_t libbpf_nla_getattr_u8(const struct nlattr *nla)
  75 {
  76         return *(uint8_t *)libbpf_nla_data(nla);
  77 }
  78 
  79 static inline uint32_t libbpf_nla_getattr_u32(const struct nlattr *nla)
  80 {
  81         return *(uint32_t *)libbpf_nla_data(nla);
  82 }
  83 
  84 static inline const char *libbpf_nla_getattr_str(const struct nlattr *nla)
  85 {
  86         return (const char *)libbpf_nla_data(nla);
  87 }
  88 
  89 /**
  90  * libbpf_nla_len - length of payload
  91  * @nla: netlink attribute
  92  */
  93 static inline int libbpf_nla_len(const struct nlattr *nla)
  94 {
  95         return nla->nla_len - NLA_HDRLEN;
  96 }
  97 
  98 int libbpf_nla_parse(struct nlattr *tb[], int maxtype, struct nlattr *head,
  99                      int len, struct libbpf_nla_policy *policy);
 100 int libbpf_nla_parse_nested(struct nlattr *tb[], int maxtype,
 101                             struct nlattr *nla,
 102                             struct libbpf_nla_policy *policy);
 103 
 104 int libbpf_nla_dump_errormsg(struct nlmsghdr *nlh);
 105 
 106 #endif /* __LIBBPF_NLATTR_H */

/* [<][>][^][v][top][bottom][index][help] */