From: Jon Maloy <jma...@redhat.com> 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 tipc-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/tipc-discussion