root/include/uapi/linux/netfilter/xt_sctp.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. __sctp_chunkmap_is_clear
  2. __sctp_chunkmap_is_all_set

   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 #ifndef _XT_SCTP_H_
   3 #define _XT_SCTP_H_
   4 
   5 #include <linux/types.h>
   6 
   7 #define XT_SCTP_SRC_PORTS               0x01
   8 #define XT_SCTP_DEST_PORTS              0x02
   9 #define XT_SCTP_CHUNK_TYPES             0x04
  10 
  11 #define XT_SCTP_VALID_FLAGS             0x07
  12 
  13 struct xt_sctp_flag_info {
  14         __u8 chunktype;
  15         __u8 flag;
  16         __u8 flag_mask;
  17 };
  18 
  19 #define XT_NUM_SCTP_FLAGS       4
  20 
  21 struct xt_sctp_info {
  22         __u16 dpts[2];  /* Min, Max */
  23         __u16 spts[2];  /* Min, Max */
  24 
  25         __u32 chunkmap[256 / sizeof (__u32)];  /* Bit mask of chunks to be matched according to RFC 2960 */
  26 
  27 #define SCTP_CHUNK_MATCH_ANY   0x01  /* Match if any of the chunk types are present */
  28 #define SCTP_CHUNK_MATCH_ALL   0x02  /* Match if all of the chunk types are present */
  29 #define SCTP_CHUNK_MATCH_ONLY  0x04  /* Match if these are the only chunk types present */
  30 
  31         __u32 chunk_match_type;
  32         struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS];
  33         int flag_count;
  34 
  35         __u32 flags;
  36         __u32 invflags;
  37 };
  38 
  39 #define bytes(type) (sizeof(type) * 8)
  40 
  41 #define SCTP_CHUNKMAP_SET(chunkmap, type)               \
  42         do {                                            \
  43                 (chunkmap)[type / bytes(__u32)] |=      \
  44                         1u << (type % bytes(__u32));    \
  45         } while (0)
  46 
  47 #define SCTP_CHUNKMAP_CLEAR(chunkmap, type)                     \
  48         do {                                                    \
  49                 (chunkmap)[type / bytes(__u32)] &=              \
  50                         ~(1u << (type % bytes(__u32))); \
  51         } while (0)
  52 
  53 #define SCTP_CHUNKMAP_IS_SET(chunkmap, type)                    \
  54 ({                                                              \
  55         ((chunkmap)[type / bytes (__u32)] &             \
  56                 (1u << (type % bytes (__u32)))) ? 1: 0; \
  57 })
  58 
  59 #define SCTP_CHUNKMAP_RESET(chunkmap) \
  60         memset((chunkmap), 0, sizeof(chunkmap))
  61 
  62 #define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
  63         memset((chunkmap), ~0U, sizeof(chunkmap))
  64 
  65 #define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
  66         memcpy((destmap), (srcmap), sizeof(srcmap))
  67 
  68 #define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
  69         __sctp_chunkmap_is_clear((chunkmap), ARRAY_SIZE(chunkmap))
  70 static inline _Bool
  71 __sctp_chunkmap_is_clear(const __u32 *chunkmap, unsigned int n)
  72 {
  73         unsigned int i;
  74         for (i = 0; i < n; ++i)
  75                 if (chunkmap[i])
  76                         return 0;
  77         return 1;
  78 }
  79 
  80 #define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
  81         __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap))
  82 static inline _Bool
  83 __sctp_chunkmap_is_all_set(const __u32 *chunkmap, unsigned int n)
  84 {
  85         unsigned int i;
  86         for (i = 0; i < n; ++i)
  87                 if (chunkmap[i] != ~0U)
  88                         return 0;
  89         return 1;
  90 }
  91 
  92 #endif /* _XT_SCTP_H_ */
  93 

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