only one ip subnetting.
This commit is contained in:
parent
ab90c4ddc6
commit
39ec3a3e7d
4 changed files with 25 additions and 106 deletions
11
Makefile
11
Makefile
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
all: clean-container build-builders build-linux-debug-container
|
all: build-container clean-container build-builders build-linux-debug-container
|
||||||
|
|
||||||
DB=~/.local/share/com.example.d4rt_formulas/d4rt_formulas/formulas.sqlite
|
DB=~/.local/share/com.example.d4rt_formulas/d4rt_formulas/formulas.sqlite
|
||||||
|
|
||||||
|
|
@ -10,17 +10,18 @@ clean:
|
||||||
flutter clean
|
flutter clean
|
||||||
[ -f $(DB) ] && rm $(DB)
|
[ -f $(DB) ] && rm $(DB)
|
||||||
|
|
||||||
clean-container: build-container
|
clean-container:
|
||||||
|
rm -r .build-container-cache
|
||||||
./flutterw clean
|
./flutterw clean
|
||||||
rm .build-container-cache
|
|
||||||
|
|
||||||
pub-get-container: build-container
|
|
||||||
|
pub-get-container:
|
||||||
./flutterw pub get
|
./flutterw pub get
|
||||||
|
|
||||||
test:
|
test:
|
||||||
./flutterw test
|
./flutterw test
|
||||||
|
|
||||||
build-builders: build-container
|
build-builders:
|
||||||
./flutterw pub run build_runner build --delete-conflicting-outputs
|
./flutterw pub run build_runner build --delete-conflicting-outputs
|
||||||
|
|
||||||
build-android-release-container:
|
build-android-release-container:
|
||||||
|
|
|
||||||
|
|
@ -15,23 +15,25 @@ The network address is calculated by applying the subnet mask to zero out the ho
|
||||||
{"name": "hostIP", "unit": "string"}
|
{"name": "hostIP", "unit": "string"}
|
||||||
],
|
],
|
||||||
"output": {"name": "network", "unit": "string"},
|
"output": {"name": "network", "unit": "string"},
|
||||||
"d4rtCode": r"""var parts = hostIP.split('/');
|
"d4rtCode": r"""
|
||||||
var ip = parts[0];
|
var parts = hostIP.split('/');
|
||||||
var mask = int.parse(parts[1]);
|
var ip = parts[0];
|
||||||
var octets = ip.split('.').map((e) => int.parse(e)).toList();
|
var mask = int.parse(parts[1]);
|
||||||
var hostBits = 32 - mask;
|
var octets = ip.split('.').map((e) => int.parse(e)).toList();
|
||||||
var shiftAmount = hostBits;
|
var hostBits = 32 - mask;
|
||||||
var networkValue = 0;
|
var shiftAmount = hostBits;
|
||||||
for (var i = 0; i < 4; i++) {
|
var networkValue = 0;
|
||||||
|
for (var i = 0; i < 4; i++) {
|
||||||
networkValue = (networkValue << 8) | octets[i];
|
networkValue = (networkValue << 8) | octets[i];
|
||||||
}
|
}
|
||||||
networkValue = (networkValue >> shiftAmount) << shiftAmount;
|
networkValue = (networkValue >> shiftAmount) << shiftAmount;
|
||||||
var networkOctets = [];
|
var networkOctets = [];
|
||||||
for (var i = 0; i < 4; i++) {
|
for (var i = 0; i < 4; i++) {
|
||||||
networkOctets.insert(0, networkValue & 0xFF);
|
networkOctets.insert(0, networkValue & 0xFF);
|
||||||
networkValue = networkValue >> 8;
|
networkValue = networkValue >> 8;
|
||||||
}
|
}
|
||||||
network = networkOctets.join('.') + '/' + mask.toString();""",
|
network = networkOctets.join('.') + '/' + mask.toString();
|
||||||
|
""",
|
||||||
"tags": ["networking", "ip", "subnetting", "cidr", "network"]
|
"tags": ["networking", "ip", "subnetting", "cidr", "network"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
||||||
[
|
|
||||||
// IP Subnet and Broadcast Calculator
|
|
||||||
{
|
|
||||||
"name": "IP Subnet and Broadcast",
|
|
||||||
"description": r"""
|
|
||||||
Calculates the network (subnet) address and broadcast address for an IPv4 address with CIDR notation.
|
|
||||||
|
|
||||||
**Input format:** `ip_address/prefix` where:
|
|
||||||
- `ip_address`: IPv4 address in dotted decimal notation (e.g., `192.168.1.100`)
|
|
||||||
- `prefix`: CIDR prefix length (1-30) or subnet mask in dotted notation (e.g., `24` or `255.255.255.0`)
|
|
||||||
|
|
||||||
**Output:**
|
|
||||||
- `subnet`: Network address in dotted decimal notation
|
|
||||||
- `broadcast`: Broadcast address in dotted decimal notation
|
|
||||||
|
|
||||||
**Examples:**
|
|
||||||
- Input: `192.168.1.100/24` → Subnet: `192.168.1.0`, Broadcast: `192.168.1.255`
|
|
||||||
- Input: `10.0.0.50/8` → Subnet: `10.0.0.0`, Broadcast: `10.255.255.255`
|
|
||||||
- Input: `172.16.5.100/16` → Subnet: `172.16.0.0`, Broadcast: `172.16.255.255`""",
|
|
||||||
"input": [
|
|
||||||
{"name": "ipWithMask", "unit": "scalar"}
|
|
||||||
],
|
|
||||||
"output": {"name": "subnet", "unit": "scalar"},
|
|
||||||
"d4rtCode": """
|
|
||||||
var input = ipWithMask.toString();
|
|
||||||
var slashIndex = input.indexOf('/');
|
|
||||||
if (slashIndex == -1) {
|
|
||||||
subnet = 'error: no / found';
|
|
||||||
broadcast = '';
|
|
||||||
} else {
|
|
||||||
var ipPart = input.substring(0, slashIndex).trim();
|
|
||||||
var maskPart = input.substring(slashIndex + 1).trim();
|
|
||||||
|
|
||||||
// Parse IP address
|
|
||||||
var ipParts = ipPart.split('.');
|
|
||||||
if (ipParts.length != 4) {
|
|
||||||
subnet = 'error: invalid IP';
|
|
||||||
broadcast = '';
|
|
||||||
} else {
|
|
||||||
var octet1 = int.parse(ipParts[0]);
|
|
||||||
var octet2 = int.parse(ipParts[1]);
|
|
||||||
var octet3 = int.parse(ipParts[2]);
|
|
||||||
var octet4 = int.parse(ipParts[3]);
|
|
||||||
|
|
||||||
// Convert IP to 32-bit integer
|
|
||||||
var ipInt = (octet1 << 24) | (octet2 << 16) | (octet3 << 8) | octet4;
|
|
||||||
|
|
||||||
// Parse mask (CIDR prefix or dotted notation)
|
|
||||||
int maskInt;
|
|
||||||
if (maskPart.contains('.')) {
|
|
||||||
var maskParts = maskPart.split('.');
|
|
||||||
var m1 = int.parse(maskParts[0]);
|
|
||||||
var m2 = int.parse(maskParts[1]);
|
|
||||||
var m3 = int.parse(maskParts[2]);
|
|
||||||
var m4 = int.parse(maskParts[3]);
|
|
||||||
maskInt = (m1 << 24) | (m2 << 16) | (m3 << 8) | m4;
|
|
||||||
} else {
|
|
||||||
var prefix = int.parse(maskPart);
|
|
||||||
maskInt = prefix == 0 ? 0 : (-1 << (32 - prefix));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate subnet and broadcast
|
|
||||||
var subnetInt = ipInt & maskInt;
|
|
||||||
var broadcastInt = subnetInt | (~maskInt & 0xFFFFFFFF);
|
|
||||||
|
|
||||||
// Convert back to dotted notation
|
|
||||||
var s1 = (subnetInt >> 24) & 0xFF;
|
|
||||||
var s2 = (subnetInt >> 16) & 0xFF;
|
|
||||||
var s3 = (subnetInt >> 8) & 0xFF;
|
|
||||||
var s4 = subnetInt & 0xFF;
|
|
||||||
subnet = '\$s1.\$s2.\$s3.\$s4';
|
|
||||||
|
|
||||||
var b1 = (broadcastInt >> 24) & 0xFF;
|
|
||||||
var b2 = (broadcastInt >> 16) & 0xFF;
|
|
||||||
var b3 = (broadcastInt >> 8) & 0xFF;
|
|
||||||
var b4 = broadcastInt & 0xFF;
|
|
||||||
broadcast = '\$b1.\$b2.\$b3.\$b4';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""",
|
|
||||||
"tags": ["networking", "ip", "subnet", "broadcast", "cidr"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
@ -63,7 +63,6 @@ Future<Corpus> createDefaultCorpus() async{
|
||||||
"assets/formulas/materials_elasticity.d4rt",
|
"assets/formulas/materials_elasticity.d4rt",
|
||||||
"assets/formulas/medical_and_bio.d4rt",
|
"assets/formulas/medical_and_bio.d4rt",
|
||||||
"assets/formulas/misc_math.d4rt",
|
"assets/formulas/misc_math.d4rt",
|
||||||
"assets/formulas/networking.d4rt",
|
|
||||||
"assets/formulas/optics.d4rt",
|
"assets/formulas/optics.d4rt",
|
||||||
"assets/formulas/thermodynamics.d4rt",
|
"assets/formulas/thermodynamics.d4rt",
|
||||||
"assets/formulas/trigonometry.d4rt",
|
"assets/formulas/trigonometry.d4rt",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue