mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2026-03-14 21:10:11 +01:00
422 lines
12 KiB
Markdown
422 lines
12 KiB
Markdown
# Netmode - Network Mode Switching for OpenWrt/iopsys
|
|
|
|
**Version**: 1.1.11
|
|
**License**: GPL-2.0-only
|
|
**Maintainer**: iopsys
|
|
|
|
## Overview
|
|
|
|
Netmode is a network configuration management package for OpenWrt/iopsys-based routers that enables seamless switching between different WAN connection types. It provides a unified interface for managing network modes including DHCP, PPPoE, Static IP, and Bridge configurations.
|
|
|
|
### Key Features
|
|
|
|
- **Simple Mode Switching**: Change WAN connection type with a single command
|
|
- **Multiple Mode Support**: DHCP, PPPoE, Static IP, and Bridged mode
|
|
- **Automatic Configuration**: Handles network, firewall, DHCP, and multicast settings
|
|
- **TR-069/USP Integration**: Remote management via BBF data model
|
|
- **Extensible Architecture**: Easy to add custom network modes
|
|
- **Safe Transitions**: Proper cleanup and validation during mode switches
|
|
|
|
## Quick Start
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Install via opkg
|
|
opkg update
|
|
opkg install netmode
|
|
|
|
# Or build from source
|
|
make package/feeds/iopsys/netmode/compile
|
|
```
|
|
|
|
### Basic Usage
|
|
|
|
```bash
|
|
# Check current mode
|
|
cat /etc/netmodes/.last_mode
|
|
|
|
# Switch to DHCP mode
|
|
uci set netmode.global.mode='routed-dhcp'
|
|
uci commit netmode
|
|
service netmode restart
|
|
|
|
# Switch to PPPoE mode
|
|
uci set netmode.global.mode='routed-pppoe'
|
|
uci set netmode.@supported_args[2].value='username@isp.com'
|
|
uci set netmode.@supported_args[3].value='password'
|
|
uci commit netmode
|
|
service netmode restart
|
|
```
|
|
|
|
## Supported Modes
|
|
|
|
| Mode | Description | Use Case |
|
|
|------|-------------|----------|
|
|
| **routed-dhcp** | Router with DHCP WAN | Cable/Fiber internet with automatic IP |
|
|
| **routed-pppoe** | Router with PPPoE WAN | DSL internet with authentication |
|
|
| **routed-static** | Router with Static IP WAN | Business connections with fixed IP |
|
|
| **advanced** ⭐ | **Unified Advanced Mode** | Bridges, routed interfaces, VLAN, QinQ, MACVLAN - all in one |
|
|
|
|
### Advanced Mode (v1.1.11+) - Recommended
|
|
|
|
The **advanced** mode is a unified, powerful configuration mode that replaces both `bridged` and `routed-multi-service` modes. It supports:
|
|
|
|
✅ **Bridge interfaces** with VLAN/QinQ support (traditional VLAN devices)
|
|
✅ **Bridge VLAN filtering** (modern kernel bridge VLAN filtering - **recommended**)
|
|
✅ **Routed interfaces** with VLAN/MACVLAN support
|
|
✅ **Standalone VLAN interfaces** (direct, no bridge)
|
|
✅ **Mixed scenarios** (combine bridges and routed interfaces)
|
|
✅ **Flexible configuration** with single, intuitive syntax
|
|
✅ **MAC address assignment** with macros (BaseMACAddress, BaseMACAddressPNN)
|
|
✅ **Comprehensive validation** with helpful error messages
|
|
|
|
**Quick Example - Triple-Play Service**:
|
|
```bash
|
|
uci set netmode.global.mode='advanced'
|
|
uci set netmode.@supported_args[0].value='wan,iptv,mgmt'
|
|
uci set netmode.@supported_args[1].value='route:vlan:100,route:vlan:200,route:vlan:300'
|
|
uci set netmode.@supported_args[2].value='WAN,WAN,WAN'
|
|
uci commit netmode && service netmode restart
|
|
```
|
|
|
|
See **[ADVANCED_MODE_GUIDE.md](ADVANCED_MODE_GUIDE.md)** for complete documentation.
|
|
|
|
## Documentation
|
|
|
|
Comprehensive documentation is available in the following guides:
|
|
|
|
### For Users
|
|
- **[ADVANCED_MODE_GUIDE.md](ADVANCED_MODE_GUIDE.md)** ⭐ - **Complete advanced mode guide** (RECOMMENDED)
|
|
- All interface types (bridge, routed, standalone)
|
|
- VLAN, QinQ, MACVLAN configurations
|
|
- Bridge VLAN filtering (modern approach)
|
|
- Real-world use case scenarios
|
|
- TR-069/USP examples
|
|
- Troubleshooting
|
|
- **[BRIDGE_VLAN_FILTERING.md](BRIDGE_VLAN_FILTERING.md)** 🆕 - **Bridge VLAN filtering guide**
|
|
- Modern bridge VLAN filtering feature
|
|
- Syntax and configuration examples
|
|
- Performance benefits
|
|
- Migration from traditional VLAN devices
|
|
- **[ADVANCED_MODE_QUICK_REFERENCE.md](ADVANCED_MODE_QUICK_REFERENCE.md)** - Quick reference for advanced mode
|
|
- **[CONFIGURATION_SCENARIOS.md](CONFIGURATION_SCENARIOS.md)** - Real-world configuration examples with UCI and TR-181
|
|
- **[VALIDATION_AND_ERROR_HANDLING.md](VALIDATION_AND_ERROR_HANDLING.md)** 🆕 - **Validation and error handling guide**
|
|
- Input validation rules
|
|
- Error messages and troubleshooting
|
|
- Common validation errors
|
|
- Testing validation
|
|
- **[USER_GUIDE.md](USER_GUIDE.md)** - User guide for basic modes (DHCP, PPPoE, Static)
|
|
- Getting started
|
|
- Mode descriptions
|
|
- Common use cases
|
|
- FAQ
|
|
|
|
### For Developers
|
|
- **[DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md)** - Developer documentation
|
|
- Development environment setup
|
|
- Code organization
|
|
- API reference
|
|
- Testing framework
|
|
- Contributing guidelines
|
|
|
|
### For Implementers
|
|
- **[IMPLEMENTATION_GUIDE.md](IMPLEMENTATION_GUIDE.md)** - Implementation details
|
|
- Architecture overview
|
|
- Creating custom modes
|
|
- Environment variables
|
|
- Hook system
|
|
- Data model integration
|
|
|
|
## Architecture
|
|
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Netmode System │
|
|
├─────────────────────────────────────────┤
|
|
│ UCI Config → Init Service → Mode Scripts│
|
|
│ ↓ ↓ ↓ │
|
|
│ Environment Pre-hooks UCI Copy │
|
|
│ Variables ↓ ↓ │
|
|
│ ↓ Mode Scripts Post-hooks │
|
|
│ └──────────┴────────────┘ │
|
|
│ Network Reconfiguration │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### Components
|
|
|
|
- **Init Service** (`/etc/init.d/netmode`): Orchestrates mode switching
|
|
- **Mode Scripts** (`/etc/netmodes/<mode>/scripts/`): Mode-specific configuration
|
|
- **UCI Config** (`/etc/config/netmode`): Mode definitions and parameters
|
|
- **Data Model** (`datamodel.json`): BBF TR-181 integration
|
|
- **Hooks** (`/lib/netmode/{pre,post}/`): Pre/post mode switch scripts
|
|
|
|
## Configuration Examples
|
|
|
|
### DHCP with VLAN
|
|
|
|
```bash
|
|
uci set netmode.global.mode='routed-dhcp'
|
|
uci set netmode.@supported_args[0].value='100' # VLAN ID
|
|
uci commit netmode
|
|
service netmode restart
|
|
```
|
|
|
|
### PPPoE with Custom DNS
|
|
|
|
```bash
|
|
uci set netmode.global.mode='routed-pppoe'
|
|
uci set netmode.@supported_args[2].value='user@isp.com'
|
|
uci set netmode.@supported_args[3].value='password123'
|
|
uci set netmode.@supported_args[6].value='8.8.8.8,8.8.4.4'
|
|
uci commit netmode
|
|
service netmode restart
|
|
```
|
|
|
|
### Static IP Business Connection
|
|
|
|
```bash
|
|
uci set netmode.global.mode='routed-static'
|
|
uci set netmode.@supported_args[6].value='203.0.113.10'
|
|
uci set netmode.@supported_args[7].value='255.255.255.0'
|
|
uci set netmode.@supported_args[8].value='203.0.113.1'
|
|
uci commit netmode
|
|
service netmode restart
|
|
```
|
|
|
|
## Creating Custom Modes
|
|
|
|
Custom network modes can be added by following these steps:
|
|
|
|
1. **Create mode directory structure**:
|
|
```bash
|
|
mkdir -p /etc/netmodes/my-mode/scripts
|
|
```
|
|
|
|
2. **Define mode in supported_modes.json**:
|
|
```json
|
|
{
|
|
"name": "my-mode",
|
|
"description": "My Custom Mode",
|
|
"supported_args": [...]
|
|
}
|
|
```
|
|
|
|
3. **Create mode script**:
|
|
```bash
|
|
cat > /etc/netmodes/my-mode/scripts/10-my-mode << 'EOF'
|
|
#!/bin/sh
|
|
# Configuration logic here
|
|
EOF
|
|
chmod +x /etc/netmodes/my-mode/scripts/10-my-mode
|
|
```
|
|
|
|
4. **Import to UCI and test**:
|
|
```bash
|
|
sh /etc/uci-defaults/40_netmode_populated_supported_modes
|
|
uci set netmode.global.mode='my-mode'
|
|
service netmode restart
|
|
```
|
|
|
|
See [IMPLEMENTATION_GUIDE.md](IMPLEMENTATION_GUIDE.md#creating-a-new-network-mode) for detailed instructions.
|
|
|
|
## TR-069/USP Integration
|
|
|
|
Netmode exposes a BBF TR-181 data model for remote management:
|
|
|
|
**Data Model Path**: `Device.X_IOWRT_EU_NetMode.`
|
|
|
|
```
|
|
Device.X_IOWRT_EU_NetMode.
|
|
├── Enable (boolean, r/w)
|
|
├── Mode (string, r/w)
|
|
├── SupportedModesNumberOfEntries (unsignedInt, r)
|
|
└── SupportedModes.{i}.
|
|
├── Name (string, r)
|
|
├── Description (string, r)
|
|
└── SupportedArguments.{i}.
|
|
├── Name (string, r)
|
|
├── Type (string, r)
|
|
├── Required (boolean, r)
|
|
└── Value (string, r/w)
|
|
```
|
|
|
|
Example TR-069 operation:
|
|
```xml
|
|
<SetParameterValues>
|
|
<ParameterList>
|
|
<ParameterValueStruct>
|
|
<Name>Device.X_IOWRT_EU_NetMode.Mode</Name>
|
|
<Value>routed-dhcp</Value>
|
|
</ParameterValueStruct>
|
|
</ParameterList>
|
|
</SetParameterValues>
|
|
```
|
|
|
|
## System Requirements
|
|
|
|
- **Platform**: OpenWrt/iopsys
|
|
- **Dependencies**:
|
|
- `dm-service` (BBF data model service)
|
|
- `uci`
|
|
- `procd`
|
|
- `libubox` (jshn)
|
|
- **Recommended**:
|
|
- `logread` for monitoring
|
|
- `firewall`, `odhcpd`, `mcast` for full functionality
|
|
|
|
## File Structure
|
|
|
|
```
|
|
netmode/
|
|
├── Makefile # Package build definition
|
|
├── README.md # This file
|
|
├── IMPLEMENTATION_GUIDE.md # Implementation guide
|
|
├── DEVELOPER_GUIDE.md # Developer documentation
|
|
├── USER_GUIDE.md # User documentation
|
|
├── bbfdm_service.json # BBF service registration
|
|
└── files/
|
|
├── etc/
|
|
│ ├── config/netmode # UCI configuration
|
|
│ ├── init.d/netmode # Init script (START=11)
|
|
│ ├── uci-defaults/ # First-boot scripts
|
|
│ └── netmodes/
|
|
│ ├── supported_modes.json # Mode definitions
|
|
│ ├── routed-dhcp/scripts/
|
|
│ ├── routed-pppoe/scripts/
|
|
│ ├── routed-static/scripts/
|
|
│ └── bridged/scripts/
|
|
└── lib/
|
|
├── netmode/
|
|
│ ├── pre/ # Pre-switch hooks
|
|
│ └── post/ # Post-switch hooks
|
|
└── upgrade/keep.d/netmode # Sysupgrade preservation
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Mode Not Switching
|
|
|
|
```bash
|
|
# Check if enabled
|
|
uci get netmode.global.enabled
|
|
|
|
# Check logs
|
|
logread | grep netmode
|
|
|
|
# Force mode change
|
|
rm /etc/netmodes/.last_mode
|
|
service netmode restart
|
|
```
|
|
|
|
### No Internet After Switch
|
|
|
|
```bash
|
|
# Verify mode applied
|
|
cat /etc/netmodes/.last_mode
|
|
|
|
# Check WAN status
|
|
ifconfig wan
|
|
ip route
|
|
|
|
# Restart network
|
|
/etc/init.d/network restart
|
|
```
|
|
|
|
### PPPoE Authentication Failed
|
|
|
|
```bash
|
|
# Check credentials
|
|
uci show network.wan | grep -E "username|password"
|
|
|
|
# Check logs
|
|
logread | grep ppp
|
|
|
|
# Verify VLAN if required
|
|
uci get network.wan.device
|
|
```
|
|
|
|
See [USER_GUIDE.md](USER_GUIDE.md#troubleshooting) for comprehensive troubleshooting.
|
|
|
|
## Development
|
|
|
|
### Building
|
|
|
|
```bash
|
|
# Clone repository
|
|
cd feeds/iopsys/netmode
|
|
|
|
# Build package
|
|
make package/feeds/iopsys/netmode/compile V=s
|
|
|
|
# Install on device
|
|
scp bin/packages/*/iopsys/netmode_*.ipk root@192.168.1.1:/tmp/
|
|
ssh root@192.168.1.1 "opkg install /tmp/netmode_*.ipk"
|
|
```
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
# Run mode switch test
|
|
./test-mode-switch.sh routed-dhcp
|
|
|
|
# Monitor logs
|
|
logread -f | grep netmode
|
|
|
|
# Verify configuration
|
|
uci show network
|
|
cat /etc/netmodes/.last_mode
|
|
```
|
|
|
|
### Contributing
|
|
|
|
Contributions are welcome! Please follow these steps:
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Test thoroughly on target hardware
|
|
5. Update documentation
|
|
6. Submit a pull request
|
|
|
|
See [DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md#contributing-guidelines) for detailed guidelines.
|
|
|
|
## License
|
|
|
|
This project is licensed under the GNU General Public License v2.0 only.
|
|
|
|
See `/LICENSE` for more information.
|
|
|
|
## Support
|
|
|
|
- **Documentation**: See guides in this repository
|
|
- **Issues**: Contact iopsys development team
|
|
- **Community**: OpenWrt and iopsys forums
|
|
|
|
## Changelog
|
|
|
|
### Version 1.1.11
|
|
- Current stable release
|
|
- Support for DHCP, PPPoE, Static IP, and Bridge modes
|
|
- BBF TR-181 data model integration
|
|
- Comprehensive documentation
|
|
|
|
## Acknowledgments
|
|
|
|
- OpenWrt project for the underlying platform
|
|
- iopsys for development and maintenance
|
|
- Contributors and testers
|
|
|
|
## Related Projects
|
|
|
|
- [OpenWrt](https://openwrt.org/) - Linux operating system for embedded devices
|
|
- [iopsys](https://www.iopsys.eu/) - Broadband device management
|
|
- [BBF](https://www.broadband-forum.org/) - Broadband Forum standards
|
|
|
|
---
|
|
|
|
**For detailed information, please refer to the specific guides:**
|
|
- Users: [USER_GUIDE.md](USER_GUIDE.md)
|
|
- Developers: [DEVELOPER_GUIDE.md](DEVELOPER_GUIDE.md)
|
|
- Implementers: [IMPLEMENTATION_GUIDE.md](IMPLEMENTATION_GUIDE.md)
|