572 lines
13 KiB
Markdown
572 lines
13 KiB
Markdown
---
|
|
description: Generate SONiC NOS configuration files
|
|
argument-hint: Optional SONiC requirements
|
|
---
|
|
|
|
You are initiating SONiC (Software for Open Networking in the Cloud) NOS configuration using a structured workflow to create production-ready SONiC configuration files and operational procedures.
|
|
|
|
## Workflow Steps
|
|
|
|
### 1. Gather Requirements
|
|
|
|
If the user provides specific requirements in their message, use those directly. Otherwise, ask the user for:
|
|
|
|
**Basic Requirements:**
|
|
- SONiC version (community or enterprise/vendor-specific)
|
|
- Platform/hardware (Broadcom, Mellanox, Intel, etc.)
|
|
- Switch role (Leaf, Spine, ToR, Border, etc.)
|
|
- Hostname and basic metadata
|
|
|
|
**Configuration Type Needed:**
|
|
- Interface configuration (physical ports, speeds, MTU)
|
|
- VLAN configuration
|
|
- Port channel/LAG configuration
|
|
- BGP routing configuration
|
|
- OSPF routing configuration
|
|
- ACL configuration
|
|
- QoS configuration
|
|
- Loopback interfaces
|
|
- Static routes
|
|
- System management (NTP, syslog, SNMP)
|
|
|
|
**For Interface Configuration:**
|
|
- Interface names (Ethernet0, Ethernet4, etc.)
|
|
- Speeds (10G, 25G, 40G, 100G, 400G)
|
|
- Admin status (up/down)
|
|
- MTU settings (typically 9100 for data centers)
|
|
- FEC settings (RS, FC)
|
|
|
|
**For VLAN Configuration:**
|
|
- VLAN IDs and descriptions
|
|
- VLAN member ports
|
|
- Tagging mode (tagged/untagged)
|
|
- VLAN interface IP addresses
|
|
|
|
**For Port Channel/LAG:**
|
|
- Port channel interface names
|
|
- Member interfaces
|
|
- LACP configuration
|
|
- Minimum links
|
|
|
|
**For BGP Configuration:**
|
|
- Local ASN
|
|
- BGP neighbors (IP, ASN, descriptions)
|
|
- Peer groups
|
|
- Route policies and prefix lists
|
|
- Address families (IPv4, IPv6, EVPN)
|
|
- Authentication
|
|
|
|
**For ACL Configuration:**
|
|
- ACL table names and types (L3, L2, CTRLPLANE)
|
|
- ACL rules (priorities, actions, match criteria)
|
|
- Port bindings
|
|
|
|
**For QoS Configuration:**
|
|
- DSCP to TC mapping
|
|
- TC to queue mapping
|
|
- Scheduler policies
|
|
- Port QoS profiles
|
|
|
|
### 2. Launch sonic-engineer Agent
|
|
|
|
Use the Task tool to launch the sonic-engineer agent with a detailed prompt containing:
|
|
|
|
```
|
|
Generate SONiC configuration for the following requirements:
|
|
|
|
[Insert gathered requirements here with all details]
|
|
|
|
Please provide:
|
|
1. Complete config_db.json file
|
|
2. Equivalent CLI commands for reference
|
|
3. Step-by-step deployment procedure
|
|
4. Validation commands specific to this configuration
|
|
5. Rollback procedure
|
|
6. Any platform-specific notes or requirements
|
|
7. Prerequisites (SONiC version, required features)
|
|
```
|
|
|
|
### 3. Review Generated Configuration
|
|
|
|
When the agent returns the configuration, review it for:
|
|
- Valid JSON syntax
|
|
- Correct SONiC schema structure
|
|
- All required sections present (DEVICE_METADATA, etc.)
|
|
- Proper interface naming for the platform
|
|
- No conflicting configurations
|
|
- Complete BGP/routing configuration
|
|
- Appropriate security settings
|
|
|
|
### 4. Validate JSON Syntax
|
|
|
|
Before deployment, ensure JSON syntax validation:
|
|
|
|
```bash
|
|
# Validate JSON syntax
|
|
python3 -m json.tool config_db.json
|
|
|
|
# Or use jq
|
|
jq . config_db.json
|
|
|
|
# Check for common issues
|
|
jq 'keys' config_db.json # Show top-level keys
|
|
```
|
|
|
|
### 5. Present Deployment Procedure
|
|
|
|
Ensure the generated configuration includes a safe deployment procedure:
|
|
|
|
1. **Backup Current Configuration**
|
|
```bash
|
|
# Save current running config
|
|
config save -y
|
|
|
|
# Create timestamped backup
|
|
sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.backup.$(date +%Y%m%d_%H%M%S)
|
|
|
|
# Save current state
|
|
show running-config > ~/sonic-config-backup-$(date +%Y%m%d_%H%M%S).txt
|
|
show interfaces status >> ~/sonic-config-backup-$(date +%Y%m%d_%H%M%S).txt
|
|
```
|
|
|
|
2. **Validate New Configuration**
|
|
```bash
|
|
# Validate JSON syntax
|
|
python3 -m json.tool new_config_db.json
|
|
|
|
# Validate SONiC config format
|
|
sonic-cfggen -j new_config_db.json --print-data
|
|
|
|
# Check for required keys
|
|
jq 'has("DEVICE_METADATA")' new_config_db.json
|
|
```
|
|
|
|
3. **Deploy Configuration**
|
|
```bash
|
|
# Copy new configuration
|
|
sudo cp new_config_db.json /etc/sonic/config_db.json
|
|
|
|
# Set correct permissions
|
|
sudo chown root:root /etc/sonic/config_db.json
|
|
sudo chmod 644 /etc/sonic/config_db.json
|
|
```
|
|
|
|
4. **Apply Configuration**
|
|
```bash
|
|
# Method 1: Load configuration without full restart
|
|
config load /etc/sonic/config_db.json -y
|
|
|
|
# Method 2: Full configuration reload (restarts services)
|
|
config reload -y
|
|
|
|
# Method 3: Load and save
|
|
config load /etc/sonic/config_db.json -y && config save -y
|
|
```
|
|
|
|
5. **Verify Configuration**
|
|
```bash
|
|
# Check interfaces
|
|
show interfaces status
|
|
|
|
# Check IP configuration
|
|
show ip interfaces
|
|
|
|
# Check BGP (if configured)
|
|
show ip bgp summary
|
|
|
|
# Check VLANs (if configured)
|
|
show vlan brief
|
|
|
|
# Check port channels (if configured)
|
|
show interfaces portchannel
|
|
|
|
# Check system status
|
|
show system-health
|
|
```
|
|
|
|
### 6. Provide Validation Commands
|
|
|
|
Include comprehensive validation commands for each configuration type:
|
|
|
|
**Interface Validation:**
|
|
```bash
|
|
# Show all interface status
|
|
show interfaces status
|
|
|
|
# Show specific interface
|
|
show interfaces status Ethernet0
|
|
|
|
# Show interface counters
|
|
show interfaces counters
|
|
|
|
# Show interface errors
|
|
show interfaces counters errors
|
|
|
|
# Show transceiver information
|
|
show interfaces transceiver info
|
|
|
|
# Show interface description
|
|
show interfaces description
|
|
```
|
|
|
|
**VLAN Validation:**
|
|
```bash
|
|
# Show VLAN configuration
|
|
show vlan brief
|
|
|
|
# Show detailed VLAN config
|
|
show vlan config
|
|
|
|
# Show VLAN member ports
|
|
show vlan id 100
|
|
```
|
|
|
|
**Port Channel Validation:**
|
|
```bash
|
|
# Show port channel summary
|
|
show interfaces portchannel
|
|
|
|
# Show LACP status
|
|
show lacp neighbor
|
|
show lacp internal
|
|
|
|
# Show port channel details
|
|
show interface PortChannel1
|
|
```
|
|
|
|
**BGP Validation:**
|
|
```bash
|
|
# Show BGP summary
|
|
show ip bgp summary
|
|
|
|
# Show BGP neighbors
|
|
show ip bgp neighbors
|
|
|
|
# Show BGP routes
|
|
show ip bgp
|
|
|
|
# Show received routes from neighbor
|
|
show ip bgp neighbors 192.168.1.1 received-routes
|
|
|
|
# Show advertised routes to neighbor
|
|
show ip bgp neighbors 192.168.1.1 advertised-routes
|
|
|
|
# Show BGP configuration
|
|
show runningconfiguration bgp
|
|
```
|
|
|
|
**OSPF Validation:**
|
|
```bash
|
|
# Show OSPF neighbors
|
|
show ip ospf neighbor
|
|
|
|
# Show OSPF routes
|
|
show ip ospf route
|
|
|
|
# Show OSPF database
|
|
show ip ospf database
|
|
|
|
# Show OSPF interfaces
|
|
show ip ospf interface
|
|
```
|
|
|
|
**ACL Validation:**
|
|
```bash
|
|
# Show ACL tables
|
|
show acl table
|
|
|
|
# Show ACL rules
|
|
show acl rule
|
|
|
|
# Show ACL counters
|
|
acl-loader show table
|
|
acl-loader show rule
|
|
```
|
|
|
|
**QoS Validation:**
|
|
```bash
|
|
# Show QoS maps
|
|
show qos map dscp-to-tc
|
|
show qos map tc-to-queue
|
|
|
|
# Show queue counters
|
|
show queue counters
|
|
|
|
# Show priority-group
|
|
show priority-group
|
|
```
|
|
|
|
**System Validation:**
|
|
```bash
|
|
# Show system information
|
|
show version
|
|
show platform summary
|
|
show platform syseeprom
|
|
|
|
# Show services
|
|
show services
|
|
|
|
# Show system health
|
|
show system-health
|
|
|
|
# Show running configuration
|
|
show running-config
|
|
```
|
|
|
|
### 7. Include Troubleshooting Commands
|
|
|
|
Provide troubleshooting commands for common issues:
|
|
|
|
**Configuration Not Applied:**
|
|
```bash
|
|
# Check config_db.json syntax
|
|
python3 -m json.tool /etc/sonic/config_db.json
|
|
|
|
# Check SONiC services
|
|
show services
|
|
|
|
# Restart specific service
|
|
sudo systemctl restart bgp
|
|
sudo systemctl restart swss
|
|
|
|
# Check service logs
|
|
sudo journalctl -u bgp -n 100
|
|
sudo journalctl -u swss -n 100
|
|
|
|
# View syslog
|
|
show logging
|
|
tail -f /var/log/syslog
|
|
```
|
|
|
|
**Interface Issues:**
|
|
```bash
|
|
# Check interface admin state
|
|
show interfaces status Ethernet0
|
|
|
|
# Check physical link
|
|
show interfaces transceiver info Ethernet0
|
|
|
|
# Check interface errors
|
|
show interfaces counters errors Ethernet0
|
|
|
|
# Clear interface counters
|
|
sonic-clear counters
|
|
|
|
# Check ASIC programming
|
|
show platform switch
|
|
```
|
|
|
|
**BGP Not Establishing:**
|
|
```bash
|
|
# Check BGP configuration
|
|
show runningconfiguration bgp
|
|
|
|
# Check BGP neighbors
|
|
show ip bgp neighbors 192.168.1.1
|
|
|
|
# Enable BGP debugging
|
|
vtysh -c "debug bgp neighbor-events"
|
|
vtysh -c "debug bgp updates"
|
|
|
|
# Check connectivity to neighbor
|
|
ping 192.168.1.1
|
|
|
|
# Check routing table
|
|
show ip route
|
|
```
|
|
|
|
**VLAN Issues:**
|
|
```bash
|
|
# Check VLAN configuration
|
|
show vlan config
|
|
|
|
# Check VLAN member configuration
|
|
redis-cli -n 4 HGETALL "VLAN_MEMBER|Vlan100|Ethernet8"
|
|
|
|
# Check bridge FDB
|
|
show mac
|
|
|
|
# Check VLAN interface
|
|
show ip interfaces | grep Vlan
|
|
```
|
|
|
|
**Database Issues:**
|
|
```bash
|
|
# Access config database (DB 4)
|
|
redis-cli -n 4
|
|
|
|
# Show all keys
|
|
redis-cli -n 4 KEYS "*"
|
|
|
|
# Show specific configuration
|
|
redis-cli -n 4 HGETALL "PORT|Ethernet0"
|
|
redis-cli -n 4 HGETALL "DEVICE_METADATA|localhost"
|
|
|
|
# Check application database (DB 0)
|
|
redis-cli -n 0 KEYS "*"
|
|
```
|
|
|
|
### 8. Document Rollback Procedure
|
|
|
|
Ensure rollback procedure is clearly documented:
|
|
|
|
```bash
|
|
# Method 1: Restore from backup
|
|
sudo cp /etc/sonic/config_db.json.backup.YYYYMMDD_HHMMSS /etc/sonic/config_db.json
|
|
config reload -y
|
|
|
|
# Method 2: Load previous working config
|
|
config load /etc/sonic/config_db.json.backup.YYYYMMDD_HHMMSS -y
|
|
|
|
# Method 3: Manual configuration via CLI (temporary)
|
|
# Use vtysh for routing protocols
|
|
sudo vtysh
|
|
# Use config commands for interfaces/VLANs
|
|
config interface ip add Ethernet0 192.168.1.1/24
|
|
|
|
# Method 4: Factory reset (CAUTION)
|
|
# sudo config-setup factory
|
|
|
|
# Verify rollback
|
|
show interfaces status
|
|
show ip bgp summary
|
|
show vlan brief
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
When generating SONiC configurations:
|
|
|
|
1. **Configuration Management**
|
|
- Always backup before changes
|
|
- Use version control for config_db.json
|
|
- Test in lab environment first
|
|
- Document all changes
|
|
|
|
2. **Interface Configuration**
|
|
- Use consistent interface naming
|
|
- Configure appropriate MTU for network (9100 for data centers)
|
|
- Enable FEC where appropriate
|
|
- Add meaningful descriptions
|
|
|
|
3. **Routing Configuration**
|
|
- Use BGP authentication
|
|
- Implement prefix filtering
|
|
- Configure maximum-prefix limits
|
|
- Use BFD for fast convergence
|
|
|
|
4. **VLAN Design**
|
|
- Plan VLAN ID scheme
|
|
- Use meaningful VLAN descriptions
|
|
- Separate traffic types appropriately
|
|
- Configure VLAN interfaces for L3
|
|
|
|
5. **High Availability**
|
|
- Configure redundant uplinks
|
|
- Use port channels for link aggregation
|
|
- Implement BFD for fast failure detection
|
|
- Configure multiple BGP sessions
|
|
|
|
6. **Security**
|
|
- Implement control plane ACLs
|
|
- Use routing protocol authentication
|
|
- Configure management ACLs
|
|
- Enable logging and monitoring
|
|
|
|
7. **Operational Excellence**
|
|
- Configure NTP for time synchronization
|
|
- Set up syslog to central server
|
|
- Enable SNMP monitoring
|
|
- Use consistent naming conventions
|
|
|
|
## Common Scenarios
|
|
|
|
### Data Center Leaf Switch (BGP Unnumbered)
|
|
- Underlay BGP with spine neighbors
|
|
- VLAN configuration for server access
|
|
- Port channels for server bonding
|
|
- Loopback for VTEP
|
|
- ACLs for security
|
|
|
|
### Top-of-Rack (ToR) Switch
|
|
- Access port configuration for servers
|
|
- Uplinks to spine (port channels)
|
|
- VLANs for network segmentation
|
|
- Basic BGP or OSPF routing
|
|
- QoS policies
|
|
|
|
### Spine Switch
|
|
- High-density 100G/400G interfaces
|
|
- BGP configuration for all leaf neighbors
|
|
- Route reflection (if used)
|
|
- Minimal VLANs (management only)
|
|
- BFD for fast convergence
|
|
|
|
### Border/Edge Switch
|
|
- External BGP peering
|
|
- Route filtering and policies
|
|
- ACLs for security
|
|
- NAT configuration (if supported)
|
|
- Internet routing table handling
|
|
|
|
## SONiC Architecture Notes
|
|
|
|
**Key Components:**
|
|
- **Redis Database**: Configuration and state storage
|
|
- **Docker Containers**: Modular service architecture
|
|
- **SAI**: Switch Abstraction Interface for hardware
|
|
- **FRR**: Routing protocol daemon (BGP, OSPF, etc.)
|
|
- **Orchestration Agent**: Translates config to ASIC
|
|
|
|
**Database Structure:**
|
|
- **ConfigDB** (DB 4): Configuration data
|
|
- **AppDB** (DB 0): Application state
|
|
- **StateDB** (DB 6): Operational state
|
|
- **ASIC_DB** (DB 1): Hardware programming
|
|
|
|
**Configuration Methods:**
|
|
1. config_db.json (recommended for automation)
|
|
2. CLI commands (immediate application)
|
|
3. OpenConfig/gNMI (enterprise features)
|
|
4. REST API (if available)
|
|
|
|
## Platform Considerations
|
|
|
|
**Broadcom-based Switches:**
|
|
- Common in enterprise and cloud
|
|
- SAI fully supported
|
|
- Check BCM shell access if needed
|
|
|
|
**Mellanox-based Switches:**
|
|
- Common in high-performance networks
|
|
- Spectrum ASIC series
|
|
- Check SX-SDK version
|
|
|
|
**Barefoot/Intel Tofino:**
|
|
- Programmable pipeline
|
|
- P4 runtime support
|
|
- Check platform-specific features
|
|
|
|
**Interface Naming:**
|
|
- Usually Ethernet0, Ethernet4, etc. (increments of 4)
|
|
- Check platform documentation for mapping
|
|
- Alias field for human-readable names
|
|
|
|
## Notes
|
|
|
|
- SONiC uses JSON-based configuration (config_db.json)
|
|
- Configuration stored in Redis database
|
|
- Supports both CLI and file-based configuration
|
|
- Container-based architecture for modularity
|
|
- Uses FRR for routing protocols (BGP, OSPF, IS-IS)
|
|
- SAI provides hardware abstraction
|
|
- Always validate JSON syntax before deployment
|
|
- Test routing changes in maintenance windows
|
|
- Monitor ASIC programming after changes
|
|
|
|
## Example Task Invocation
|
|
|
|
```
|
|
sonic-config I need a data center leaf switch configuration with ASN 65001, two spine BGP neighbors (192.168.1.1 and 192.168.1.2 both AS 65100), VLAN 100 for servers on Ethernet8-Ethernet24, loopback 10.0.0.1/32, and port channel with Ethernet0 and Ethernet4 for uplink
|
|
```
|