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