From: Jon Maloy <[email protected]>
The existing 32-bit based address types in TIPC have a value space
that is perceived as too limited in some environments. It would
be more attractive in a modern user environment such as Kubernetes
if it could provide a larger address range.
Advantages:
- Users could directly use UUIDs, strings or other values as service
instances types and instances.
- No more risk of collisions between randomly selected service types
The effect on the TIPC implementation and protocol would be significant,
but this is still worth considering.
---
include/uapi/linux/tipc.h | 56 ++++++++++++++++++++++++++++++++++-----
1 file changed, 50 insertions(+), 6 deletions(-)
diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h
index add01db1daef..c0c46742ffbd 100644
--- a/include/uapi/linux/tipc.h
+++ b/include/uapi/linux/tipc.h
@@ -42,9 +42,22 @@
#include <linux/sockios.h>
/*
- * TIPC addressing primitives
+ * Unified address type
+ * node: destination node id or binding scope. Zero if whole cluster.
+ * type: service type. Must be unique for service.
+ * instance: service instance. Can be bound to by multiple sockets.
+ * range: binding, subscription or multicast range.
*/
+struct tipc_addr {
+ __u8 node[16]; /* zero if whole cluster */
+ __u8 type[16]; /* zero if socket address */
+ __u8 instance[16]; /* port number if socket address */
+ __u8 range; /* number of trailing bits in 'instance' */
+};
+/*
+ * Legacy address types
+ */
struct tipc_socket_addr {
__u32 ref;
__u32 node;
@@ -74,7 +87,7 @@ struct tipc_service_range {
* Publication scopes when binding service / service range
*/
enum tipc_scope {
- TIPC_CLUSTER_SCOPE = 2, /* 0 can also be used */
+ TIPC_GLOBAL_SCOPE = 0,
TIPC_NODE_SCOPE = 3
};
@@ -114,8 +127,18 @@ enum tipc_scope {
#define TIPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */
+struct tipc_topsub {
+ struct tipc_addr service; /* subscribed service */
+ __u32 timeout; /* subscription duration [ms] */
+ __u32 filter; /* subscription option bits */
+ __u8 handle[16]; /* user handle */
+};
+
+/*
+ * Legacy subscription structure
+ */
struct tipc_subscr {
- struct tipc_service_range seq; /* range of interest */
+ struct tipc_service_range seq; /* range of interest */
__u32 timeout; /* subscription duration (in ms) */
__u32 filter; /* bitmask of filter options */
char usr_handle[8]; /* available for subscriber use */
@@ -125,6 +148,16 @@ struct tipc_subscr {
#define TIPC_WITHDRAWN 2 /* withdrawal event */
#define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */
+struct tipc_topevt {
+ struct tipc_topsub sub; /* original subscription */
+ struct tipc_addr socket; /* associated socket */
+ struct tipc_addr service; /* matching address */
+ __u32 event; /* publ/withdraw/timeout */
+};
+
+/*
+ * Legacy event structure
+ */
struct tipc_event {
__u32 event; /* event type */
__u32 found_lower; /* matching range */
@@ -153,18 +186,21 @@ struct tipc_event {
#define TIPC_SERVICE_RANGE 1
#define TIPC_SERVICE_ADDR 2
#define TIPC_SOCKET_ADDR 3
+#define TIPC_ADDR 4
struct sockaddr_tipc {
unsigned short family;
unsigned char addrtype;
signed char scope;
union {
+
struct tipc_socket_addr id;
struct tipc_service_range nameseq;
struct {
struct tipc_service_addr name;
__u32 domain;
} name;
+ struct tipc_addr a;
} addr;
};
@@ -188,17 +224,25 @@ struct sockaddr_tipc {
#define TIPC_SOCK_RECVQ_DEPTH 132 /* Default: none (read only) */
#define TIPC_MCAST_BROADCAST 133 /* Default: TIPC selects. No arg */
#define TIPC_MCAST_REPLICAST 134 /* Default: TIPC selects. No arg */
-#define TIPC_GROUP_JOIN 135 /* Takes struct tipc_group_req* */
+#define TIPC_GROUP_JOIN 135 /* Takes struct tipc_group_join */
#define TIPC_GROUP_LEAVE 136 /* No argument */
#define TIPC_SOCK_RECVQ_USED 137 /* Default: none (read only) */
#define TIPC_NODELAY 138 /* Default: false */
/*
- * Flag values
+ * Group join flag values
*/
#define TIPC_GROUP_LOOPBACK 0x1 /* Receive copy of sent msg when match */
#define TIPC_GROUP_MEMBER_EVTS 0x2 /* Receive membership events in socket */
+struct tipc_group_join {
+ struct tipc_addr addr;
+ __u32 flags;
+};
+
+/*
+ * Legacy structure
+ */
struct tipc_group_req {
__u32 type; /* group id */
__u32 instance; /* member id */
@@ -259,7 +303,7 @@ static inline int tipc_aead_key_size(struct tipc_aead_key
*key)
#define TIPC_CFG_SRV 0
#define TIPC_ZONE_SCOPE 1
-
+#define TIPC_CLUSTER_SCOPE 2
#define TIPC_ADDR_NAMESEQ 1
#define TIPC_ADDR_NAME 2
#define TIPC_ADDR_ID 3
--
2.25.4
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion