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

bearer.h (10041B)


      1/*
      2 * net/tipc/bearer.h: Include file for TIPC bearer code
      3 *
      4 * Copyright (c) 1996-2006, 2013-2016, Ericsson AB
      5 * Copyright (c) 2005, 2010-2011, 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_BEARER_H
     38#define _TIPC_BEARER_H
     39
     40#include "netlink.h"
     41#include "core.h"
     42#include "msg.h"
     43#include <net/genetlink.h>
     44
     45#define MAX_MEDIA	3
     46
     47/* Identifiers associated with TIPC message header media address info
     48 * - address info field is 32 bytes long
     49 * - the field's actual content and length is defined per media
     50 * - remaining unused bytes in the field are set to zero
     51 */
     52#define TIPC_MEDIA_INFO_SIZE	32
     53#define TIPC_MEDIA_TYPE_OFFSET	3
     54#define TIPC_MEDIA_ADDR_OFFSET	4
     55
     56/*
     57 * Identifiers of supported TIPC media types
     58 */
     59#define TIPC_MEDIA_TYPE_ETH	1
     60#define TIPC_MEDIA_TYPE_IB	2
     61#define TIPC_MEDIA_TYPE_UDP	3
     62
     63/* Minimum bearer MTU */
     64#define TIPC_MIN_BEARER_MTU	(MAX_H_SIZE + INT_H_SIZE)
     65
     66/* Identifiers for distinguishing between broadcast/multicast and replicast
     67 */
     68#define TIPC_BROADCAST_SUPPORT  1
     69#define TIPC_REPLICAST_SUPPORT  2
     70
     71/**
     72 * struct tipc_media_addr - destination address used by TIPC bearers
     73 * @value: address info (format defined by media)
     74 * @media_id: TIPC media type identifier
     75 * @broadcast: non-zero if address is a broadcast address
     76 */
     77struct tipc_media_addr {
     78	u8 value[TIPC_MEDIA_INFO_SIZE];
     79	u8 media_id;
     80	u8 broadcast;
     81};
     82
     83struct tipc_bearer;
     84
     85/**
     86 * struct tipc_media - Media specific info exposed to generic bearer layer
     87 * @send_msg: routine which handles buffer transmission
     88 * @enable_media: routine which enables a media
     89 * @disable_media: routine which disables a media
     90 * @addr2str: convert media address format to string
     91 * @addr2msg: convert from media addr format to discovery msg addr format
     92 * @msg2addr: convert from discovery msg addr format to media addr format
     93 * @raw2addr: convert from raw addr format to media addr format
     94 * @priority: default link (and bearer) priority
     95 * @tolerance: default time (in ms) before declaring link failure
     96 * @min_win: minimum window (in packets) before declaring link congestion
     97 * @max_win: maximum window (in packets) before declaring link congestion
     98 * @mtu: max packet size bearer can support for media type not dependent on
     99 * underlying device MTU
    100 * @type_id: TIPC media identifier
    101 * @hwaddr_len: TIPC media address len
    102 * @name: media name
    103 */
    104struct tipc_media {
    105	int (*send_msg)(struct net *net, struct sk_buff *buf,
    106			struct tipc_bearer *b,
    107			struct tipc_media_addr *dest);
    108	int (*enable_media)(struct net *net, struct tipc_bearer *b,
    109			    struct nlattr *attr[]);
    110	void (*disable_media)(struct tipc_bearer *b);
    111	int (*addr2str)(struct tipc_media_addr *addr,
    112			char *strbuf,
    113			int bufsz);
    114	int (*addr2msg)(char *msg, struct tipc_media_addr *addr);
    115	int (*msg2addr)(struct tipc_bearer *b,
    116			struct tipc_media_addr *addr,
    117			char *msg);
    118	int (*raw2addr)(struct tipc_bearer *b,
    119			struct tipc_media_addr *addr,
    120			const char *raw);
    121	u32 priority;
    122	u32 tolerance;
    123	u32 min_win;
    124	u32 max_win;
    125	u32 mtu;
    126	u32 type_id;
    127	u32 hwaddr_len;
    128	char name[TIPC_MAX_MEDIA_NAME];
    129};
    130
    131/**
    132 * struct tipc_bearer - Generic TIPC bearer structure
    133 * @media_ptr: pointer to additional media-specific information about bearer
    134 * @mtu: max packet size bearer can support
    135 * @addr: media-specific address associated with bearer
    136 * @name: bearer name (format = media:interface)
    137 * @media: ptr to media structure associated with bearer
    138 * @bcast_addr: media address used in broadcasting
    139 * @pt: packet type for bearer
    140 * @rcu: rcu struct for tipc_bearer
    141 * @priority: default link priority for bearer
    142 * @min_win: minimum window (in packets) before declaring link congestion
    143 * @max_win: maximum window (in packets) before declaring link congestion
    144 * @tolerance: default link tolerance for bearer
    145 * @domain: network domain to which links can be established
    146 * @identity: array index of this bearer within TIPC bearer array
    147 * @disc: ptr to link setup request
    148 * @net_plane: network plane ('A' through 'H') currently associated with bearer
    149 * @up: bearer up flag (bit 0)
    150 * @refcnt: tipc_bearer reference counter
    151 *
    152 * Note: media-specific code is responsible for initialization of the fields
    153 * indicated below when a bearer is enabled; TIPC's generic bearer code takes
    154 * care of initializing all other fields.
    155 */
    156struct tipc_bearer {
    157	void __rcu *media_ptr;			/* initialized by media */
    158	u32 mtu;				/* initialized by media */
    159	struct tipc_media_addr addr;		/* initialized by media */
    160	char name[TIPC_MAX_BEARER_NAME];
    161	struct tipc_media *media;
    162	struct tipc_media_addr bcast_addr;
    163	struct packet_type pt;
    164	struct rcu_head rcu;
    165	u32 priority;
    166	u32 min_win;
    167	u32 max_win;
    168	u32 tolerance;
    169	u32 domain;
    170	u32 identity;
    171	struct tipc_discoverer *disc;
    172	char net_plane;
    173	unsigned long up;
    174	refcount_t refcnt;
    175};
    176
    177struct tipc_bearer_names {
    178	char media_name[TIPC_MAX_MEDIA_NAME];
    179	char if_name[TIPC_MAX_IF_NAME];
    180};
    181
    182/*
    183 * TIPC routines available to supported media types
    184 */
    185
    186void tipc_rcv(struct net *net, struct sk_buff *skb, struct tipc_bearer *b);
    187
    188/*
    189 * Routines made available to TIPC by supported media types
    190 */
    191extern struct tipc_media eth_media_info;
    192
    193#ifdef CONFIG_TIPC_MEDIA_IB
    194extern struct tipc_media ib_media_info;
    195#endif
    196#ifdef CONFIG_TIPC_MEDIA_UDP
    197extern struct tipc_media udp_media_info;
    198#endif
    199
    200int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info);
    201int __tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info);
    202int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info);
    203int __tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info);
    204int tipc_nl_bearer_dump(struct sk_buff *skb, struct netlink_callback *cb);
    205int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info);
    206int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info);
    207int __tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info);
    208int tipc_nl_bearer_add(struct sk_buff *skb, struct genl_info *info);
    209
    210int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb);
    211int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info);
    212int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info);
    213int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info);
    214
    215int tipc_media_set_priority(const char *name, u32 new_value);
    216int tipc_media_set_window(const char *name, u32 new_value);
    217int tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a);
    218int tipc_enable_l2_media(struct net *net, struct tipc_bearer *b,
    219			 struct nlattr *attrs[]);
    220bool tipc_bearer_hold(struct tipc_bearer *b);
    221void tipc_bearer_put(struct tipc_bearer *b);
    222void tipc_disable_l2_media(struct tipc_bearer *b);
    223int tipc_l2_send_msg(struct net *net, struct sk_buff *buf,
    224		     struct tipc_bearer *b, struct tipc_media_addr *dest);
    225
    226void tipc_bearer_add_dest(struct net *net, u32 bearer_id, u32 dest);
    227void tipc_bearer_remove_dest(struct net *net, u32 bearer_id, u32 dest);
    228struct tipc_bearer *tipc_bearer_find(struct net *net, const char *name);
    229int tipc_bearer_get_name(struct net *net, char *name, u32 bearer_id);
    230struct tipc_media *tipc_media_find(const char *name);
    231int tipc_bearer_setup(void);
    232void tipc_bearer_cleanup(void);
    233void tipc_bearer_stop(struct net *net);
    234int tipc_bearer_mtu(struct net *net, u32 bearer_id);
    235bool tipc_bearer_bcast_support(struct net *net, u32 bearer_id);
    236void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id,
    237			  struct sk_buff *skb,
    238			  struct tipc_media_addr *dest);
    239void tipc_bearer_xmit(struct net *net, u32 bearer_id,
    240		      struct sk_buff_head *xmitq,
    241		      struct tipc_media_addr *dst,
    242		      struct tipc_node *__dnode);
    243void tipc_bearer_bc_xmit(struct net *net, u32 bearer_id,
    244			 struct sk_buff_head *xmitq);
    245void tipc_clone_to_loopback(struct net *net, struct sk_buff_head *pkts);
    246int tipc_attach_loopback(struct net *net);
    247void tipc_detach_loopback(struct net *net);
    248
    249static inline void tipc_loopback_trace(struct net *net,
    250				       struct sk_buff_head *pkts)
    251{
    252	if (unlikely(dev_nit_active(net->loopback_dev)))
    253		tipc_clone_to_loopback(net, pkts);
    254}
    255
    256/* check if device MTU is too low for tipc headers */
    257static inline bool tipc_mtu_bad(struct net_device *dev, unsigned int reserve)
    258{
    259	if (dev->mtu >= TIPC_MIN_BEARER_MTU + reserve)
    260		return false;
    261	netdev_warn(dev, "MTU too low for tipc bearer\n");
    262	return true;
    263}
    264
    265#endif	/* _TIPC_BEARER_H */