From 206c6b4a49f2cdc9c64af6cad888b091ab21d18d Mon Sep 17 00:00:00 2001 From: Daniel Wippermann Date: Sat, 20 Jan 2024 10:36:38 +0100 Subject: [PATCH] Add some IPv4 address utility functions. --- src/tcp-data-source-provider.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/tcp-data-source-provider.js b/src/tcp-data-source-provider.js index a1ada8b..007200b 100644 --- a/src/tcp-data-source-provider.js +++ b/src/tcp-data-source-provider.js @@ -11,6 +11,30 @@ const DataSourceProvider = require('./data-source-provider'); +const ipv4Re = /^\d+\.\d+\.\d+\.\d+$/; + +function parseIpV4Address(string) { + if (!ipv4Re.test(string)) { + throw new Error('Invalid IPv4 input'); + } + return string.split('.').map(s => +s); +} + +function formatIpV4Address(parts) { + return parts.map(p => p.toString()).join('.'); +} + +function calculateIpV4BroadcastAddress(address, netmask) { + const addressParts = parseIpV4Address(address); + const netmaskParts = parseIpV4Address(netmask); + const bcastParts = [ 0, 0, 0, 0, ]; + for (let i = 0; i < 4; i++) { + bcastParts [i] = addressParts [i] | (netmaskParts [i] ^ 255); + } + const broadcastAddress = formatIpV4Address(bcastParts); + return broadcastAddress; +} + class TcpDataSourceProvider extends DataSourceProvider { /**