turn off all wifi devices at exit

This makes things easier to maintain, or so I hope.

Added more comments in files in systemd-networkd, made CHANGELOG.md
better, and updated the README.
This commit is contained in:
Pranav Jerry 2021-09-29 15:14:13 +05:30
parent 32e9559e6e
commit a7304a986b
Signed by: pranav
GPG Key ID: F1DCDC4FED0A0C5B
9 changed files with 37 additions and 36 deletions

View File

@ -1,25 +1,27 @@
# Changelog
## [Unreleased][] - 2021-09-27
## [Unreleased][] - 2021-09-29
- Better error messages
- Sets gateway mode automatically. **This might cause problems with nodes running previous version of naxalnet**
- Sets gateway mode automatically. **This might cause problems with nodes
running previous version of naxalnet** (#15)
- Cleanup before exit
- Closed #19
## [v0.4.0][] - 2021-09-20
- naxalnet is now a daemon! naxalnet will reconfigure the WiFi network
every time a WiFi adapter is plugged in or removed
every time a WiFi adapter is plugged in or removed (#14)
- **Logging**: logs to systemd journal when run from systemd, stderr
otherwise
otherwise (#13)
- New dependency `python-systemd`
- Fixed dependency order in systemd service
- Added `--verbose` argument
## [v0.3.0][] - 2021-08-19
- Support for arguments
- Configuration file support with fallback values
- Support for arguments (#11)
- Configuration file support with fallback values (#11)
- Made messages more readable
- Improved documentation in docstrings
- Changed default name of mesh network. **This will make naxalnet
@ -28,15 +30,17 @@
## [v0.2.0][] - 2021-07-26
- rfkill support
- rewrite into python module
- rfkill support (#9)
- rewrite into python module (#5)
## [v0.1.0][] - 2021-06-19
Initial python version. At first, this was a shell script. Than it was
Rewrite to python. At first, this was a shell script. Than it was
converted into a single python file that did just what the shell script
used to do. The shell script was not given a version.
- Closed #1 and #3
[unreleased]: https://git.disroot.org/pranav/naxalnet/compare/v0.4.0...HEAD
[v0.4.0]: https://git.disroot.org/pranav/naxalnet/compare/v0.3.0...v0.4.0
[v0.3.0]: https://git.disroot.org/pranav/naxalnet/compare/v0.2.0...v0.3.0

View File

@ -5,8 +5,7 @@ Everyone can [hack][] naxalnet. See below for how to hack.
## Reporting issues and suggesting ideas
To report a bug or suggest an idea, create a new issue at
<https://git.disroot.org/pranav/naxalnet/issues> with a
relevant label.
<https://git.disroot.org/pranav/naxalnet/issues>
## Improving documentation

View File

@ -154,15 +154,16 @@ To start naxalnet, do the command on all the nodes:
sudo systemctl start naxalnet.service
```
This will start a mesh network and connect to all nodes.
To test if it works, run `sudo batctl n -w` and check for
nodes. If there are any nodes, your network is up. Press
Ctrl+C to stop `batctl`.
This will start a mesh network and connect to all nodes. To test if it
works, run `sudo batctl n -w` and check for nodes. If there are any nodes,
your network is up. Press Ctrl+C to stop `batctl`.
### Getting internet access
Connect an ethernet cable from a router to any of the nodes and
renew the DHCP connection of all peers. To do this, type
Connect an ethernet cable from a router to any of the nodes. Now restart
naxalnet on the node to set `gateway_mode` to `server`. Other nodes will
take a minute or more to renew DHCP. You can optionally do this manually
if you don't want the delay. To do this, type
`sudo networkctl renew bridge0` on all nodes.
### Tethering via WiFi AP

View File

@ -35,4 +35,4 @@ See README.md for documentation.
#
# In case you forgot to change the version, skip the number
# and put the next number in the next commit.
__version__ = "0.4.0a5.dev6"
__version__ = "0.4.0a5.dev8"

View File

@ -39,12 +39,6 @@ from naxalnet.config import args
from naxalnet.daemon import Daemon
from naxalnet.network import NetworkD
# List of wireless devices used as part of the mesh.
# Used to poweroff devices during cleanup.
# Though used as a variable, thi e name is
# capitalised to shut up pylint and co.
USED_DEVICES = []
def get_sorted_glob(directory: str, glob: str) -> list:
"""return sorted list of filenames matching glob"""
@ -68,7 +62,9 @@ def any_interface_is_routable():
for i in get_sorted_glob(args.networkd_config_dir, TMP_NET_GLOB):
logger.debug("Adding temporary config %s", i)
networkd.add_config(i)
# Then, wait for some time to setup the network
# Then, wait for some time to setup the network.
# This should be replaced by a d-bus wait-for-signal
# function that timeouts after 10 seconds.
time.sleep(10)
routable = networkd.is_routable()
networkd.remove_all_configs()
@ -122,9 +118,6 @@ def setup_devices():
adhoc_devices = []
ap_devices = []
global USED_DEVICES
USED_DEVICES = []
# Find devices supporting ad-hoc and ap
for i in devices:
# For each device, check if its adapter supports
@ -158,7 +151,6 @@ def setup_devices():
logger.info("Starting mesh on %s", adhoc_device.name)
adhoc_device.start_adhoc_open(args.adhoc_name)
USED_DEVICES.append(adhoc_device.name)
# Start Access point if ap_device is not empty,
# ie, we have more devices
@ -173,7 +165,6 @@ def setup_devices():
logger.debug("Adapter %s is off. Turning on", ap_adapter.name)
ap_adapter.power_on()
ap_device.start_ap(args.ap_ssid, args.ap_passwd)
USED_DEVICES.append(ap_device.name)
else:
logger.warning("Not setting up WiFi AP.")
else:
@ -199,7 +190,7 @@ def cleanup():
networkd = NetworkD(runtime_dir=args.networkd_runtime_dir)
logger.info("Exiting gracefully")
networkd.remove_all_configs()
for i in USED_DEVICES:
for i in IWD().get_devices():
logger.debug("Turning off %s", i)
device = Device(i)
# device.set_mode("station")
@ -243,6 +234,9 @@ def main():
# see man:sd_notify(3)
notify("READY=1")
# Gateway mode comes in handy when many nodes have a DHCP server
# and you want to prevent conflicts.
# https://www.open-mesh.org/projects/batman-adv/wiki/Gateways
if args.gateway_mode == "auto":
logger.info("Checking for internet connection")
notify("STATUS=Checking for internet")

View File

@ -1,10 +1,13 @@
# Create the BATMAN interface
# See 04-batman.network for configuration details
# See mesh.04-batman.network for configuration details
[NetDev]
Name={batdev}
Description=BATMAN interface
Kind=batadv
# see man:systemd.netdev(5) § [BATMANADVANCED] SECTION OPTIONS
# See man:systemd.netdev(5) § [BATMANADVANCED] SECTION OPTIONS
[BatmanAdvanced]
# This helps choose the best network when many nodes have a DHCP
# server. See the B.A.T.M.A.N. documentation at
# https://www.open-mesh.org/projects/batman-adv/wiki/Gateways
GatewayMode={gateway_mode}

View File

@ -1,6 +1,6 @@
# Create a bridge interface
# The batman interface be will later linked to this bridge.
# See 07-bridge.network to see how this bridge is configured
# See mesh.07-bridge.network to see how this bridge is configured
[NetDev]
Name={bridgedev}
Description=Bridge

View File

@ -5,7 +5,7 @@ Name={batdev}
Description=Configuration for the BATMAN interface
Bridge={bridgedev}
# like in 03-wireless-ad-hoc.network, this interface
# like in mesh.03-wireless-ad-hoc.network, this interface
# also shouldn't have IP address the address will
# be assigned to the bridge
DHCP=no

View File

@ -1,5 +1,5 @@
# This file bridges any ethernet device found
# to the bridge made in 02-bridge.netdev
# to the bridge made in mesh.02-bridge.netdev
[Match]
Name=en*
Name=eth*