~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/tipc/name_table.h

Version: ~ [ linux-6.6-rc1 ] ~ [ linux-6.5.2 ] ~ [ linux-6.4.15 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.52 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.131 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.194 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.256 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.294 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.325 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * net/tipc/name_table.h: Include file for TIPC name table code
  3  *
  4  * Copyright (c) 2000-2006, 2014-2018, Ericsson AB
  5  * Copyright (c) 2004-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_NAME_TABLE_H
 38 #define _TIPC_NAME_TABLE_H
 39 
 40 struct tipc_subscription;
 41 struct tipc_plist;
 42 struct tipc_nlist;
 43 struct tipc_group;
 44 
 45 /*
 46  * TIPC name types reserved for internal TIPC use (both current and planned)
 47  */
 48 #define TIPC_ZM_SRV             3       /* zone master service name type */
 49 #define TIPC_PUBL_SCOPE_NUM     (TIPC_NODE_SCOPE + 1)
 50 #define TIPC_NAMETBL_SIZE       1024    /* must be a power of 2 */
 51 
 52 /**
 53  * struct publication - info about a published (name or) name sequence
 54  * @type: name sequence type
 55  * @lower: name sequence lower bound
 56  * @upper: name sequence upper bound
 57  * @scope: scope of publication, TIPC_NODE_SCOPE or TIPC_CLUSTER_SCOPE
 58  * @node: network address of publishing socket's node
 59  * @port: publishing port
 60  * @key: publication key, unique across the cluster
 61  * @id: publication id
 62  * @binding_node: all publications from the same node which bound this one
 63  * - Remote publications: in node->publ_list
 64  *   Used by node/name distr to withdraw publications when node is lost
 65  * - Local/node scope publications: in name_table->node_scope list
 66  * - Local/cluster scope publications: in name_table->cluster_scope list
 67  * @binding_sock: all publications from the same socket which bound this one
 68  *   Used by socket to withdraw publications when socket is unbound/released
 69  * @local_publ: list of identical publications made from this node
 70  *   Used by closest_first and multicast receive lookup algorithms
 71  * @all_publ: all publications identical to this one, whatever node and scope
 72  *   Used by round-robin lookup algorithm
 73  * @list: to form a list of publications in temporal order
 74  * @rcu: RCU callback head used for deferred freeing
 75  */
 76 struct publication {
 77         u32 type;
 78         u32 lower;
 79         u32 upper;
 80         u32 scope;
 81         u32 node;
 82         u32 port;
 83         u32 key;
 84         u32 id;
 85         struct list_head binding_node;
 86         struct list_head binding_sock;
 87         struct list_head local_publ;
 88         struct list_head all_publ;
 89         struct list_head list;
 90         struct rcu_head rcu;
 91 };
 92 
 93 /**
 94  * struct name_table - table containing all existing port name publications
 95  * @seq_hlist: name sequence hash lists
 96  * @node_scope: all local publications with node scope
 97  *               - used by name_distr during re-init of name table
 98  * @cluster_scope: all local publications with cluster scope
 99  *               - used by name_distr to send bulk updates to new nodes
100  *               - used by name_distr during re-init of name table
101  * @local_publ_count: number of publications issued by this node
102  */
103 struct name_table {
104         struct hlist_head services[TIPC_NAMETBL_SIZE];
105         struct list_head node_scope;
106         struct list_head cluster_scope;
107         rwlock_t cluster_scope_lock;
108         u32 local_publ_count;
109 };
110 
111 int tipc_nl_name_table_dump(struct sk_buff *skb, struct netlink_callback *cb);
112 
113 u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 *node);
114 void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper,
115                             u32 scope, bool exact, struct list_head *dports);
116 void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp,
117                               u32 type, u32 domain);
118 void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 type, u32 lower,
119                                    u32 upper, struct tipc_nlist *nodes);
120 bool tipc_nametbl_lookup(struct net *net, u32 type, u32 instance, u32 domain,
121                          struct list_head *dsts, int *dstcnt, u32 exclude,
122                          bool all);
123 struct publication *tipc_nametbl_publish(struct net *net, u32 type, u32 lower,
124                                          u32 upper, u32 scope, u32 port,
125                                          u32 key);
126 int tipc_nametbl_withdraw(struct net *net, u32 type, u32 lower, u32 upper,
127                           u32 key);
128 struct publication *tipc_nametbl_insert_publ(struct net *net, u32 type,
129                                              u32 lower, u32 upper, u32 scope,
130                                              u32 node, u32 ref, u32 key);
131 struct publication *tipc_nametbl_remove_publ(struct net *net, u32 type,
132                                              u32 lower, u32 upper,
133                                              u32 node, u32 key);
134 bool tipc_nametbl_subscribe(struct tipc_subscription *s);
135 void tipc_nametbl_unsubscribe(struct tipc_subscription *s);
136 int tipc_nametbl_init(struct net *net);
137 void tipc_nametbl_stop(struct net *net);
138 
139 struct tipc_dest {
140         struct list_head list;
141         u32 port;
142         u32 node;
143 };
144 
145 struct tipc_dest *tipc_dest_find(struct list_head *l, u32 node, u32 port);
146 bool tipc_dest_push(struct list_head *l, u32 node, u32 port);
147 bool tipc_dest_pop(struct list_head *l, u32 *node, u32 *port);
148 bool tipc_dest_del(struct list_head *l, u32 node, u32 port);
149 void tipc_dest_list_purge(struct list_head *l);
150 int tipc_dest_list_len(struct list_head *l);
151 
152 #endif
153 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp