cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

core.h (5989B)


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