123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- #include <linux/kernel.h>
- #include "addr.h"
- #include "core.h"
- int in_own_cluster(struct net *net, u32 addr)
- {
- return in_own_cluster_exact(net, addr) || !addr;
- }
- int in_own_cluster_exact(struct net *net, u32 addr)
- {
- struct tipc_net *tn = net_generic(net, tipc_net_id);
- return !((addr ^ tn->own_addr) >> 12);
- }
- int in_own_node(struct net *net, u32 addr)
- {
- struct tipc_net *tn = net_generic(net, tipc_net_id);
- return (addr == tn->own_addr) || !addr;
- }
- u32 addr_domain(struct net *net, u32 sc)
- {
- struct tipc_net *tn = net_generic(net, tipc_net_id);
- if (likely(sc == TIPC_NODE_SCOPE))
- return tn->own_addr;
- if (sc == TIPC_CLUSTER_SCOPE)
- return tipc_cluster_mask(tn->own_addr);
- return tipc_zone_mask(tn->own_addr);
- }
- int tipc_addr_domain_valid(u32 addr)
- {
- u32 n = tipc_node(addr);
- u32 c = tipc_cluster(addr);
- u32 z = tipc_zone(addr);
- if (n && (!z || !c))
- return 0;
- if (c && !z)
- return 0;
- return 1;
- }
- int tipc_addr_node_valid(u32 addr)
- {
- return tipc_addr_domain_valid(addr) && tipc_node(addr);
- }
- int tipc_in_scope(u32 domain, u32 addr)
- {
- if (!domain || (domain == addr))
- return 1;
- if (domain == tipc_cluster_mask(addr))
- return 1;
- if (domain == tipc_zone_mask(addr))
- return 1;
- return 0;
- }
- int tipc_addr_scope(u32 domain)
- {
- if (likely(!domain))
- return TIPC_ZONE_SCOPE;
- if (tipc_node(domain))
- return TIPC_NODE_SCOPE;
- if (tipc_cluster(domain))
- return TIPC_CLUSTER_SCOPE;
- return TIPC_ZONE_SCOPE;
- }
- char *tipc_addr_string_fill(char *string, u32 addr)
- {
- snprintf(string, 16, "<%u.%u.%u>",
- tipc_zone(addr), tipc_cluster(addr), tipc_node(addr));
- return string;
- }
|