Subnet Planning Tool

.subnet-planner-container { max-width: 100%; margin: 20px auto; padding: 20px; } .config-section { background: #f5f5f5; padding: 20px; border-radius: 8px; margin-bottom: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .protocol-tabs { display: flex; gap: 10px; margin-bottom: 20px; border-bottom: 2px solid #ddd; } .tab-button { padding: 10px 20px; border: none; background: transparent; cursor: pointer; font-weight: 600; border-bottom: 3px solid transparent; transition: all 0.3s; } .tab-button:hover { background: #e8e8e8; } .tab-button.active { border-bottom-color: #4CAF50; color: #4CAF50; } .tab-content { display: none; } .tab-content.active { display: block; } .config-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 15px; margin-bottom: 15px; } .config-item label { display: block; font-weight: 600; margin-bottom: 5px; color: #333; } .config-item input, .config-item select { width: 100%; padding: 8px; border: 2px solid #ddd; border-radius: 4px; font-family: 'Courier New', monospace; } .config-item select:disabled { background-color: #f0f0f0; cursor: not-allowed; opacity: 0.6; } .config-item select option:disabled { color: #999; font-style: italic; } .config-item .hint { font-size: 0.85em; color: #666; margin-top: 3px; } .btn-group { display: flex; gap: 10px; margin-top: 15px; flex-wrap: wrap; } .btn { padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-weight: 600; transition: all 0.3s; } .btn-primary { background: #4CAF50; color: white; } .btn-primary:hover { background: #45a049; } .btn-secondary { background: #2196F3; color: white; } .btn-secondary:hover { background: #0b7dda; } .btn-danger { background: #f44336; color: white; } .btn-danger:hover { background: #da190b; } .hld-container { margin: 20px 0; overflow-x: auto; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); padding: 20px; } .column-toggles { margin-bottom: 15px; padding: 10px; background: #f9f9f9; border-radius: 4px; } .column-toggles label { margin-right: 15px; cursor: pointer; user-select: none; } .column-toggles input[type="checkbox"] { margin-right: 5px; } .hld-table { width: 100%; border-collapse: collapse; font-size: 0.85em; } .hld-table th { background: #2c3e50; color: white; padding: 8px 4px; text-align: center; font-weight: 600; position: sticky; top: 0; z-index: 10; white-space: nowrap; } .hld-table td { padding: 4px; border: 1px solid #ddd; text-align: center; font-family: 'Courier New', monospace; font-size: 0.9em; min-width: 60px; position: relative; } .hld-table td.subnet-cell { background: #fff; cursor: pointer; transition: all 0.2s; } .hld-table td.subnet-cell:hover { background: #e3f2fd; transform: scale(1.05); z-index: 5; box-shadow: 0 2px 8px rgba(0,0,0,0.2); } .hld-table td.subnet-cell.allocated { font-weight: bold; } .hld-table td.subnet-cell.blocked { background: #f5f5f5; color: #999; pointer-events: none; } .hld-table td.info-cell { background: #f9f9f9; font-size: 0.85em; } .hld-table td input { width: 100%; padding: 4px; border: 1px solid #ddd; border-radius: 3px; font-size: 0.9em; background: white; } .hld-table .col-hidden { display: none; } .legend { display: flex; gap: 20px; flex-wrap: wrap; margin: 15px 0; padding: 10px; background: #f9f9f9; border-radius: 4px; } .legend-item { display: flex; align-items: center; gap: 8px; } .legend-color { width: 20px; height: 20px; border-radius: 3px; border: 1px solid #ddd; } .detail-table-container { margin: 30px 0; background: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); padding: 20px; display: none; } .detail-table-container.show { display: block; } .detail-table { width: 100%; border-collapse: collapse; margin-top: 15px; } .detail-table th { background: #2c3e50; color: white; padding: 10px; text-align: left; font-weight: 600; } .detail-table td { padding: 8px; border-bottom: 1px solid #ddd; } .detail-table input { width: 100%; padding: 6px; border: 1px solid #ddd; border-radius: 3px; } .detail-table input.error { border-color: #f44336; background: #ffebee; } .status-message { padding: 12px; margin: 10px 0; border-radius: 4px; display: none; } .status-message.show { display: block; } .status-message.success { background: #e8f5e9; color: #2e7d32; border-left: 4px solid #4CAF50; } .status-message.error { background: #ffebee; color: #c62828; border-left: 4px solid #f44336; } .status-message.info { background: #e3f2fd; color: #1976d2; border-left: 4px solid #2196F3; } .loading-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: none; justify-content: center; align-items: center; z-index: 1000; } .loading-overlay.show { display: flex; } .loading-spinner { background: white; padding: 30px; border-radius: 8px; text-align: center; } .spinner { border: 4px solid #f3f3f3; border-top: 4px solid #4CAF50; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; margin: 0 auto 15px; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .edit-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); display: none; justify-content: center; align-items: center; z-index: 2000; animation: fadeIn 0.2s; } .edit-modal.show { display: flex; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .edit-modal-content { background: white; border-radius: 8px; padding: 30px; max-width: 500px; width: 90%; box-shadow: 0 4px 20px rgba(0,0,0,0.3); animation: slideUp 0.3s; } @keyframes slideUp { from { transform: translateY(50px); opacity: 0; } to { transform: translateY(0); opacity: 1; } } .edit-modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 15px; border-bottom: 2px solid #e0e0e0; } .edit-modal-header h3 { margin: 0; color: #2c3e50; } .edit-modal-close { background: transparent; border: none; font-size: 24px; cursor: pointer; color: #999; padding: 0; width: 30px; height: 30px; display: flex; align-items: center; justify-content: center; border-radius: 50%; transition: all 0.2s; } .edit-modal-close:hover { background: #f0f0f0; color: #333; } .edit-form-group { margin-bottom: 20px; } .edit-form-group label { display: block; font-weight: 600; margin-bottom: 8px; color: #333; } .edit-form-group input, .edit-form-group select { width: 100%; padding: 10px; border: 2px solid #ddd; border-radius: 4px; font-size: 14px; transition: border-color 0.2s; } .edit-form-group input:focus, .edit-form-group select:focus { outline: none; border-color: #4CAF50; } .edit-form-group input.error { border-color: #f44336; background: #ffebee; } .edit-form-group .hint { font-size: 0.85em; color: #666; margin-top: 4px; } .edit-form-group .error-message { font-size: 0.85em; color: #f44336; margin-top: 4px; display: none; } .edit-form-group .error-message.show { display: block; } .color-picker-group { display: flex; align-items: center; gap: 10px; } .color-picker-group input[type="color"] { width: 60px; height: 40px; border: 2px solid #ddd; border-radius: 4px; cursor: pointer; padding: 2px; } .color-preview { flex: 1; padding: 10px; border: 2px solid #ddd; border-radius: 4px; text-align: center; font-weight: 600; } .edit-modal-actions { display: flex; gap: 10px; margin-top: 25px; padding-top: 20px; border-top: 1px solid #e0e0e0; } .edit-modal-actions .btn { flex: 1; } .subnet-cell.allocated { cursor: pointer; } .subnet-cell.allocated:hover { transform: scale(1.08); box-shadow: 0 4px 12px rgba(0,0,0,0.3); } .subnet-cell.editing { outline: 3px solid #4CAF50; outline-offset: 2px; z-index: 20; } .vlan-badge { display: inline-block; padding: 2px 6px; margin-left: 5px; border-radius: 3px; font-size: 0.75em; font-weight: 600; } .vlan-badge.dual-stack { background: #2196F3; color: white; } .vlan-badge.secondary { background: #FF9800; color: white; } .confirm-dialog { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); display: none; justify-content: center; align-items: center; z-index: 3000; animation: fadeIn 0.2s; } .confirm-dialog.show { display: flex; } .confirm-dialog-content { background: white; border-radius: 8px; padding: 30px; max-width: 500px; width: 90%; box-shadow: 0 4px 20px rgba(0,0,0,0.3); } .confirm-dialog-header { margin-bottom: 20px; } .confirm-dialog-header h3 { margin: 0 0 10px 0; color: #2c3e50; } .confirm-dialog-body { margin-bottom: 20px; padding: 15px; background: #f5f5f5; border-radius: 4px; border-left: 4px solid #FF9800; } .confirm-dialog-body p { margin: 8px 0; line-height: 1.6; } .confirm-dialog-body strong { color: #333; } .confirm-dialog-actions { display: flex; gap: 10px; justify-content: flex-end; } .vlan-info-legend { margin-top: 10px; padding: 10px; background: #f9f9f9; border-radius: 4px; font-size: 0.85em; } .vlan-info-legend h4 { margin: 0 0 10px 0; font-size: 1em; color: #333; } .vlan-info-legend p { margin: 5px 0; display: flex; align-items: center; gap: 8px; }

Subnet Planning Tool - Yüksək Səviyyəli Dizayn

Düzgün yerləşdirmə ilə şəbəkə alt şəbəkələrini iyerarxik olaraq planlaşdırın. Funksiyaları ayırın, VLAN təyin edin və dizaynınızı ixrac edin.

Alt şəbəkə iyerarxiyası yaradılır...

IPv4 Konfiqurasiyası

CIDR notasiyasında IPv4 şəbəkəsi
Bu ölçüdən yuxarı sütunları gizlədir

IPv6 Konfiqurasiyası

CIDR notasiyasında IPv6 şəbəkəsi
Bu ölçüdən yuxarı sütunları gizlədir

Alt şəbəkə təfərrüatları - VLAN/VNI Təyinatı

Ayrılmış alt şəbəkələr üçün VLAN və VNI təyinatlarını müəyyənləşdirin. Dual-stack (IPv4+IPv6) və ikinci dərəcəli IP-lər dəstəklənir.

VLAN/VNI Təyinatı Qaydaları

DUAL-STACKEyni VLAN/VNI BİR IPv4 və BİR IPv6 alt şəbəkəsi üçün istifadə edilə bilər

İKİNCİLİkincil/Üçüncü IP-lər eyni protokol üçün təsdiq tələb edir

Protokol Ümumi funksiya Xüsusi Funksiya IP ünvanı VLAN (1-4096) VNI (1-16777215) Fəaliyyətlər
Planlaşdırmağa başlamaq üçün yuxarıdakı HLD-də alt şəbəkələri ayırın
Ayrılma Modalını redaktə edin

Alt şəbəkənin ayrılmasını redaktə edin

Bu alt şəbəkənin əsas məqsədi və ya yeri
Xüsusi istifadə halı (istəyə görə, təyin edilərsə uşaq alt şəbəkələrini gizlədir)
VLAN artıq istifadə olunur
VNI artıq istifadə olunur
VXLAN/EVPN üçün Virtual Şəbəkə İdentifikatoru
Önizləmə
İkinci dərəcəli IP-lər üçün Təsdiq Dialoqu

VLAN Təyinatını təsdiqləyin

Dinamik məzmun