aboutsummaryrefslogtreecommitdiff
path: root/net/tipc/addr.c
diff options
context:
space:
mode:
authorChris Zankel <[email protected]>2015-04-14 03:51:35 +0000
committerChris Zankel <[email protected]>2015-04-14 03:51:35 +0000
commit7ead5b7e4a3cf4a16579a8f164022345b93fe972 (patch)
tree0a9b9497f53d1593c9e2ac197b2e686ea74a9975 /net/tipc/addr.c
parent834a316eeebcb75316c0a7d9088fa638c52dc584 (diff)
parent39a8804455fb23f09157341d3ba7db6d7ae6ee76 (diff)
Merge tag 'v4.0' into for_next
Linux 4.0
Diffstat (limited to 'net/tipc/addr.c')
-rw-r--r--net/tipc/addr.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/net/tipc/addr.c b/net/tipc/addr.c
index 357b74b26f9e..48fd3b5a73fb 100644
--- a/net/tipc/addr.c
+++ b/net/tipc/addr.c
@@ -34,8 +34,51 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "core.h"
+#include <linux/kernel.h>
#include "addr.h"
+#include "core.h"
+
+/**
+ * in_own_cluster - test for cluster inclusion; <0.0.0> always matches
+ */
+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);
+}
+
+/**
+ * in_own_node - test for node inclusion; <0.0.0> always matches
+ */
+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;
+}
+
+/**
+ * addr_domain - convert 2-bit scope value to equivalent message lookup domain
+ *
+ * Needed when address of a named message must be looked up a second time
+ * after a network hop.
+ */
+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);
+}
/**
* tipc_addr_domain_valid - validates a network domain address