+ return setupNodeIdBinaryLongLong(&nodeIdBinary, longValue, bytes);
+}
+
+/**
+ Validate whether the configured nodeId is valid w.r.t. the configured
+ nodeIdType, for types that fit in a double unsigned long long (128 bits) with
+ a certain split that defined by chars1
+
+ @param chars1
+ the number of characters of the first part
+ @param min1
+ the minimum value of the first part
+ @param max1
+ the maximum value of the first part
+ @param bytes1
+ the number of bytes of the first part in the buffer
+ @param min2
+ the minimum value of the second part
+ @param max2
+ the maximum value of the second part
+ @param bytes2
+ the number of bytes of the second part in the buffer
+ @param base
+ the base of the number conversion: 10 for decimal, 16 for hexadecimal
+
+ @return
+ - true when ok
+ - false on failure
+ */
+static bool intSetupNodeIdBinaryDoubleLongLong(
+ unsigned char * dst,
+ unsigned int chars1,
+ unsigned long long min1, unsigned long long max1,
+ unsigned int bytes1,
+ unsigned long long min2, unsigned long long max2,
+ unsigned int bytes2,
+ int base) {
+ unsigned long long longValue1 = 0;
+ unsigned long long longValue2 = 0;
+
+ unsigned char * node_id = getNodeId(NULL);
+ size_t node_id_len = strlen((char *)node_id);
+
+ assert(chars1 > 0);
+ assert(bytes1 > 0);
+ assert(bytes2 > 0);
+
+ /* part 1 */
+ if (node_id_len > 0) {
+ unsigned char first[chars1 + 1];
+ int cpylen = node_id_len < chars1 ? node_id_len : chars1;
+
+ memcpy(first, node_id, cpylen);
+ first[cpylen] = '\0';
+
+ if (!readULL(PUD_NODE_ID_NAME, (char *)first, &longValue1, base)) {
+ return false;
+ }
+
+ if ((longValue1 < min1) || (longValue1 > max1)) {
+ pudError(false, "First %u character(s) of %s value %llu are out of range [%llu,%llu]",
+ cpylen, PUD_NODE_ID_NAME, longValue1, min1, max1);
+ return false;
+ }
+ }
+
+ /* part 2 */
+ if (node_id_len > chars1) {
+ if (!readULL(PUD_NODE_ID_NAME, (char *)&node_id[chars1], &longValue2, base)) {
+ return false;
+ }
+
+ if ((longValue2 < min2) || (longValue2 > max2)) {
+ pudError(false, "Last %u character(s) of %s value %llu are out of range [%llu,%llu]",
+ (unsigned int)(node_id_len - chars1), PUD_NODE_ID_NAME, longValue2, min2, max2);
+ return false;
+ }
+ } else {
+ /* longvalue1 is the only value, so it is the least significant value:
+ * exchange the 2 values */
+ unsigned long long tmp = longValue1;
+ longValue1 = longValue2;
+ longValue2 = tmp;
+ }
+
+ return setupNodeIdBinaryDoubleLongLong(&nodeIdBinary,
+ longValue1, &dst[0], bytes1,
+ longValue2, &dst[bytes1], bytes2);