net/tipc/addr.h
Source file repositories/reference/linux-study-clean/net/tipc/addr.h
File Facts
- System
- Linux kernel
- Corpus path
net/tipc/addr.h- Extension
.h- Size
- 4073 bytes
- Lines
- 136
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/types.hlinux/tipc.hnet/net_namespace.hnet/netns/generic.hcore.h
Detected Declarations
struct tipc_uaddrfunction tipc_uaddrfunction tipc_uaddr_validfunction tipc_own_addrfunction tipc_cluster_maskfunction tipc_node2scopefunction tipc_scope2nodefunction in_own_node
Annotated Snippet
struct tipc_uaddr {
unsigned short family;
unsigned char addrtype;
signed char scope;
union {
struct {
struct tipc_service_addr sa;
u32 lookup_node;
};
struct tipc_service_range sr;
struct tipc_socket_addr sk;
};
};
static inline void tipc_uaddr(struct tipc_uaddr *ua, u32 atype, u32 scope,
u32 type, u32 lower, u32 upper)
{
ua->family = AF_TIPC;
ua->addrtype = atype;
ua->scope = scope;
ua->sr.type = type;
ua->sr.lower = lower;
ua->sr.upper = upper;
}
static inline bool tipc_uaddr_valid(struct tipc_uaddr *ua, int len)
{
u32 atype;
if (len < sizeof(struct sockaddr_tipc))
return false;
atype = ua->addrtype;
if (ua->family != AF_TIPC)
return false;
if (atype == TIPC_SERVICE_ADDR || atype == TIPC_SOCKET_ADDR)
return true;
if (atype == TIPC_SERVICE_RANGE)
return ua->sr.upper >= ua->sr.lower;
return false;
}
static inline u32 tipc_own_addr(struct net *net)
{
return tipc_net(net)->node_addr;
}
static inline u8 *tipc_own_id(struct net *net)
{
struct tipc_net *tn = tipc_net(net);
if (!strlen(tn->node_id_string))
return NULL;
return tn->node_id;
}
static inline char *tipc_own_id_string(struct net *net)
{
return tipc_net(net)->node_id_string;
}
static inline u32 tipc_cluster_mask(u32 addr)
{
return addr & TIPC_ZONE_CLUSTER_MASK;
}
static inline int tipc_node2scope(u32 node)
{
return node ? TIPC_NODE_SCOPE : TIPC_CLUSTER_SCOPE;
}
static inline int tipc_scope2node(struct net *net, int sc)
{
return sc != TIPC_NODE_SCOPE ? 0 : tipc_own_addr(net);
}
static inline int in_own_node(struct net *net, u32 addr)
{
return addr == tipc_own_addr(net) || !addr;
}
bool tipc_in_scope(bool legacy_format, u32 domain, u32 addr);
void tipc_set_node_id(struct net *net, u8 *id);
void tipc_set_node_addr(struct net *net, u32 addr);
int tipc_nodeid2string(char *str, u8 *id);
#endif
Annotation
- Immediate include surface: `linux/types.h`, `linux/tipc.h`, `net/net_namespace.h`, `net/netns/generic.h`, `core.h`.
- Detected declarations: `struct tipc_uaddr`, `function tipc_uaddr`, `function tipc_uaddr_valid`, `function tipc_own_addr`, `function tipc_cluster_mask`, `function tipc_node2scope`, `function tipc_scope2node`, `function in_own_node`.
- Atlas domain: Networking Core / Sockets, Protocols, Packet Path, And Network Policy.
- Implementation status: source implementation candidate.
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.