net/tipc/name_table.c
Source file repositories/reference/linux-study-clean/net/tipc/name_table.c
File Facts
- System
- Linux kernel
- Corpus path
net/tipc/name_table.c- Extension
.c- Size
- 32507 bytes
- Lines
- 1207
- Domain
- Networking Core
- Bucket
- Sockets, Protocols, Packet Path, And Network Policy
- Inferred role
- Networking Core: implementation source
- Status
- source implementation candidate
Why This File Exists
Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Networking stack implementation surface: socket APIs, protocol dispatch, packet flow, routing, filtering, and network namespaces.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
net/sock.hlinux/list_sort.hlinux/rbtree_augmented.hcore.hnetlink.hname_table.hname_distr.hsubscr.hbcast.haddr.hnode.hgroup.h
Detected Declarations
struct service_rangestruct tipc_servicefunction hashfunction service_range_foreach_matchfunction tipc_service_insert_publfunction list_for_each_entryfunction tipc_publ_sortfunction tipc_service_subscribefunction list_for_each_entryfunction usersfunction onefunction list_for_each_entryfunction tipc_nametbl_lookup_mcast_socketsfunction list_for_each_entryfunction tipc_nametbl_lookup_mcast_nodesfunction list_for_each_entryfunction tipc_nametbl_build_groupfunction list_for_each_entryfunction tipc_nametbl_withdrawfunction tipc_nametbl_subscribefunction tipc_nametbl_unsubscribefunction tipc_nametbl_initfunction tipc_service_deletefunction list_for_each_entry_safefunction tipc_nametbl_stopfunction hlist_for_each_entry_rcufunction __tipc_nl_add_nametable_publfunction list_for_each_entry_fromfunction __tipc_nl_service_range_listfunction tipc_nl_service_listfunction hlist_for_each_entry_from_rcufunction tipc_nl_name_table_dumpfunction list_for_each_entryfunction tipc_dest_pushfunction tipc_dest_popfunction tipc_dest_delfunction tipc_dest_list_purgefunction list_for_each_entry_safe
Annotated Snippet
struct service_range {
u32 lower;
u32 upper;
struct rb_node tree_node;
u32 max;
struct list_head local_publ;
struct list_head all_publ;
};
/**
* struct tipc_service - container for all published instances of a service type
* @type: 32 bit 'type' value for service
* @publ_cnt: increasing counter for publications in this service
* @ranges: rb tree containing all service ranges for this service
* @service_list: links to adjacent name ranges in hash chain
* @subscriptions: list of subscriptions for this service type
* @lock: spinlock controlling access to pertaining service ranges/publications
* @rcu: RCU callback head used for deferred freeing
*/
struct tipc_service {
u32 type;
u32 publ_cnt;
struct rb_root ranges;
struct hlist_node service_list;
struct list_head subscriptions;
spinlock_t lock; /* Covers service range list */
struct rcu_head rcu;
};
#define service_range_upper(sr) ((sr)->upper)
RB_DECLARE_CALLBACKS_MAX(static, sr_callbacks,
struct service_range, tree_node, u32, max,
service_range_upper)
#define service_range_entry(rbtree_node) \
(container_of(rbtree_node, struct service_range, tree_node))
#define service_range_overlap(sr, start, end) \
((sr)->lower <= (end) && (sr)->upper >= (start))
/**
* service_range_foreach_match - iterate over tipc service rbtree for each
* range match
* @sr: the service range pointer as a loop cursor
* @sc: the pointer to tipc service which holds the service range rbtree
* @start: beginning of the search range (end >= start) for matching
* @end: end of the search range (end >= start) for matching
*/
#define service_range_foreach_match(sr, sc, start, end) \
for (sr = service_range_match_first((sc)->ranges.rb_node, \
start, \
end); \
sr; \
sr = service_range_match_next(&(sr)->tree_node, \
start, \
end))
/**
* service_range_match_first - find first service range matching a range
* @n: the root node of service range rbtree for searching
* @start: beginning of the search range (end >= start) for matching
* @end: end of the search range (end >= start) for matching
*
* Return: the leftmost service range node in the rbtree that overlaps the
* specific range if any. Otherwise, returns NULL.
*/
static struct service_range *service_range_match_first(struct rb_node *n,
u32 start, u32 end)
{
struct service_range *sr;
struct rb_node *l, *r;
/* Non overlaps in tree at all? */
if (!n || service_range_entry(n)->max < start)
return NULL;
while (n) {
l = n->rb_left;
if (l && service_range_entry(l)->max >= start) {
/* A leftmost overlap range node must be one in the left
* subtree. If not, it has lower > end, then nodes on
* the right side cannot satisfy the condition either.
*/
n = l;
continue;
}
/* No one in the left subtree can match, return if this node is
* an overlap i.e. leftmost.
*/
Annotation
- Immediate include surface: `net/sock.h`, `linux/list_sort.h`, `linux/rbtree_augmented.h`, `core.h`, `netlink.h`, `name_table.h`, `name_distr.h`, `subscr.h`.
- Detected declarations: `struct service_range`, `struct tipc_service`, `function hash`, `function service_range_foreach_match`, `function tipc_service_insert_publ`, `function list_for_each_entry`, `function tipc_publ_sort`, `function tipc_service_subscribe`, `function list_for_each_entry`, `function users`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.