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
No known key found for this signature in database
GPG Key ID: F1DCDC4FED0A0C5B
9 changed files with 37 additions and 36 deletions

View File

@ -1,25 +1,27 @@
# Changelog # Changelog
## [Unreleased][] - 2021-09-27 ## [Unreleased][] - 2021-09-29
- Better error messages - 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 - Cleanup before exit
- Closed #19
## [v0.4.0][] - 2021-09-20 ## [v0.4.0][] - 2021-09-20
- naxalnet is now a daemon! naxalnet will reconfigure the WiFi network - 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 - **Logging**: logs to systemd journal when run from systemd, stderr
otherwise otherwise (#13)
- New dependency `python-systemd` - New dependency `python-systemd`
- Fixed dependency order in systemd service - Fixed dependency order in systemd service
- Added `--verbose` argument - Added `--verbose` argument
## [v0.3.0][] - 2021-08-19 ## [v0.3.0][] - 2021-08-19
- Support for arguments - Support for arguments (#11)
- Configuration file support with fallback values - Configuration file support with fallback values (#11)
- Made messages more readable - Made messages more readable
- Improved documentation in docstrings - Improved documentation in docstrings
- Changed default name of mesh network. **This will make naxalnet - Changed default name of mesh network. **This will make naxalnet
@ -28,15 +30,17 @@
## [v0.2.0][] - 2021-07-26 ## [v0.2.0][] - 2021-07-26
- rfkill support - rfkill support (#9)
- rewrite into python module - rewrite into python module (#5)
## [v0.1.0][] - 2021-06-19 ## [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 converted into a single python file that did just what the shell script
used to do. The shell script was not given a version. 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 [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.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 [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 ## Reporting issues and suggesting ideas
To report a bug or suggest an idea, create a new issue at To report a bug or suggest an idea, create a new issue at
<https://git.disroot.org/pranav/naxalnet/issues> with a <https://git.disroot.org/pranav/naxalnet/issues>
relevant label.
## Improving documentation ## Improving documentation

View File

@ -154,15 +154,16 @@ To start naxalnet, do the command on all the nodes:
sudo systemctl start naxalnet.service sudo systemctl start naxalnet.service
``` ```
This will start a mesh network and connect to all nodes. This will start a mesh network and connect to all nodes. To test if it
To test if it works, run `sudo batctl n -w` and check for works, run `sudo batctl n -w` and check for nodes. If there are any nodes,
nodes. If there are any nodes, your network is up. Press your network is up. Press Ctrl+C to stop `batctl`.
Ctrl+C to stop `batctl`.
### Getting internet access ### Getting internet access
Connect an ethernet cable from a router to any of the nodes and Connect an ethernet cable from a router to any of the nodes. Now restart
renew the DHCP connection of all peers. To do this, type 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. `sudo networkctl renew bridge0` on all nodes.
### Tethering via WiFi AP ### 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 # In case you forgot to change the version, skip the number
# and put the next number in the next commit. # 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.daemon import Daemon
from naxalnet.network import NetworkD 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: def get_sorted_glob(directory: str, glob: str) -> list:
"""return sorted list of filenames matching glob""" """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): for i in get_sorted_glob(args.networkd_config_dir, TMP_NET_GLOB):
logger.debug("Adding temporary config %s", i) logger.debug("Adding temporary config %s", i)
networkd.add_config(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) time.sleep(10)
routable = networkd.is_routable() routable = networkd.is_routable()
networkd.remove_all_configs() networkd.remove_all_configs()
@ -122,9 +118,6 @@ def setup_devices():
adhoc_devices = [] adhoc_devices = []
ap_devices = [] ap_devices = []
global USED_DEVICES
USED_DEVICES = []
# Find devices supporting ad-hoc and ap # Find devices supporting ad-hoc and ap
for i in devices: for i in devices:
# For each device, check if its adapter supports # For each device, check if its adapter supports
@ -158,7 +151,6 @@ def setup_devices():
logger.info("Starting mesh on %s", adhoc_device.name) logger.info("Starting mesh on %s", adhoc_device.name)
adhoc_device.start_adhoc_open(args.adhoc_name) adhoc_device.start_adhoc_open(args.adhoc_name)
USED_DEVICES.append(adhoc_device.name)
# Start Access point if ap_device is not empty, # Start Access point if ap_device is not empty,
# ie, we have more devices # ie, we have more devices
@ -173,7 +165,6 @@ def setup_devices():
logger.debug("Adapter %s is off. Turning on", ap_adapter.name) logger.debug("Adapter %s is off. Turning on", ap_adapter.name)
ap_adapter.power_on() ap_adapter.power_on()
ap_device.start_ap(args.ap_ssid, args.ap_passwd) ap_device.start_ap(args.ap_ssid, args.ap_passwd)
USED_DEVICES.append(ap_device.name)
else: else:
logger.warning("Not setting up WiFi AP.") logger.warning("Not setting up WiFi AP.")
else: else:
@ -199,7 +190,7 @@ def cleanup():
networkd = NetworkD(runtime_dir=args.networkd_runtime_dir) networkd = NetworkD(runtime_dir=args.networkd_runtime_dir)
logger.info("Exiting gracefully") logger.info("Exiting gracefully")
networkd.remove_all_configs() networkd.remove_all_configs()
for i in USED_DEVICES: for i in IWD().get_devices():
logger.debug("Turning off %s", i) logger.debug("Turning off %s", i)
device = Device(i) device = Device(i)
# device.set_mode("station") # device.set_mode("station")
@ -243,6 +234,9 @@ def main():
# see man:sd_notify(3) # see man:sd_notify(3)
notify("READY=1") 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": if args.gateway_mode == "auto":
logger.info("Checking for internet connection") logger.info("Checking for internet connection")
notify("STATUS=Checking for internet") notify("STATUS=Checking for internet")

View File

@ -1,10 +1,13 @@
# Create the BATMAN interface # Create the BATMAN interface
# See 04-batman.network for configuration details # See mesh.04-batman.network for configuration details
[NetDev] [NetDev]
Name={batdev} Name={batdev}
Description=BATMAN interface Description=BATMAN interface
Kind=batadv Kind=batadv
# see man:systemd.netdev(5) § [BATMANADVANCED] SECTION OPTIONS # See man:systemd.netdev(5) § [BATMANADVANCED] SECTION OPTIONS
[BatmanAdvanced] [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} GatewayMode={gateway_mode}

View File

@ -1,6 +1,6 @@
# Create a bridge interface # Create a bridge interface
# The batman interface be will later linked to this bridge. # 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] [NetDev]
Name={bridgedev} Name={bridgedev}
Description=Bridge Description=Bridge

View File

@ -5,7 +5,7 @@ Name={batdev}
Description=Configuration for the BATMAN interface Description=Configuration for the BATMAN interface
Bridge={bridgedev} 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 # also shouldn't have IP address the address will
# be assigned to the bridge # be assigned to the bridge
DHCP=no DHCP=no

View File

@ -1,5 +1,5 @@
# This file bridges any ethernet device found # 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] [Match]
Name=en* Name=en*
Name=eth* Name=eth*