From a3a2b8dedb347c7caf92e707cd65be302c78575d Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Tue, 10 Sep 2013 09:40:37 -0400 Subject: Look up rate info from database, but going to drop min balance cause it seems unnecessary. Also work in progress on membership certs. --- node/MulticastGroup.hpp | 4 ++-- node/Network.hpp | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) (limited to 'node') diff --git a/node/MulticastGroup.hpp b/node/MulticastGroup.hpp index 3c31756f..9b96d6e8 100644 --- a/node/MulticastGroup.hpp +++ b/node/MulticastGroup.hpp @@ -101,12 +101,12 @@ public: } /** - * @return Human readable string representing this group + * @return Human readable string representing this group (MAC/ADI in hex) */ inline std::string toString() const { char buf[64]; - Utils::snprintf(buf,sizeof(buf),"%.2x%.2x%.2x%.2x%.2x%.2x/%.8lx",(unsigned int)_mac.data[0],(unsigned int)_mac.data[1],(unsigned int)_mac.data[2],(unsigned int)_mac.data[3],(unsigned int)_mac.data[4],(unsigned int)_mac.data[5],(unsigned long)_adi); + Utils::snprintf(buf,sizeof(buf),"%.2x%.2x%.2x%.2x%.2x%.2x/%lx",(unsigned int)_mac.data[0],(unsigned int)_mac.data[1],(unsigned int)_mac.data[2],(unsigned int)_mac.data[3],(unsigned int)_mac.data[4],(unsigned int)_mac.data[5],(unsigned long)_adi); return std::string(buf); } diff --git a/node/Network.hpp b/node/Network.hpp index 2d90dac7..76718a77 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -82,6 +82,32 @@ class Network : NonCopyable public: /** * A certificate of network membership for private network participation + * + * Certificates consist of a dictionary containing one or more values with + * optional max delta paramters. A max delta paramter defines the maximum + * absolute value of the difference between each set of two values in order + * for two certificates to match. If there is no max delta parameter, each + * value is compared for straightforward string equality. Values must be + * in hexadecimal (and may be negative) for max delta comparison purposes. + * Decimals are not allowed, so decimal values must be multiplied by some + * factor to convert them to integers with the required relative precision. + * Math is done in 64-bit, allowing plenty of room for this. + * + * This allows membership in a network to be defined not only in terms of + * absolute parameters but also relative comparisons. For example, a network + * could be created that defined membership in terms of a geographic radius. + * Its certificates would contain latitude, longitude, and a max delta for + * each defining the radius. + * + * Max deltas are prefixed by "~". For example, a max delta for "longitude" + * would be "~longitude". + * + * One value and its associated max delta is just about always present: a + * timestamp. This represents the time the certificate was issued by the + * netconf controller. Each peer requests netconf updates periodically with + * new certificates, so this causes peers that are no longer members of the + * network to lose the ability to communicate with their certificate's "ts" + * field differs from everyone else's "ts" by more than "~ts". */ class Certificate : private Dictionary { -- cgit v1.2.3