diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-09-10 09:40:37 -0400 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-09-10 09:40:37 -0400 |
commit | a3a2b8dedb347c7caf92e707cd65be302c78575d (patch) | |
tree | fe494fde0800a43bd874f4dbc3df2bff5f80029f /node | |
parent | a40b8c07f49bd9ad2748430eb9e79680059458fd (diff) | |
download | infinitytier-a3a2b8dedb347c7caf92e707cd65be302c78575d.tar.gz infinitytier-a3a2b8dedb347c7caf92e707cd65be302c78575d.zip |
Look up rate info from database, but going to drop min balance cause it seems unnecessary. Also work in progress on membership certs.
Diffstat (limited to 'node')
-rw-r--r-- | node/MulticastGroup.hpp | 4 | ||||
-rw-r--r-- | node/Network.hpp | 26 |
2 files changed, 28 insertions, 2 deletions
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 { |