Skip to content

Commit a74770b

Browse files
committed
rtl8720dn: implement ConnectModeAP
Signed-off-by: deadprogram <[email protected]>
1 parent 3ed09d3 commit a74770b

File tree

2 files changed

+67
-7
lines changed

2 files changed

+67
-7
lines changed

netdev/netdev.go

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ var (
3636
ErrFamilyNotSupported = errors.New("Address family not supported")
3737
ErrProtocolNotSupported = errors.New("Socket protocol/type not supported")
3838
ErrStartingDHCPClient = errors.New("Error starting DHPC client")
39+
ErrStartingDHCPServer = errors.New("Error starting DHPC server")
3940
ErrNoMoreSockets = errors.New("No more sockets")
4041
ErrClosingSocket = errors.New("Error closing socket")
4142
ErrNotSupported = errors.New("Not supported")

rtl8720dn/rtl8720dn.go

+66-7
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ var (
3232
)
3333

3434
const (
35-
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
36-
RTW_MODE_STA = 0x00000001
35+
O_NONBLOCK = 1 // note: different value than syscall.O_NONBLOCK (0x800)
36+
RTW_MODE_STA = 0x00000001
37+
defaultChannel = 6
3738
)
3839

3940
type sock int32
@@ -135,6 +136,51 @@ func (r *rtl8720dn) connectToAP() error {
135136
return r.startDhcpc()
136137
}
137138

139+
func (r *rtl8720dn) startDhcps() error {
140+
if result := r.rpc_tcpip_adapter_dhcps_start(0); result == -1 {
141+
return netdev.ErrStartingDHCPServer
142+
}
143+
return nil
144+
}
145+
146+
func (r *rtl8720dn) startAP() error {
147+
if len(r.params.Ssid) == 0 {
148+
return netlink.ErrMissingSSID
149+
}
150+
151+
if len(r.params.Passphrase) != 0 && len(r.params.Passphrase) < 8 {
152+
return netlink.ErrShortPassphrase
153+
}
154+
155+
if debugging(debugBasic) {
156+
fmt.Printf("Starting Wifi AP as SSID '%s'...", r.params.Ssid)
157+
}
158+
159+
// Start the connection process
160+
securityType := uint32(0) // RTW_SECURITY_OPEN
161+
if len(r.params.Passphrase) != 0 {
162+
securityType = 0x00400004 // RTW_SECURITY_WPA2_AES_PSK
163+
}
164+
165+
result := r.rpc_wifi_start_ap(r.params.Ssid, r.params.Passphrase, securityType, defaultChannel)
166+
if result != 0 {
167+
if debugging(debugBasic) {
168+
fmt.Printf("FAILED\r\n")
169+
}
170+
return netlink.ErrConnectFailed
171+
}
172+
173+
if debugging(debugBasic) {
174+
fmt.Printf("LISTENING\r\n")
175+
}
176+
177+
if r.notifyCb != nil {
178+
r.notifyCb(netlink.EventNetUp)
179+
}
180+
181+
return r.startDhcps()
182+
}
183+
138184
func (r *rtl8720dn) showDriver() {
139185
if r.driverShown {
140186
return
@@ -246,14 +292,27 @@ func (r *rtl8720dn) netConnect(reset bool) error {
246292
}
247293
r.showDevice()
248294

295+
retry:
249296
for i := 0; r.params.Retries == 0 || i < r.params.Retries; i++ {
250-
if err := r.connectToAP(); err != nil {
251-
if err == netlink.ErrConnectFailed {
252-
continue
297+
switch r.params.ConnectMode {
298+
case netlink.ConnectModeAP:
299+
if err := r.startAP(); err != nil {
300+
if err == netlink.ErrConnectFailed {
301+
continue
302+
}
303+
return err
253304
}
254-
return err
305+
break retry
306+
307+
default:
308+
if err := r.connectToAP(); err != nil {
309+
if err == netlink.ErrConnectFailed {
310+
continue
311+
}
312+
return err
313+
}
314+
break retry
255315
}
256-
break
257316
}
258317

259318
if r.networkDown() {

0 commit comments

Comments
 (0)