Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * net/tipc/name_table.h: Include file for TIPC name table code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Copyright (c) 2000-2006, 2014-2018, Ericsson AB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (c) 2004-2005, 2010-2011, Wind River Systems
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * modification, are permitted provided that the following conditions are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * 1. Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *    notice, this list of conditions and the following disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * 2. Redistributions in binary form must reproduce the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  *    notice, this list of conditions and the following disclaimer in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  *    documentation and/or other materials provided with the distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * 3. Neither the names of the copyright holders nor the names of its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  *    contributors may be used to endorse or promote products derived from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  *    this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  * Alternatively, this software may be distributed under the terms of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)  * GNU General Public License ("GPL") version 2 as published by the Free
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)  * Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * POSSIBILITY OF SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #ifndef _TIPC_NAME_TABLE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define _TIPC_NAME_TABLE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) struct tipc_subscription;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) struct tipc_plist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) struct tipc_nlist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) struct tipc_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  * TIPC name types reserved for internal TIPC use (both current and planned)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define TIPC_ZM_SRV		3	/* zone master service name type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define TIPC_PUBL_SCOPE_NUM	(TIPC_NODE_SCOPE + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define TIPC_NAMETBL_SIZE	1024	/* must be a power of 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)  * struct publication - info about a published (name or) name sequence
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)  * @type: name sequence type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  * @lower: name sequence lower bound
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  * @upper: name sequence upper bound
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)  * @scope: scope of publication, TIPC_NODE_SCOPE or TIPC_CLUSTER_SCOPE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)  * @node: network address of publishing socket's node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)  * @port: publishing port
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * @key: publication key, unique across the cluster
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  * @id: publication id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)  * @binding_node: all publications from the same node which bound this one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)  * - Remote publications: in node->publ_list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)  *   Used by node/name distr to withdraw publications when node is lost
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)  * - Local/node scope publications: in name_table->node_scope list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  * - Local/cluster scope publications: in name_table->cluster_scope list
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67)  * @binding_sock: all publications from the same socket which bound this one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)  *   Used by socket to withdraw publications when socket is unbound/released
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  * @local_publ: list of identical publications made from this node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)  *   Used by closest_first and multicast receive lookup algorithms
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71)  * @all_publ: all publications identical to this one, whatever node and scope
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)  *   Used by round-robin lookup algorithm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  * @list: to form a list of publications in temporal order
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  * @rcu: RCU callback head used for deferred freeing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) struct publication {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	u32 lower;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	u32 upper;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	u32 scope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	u32 node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	u32 port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	u32 key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	u32 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	struct list_head binding_node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	struct list_head binding_sock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	struct list_head local_publ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	struct list_head all_publ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	struct rcu_head rcu;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * struct name_table - table containing all existing port name publications
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  * @seq_hlist: name sequence hash lists
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * @node_scope: all local publications with node scope
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  *               - used by name_distr during re-init of name table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  * @cluster_scope: all local publications with cluster scope
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  *               - used by name_distr to send bulk updates to new nodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  *               - used by name_distr during re-init of name table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  * @local_publ_count: number of publications issued by this node
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) struct name_table {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	struct hlist_head services[TIPC_NAMETBL_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	struct list_head node_scope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	struct list_head cluster_scope;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	rwlock_t cluster_scope_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	u32 local_publ_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	u32 rc_dests;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	u32 snd_nxt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) int tipc_nl_name_table_dump(struct sk_buff *skb, struct netlink_callback *cb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 *node);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 			    u32 scope, bool exact, struct list_head *dports);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 			      u32 type, u32 domain);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 type, u32 lower,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 				   u32 upper, struct tipc_nlist *nodes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 domain,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 			 struct list_head *dsts, int *dstcnt, u32 exclude,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 			 bool all);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) struct publication *tipc_nametbl_publish(struct net *net, u32 type, u32 lower,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 					 u32 upper, u32 scope, u32 port,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 					 u32 key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) int tipc_nametbl_withdraw(struct net *net, u32 type, u32 lower, u32 upper,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 			  u32 key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) struct publication *tipc_nametbl_insert_publ(struct net *net, u32 type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 					     u32 lower, u32 upper, u32 scope,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 					     u32 node, u32 ref, u32 key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) struct publication *tipc_nametbl_remove_publ(struct net *net, u32 type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 					     u32 lower, u32 upper,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 					     u32 node, u32 key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) bool tipc_nametbl_subscribe(struct tipc_subscription *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) void tipc_nametbl_unsubscribe(struct tipc_subscription *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) int tipc_nametbl_init(struct net *net);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) void tipc_nametbl_stop(struct net *net);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) struct tipc_dest {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	u32 port;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	u32 node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct tipc_dest *tipc_dest_find(struct list_head *l, u32 node, u32 port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) bool tipc_dest_push(struct list_head *l, u32 node, u32 port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) bool tipc_dest_pop(struct list_head *l, u32 *node, u32 *port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) bool tipc_dest_del(struct list_head *l, u32 node, u32 port);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) void tipc_dest_list_purge(struct list_head *l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) int tipc_dest_list_len(struct list_head *l);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) #endif