root/net/tipc/core.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. tipc_netid
  2. tipc_nodes
  3. tipc_name_table
  4. tipc_hashfn
  5. mod
  6. less_eq
  7. more
  8. less
  9. in_range

   1 /*
   2  * net/tipc/core.h: Include file for TIPC global declarations
   3  *
   4  * Copyright (c) 2005-2006, 2013-2018 Ericsson AB
   5  * Copyright (c) 2005-2007, 2010-2013, Wind River Systems
   6  * All rights reserved.
   7  *
   8  * Redistribution and use in source and binary forms, with or without
   9  * modification, are permitted provided that the following conditions are met:
  10  *
  11  * 1. Redistributions of source code must retain the above copyright
  12  *    notice, this list of conditions and the following disclaimer.
  13  * 2. Redistributions in binary form must reproduce the above copyright
  14  *    notice, this list of conditions and the following disclaimer in the
  15  *    documentation and/or other materials provided with the distribution.
  16  * 3. Neither the names of the copyright holders nor the names of its
  17  *    contributors may be used to endorse or promote products derived from
  18  *    this software without specific prior written permission.
  19  *
  20  * Alternatively, this software may be distributed under the terms of the
  21  * GNU General Public License ("GPL") version 2 as published by the Free
  22  * Software Foundation.
  23  *
  24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  25  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  28  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  32  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  33  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  34  * POSSIBILITY OF SUCH DAMAGE.
  35  */
  36 
  37 #ifndef _TIPC_CORE_H
  38 #define _TIPC_CORE_H
  39 
  40 #include <linux/tipc.h>
  41 #include <linux/tipc_config.h>
  42 #include <linux/tipc_netlink.h>
  43 #include <linux/types.h>
  44 #include <linux/kernel.h>
  45 #include <linux/errno.h>
  46 #include <linux/mm.h>
  47 #include <linux/timer.h>
  48 #include <linux/string.h>
  49 #include <linux/uaccess.h>
  50 #include <linux/interrupt.h>
  51 #include <linux/atomic.h>
  52 #include <linux/netdevice.h>
  53 #include <linux/in.h>
  54 #include <linux/list.h>
  55 #include <linux/slab.h>
  56 #include <linux/vmalloc.h>
  57 #include <linux/rtnetlink.h>
  58 #include <linux/etherdevice.h>
  59 #include <net/netns/generic.h>
  60 #include <linux/rhashtable.h>
  61 #include <net/genetlink.h>
  62 
  63 #ifdef pr_fmt
  64 #undef pr_fmt
  65 #endif
  66 
  67 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  68 
  69 struct tipc_node;
  70 struct tipc_bearer;
  71 struct tipc_bc_base;
  72 struct tipc_link;
  73 struct tipc_name_table;
  74 struct tipc_topsrv;
  75 struct tipc_monitor;
  76 
  77 #define TIPC_MOD_VER "2.0.0"
  78 
  79 #define NODE_HTABLE_SIZE       512
  80 #define MAX_BEARERS              3
  81 #define TIPC_DEF_MON_THRESHOLD  32
  82 #define NODE_ID_LEN             16
  83 #define NODE_ID_STR_LEN        (NODE_ID_LEN * 2 + 1)
  84 
  85 extern unsigned int tipc_net_id __read_mostly;
  86 extern int sysctl_tipc_rmem[3] __read_mostly;
  87 extern int sysctl_tipc_named_timeout __read_mostly;
  88 
  89 struct tipc_net {
  90         u8  node_id[NODE_ID_LEN];
  91         u32 node_addr;
  92         u32 trial_addr;
  93         unsigned long addr_trial_end;
  94         char node_id_string[NODE_ID_STR_LEN];
  95         int net_id;
  96         int random;
  97         bool legacy_addr_format;
  98 
  99         /* Node table and node list */
 100         spinlock_t node_list_lock;
 101         struct hlist_head node_htable[NODE_HTABLE_SIZE];
 102         struct list_head node_list;
 103         u32 num_nodes;
 104         u32 num_links;
 105 
 106         /* Neighbor monitoring list */
 107         struct tipc_monitor *monitors[MAX_BEARERS];
 108         int mon_threshold;
 109 
 110         /* Bearer list */
 111         struct tipc_bearer __rcu *bearer_list[MAX_BEARERS + 1];
 112 
 113         /* Broadcast link */
 114         spinlock_t bclock;
 115         struct tipc_bc_base *bcbase;
 116         struct tipc_link *bcl;
 117 
 118         /* Socket hash table */
 119         struct rhashtable sk_rht;
 120 
 121         /* Name table */
 122         spinlock_t nametbl_lock;
 123         struct name_table *nametbl;
 124 
 125         /* Name dist queue */
 126         struct list_head dist_queue;
 127 
 128         /* Topology subscription server */
 129         struct tipc_topsrv *topsrv;
 130         atomic_t subscription_count;
 131 
 132         /* Cluster capabilities */
 133         u16 capabilities;
 134 
 135         /* Tracing of node internal messages */
 136         struct packet_type loopback_pt;
 137 };
 138 
 139 static inline struct tipc_net *tipc_net(struct net *net)
 140 {
 141         return net_generic(net, tipc_net_id);
 142 }
 143 
 144 static inline int tipc_netid(struct net *net)
 145 {
 146         return tipc_net(net)->net_id;
 147 }
 148 
 149 static inline struct list_head *tipc_nodes(struct net *net)
 150 {
 151         return &tipc_net(net)->node_list;
 152 }
 153 
 154 static inline struct name_table *tipc_name_table(struct net *net)
 155 {
 156         return tipc_net(net)->nametbl;
 157 }
 158 
 159 static inline struct tipc_topsrv *tipc_topsrv(struct net *net)
 160 {
 161         return tipc_net(net)->topsrv;
 162 }
 163 
 164 static inline unsigned int tipc_hashfn(u32 addr)
 165 {
 166         return addr & (NODE_HTABLE_SIZE - 1);
 167 }
 168 
 169 static inline u16 mod(u16 x)
 170 {
 171         return x & 0xffffu;
 172 }
 173 
 174 static inline int less_eq(u16 left, u16 right)
 175 {
 176         return mod(right - left) < 32768u;
 177 }
 178 
 179 static inline int more(u16 left, u16 right)
 180 {
 181         return !less_eq(left, right);
 182 }
 183 
 184 static inline int less(u16 left, u16 right)
 185 {
 186         return less_eq(left, right) && (mod(right) != mod(left));
 187 }
 188 
 189 static inline int in_range(u16 val, u16 min, u16 max)
 190 {
 191         return !less(val, min) && !more(val, max);
 192 }
 193 
 194 #ifdef CONFIG_SYSCTL
 195 int tipc_register_sysctl(void);
 196 void tipc_unregister_sysctl(void);
 197 #else
 198 #define tipc_register_sysctl() 0
 199 #define tipc_unregister_sysctl()
 200 #endif
 201 #endif

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