Refactor chutney networks: increase configurability, reduce code duplication
Refactor the existing chutney networks to increase configurability and reduce code duplication. Make it easier to mix and match particular authority, middle relay, client (standard, bridge, IPv6 bridge) and endpoint (exit, hidden service) nodes. Also make version mixing easier. Have a replaceable minimal default? 3 authorities, 1 client, 1 bridge client, 1 bridge, 1 middle, 1 exit, 1 hs
- each network includes 3 authorities, 1 client or bridge client, 1 exit or hs, and however many middles are required to do a fast bootstrap (assuming reachability)
- work out a way to select between client / bridge client, and exit or hs endpoints
- create a way to do a full bootstrap (no assuming reachability) by flipping one setting (change torrc options, add middle relays to some minimum of auth + exit + middle: 4? 5?)
- work out a way to add IPv6 bridges, old tor versions, and other features I'm forgetting
- work out a way to scale network size by multiplication, either of all nodes, or of particular node roles (start point, relay, end point), or of individual node configurations
- work out what syntax Python needs to include one configuration in another Maybe it could look like this:
- core: authorities, non-exit relays?
- client: client, bridge, IPv6 bridge (choose at least one)
- endpoint: exit, hs (choose at least one)
- bootstrap: fast or full (choose one)
- version: built, system (choose at least one) Then combined to give us all the networks that currently exist, without needing to cut and paste between network configurations.