Overview
Subnetter provides a programmatic API that allows you to use its functionality in your own Node.js applications. This API reference documents the available functions, classes, and interfaces in the Subnetter codebase.
Packages
Subnetter is organized as a monorepo with multiple packages:
- @subnetter/core: Core CIDR allocation engine and utilities
- @subnetter/cli: Command-line interface (primarily for internal use)
- @subnetter/cidr-utils: Low-level CIDR utilities (can be used independently)
For most programmatic use cases, you’ll only need to work with the @subnetter/core
package.
Key Components
Core Package
The core package provides the main functionality:
- CidrAllocator: Main class for hierarchical CIDR allocation
- loadConfig: Load and parse configuration files
- validateConfig: Validate configuration objects
- writeAllocationsToCsv: Write allocation results to CSV
Data Types
Important interfaces:
- Config: Configuration for CIDR allocation
- Allocation: Represents a complete subnet allocation
- Account: Account configuration
- SubnetType: Subnet type definition
CIDR Utilities
The @subnetter/cidr-utils
package provides low-level utilities for IP address and CIDR manipulation. This package can be used independently if you only need basic CIDR functionality without the hierarchical allocation features.
Installation
npm install @subnetter/cidr-utils
Key Utility Functions
IP Address Manipulation
import { ipv4ToNumber, numberToIpv4, createIpAddress} from '@subnetter/cidr-utils';
// Convert IP to numberconst num = ipv4ToNumber('192.168.1.1'); // 3232235777
// Convert number to IPconst ip = numberToIpv4(3232235777); // '192.168.1.1'
// Create IP address object with multiple formatsconst ipObj = createIpAddress('192.168.1.1');console.log(ipObj.asNumber); // 3232235777console.log(ipObj.asString); // '192.168.1.1'console.log(ipObj.asOctets); // [192, 168, 1, 1]
CIDR Validation and Parsing
import { isValidIpv4Cidr, validateIpv4Cidr, parseIpv4Cidr} from '@subnetter/cidr-utils';
// Simple validationconst isValid = isValidIpv4Cidr('10.0.0.0/24'); // true
// Validation with detailed error informationtry { validateIpv4Cidr('10.0.0.0/33');} catch (error) { console.error(error.message); // 'Invalid prefix length: 33 (must be between 0 and 32)' console.error(error.type); // 'INVALID_PREFIX_LENGTH'}
// Parse CIDR into componentsconst parsed = parseIpv4Cidr('10.0.0.0/24');console.log(parsed.address); // '10.0.0.0'console.log(parsed.prefixLength); // 24
Subnet Calculations
import { calculateNetworkAddress, calculateBroadcastAddress, calculateUsableIps, isIpInCidr, doCidrsOverlap} from '@subnetter/cidr-utils';
// Calculate network addressconst network = calculateNetworkAddress('10.0.0.15/24'); // '10.0.0.0'
// Calculate broadcast addressconst broadcast = calculateBroadcastAddress('10.0.0.0/24'); // '10.0.0.255'
// Calculate usable IPsconst usableIps = calculateUsableIps('10.0.0.0/24'); // 254
// Check if IP is in CIDRconst isInRange = isIpInCidr('10.0.0.5', '10.0.0.0/24'); // true
// Check if CIDRs overlapconst doOverlap = doCidrsOverlap('10.0.0.0/24', '10.0.0.128/25'); // true
Subnet Allocation
import { subdivideIpv4Cidr, findNextAvailableCidr} from '@subnetter/cidr-utils';
// Divide a CIDR into smaller subnetsconst subnets = subdivideIpv4Cidr('10.0.0.0/24', 26);console.log(subnets); // ['10.0.0.0/26', '10.0.0.64/26', '10.0.0.128/26', '10.0.0.192/26']
// Find next available CIDR given existing allocationsconst allocated = ['10.0.0.0/24', '10.0.1.0/24'];const next = findNextAvailableCidr('10.0.0.0/16', allocated, 24);console.log(next); // '10.0.2.0/24'
For comprehensive details on all available utilities, refer to the inline documentation in the source code.
Example Usage
const { loadConfig, CidrAllocator, writeAllocationsToCsv } = require('@subnetter/core');
async function generateAllocations() { try { // Load configuration const config = loadConfig('config.json');
// Generate allocations const allocator = new CidrAllocator(config); const allocations = allocator.generateAllocations();
console.log(`Generated ${allocations.length} subnet allocations`);
// Write to CSV await writeAllocationsToCsv(allocations, 'allocations.csv'); console.log('Allocations written to CSV'); } catch (error) { console.error('Error:', error.message); }}
generateAllocations();
For complete API documentation, navigate to the Generated API Documentation.