Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229/* * net/tipc/core.h: Include file for TIPC global declarations * * Copyright (c) 2005-2006, 2013-2018 Ericsson AB * Copyright (c) 2005-2007, 2010-2013, Wind River Systems * Copyright (c) 2020, Red Hat Inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the names of the copyright holders nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */
#ifndef _TIPC_CORE_H#define _TIPC_CORE_H
#include <linux/tipc.h>#include <linux/tipc_config.h>#include <linux/tipc_netlink.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/hex.h>#include <linux/mm.h>#include <linux/timer.h>#include <linux/string.h>#include <linux/uaccess.h>#include <linux/interrupt.h>#include <linux/atomic.h>#include <linux/netdevice.h>#include <linux/in.h>#include <linux/list.h>#include <linux/slab.h>#include <linux/vmalloc.h>#include <linux/rtnetlink.h>#include <linux/etherdevice.h>#include <net/netns/generic.h>#include <linux/rhashtable.h>#include <net/genetlink.h>#include <net/netns/hash.h>
#ifdef pr_fmt#undef pr_fmt#endif
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
struct tipc_node;struct tipc_bearer;struct tipc_bc_base;struct tipc_link;struct tipc_topsrv;struct tipc_monitor;#ifdef CONFIG_TIPC_CRYPTOstruct tipc_crypto;#endif
#define TIPC_MOD_VER "2.0.0"
#define NODE_HTABLE_SIZE 512#define MAX_BEARERS 3#define TIPC_DEF_MON_THRESHOLD 32#define NODE_ID_LEN 16#define NODE_ID_STR_LEN (NODE_ID_LEN * 2 + 1)
extern unsigned int tipc_net_id __read_mostly;extern int sysctl_tipc_rmem[3] __read_mostly;extern int sysctl_tipc_named_timeout __read_mostly;
struct tipc_net { u8 node_id[NODE_ID_LEN]; u32 node_addr; u32 trial_addr; unsigned long addr_trial_end; char node_id_string[NODE_ID_STR_LEN]; int net_id; int random; bool legacy_addr_format;
/* Node table and node list */ spinlock_t node_list_lock; struct hlist_head node_htable[NODE_HTABLE_SIZE]; struct list_head node_list; u32 num_nodes; u32 num_links;
/* Neighbor monitoring list */ struct tipc_monitor *monitors[MAX_BEARERS]; int mon_threshold;
/* Bearer list */ struct tipc_bearer __rcu *bearer_list[MAX_BEARERS + 1];
/* Broadcast link */ spinlock_t bclock; struct tipc_bc_base *bcbase; struct tipc_link *bcl;
/* Socket hash table */ struct rhashtable sk_rht;
/* Name table */ spinlock_t nametbl_lock; struct name_table *nametbl;
/* Topology subscription server */ struct tipc_topsrv *topsrv; atomic_t subscription_count;
/* Cluster capabilities */ u16 capabilities;
/* Tracing of node internal messages */ struct packet_type loopback_pt;
#ifdef CONFIG_TIPC_CRYPTO /* TX crypto handler */ struct tipc_crypto *crypto_tx;#endif /* Work item for net finalize */ struct work_struct work; /* The numbers of work queues in schedule */ atomic_t wq_count;};
static inline struct tipc_net *tipc_net(struct net *net){ return net_generic(net, tipc_net_id);}
static inline int tipc_netid(struct net *net){ return tipc_net(net)->net_id;}
static inline struct list_head *tipc_nodes(struct net *net){ return &tipc_net(net)->node_list;}
static inline struct name_table *tipc_name_table(struct net *net){ return tipc_net(net)->nametbl;}
static inline struct tipc_topsrv *tipc_topsrv(struct net *net){ return tipc_net(net)->topsrv;}
static inline unsigned int tipc_hashfn(u32 addr){ return addr & (NODE_HTABLE_SIZE - 1);}
static inline u16 mod(u16 x){ return x & 0xffffu;}
static inline int less_eq(u16 left, u16 right){ return mod(right - left) < 32768u;}
static inline int more(u16 left, u16 right){ return !less_eq(left, right);}
static inline int less(u16 left, u16 right){ return less_eq(left, right) && (mod(right) != mod(left));}
static inline int tipc_in_range(u16 val, u16 min, u16 max){ return !less(val, min) && !more(val, max);}
static inline u32 tipc_net_hash_mixes(struct net *net, int tn_rand){ return net_hash_mix(&init_net) ^ net_hash_mix(net) ^ tn_rand;}
static inline u32 hash128to32(char *bytes){ __be32 *tmp = (__be32 *)bytes; u32 res;
res = ntohl(tmp[0] ^ tmp[1] ^ tmp[2] ^ tmp[3]); if (likely(res)) return res; return ntohl(tmp[0] | tmp[1] | tmp[2] | tmp[3]);}
#ifdef CONFIG_SYSCTLint tipc_register_sysctl(void);void tipc_unregister_sysctl(void);#else#define tipc_register_sysctl() 0#define tipc_unregister_sysctl()#endif#endif