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