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
|
||||
|
||||
|
|
@ -10,17 +10,18 @@ clean:
|
|||
flutter clean
|
||||
[ -f $(DB) ] && rm $(DB)
|
||||
|
||||
clean-container: build-container
|
||||
clean-container:
|
||||
rm -r .build-container-cache
|
||||
./flutterw clean
|
||||
rm .build-container-cache
|
||||
|
||||
pub-get-container: build-container
|
||||
|
||||
pub-get-container:
|
||||
./flutterw pub get
|
||||
|
||||
test:
|
||||
./flutterw test
|
||||
|
||||
build-builders: build-container
|
||||
build-builders:
|
||||
./flutterw pub run build_runner build --delete-conflicting-outputs
|
||||
|
||||
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"}
|
||||
],
|
||||
"output": {"name": "network", "unit": "string"},
|
||||
"d4rtCode": r"""var parts = hostIP.split('/');
|
||||
var ip = parts[0];
|
||||
var mask = int.parse(parts[1]);
|
||||
var octets = ip.split('.').map((e) => int.parse(e)).toList();
|
||||
var hostBits = 32 - mask;
|
||||
var shiftAmount = hostBits;
|
||||
var networkValue = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
"d4rtCode": r"""
|
||||
var parts = hostIP.split('/');
|
||||
var ip = parts[0];
|
||||
var mask = int.parse(parts[1]);
|
||||
var octets = ip.split('.').map((e) => int.parse(e)).toList();
|
||||
var hostBits = 32 - mask;
|
||||
var shiftAmount = hostBits;
|
||||
var networkValue = 0;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
networkValue = (networkValue << 8) | octets[i];
|
||||
}
|
||||
networkValue = (networkValue >> shiftAmount) << shiftAmount;
|
||||
var networkOctets = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
}
|
||||
networkValue = (networkValue >> shiftAmount) << shiftAmount;
|
||||
var networkOctets = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
networkOctets.insert(0, networkValue & 0xFF);
|
||||
networkValue = networkValue >> 8;
|
||||
}
|
||||
network = networkOctets.join('.') + '/' + mask.toString();""",
|
||||
}
|
||||
network = networkOctets.join('.') + '/' + mask.toString();
|
||||
""",
|
||||
"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/medical_and_bio.d4rt",
|
||||
"assets/formulas/misc_math.d4rt",
|
||||
"assets/formulas/networking.d4rt",
|
||||
"assets/formulas/optics.d4rt",
|
||||
"assets/formulas/thermodynamics.d4rt",
|
||||
"assets/formulas/trigonometry.d4rt",
|
||||
|
|
|
|||
Loading…
Reference in a new issue