summaryrefslogtreecommitdiffstats
path: root/design/overview.page
blob: 96fa6c461041afc4da99d842de1f4f121d606f45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

## Specific Design Goals and Requirements

**A standard Linux server environment** for hosting applications, meaning that
web applications and most daemons (eg, appropriate to run on a single VPS) do
not have to be specifically re-ported to run on rooter.

**Simultaneous 200Mbps down, 109Mbps up routed ethernet throughput** between
local and remote ports. This performance ensures that rooter would not limit
the performance of [DOCSIS 3.0](https://en.wikipedia.org/wiki/DOCSIS#Speed_tables)
cable modem connections.

**"No-surprises" generic router functionality**, meaning that the device should
meet the expectations of non-technical users in it's default configuration:
standard firewall configuration, DHCP and DNS auto-configuration, support for
common upstream authentication mechanisms, configuration via a web interface at
the gateway's IP address.

**Hardware Hackability**, a vague concept. In this case meaning (at a minimum)
that new firmware can loaded and debugged on the device, and that low-level
electronics can be integrated using standard connections (3.3/5v GPIOs, UARTS,
SPI, ADCs, etc).

Ability to **participate in alternative networks** like wireless mesh networks
(BATMAN, OLSR, etc), darknets (i2p), or Tor without excessive difficulty. This
may require some network-specific porting and may contra-indicate some other 

**"Line-rate" WiFi routed throughput** (to local or upstream ethernet ports).
For 802.11n this means 150Mbps for a single 40MHz channel.

**IPv6 fully supported out-of-the-box.**

**"No-reboot" reliability** under defaults with "normal usage", meaning that end
users should never have to manually power cycle the device to resolve local or
uplink DHCP or routing connectivity issues.

**No NDAs, special vendor deals, or binary blobs.** A mostly free/libre
software and hardware stack, reproducable by anybody with capital and
manufacturing facilities.

**"Internet-of-Things" connectivity** via a low-power IP-based wireless
protocol (eg 802.15.4 6lowpan, ZigBee, Bluetooth Low-Energy, etc).

## Implementation

See [hardware]() for specific components and costs; in summary:

- 1GHz dual-core ARM SoC processor
- 512MB RAM
- Internal uSD card storage, expandable through SATA and USB ports
- Modular WiFI via miniPCIe slot; recommend dual-band 802.11n
- 2 powered USB ports for expansion
- 5x Gigabit ethernet ports: 4x local + 1x upstream
- Serial and JTAG debugging via micro-USB port
- Low-bandwidth "internet of things" gateway with 802.15.4 radio 
- Hardware entropy generation device

The proposed software stack is to run a tweaked OpenWRT router firmware
distribution on the bare metal, and run server processes in one or more
virtualized full debian environments.

Porting and documentation effort will be made such that users can swap out the
default software stack for regular debian, regular OpenWRT, pfSense (FreeBSD),
or OpenBSD as they see fit.

A bootloader and multiple-partition scheme will retain a "factory" copy of the
default configuration on the internal micro SD card to assist with recovering
from misconfiguration.

## Comparison

See [../research/devices]() for a listing of other similar hardware devices.

**Router?** indicates whether the device meets contemporary first world user
expectations of a home router.

**Server?** indicates whether the devices meets expectations of web application
developers: eg, whether a Ruby On Rails web application would run well enough
for a small group of users.

**Libre?** indicates whether the design of the entire device is truely Free.

**Hack?** indicates whether the device could be integrated into an electronics
project by an Arduino-experienced hacker.

<table class="gridded" style="width: 1200px;">
 <tr>
  <th style="width:180px;">Device
  <th style="width:80px;">Price
  <th style="width:200px;">CPU/RAM/Disk
  <th style="width:100px;">Ethernet
  <th style="width:230px;">Wireless
  <th style="width:80px;">Router?
  <th style="width:80px;">Server?
  <th style="width:180px;">Libre?
  <th style="width:200px;">Hack?
 <tr>
  <td><b>rooter</b><br>with OpenWRT+debian
  <td>$130+
  <td>1GHz ARM / 512MB <br> 8Gb uSD, empty SATA
  <td>5x 1000Mbps
  <td>802.11n 2.4GHz miniPCIe
      <br>802.11n 5GHz miniPCIe
      <br>802.15.4 6lowpan
  <td style="background-color: #8F8;" >Yes
  <td style="background-color: #8F8;" >Yes
  <td style="background-color: #8F8;" >Open Hardware<br>FLOSS software<br>FLOSS drivers<br>FLOSS BIOS
  <td style="background-color: #8F8;" >Serial, JTAG, GPIO, MCU
 <tr>
  <td><b>[DreamPlug](http://www.globalscaletechnologies.com/t-dreamplugdetails.aspx)</b><br>with FreedomBox/debian
  <td>$160
  <td>1.2 GHz ARM / 512MB <br> 4GB uSD, empty eSATA, SD
  <td>2x 1000Mbps
  <td>802.11 2.4GHz [SDIO](https://www.globalscaletechnologies.com/skins/skin_1/images/dreamplug_blockdiagram.jpg)
      <br>BlueTooth 3 SDIO
  <td style="background-color: #FF8;" >Limited
  <td style="background-color: #8F8;" >Yes
  <td style="background-color: #F88;" >Proprietary Hardware<br>FLOSS software<br>Binary Blob drivers<sup>[ref](http://www.madore.org/~david/weblog/2012-03.html#d.2012-03-17.2021)</sup><br>FLOSS BIOS
  <td style="background-color: #FF8;" >Serial, JTAG
 <tr>
  <td><b>[Raspberry Pi B](http://www.raspberrypi.org/)</b><br>with debian
  <td>$35
  <td>700MHz ARM / 256MB <br> empty SD
  <td>1x 100Mbps
  <td>empty USB
  <td style="background-color: #F88;" >No
  <td style="background-color: #FF8;" >Limited
  <td style="background-color: #F88;" >Almost-Open Hardware<br>FLOSS software<br>Binary Blob drivers<br>no BIOS
  <td style="background-color: #8F8;" >GPIO, Serial, SPI, i2c
 <tr>
  <td><b>[Netgear WNDR3700v2](http://www.netgear.com/home/products/wirelessrouters/high-performance/wndr3700.aspx)</b><br>with OpenWRT
  <td>$90
  <td>680MHz MIPS / 64MB <br> 16MB flash
  <td>5x 1000Mbps
  <td>802.11n 2.4GHz PCI<br>802.11n 5GHz PCI
  <td style="background-color: #8F8;" >Yes
  <td style="background-color: #F88;" >No
  <td style="background-color: #F88;" >Proprietary Hardware<br>FLOSS software<br>FLOSS ath9k drivers<br>FLOSS BIOS
  <td style="background-color: #F88;" >Undocumented, expert only
 <tr>
  <td><b>[Soekris net6501-50](http://soekris.com/products/net6501/net6501-50-board-case.html)</b><br>with debian
  <td>$330
  <td>1GHz Atom x86 / 1GB <br> empty SATA, mSATA
  <td>4x 1000Mbps
  <td>empty miniPCIe + USB
  <td style="background-color: #8F8;" >Yes<br>(w/ WiFi)
  <td style="background-color: #8F8;" >Yes
  <td style="background-color: #F88;" >Proprietary Hardware<br>FLOSS software<br>FLOSS drivers</br>Proprietary BIOS<sup>[ref](http://soekris.com/downloads.html)</sup>
  <td style="background-color: #8F8;" >Serial, GPIO, FPGA
 <tr>
  <td><b>[Mesh Potato](http://store.villagetelco.com/mesh-potatoes/mesh-potato.html)</b><br>with OpenWRT
  <td>$100
  <td>180MHz MIPS / 16MB <br> 8MB flash
  <td>1x 100Mbps
  <td>802.11b/g 2.4GHz SoC
  <td style="background-color: #FF8;" >Limited
  <td style="background-color: #F88;" >No
  <td style="background-color: #FF8;" >Open Hardware<br>FLOSS software<br>Blob drivers<sup>[ref](http://wiki.villagetelco.org/index.php?title=Mesh_Potato_Firmware_How_To#WiFi)</sup><br>FLOSS bootloader
  <td style="background-color: #8F8;" >MCU, CPLD, Serial, JTAG, [more](http://wiki.villagetelco.org/index.php?title=Mesh_Potato_Features_/_Specs)
</table>