rtl8720dn: implement ConnectModeAP

Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
deadprogram
2024-03-31 10:57:19 +02:00
committed by Ron Evans
parent 3ed09d3fe1
commit a74770b2e6
2 changed files with 67 additions and 7 deletions
+1
View File
@@ -36,6 +36,7 @@ var (
ErrFamilyNotSupported = errors.New("Address family not supported")
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
ErrStartingDHCPServer = errors.New("Error starting DHPC server")
ErrNoMoreSockets = errors.New("No more sockets")
ErrClosingSocket = errors.New("Error closing socket")
ErrNotSupported = errors.New("Not supported")
+66 -7
View File
@@ -32,8 +32,9 @@ var (
)
const (
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
RTW_MODE_STA = 0x00000001
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
RTW_MODE_STA = 0x00000001
defaultChannel = 6
)
type sock int32
@@ -135,6 +136,51 @@ func (r *rtl8720dn) connectToAP() error {
return r.startDhcpc()
}
func (r *rtl8720dn) startDhcps() error {
if result := r.rpc_tcpip_adapter_dhcps_start(0); result == -1 {
return netdev.ErrStartingDHCPServer
}
return nil
}
func (r *rtl8720dn) startAP() error {
if len(r.params.Ssid) == 0 {
return netlink.ErrMissingSSID
}
if len(r.params.Passphrase) != 0 && len(r.params.Passphrase) < 8 {
return netlink.ErrShortPassphrase
}
if debugging(debugBasic) {
fmt.Printf("Starting Wifi AP as SSID '%s'...", r.params.Ssid)
}
// Start the connection process
securityType := uint32(0) // RTW_SECURITY_OPEN
if len(r.params.Passphrase) != 0 {
securityType = 0x00400004 // RTW_SECURITY_WPA2_AES_PSK
}
result := r.rpc_wifi_start_ap(r.params.Ssid, r.params.Passphrase, securityType, defaultChannel)
if result != 0 {
if debugging(debugBasic) {
fmt.Printf("FAILED\r\n")
}
return netlink.ErrConnectFailed
}
if debugging(debugBasic) {
fmt.Printf("LISTENING\r\n")
}
if r.notifyCb != nil {
r.notifyCb(netlink.EventNetUp)
}
return r.startDhcps()
}
func (r *rtl8720dn) showDriver() {
if r.driverShown {
return
@@ -246,14 +292,27 @@ func (r *rtl8720dn) netConnect(reset bool) error {
}
r.showDevice()
retry:
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
if err := r.connectToAP(); err != nil {
if err == netlink.ErrConnectFailed {
continue
switch r.params.ConnectMode {
case netlink.ConnectModeAP:
if err := r.startAP(); err != nil {
if err == netlink.ErrConnectFailed {
continue
}
return err
}
return err
break retry
default:
if err := r.connectToAP(); err != nil {
if err == netlink.ErrConnectFailed {
continue
}
return err
}
break retry
}
break
}
if r.networkDown() {