uint32_t date;
uint32_t integer;
int32_t sinteger;
+ uint64_t integer64;
uint8_t filter[32];
uint8_t ifid[8]; /* struct? */
uint8_t ipv6prefix[18]; /* struct? */
#define vp_ether data.ether
#define vp_signed data.sinteger
#define vp_tlv data.tlv
+#define vp_integer64 data.integer64
#if 0
#define vp_ipaddr data.ipaddr.s_addr
void timeval2ntp(const struct timeval *tv, uint8_t *ntp);
void ntp2timeval(struct timeval *tv, const char *ntp);
+#define ntohll(x) (((uint64_t)(ntohl((uint32_t)((x << 32) >> 32))) << 32) | \
+ (uint64_t)ntohl(((uint32_t)(x >> 32))))
+
+#define htonll(x) ntohll(x)
+
#ifdef __cplusplus
}
#endif
#define PW_TYPE_EXTENDED 15
#define PW_TYPE_EXTENDED_FLAGS 16
#define PW_TYPE_EVS 17
+#define PW_TYPE_INTEGER64 18
#define PW_FLAG_LONG (1 << 8)
{ "uint16", PW_TYPE_SHORT },
{ "uint32", PW_TYPE_INTEGER },
{ "int32", PW_TYPE_SIGNED },
+ { "integer64", PW_TYPE_INTEGER64 },
+ { "uint64", PW_TYPE_INTEGER64 },
{ NULL, 0 }
};
case PW_TYPE_INTEGER:
break;
+ case PW_TYPE_INTEGER64:
default:
fr_pool_free(dval);
fr_strerror_printf("dict_addvalue: VALUEs cannot be defined for attributes of type '%s'",
length = 4;
break;
+ case PW_TYPE_INTEGER64:
+ length = 8;
+ break;
+
case PW_TYPE_ETHERNET:
length = 6;
break;
}
}
break;
+ case PW_TYPE_INTEGER64:
+ snprintf(buf, sizeof(buf), "%llu", vp->vp_integer64);
+ a = buf;
+ break;
case PW_TYPE_DATE:
t = vp->vp_date;
if (delimitst == 1) {
const uint8_t *data;
uint8_t *ptr = start;
uint8_t array[4];
+ uint64_t lvalue64;
const VALUE_PAIR *vp = *pvp;
/*
data = array;
break;
+ case PW_TYPE_INTEGER64:
+ len = 8; /* just in case */
+ lvalue64 = htonll(vp->vp_integer64);
+ data = &lvalue64;
+ break;
+
case PW_TYPE_IPADDR:
data = (const uint8_t *) &vp->vp_ipaddr;
len = 4; /* just in case */
}
break;
+ case PW_TYPE_INTEGER64:
+ if (vp->length != 8) goto raw;
+
+ vp->vp_integer64 = ntohll(*(uint64_t *)(vp->vp_octets));
+ break;
+
case PW_TYPE_DATE:
if (vp->length != 4) goto raw;
vp->length = 4;
break;
+ case PW_TYPE_INTEGER64:
+ vp->length = 8;
+ break;
+
case PW_TYPE_IFID:
vp->length = sizeof(vp->vp_ifid);
break;
char *p, *s=0;
const char *cp, *cs;
int x;
+ unsigned long long y;
size_t length;
DICT_VALUE *dval;
vp->vp_integer = dval->value;
break;
+ case PW_TYPE_INTEGER64:
+ /*
+ * Note that ALL integers are unsigned!
+ */
+ p = vp->vp_strvalue;
+ if (sscanf(p, "%llu", &y) != 1) {
+ fr_strerror_printf("Invalid value %s for attribute %s",
+ value, vp->name);
+ return NULL;
+ }
+ vp->vp_integer64 = y;
+ vp->length = 8;
+ p += strspn(p, "0123456789");
+ if (check_for_whitespace(p)) break;
+ break;
+
case PW_TYPE_DATE:
{
/*