![]() |
|
|||
0001 /* 0002 * net/tipc/name_table.h: Include file for TIPC name table code 0003 * 0004 * Copyright (c) 2000-2006, 2014-2018, Ericsson AB 0005 * Copyright (c) 2004-2005, 2010-2011, Wind River Systems 0006 * Copyright (c) 2020-2021, Red Hat Inc 0007 * All rights reserved. 0008 * 0009 * Redistribution and use in source and binary forms, with or without 0010 * modification, are permitted provided that the following conditions are met: 0011 * 0012 * 1. Redistributions of source code must retain the above copyright 0013 * notice, this list of conditions and the following disclaimer. 0014 * 2. Redistributions in binary form must reproduce the above copyright 0015 * notice, this list of conditions and the following disclaimer in the 0016 * documentation and/or other materials provided with the distribution. 0017 * 3. Neither the names of the copyright holders nor the names of its 0018 * contributors may be used to endorse or promote products derived from 0019 * this software without specific prior written permission. 0020 * 0021 * Alternatively, this software may be distributed under the terms of the 0022 * GNU General Public License ("GPL") version 2 as published by the Free 0023 * Software Foundation. 0024 * 0025 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 0026 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0027 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0028 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 0029 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 0030 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 0031 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 0032 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 0033 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 0034 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 0035 * POSSIBILITY OF SUCH DAMAGE. 0036 */ 0037 0038 #ifndef _TIPC_NAME_TABLE_H 0039 #define _TIPC_NAME_TABLE_H 0040 0041 struct tipc_subscription; 0042 struct tipc_plist; 0043 struct tipc_nlist; 0044 struct tipc_group; 0045 struct tipc_uaddr; 0046 0047 /* 0048 * TIPC name types reserved for internal TIPC use (both current and planned) 0049 */ 0050 #define TIPC_ZM_SRV 3 /* zone master service name type */ 0051 #define TIPC_PUBL_SCOPE_NUM (TIPC_NODE_SCOPE + 1) 0052 #define TIPC_NAMETBL_SIZE 1024 /* must be a power of 2 */ 0053 0054 #define TIPC_ANY_SCOPE 10 /* Both node and cluster scope will match */ 0055 0056 /** 0057 * struct publication - info about a published service address or range 0058 * @sr: service range represented by this publication 0059 * @sk: address of socket bound to this publication 0060 * @scope: scope of publication, TIPC_NODE_SCOPE or TIPC_CLUSTER_SCOPE 0061 * @key: publication key, unique across the cluster 0062 * @id: publication id 0063 * @binding_node: all publications from the same node which bound this one 0064 * - Remote publications: in node->publ_list; 0065 * Used by node/name distr to withdraw publications when node is lost 0066 * - Local/node scope publications: in name_table->node_scope list 0067 * - Local/cluster scope publications: in name_table->cluster_scope list 0068 * @binding_sock: all publications from the same socket which bound this one 0069 * Used by socket to withdraw publications when socket is unbound/released 0070 * @local_publ: list of identical publications made from this node 0071 * Used by closest_first and multicast receive lookup algorithms 0072 * @all_publ: all publications identical to this one, whatever node and scope 0073 * Used by round-robin lookup algorithm 0074 * @list: to form a list of publications in temporal order 0075 * @rcu: RCU callback head used for deferred freeing 0076 */ 0077 struct publication { 0078 struct tipc_service_range sr; 0079 struct tipc_socket_addr sk; 0080 u16 scope; 0081 u32 key; 0082 u32 id; 0083 struct list_head binding_node; 0084 struct list_head binding_sock; 0085 struct list_head local_publ; 0086 struct list_head all_publ; 0087 struct list_head list; 0088 struct rcu_head rcu; 0089 }; 0090 0091 /** 0092 * struct name_table - table containing all existing port name publications 0093 * @services: name sequence hash lists 0094 * @node_scope: all local publications with node scope 0095 * - used by name_distr during re-init of name table 0096 * @cluster_scope: all local publications with cluster scope 0097 * - used by name_distr to send bulk updates to new nodes 0098 * - used by name_distr during re-init of name table 0099 * @cluster_scope_lock: lock for accessing @cluster_scope 0100 * @local_publ_count: number of publications issued by this node 0101 * @rc_dests: destination node counter 0102 * @snd_nxt: next sequence number to be used 0103 */ 0104 struct name_table { 0105 struct hlist_head services[TIPC_NAMETBL_SIZE]; 0106 struct list_head node_scope; 0107 struct list_head cluster_scope; 0108 rwlock_t cluster_scope_lock; 0109 u32 local_publ_count; 0110 u32 rc_dests; 0111 u32 snd_nxt; 0112 }; 0113 0114 int tipc_nl_name_table_dump(struct sk_buff *skb, struct netlink_callback *cb); 0115 bool tipc_nametbl_lookup_anycast(struct net *net, struct tipc_uaddr *ua, 0116 struct tipc_socket_addr *sk); 0117 void tipc_nametbl_lookup_mcast_sockets(struct net *net, struct tipc_uaddr *ua, 0118 struct list_head *dports); 0119 void tipc_nametbl_lookup_mcast_nodes(struct net *net, struct tipc_uaddr *ua, 0120 struct tipc_nlist *nodes); 0121 bool tipc_nametbl_lookup_group(struct net *net, struct tipc_uaddr *ua, 0122 struct list_head *dsts, int *dstcnt, 0123 u32 exclude, bool mcast); 0124 void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp, 0125 struct tipc_uaddr *ua); 0126 struct publication *tipc_nametbl_publish(struct net *net, struct tipc_uaddr *ua, 0127 struct tipc_socket_addr *sk, u32 key); 0128 void tipc_nametbl_withdraw(struct net *net, struct tipc_uaddr *ua, 0129 struct tipc_socket_addr *sk, u32 key); 0130 struct publication *tipc_nametbl_insert_publ(struct net *net, 0131 struct tipc_uaddr *ua, 0132 struct tipc_socket_addr *sk, 0133 u32 key); 0134 struct publication *tipc_nametbl_remove_publ(struct net *net, 0135 struct tipc_uaddr *ua, 0136 struct tipc_socket_addr *sk, 0137 u32 key); 0138 bool tipc_nametbl_subscribe(struct tipc_subscription *s); 0139 void tipc_nametbl_unsubscribe(struct tipc_subscription *s); 0140 int tipc_nametbl_init(struct net *net); 0141 void tipc_nametbl_stop(struct net *net); 0142 0143 struct tipc_dest { 0144 struct list_head list; 0145 u32 port; 0146 u32 node; 0147 }; 0148 0149 struct tipc_dest *tipc_dest_find(struct list_head *l, u32 node, u32 port); 0150 bool tipc_dest_push(struct list_head *l, u32 node, u32 port); 0151 bool tipc_dest_pop(struct list_head *l, u32 *node, u32 *port); 0152 bool tipc_dest_del(struct list_head *l, u32 node, u32 port); 0153 void tipc_dest_list_purge(struct list_head *l); 0154 0155 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |