2
0
Эх сурвалжийг харах

IP4: add + and - operators for calculating IP address ranges

Add options to deal with IP addresses in ranges; it is potentially
confusing because of the byte swapped nature of the IP address.
H. Peter Anvin 1 жил өмнө
parent
commit
f0a03ab245

+ 18 - 2
esp32/max80/IP4.h

@@ -16,8 +16,16 @@ private:
 	uint8_t b[4];
 	uint32_t l;
     };
+    // assumes gcc
+    static constexpr uint32_t netswap(uint32_t v) {
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+	return v;
+#else
+	return __builtin_bswap32(v);
+#endif
+    }
     static constexpr uint32_t hostmask(unsigned int n) {
-	return n >= 32 ? 0 : htonl(((uint32_t)1 << n)-1);
+	return n >= 32 ? 0 : netswap(((uint32_t)1 << n)-1);
     }
 public:
     constexpr IP4() : l{0} { }
@@ -65,7 +73,15 @@ public:
     constexpr IP4 operator % (unsigned int n) const {
 	return IP4(l & hostmask(n));
     }
-
+    constexpr IP4 operator + (uint32_t n) const {
+	return IP4(netswap(netswap(l) + n));
+    }
+    constexpr IP4 operator - (uint32_t n) const {
+	return IP4(netswap(netswap(l) - n));
+    }
+    constexpr int32_t operator - (const IP4 &b) const {
+	return netswap(l) - netswap(b.l);
+    }
     constexpr uint8_t operator [] (size_t n) const { return b[n]; }
     uint8_t & operator [] (size_t n) { return b[n]; }
 

BIN
esp32/output/max80.ino.bin


BIN
fpga/output/max80.fw


BIN
fpga/output/v1.fw


BIN
fpga/output/v2.fw