wpaconnect

package module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2021 License: MIT Imports: 8 Imported by: 5

README

wpa-connect

Package provides API for connection Linux device to Wi-Fi Network.

wpa-connect communicates with WPA supplicant over D-Bus (linux message bus system).

This package was developed as part of IoT project in order to add Wi-Fi connectivity to headless Raspberry Pi like devices. No need for connman or Network Manager be installed.

Setup

On Linux:

wpa_supplicant service should run with -u flag in order to enable DBus interface. Run it as Linux service before first call to wpa_supplicant. Otherwise system will start it automatically without -u flag.

Systemd service configuration file - /etc/systemd/system/wpa_supplicant@wlan0.service

[Unit]
Description=WPA supplicant for %i

[Service]
ExecStart=/usr/sbin/wpa_supplicant -u -i%i -c/etc/wpa_supplicant.conf -Dwext

[Install]
WantedBy=multi-user.target

On Raspberry PI OS (Debian Buster):

Raspbery PI OS (formerely known as Raspbian) uses dhcpd-run-hooks to setup and invoke the wpa_supplicant daemon.

  1. Disable the systemd managed wpa_supplicant located under /etc/systemd/dbus-fi.w1.wpa_supplicant1.service by running sudo systemctl disable wpa_supplicant
  2. Modify the existing wpa_supplicant dhcpd-run-hook available under /lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant by adding the -u flag to the invocation of the wpa_supplicant daemon in the wpa_supplicant_start() function.
  3. Alternatively run sudo sed -i 's/wpa_supplicant -B/wpa_supplicant -u -B/g' /lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant to modify the hook in place.

On Project:

go get github.com/mark2b/wpa-connect

Usage

Please see godoc.org for documentation. (Not ready yet)

Examples

Connect to Wi-Fi network
import wifi "wpa-connect"

if conn, err := wifi.ConnectManager.Connect(ssid, password, time.Second * 60); err == nil {
	fmt.Println("Connected", conn.NetInterface, conn.SSID, conn.IP4.String(), conn.IP6.String())
} else {
	fmt.Println(err)
}
Scan for Wi-Fi networks
import wifi "wpa-connect"

if bssList, err := wifi.ScanManager.Scan(); err == nil {
	for _, bss := range bssList {
		print(bss.SSID, bss.Signal, bss.KeyMgmt)
	}
}

Package release under a MIT license.

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ConnectManager = &connectManager{NetInterface: "wlan0"}
)
View Source
var (
	ScanManager = &scanManager{NetInterface: "wlan0"}
)

Functions

func NewConnectManager added in v1.4.0

func NewConnectManager(netInterface string) *connectManager

func NewScanManager added in v1.4.0

func NewScanManager(netInterface string) *scanManager

func SetDebugMode

func SetDebugMode()

func SetInfoMode

func SetInfoMode()

func SetSilentMode

func SetSilentMode()

func SetVerboseMode

func SetVerboseMode()

Types

type BSS

type BSS struct {
	BSSID     string
	SSID      string
	KeyMgmt   []string
	WPS       string
	Frequency uint16
	Signal    int16
	Age       uint32
	Mode      string
	Privacy   bool
}

type ConnectionInfo

type ConnectionInfo struct {
	NetInterface string
	SSID         string
	IP4          net.IP
	IP6          net.IP
}

Directories

Path Synopsis
examples
internal
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL