the idea is to make them similar to route interface, to avoid confusion * they can be also be mgmt/inet/iptv * they will have default proto set to dhcp * syntax is now direct:vlan:100 or direct:transparent |
||
|---|---|---|
| .. | ||
| ADVANCED_MODE_GUIDE.md | ||
| ADVANCED_MODE_IMPLEMENTATION.md | ||
| ADVANCED_MODE_QUICK_REFERENCE.md | ||
| BRIDGE_VLAN_FILTERING.md | ||
| BRVLAN_MIXED_MODE_EXAMPLES.md | ||
| CONFIGURATION_SCENARIOS.md | ||
| DEVELOPER_GUIDE.md | ||
| IMPLEMENTATION_GUIDE.md | ||
| README.md | ||
| USER_GUIDE.md | ||
| VALIDATION_AND_ERROR_HANDLING.md | ||
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
# Install via opkg
opkg update
opkg install netmode
# Or build from source
make package/feeds/iopsys/netmode/compile
Basic Usage
# 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:
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 for complete documentation.
Documentation
Comprehensive documentation is available in the following guides:
For Users
- 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 guide
- Modern bridge VLAN filtering feature
- Syntax and configuration examples
- Performance benefits
- Migration from traditional VLAN devices
- ADVANCED_MODE_QUICK_REFERENCE.md - Quick reference for advanced mode
- CONFIGURATION_SCENARIOS.md - Real-world configuration examples with UCI and TR-181
- 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 for basic modes (DHCP, PPPoE, Static)
- Getting started
- Mode descriptions
- Common use cases
- FAQ
For Developers
- DEVELOPER_GUIDE.md - Developer documentation
- Development environment setup
- Code organization
- API reference
- Testing framework
- Contributing guidelines
For Implementers
- 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
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
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
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:
-
Create mode directory structure:
mkdir -p /etc/netmodes/my-mode/scripts -
Define mode in supported_modes.json:
{ "name": "my-mode", "description": "My Custom Mode", "supported_args": [...] } -
Create mode script:
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 -
Import to UCI and test:
sh /etc/uci-defaults/40_netmode_populated_supported_modes uci set netmode.global.mode='my-mode' service netmode restart
See IMPLEMENTATION_GUIDE.md 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:
<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)uciprocdlibubox(jshn)
- Recommended:
logreadfor monitoringfirewall,odhcpd,mcastfor 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
# 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
# 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
# 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 for comprehensive troubleshooting.
Development
Building
# 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
# 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:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly on target hardware
- Update documentation
- Submit a pull request
See DEVELOPER_GUIDE.md 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 - Linux operating system for embedded devices
- iopsys - Broadband device management
- BBF - Broadband Forum standards
For detailed information, please refer to the specific guides:
- Users: USER_GUIDE.md
- Developers: DEVELOPER_GUIDE.md
- Implementers: IMPLEMENTATION_GUIDE.md