OpenWrt
OpenWrt 15.05 ("Chaos Calmer") login screen | |
Developer | OpenWrt Project |
---|---|
Written in | Lua |
OS family | Unix-like |
Working state | Current |
Source model | Open source |
Initial release | January 2004 |
Latest release | 15.05.1 (Chaos Calmer) (March 16, 2016 ) [±][1] |
Latest preview | 15.05-rc3 Chaos Calmer (15 July 2015 ) [±][2] |
Available in | 22 languages[3] |
Update method | opkg |
Package manager | opkg |
Platforms | 50 different platforms using the following Instruction sets: AVR32, ARM, CRIS, m68k, MIPS, PowerPC, SPARC, SuperH, Ubicom32, x86, x86-64[4] |
Kernel type | Monolithic (Linux) |
Userland | BusyBox, GNU |
Default user interface | CLI, WebUIs |
License | Free software (GPL and other licenses) |
Official website |
www |
OpenWrt is an embedded operating system based on the Linux kernel, primarily used on embedded devices to route network traffic. The main components are the Linux kernel, util-linux, uClibc or musl,[5] and BusyBox. All components have been optimized for size, to be small enough for fitting into the limited storage and memory available in home routers.
OpenWrt is configured using a command-line interface (ash shell), or a web interface (LuCI). There are about 3500 optional software packages available for installation via the opkg package management system.
OpenWrt can run on various types of devices, including CPE routers, residential gateways, smartphones, pocket computers (e.g. Ben NanoNote), and laptops. It is also possible to run OpenWrt on ordinary computers, which are most commonly based on the x86 architecture.
History
The project came into being because Linksys built the firmware for their WRT54G series of wireless routers from publicly available code licensed under the GPL.[6] Under the terms of that license, Linksys was required to make the source code of its modified version available under the same license,[7][8] which in turn enabled independent developers to create additional derivative versions. Support was originally limited to the WRT54G series, but has since been expanded to include many other chipsets, manufacturers and device types, including Plug Computers and Openmoko mobile phones.
Using this code as a base and later as a reference, developers created a Linux distribution that offers many features not previously found in consumer-level routers. Some features formerly required proprietary software. Before the introduction of OpenWrt 8.09, using Linux 2.6.25 and the b43
kernel module, WLAN for many Broadcom-based routers was only available through the proprietary wl.o
module that was also provided for Linux kernel version 2.4.x only.
The code names of OpenWrt branches are named after alcoholic beverages, usually including their recipes in the MOTD as well, cf. White Russian, Kamikaze, Backfire, Attitude Adjustment, Barrier Breaker.
The bleeding edge development trunk was confusingly also called Kamikaze until February 2011 but with r25514 it was renamed as "Attitude Adjustment" and is now being constantly renamed to the next stable name.
Releases
Tagged | Code Name | Version | Release date | Linux kernel | C standard library | Binary packages | Source packages | Notes | |
---|---|---|---|---|---|---|---|---|---|
(default) | (available) | ||||||||
N/A | style="background-color: #FDB3AB; " title="Old version, no longer supported" data-sort-value="pre Buildroot-NG" | pre Buildroot-NG | 0.x | N/A | N/A | uClibc | 474 | ≈ 310 | ||
r6268 | White Russian | 0.9 | January 2006 | 2.4.30 | uClibc | ≈ 360 | ≈ 140 | NVRAM-based, nas , wl . Supported platform: brcm-2.4 . | |
r7428 | Kamikaze | 7.06 | June 2007 | 2.6.19 | uClibc | ≈ 750 | ≈ 450 | Using opkg . Supported platforms: atheros-2.6 , au1000-2.6 , brcm-2.4 , brcm47xx-2.6 , ixp4xx-2.6 , imagicbox-2.6 , rb532-2.6 and x86-2.6 . | |
r7832 | Kamikaze | 7.07 | July 2007 | 2.6.21 | uClibc | ≈ 790 | ≈ 475 | New platform: amcc-2.6 . | |
r8679 | Kamikaze | 7.09 | September 2007 | 2.6.21 | uClibc | ≈ 630 | ≈ 500 | ||
r14547 | Kamikaze | 8.09 | September 2008 | 2.6.26 | uClibc | ≈ 1,400 | ≈ 875 | New platform: ar71xx . | |
r16279 | Kamikaze | 8.09.1 | June 2009 | 2.6.26 | uClibc | ≈ 1,400 | ≈ 875 | ||
r18961 | Kamikaze | 8.09.2 | January 10, 2010[9] | 2.6.26 | uClibc | ≈ 1,400 | ≈ 875 | ||
r20742 | Backfire | 10.03 | April 7, 2010[10] | 2.6.32 | uClibc | ≈ 2,350 | ≈ 1,050 | Supported platforms: adm5120_mips , adm5120_mipsel , ar7 , ar71xx , atheros , au1000 , avr32 , brcm-2.4 , brcm47xx , brcm63xx , cobalt , ep80579 , ifxmips , ixp4xx , kirkwood , octeon , orion , ppc40x , ppc44x , rb532 , rdc , x86 and xburst . | |
r29594 | Backfire | 10.03.1 | December 21, 2011[11] | 2.6.32 | uClibc | eglibc glibc |
≈ 2,950 | ≈ 1,175 | |
r36088 | Attitude Adjustment | 12.09 | April 25, 2013[12] | 3.3 | uClibc | eglibc | ≈ 3,450 | ≈ 1,150 | CoDel (network scheduler) backported from Linux 3.5 to 3.3. New platforms: ramips , bcm2708 (Raspberry Pi) and others. |
r42625 | Barrier Breaker | 14.07 | October 2, 2014[13] | 3.10.49[14] | uClibc | musl eglibc |
? | ? | New platforms: i.MX23 , i.MX6 [15] and mvebu . |
r46767 | Chaos Calmer | 15.05 | September 11, 2015[16] | 3.18.20[17] | uClibc | musl glibc[18] |
? | ? | nftables (available since Linux kernel 3.12); New platforms: TBA if any |
Chaos Calmer | 15.05.1 | March 16, 2016[19] | 3.18.23 | ||||||
trunk | class="templateVersion p" style="background-color: #C1E6F5; " title="Future release" data-sort-value="Designated Driver[20]" | Designated Driver[21] | development | N/A | ≥4.1 | musl[22] | uClibc glibc |
? | ? | |
Old version Latest version Latest preview version Future release |
Hardware incompatibilities
With the Attitude Adjustment (12.09) release of OpenWrt, all hardware devices with 16 MB or less RAM are no longer supported as they can run out of memory easily. Older Backfire (10.03) is recommended instead for bcm47xx
devices, as issues for those devices came from dropping support for the legacy Broadcom target brcm-2.4
.[23][24]
Features
OpenWrt follows the bazaar-philosophy and is known for an abundance of options. Features include:
- A writable root file system, enabling users to add, remove or modify any file. This is accomplished by using overlayfs[25] to overlay[26] a read-only compressed SquashFS file system with a writable JFFS2 file system in a copy-on-write fashion. JFFS2 supports flash wear leveling.
- The package manager opkg, similar to dpkg, enables users to install and remove software. The package repository contains about 3500 packages. This contrasts with Linux-based firmwares based on read-only file systems without the possibility to modify the installed software without rebuilding and flashing a complete firmware image.
- A set of scripts called UCI (unified configuration interface) intended to unify and simplify the configuration of the entire system[27]
- Extensible configuration of the entire hardware drivers, e.g. built-in network switches and their VLAN-capabilities, WNICs, DSL modems, FX, available hardware buttons, etc.
- Exhaustive possibilities to configure network-related features, like:
- IPv4 support.
- IPv6 native stack:
- Routing through iproute2, Quagga, BIRD, Babel etc.
- Mesh networking through B.A.T.M.A.N., OLSR and IEEE 802.11s-capabilities of the WNIC drivers
- Wireless functionality, e.g. make the device act as a wireless repeater, a wireless access point, a wireless bridge, a captive portal, or a combination of these with e.g. ChilliSpot, WiFiDog Captive Portal, etc.
- Wireless security: Packet injection, e.g. Airpwn, lorcon, e.a.
- Stateful firewall, NAT and port forwarding through netfilter; additionally PeerGuardian is available
- Dynamically-configured port forwarding protocols UPnP and NAT-PMP through upnpd, etc.
- Port knocking via knockd and knock
- TR-069 (CWMP) client[28]
- IPS via Snort (software)
- Active queue management (AQM) through the network scheduler of the Linux kernel, with many available queuing disciplines. CoDel has been backported to Kernel 3.3.[29] This encapsulates Traffic shaping to ensure fair distribution of bandwidth among multiple users and Quality of Service (QoS) for simultaneous use of applications such as VoIP, online gaming, and streaming media without experiencing the negative impacts of link saturation.
- Load balancing for use with multiple ISPs using Source-specific routing
- IP tunneling (GRE, OpenVPN, pseudowire, etc.)
- Extensible realtime network monitoring and statistics through e.g. RRDtool, Collectd, Nagios, Munin lite, Zabbix, etc.
- Domain Name System (DNS) and DHCP through Dnsmasq, MaraDNS, etc.
- Dynamic DNS services to maintain a fixed domain name with an ISP that does not provide a static IP address
- Wireless distribution system (WDS) including WPA-PSK, WPA2-PSK, WPA-PSK/WPA2-PSK Mixed-Mode encryption modes
- OpenWrt supports any hardware that has Linux support; devices that can be e.g. connected over USB to an embedded device include
- Notable software packages to use the hardware support are:
- File sharing via SAMBA, (Windows-compatible), NFS and FTP, printer sharing over the print server CUPS (spooling) or p910nd (non-spooling)
- PulseAudio, Music Player Daemon, Audio/Video streaming via DLNA/UPnP AV standards, iTunes (DAAP) server
- Asterisk (PBX)
- MQ Telemetry Transport through Mosquitto
- An extensive Ajax-enabled web interface, thanks to the LuCI project[30]
- Regular bug fixes and updates, even for devices no longer supported by their manufacturers
Web interface
Before release 8.09, OpenWrt had a minimal web interface. In OpenWrt releases 8.09 and newer, a more capable web interface is included.[31] This interface is based on LuCI, an MVC framework written in the Lua programming language.[30]
The X-Wrt project provides an alternative web interface, named webif² in the package repositories, for the current and previous versions of OpenWrt.
The Gargoyle Router Management Utility is a web interface for OpenWrt with a strong emphasis on usability. It was originally available as a set of packages for OpenWrt. As the author of Gargoyle started to make modifications to the base system layout of OpenWrt, the package system was dropped and only complete firmware images are now available for download. Gargoyle makes extensive use of JavaScript to offload as much work as possible to the client computer, and is focused on ease of use, striving to reach a level comparable to the appliance feeling of commercial router firmware.
|
Development
OpenWrt's development environment and build system, known together as OpenWrt Buildroot, are based on a heavily modified Buildroot system. OpenWrt Buildroot is a set of Makefiles and patches that automates the process of building a complete Linux-based OpenWrt system for an embedded device, by building and using an appropriate cross-compilation toolchain.[32][33]
Embedded devices usually use a different processor than the one found in host computers used for building their OpenWrt system images, requiring a cross-compilation toolchain. Such a compilation toolchain runs on a host system, but generates code for a targeted embedded device and its processor's instruction set architecture (ISA). For example, if a host system uses x86 and a target system uses MIPS32, the regular compilation toolchain of the host runs on x86 and generates code for x86 architecture, while the cross-compilation toolchain runs on x86 and generates code for the MIPS32 architecture. OpenWrt Buildroot automates this whole process to work on the instruction set architectures of most embedded devices and host systems.[32][34]
OpenWrt Buildroot provides the following features:[32][34]
- Makes it easy to port software across architectures
- Uses kconfig (Linux kernel menuconfig) for the configuration of all options
- Provides an integrated cross-compiler toolchain (gcc, ld, uClibc etc.)
- Provides an abstraction for autotools (automake, autoconf), cmake and SCons
- Handles standard OpenWrt image build workflow: downloading, patching, configuration, compilation and packaging
- Provides a number of common fixes for known badly behaving packages
Besides building system images, OpenWrt development environment also provides a mechanism for simplified cross-platform building of OpenWrt software packages. Source code for each software package is required to provide a Makefile-like set of building instructions, and an optional set of patches for bug fixes or footprint optimizations.[35]
Adoption
OpenWrt, especially its Buildroot build system, has been adopted many times:
- Freifunk and other mesh network communities
- Bufferbloat.net (Cerowrt)
- IETF IPv6 integration projects HIPnet and HomeNet are OpenWrt-based
Derivatives
- LEDE is founded as a spin-off of the OpenWrt project and shares many of the same goals.
- CeroWrt – with a purpose to complement the debloat-testing kernel tree and provide a platform for real-world testing of bufferbloat fixes[36][37]
- Coova chilli – OpenWrt-based with focus on wireless hotspots, a fork of chillifire with focus on wireless hotspot management
- Gargoyle – a web interface for OpenWrt with a strong emphasis on usability that later forked into a separate distribution
- Flukso – Wireless sensor nodes using an Atheros AR2317 chipset running a patched OpenWrt OS for communication. Sources and hardware schematics available on GitHub.
- FON – OpenWrt-based wireless routers acting as hotspots. Sources and toolchain available on fonosfera.org
- Linino – OpenWrt-based distribution for the MIPS-based Arduino Yùn: GitHub Project
- Midge Linux – an OpenWrt-based distribution for devices based on Infineon Technologies ADM-5120 SoCs, such as Edimax BR-6104K and BR-6104KP.
- OpenSAN – iSCSI target Storage Area Network realization.
- PacketProtector – OpenWrt-based security distribution that includes IDS, IPS, VPN, and web antivirus capabilities. Packages included Snort, Snort-inline, FreeRADIUS, OpenVPN, DansGuardian and ClamAV. These tools were accessible via the old web GUI management interface of OpenWrt, called X-Wrt or webif^2. Project ended on June 7, 2012.[38]
- The Turris Omnia router runs on a OpenWrt derivative
- Diverse grassroots projects for wireless community networks, including Freifunk, Libre-Mesh and qMp
- libreCMC – OpenWrt-based distribution without non-free software or binary blobs, endorsed by the Free Software Foundation[39]
References
- ↑ "Chaos Calmer 15.05.1". 16 March 2016. Retrieved 21 March 2016.
- ↑ "Chaos Calmer 15.05-rc3". OpenWrt Forum. 13 June 2015. Retrieved 13 June 2015.
- ↑ "LuCI Translation Portal". 2004-09-01. Retrieved 2010-12-31.
- ↑ "Config.in in trunk/target – OpenWrt". Dev.OpenWrt.org. 2013-11-22. Retrieved 2014-02-13.
- ↑ Fietkau, Felix (16 June 2015). "OpenWrt switches to musl by default". Retrieved 16 June 2015.
- ↑ Linksys WRT54G and the GPL on lkml (7 Jun 2003)
- ↑ The Open Source WRT54G Story By Aaron Weiss (November 08, 2005)
- ↑ Linksys Releases GPLed Code for WRT54G on slashdot (July 2003)
- ↑ "Release Notes Kamikaze 8.09.2". openwrt.org. 2010-01-10. Retrieved 2013-04-26.
- ↑ "Release Notes Backfire 10.03". openwrt.org. 2010-04-07. Retrieved 2013-04-26.
- ↑ "Release Notes Backfire 10.03.1". openwrt.org. 2011-12-21. Retrieved 2013-04-26.
- ↑ "Release Notes Attitude Adjustment 12.09". openwrt.org. 2013-04-25. Retrieved 2013-04-26.
- ↑ "OpenWrt BarrierBreaker 14.07". openwrt.org. October 2014.
- ↑ "kernel: update to 3.10.49 – OpenWrt". dev.openwrt.org. 2014-07-20.
- ↑ Freescale i.MX support
- ↑ "OpenWrt Chaos Calmer 15.05". openwrt.org. September 2015.
- ↑ "[OpenWrt-Devel] Chaos Calmer 15.05-rc3". 2015-07-16.
- ↑ "[OpenWrt-Devel] [PATCH 1/2] toolchain: The glorious return of glibc, ver 2.21". 2015-03-11.
- ↑ "Chaos Calmer 15.05.1". 16 March 2016. Retrieved 21 March 2016.
- ↑ "Changeset 46846: change banner to Designated Driver release". 2015-09-11.
- ↑ "Changeset 46846: change banner to Designated Driver release". 2015-09-11.
- ↑ "[OpenWrt-Devel] OpenWrt switches to musl by default". 2015-06-16.
- ↑ "Release Notes for Attitude Adjustment (12.09 final)". openwrt.org. 2013-04-25. Retrieved 2013-09-26.
- ↑ "OpenWrt: Table of Hardware". openwrt.org. Retrieved 2013-09-26.
- ↑ "Debating overlayfs". June 15, 2011.
- ↑ "OpenWrt partition layout".
- ↑ "OpenWrt Unified Configuration Interface".
- ↑ freecwmp is a CWMP client for OpenWrt
- ↑ "Changeset 31756 – OpenWrt". dev.openwrt.org. 2012-05-16. Retrieved 2014-02-13.
- 1 2 "LuCI project". Retrieved February 28, 2009.
- ↑ "OpenWrt 8.09 release notes". Retrieved February 23, 2009.
- 1 2 3 "OpenWrt Buildroot – About". openwrt.org. Retrieved 2013-10-21.
- ↑ "OpenWrt Buildroot - Usage and documentation". openwrt.org. 2006-01-08. Retrieved 2013-10-21.
- 1 2 Tao Jin (2012-02-13). "OpenWrt Development Guide" (PDF). Wireless Networks Lab, CCIS, NEU. Retrieved 2013-10-21.
- ↑ "Creating packages". openwrt.org. Retrieved 2013-10-21.
- ↑ "CeroWrt Wiki". Retrieved 2015-09-16.
- ↑ "ANNOUNCE: debloat-testing kernel git tree". LWN.net. Retrieved 2014-02-13.
- ↑ ""closing time" message from author on PacketProtector forum".
- ↑ "Free Software Foundation adds libreCMC to its list of endorsed distributions". FSF.org. 2014-09-04. Retrieved 2014-12-21.
External links
Wikimedia Commons has media related to OpenWrt. |
- Official website
- LuCI project
- GPL Code Center at Cisco (formerly Linksys) Home Products
|
|