verifyCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Invalid security token. Please try again.'; } else { $postAction = $_POST['action'] ?? ''; switch ($postAction) { case 'create': if (!hasPermission('create_peers')) { $error = 'You do not have permission to create ASNs.'; break; } $asnNumber = trim($_POST['asn'] ?? ''); $name = trim($_POST['name'] ?? ''); $description = trim($_POST['description'] ?? ''); // Validate ASN if (!$validator->validateASN($asnNumber)) { $error = 'Invalid ASN number.'; break; } if (empty($name)) { $error = 'Name is required.'; break; } // Build defaults from form $defaults = buildDefaultsFromForm($_POST); $result = $asnManager->create($asnNumber, $name, $description, $defaults); if ($result['success']) { $logger->log('asn', 'Created ASN', ['asn' => $asnNumber, 'name' => $name]); header('Location: ?page=asns&message=ASN created successfully'); exit; } else { $error = $result['message']; } break; case 'update': if (!hasPermission('edit_peers')) { $error = 'You do not have permission to edit ASNs.'; break; } $id = $_POST['id'] ?? ''; $name = trim($_POST['name'] ?? ''); $description = trim($_POST['description'] ?? ''); if (empty($name)) { $error = 'Name is required.'; break; } $defaults = buildDefaultsFromForm($_POST); $result = $asnManager->update($id, [ 'name' => $name, 'description' => $description, 'defaults' => $defaults, ]); if ($result['success']) { $logger->log('asn', 'Updated ASN', ['id' => $id, 'name' => $name]); header('Location: ?page=asns&message=ASN updated successfully'); exit; } else { $error = $result['message']; } break; case 'delete': if (!hasPermission('delete_peers')) { $error = 'You do not have permission to delete ASNs.'; break; } $id = $_POST['id'] ?? ''; $asn = $asnManager->get($id); if (!$asn) { $error = 'ASN not found.'; break; } $result = $asnManager->delete($id); if ($result['success']) { $logger->log('asn', 'Deleted ASN', ['asn' => $asn['asn'], 'name' => $asn['name']]); header('Location: ?page=asns&message=ASN deleted successfully'); exit; } else { $error = $result['message']; } break; } } } // Get message from query string if (isset($_GET['message'])) { $message = $_GET['message']; } // Helper function to build defaults from form function buildDefaultsFromForm(array $post): array { $defaults = []; // String fields $stringFields = [ 'router_id', 'source4', 'source6', 'irr_server', 'rtr_server', 'bgpq_path', 'bgpq_args', 'bird_directory', 'bird_socket', 'cache_directory', 'log_file', 'hostname', 'peeringdb_api_key', 'peeringdb_cache_file', 'peeringdb_query_timeout', 'kernel_table', ]; foreach ($stringFields as $field) { if (isset($post[$field]) && $post[$field] !== '') { $defaults[$field] = trim($post[$field]); } } // Boolean fields $booleanFields = [ 'keep_filtered', 'merge_paths', 'rpki_filter', 'irr_filter', 'transit_locking', 'graceful_shutdown', 'no_announce', ]; foreach ($booleanFields as $field) { if (isset($post[$field])) { $defaults[$field] = $post[$field] === '1'; } } // Integer fields $intFields = [ 'default_route_limit4', 'default_route_limit6', 'pref_src4_placeholder', 'pref_src6_placeholder', 'kernel_learn', 'kernel_export', ]; foreach ($intFields as $field) { if (isset($post[$field]) && $post[$field] !== '') { $defaults[$field] = (int) $post[$field]; } } // Array fields (comma-separated) $arrayFields = [ 'prefixes4' => 'prefixes4', 'prefixes6' => 'prefixes6', 'communities_blackhole' => 'blackhole', 'communities_nopeer' => 'nopeer', ]; foreach ($arrayFields as $postField => $defaultField) { if (isset($post[$postField]) && $post[$postField] !== '') { $values = array_filter(array_map('trim', explode(',', $post[$postField]))); if (!empty($values)) { $defaults[$defaultField] = $values; } } } return $defaults; } // Get ASN for edit $editAsn = null; if ($action === 'edit' && $id) { $editAsn = $asnManager->get($id); if (!$editAsn) { $error = 'ASN not found.'; $action = 'list'; } } // Get all ASNs for list view $asns = $asnManager->getAll(); ?>

No ASNs configured

Get started by creating your first ASN.

Create ASN
getByAsn($asn['id']); ?>
ASN Name Description Router ID Nodes
AS Edit

Basic Information

>

Your Autonomous System Number (e.g., 65530)

A friendly name for this ASN

Network Configuration

Default router ID for all nodes

Default source address for IPv4

Default source address for IPv6

Comma-separated list of IPv4 prefixes you originate

Comma-separated list of IPv6 prefixes you originate

Filtering Options

Pathvector Paths

Advanced Options