Skip to content

Commit 94cb753

Browse files
committed
all: update to latest lneto
This updates the espradio package to use the latest lneto which has required changes to restore full functionality with the espradio netlink package. Signed-off-by: deadprogram <ron@hybridgroup.com>
1 parent c7d9f94 commit 94cb753

11 files changed

Lines changed: 55 additions & 24 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ listening on http://192.168.1.46:80
305305
Minimal HTTP server that serves a static webpage using the low-level lneto interface.
306306

307307
```
308-
$ tinygo flash -target xiao-esp32c3 -ldflags="-X main.ssid=yourssid -X main.password=YourPasswordHere" -monitor 8kb ./examples/http-static/
308+
$ tinygo flash -target xiao-esp32c3 -ldflags="-X main.ssid=yourssid -X main.password=YourPasswordHere" -monitor ./examples/http-static/
309309
Connected to ESP32-C3
310310
Flashing: 627504/627504 bytes (100%)
311311
Connected to /dev/ttyACM0. Press Ctrl-C to exit.

espstack.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ func NewStack(dev *NetDev, cfg StackConfig) (*Stack, error) {
4848
stack := &Stack{dev: dev}
4949
const MTU = MaxFrameSize - ethernet.MaxOverheadSize + 4 // CRC not included:+4
5050
err = stack.s.Reset(xnet.StackConfig{
51-
StaticAddress: cfg.StaticAddress,
5251
DNSServer: cfg.DNSServer,
5352
NTPServer: cfg.NTPServer,
5453
Hostname: cfg.Hostname,
@@ -131,6 +130,6 @@ func (stack *Stack) SetupWithDHCP(cfg DHCPConfig) (*xnet.DHCPResults, error) {
131130
if err != nil {
132131
return dhcpResults, err
133132
}
134-
lstack.SetGateway6(gatewayHW)
133+
lstack.SetGatewayHardwareAddr(gatewayHW)
135134
return dhcpResults, nil
136135
}

examples/ap/main-ap.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import (
77
"net/netip"
88
"time"
99

10-
"github.com/soypat/lneto/dhcpv4"
10+
"github.com/soypat/lneto/dhcp/dhcpv4"
11+
"github.com/soypat/lneto/ipv4"
1112
"tinygo.org/x/espradio"
1213
)
1314

@@ -61,13 +62,13 @@ func main() {
6162
err = dhcpServer.Configure(dhcpv4.ServerConfig{
6263
ServerAddr: addr.As4(),
6364
Gateway: addr.As4(),
64-
Subnet: subnet,
65+
Subnet: ipv4.PrefixFromNetip(subnet),
6566
})
6667
if err != nil {
6768
failure("ap: dhcp server configure err: " + err.Error())
6869
}
6970

70-
err = stack.LnetoStack().RegisterUDP(&dhcpServer, nil, dhcpv4.DefaultClientPort)
71+
err = stack.LnetoStack().RegisterUDP4(&dhcpServer, addr.As4(), dhcpv4.DefaultClientPort)
7172
if err != nil {
7273
failure("ap: dhcp server register err: " + err.Error())
7374
}

examples/connect-and-dhcp/main-dhcp.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package main
44

55
import (
6+
"net/netip"
67
"time"
78

89
"tinygo.org/x/espradio"
@@ -65,7 +66,13 @@ func main() {
6566
if err != nil {
6667
failure("DHCP failed: " + err.Error())
6768
}
68-
println("got IP:", dhcp.AssignedAddr.String())
69+
70+
addr, ok := netip.AddrFromSlice(dhcp.AssignedAddr4[:])
71+
if !ok {
72+
failure("invalid IP address")
73+
}
74+
75+
println("got IP:", addr.String())
6976
println("gateway:", dhcp.Router.String())
7077
if len(dhcp.DNSServers) > 0 {
7178
println("DNS:", dhcp.DNSServers[0].String())

examples/http-app/main-http.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,13 @@ func main() {
9898
if err != nil {
9999
failure("DHCP failed: " + err.Error())
100100
}
101-
println("got IP:", dhcp.AssignedAddr.String())
101+
102+
addr, ok := netip.AddrFromSlice(dhcp.AssignedAddr4[:])
103+
if !ok {
104+
failure("invalid IP address")
105+
}
106+
107+
println("got IP:", addr.String())
102108

103109
lstack := espstack.LnetoStack()
104110
rstack := lstack.StackRetrying(lneto.BackoffStrategy(func(_ uint) time.Duration {
@@ -108,7 +114,7 @@ func main() {
108114
if err != nil {
109115
failure("ARP resolve failed: " + err.Error())
110116
}
111-
lstack.SetGateway6(gatewayHW)
117+
lstack.SetGatewayHardwareAddr(gatewayHW)
112118

113119
// DNS lookup for NTP server and calculate time. If this fails just ignore.
114120
println("resolving ntp host:", ntpHost)
@@ -138,13 +144,13 @@ func main() {
138144
failure("tcppool create: " + err.Error())
139145
}
140146

141-
listenAddr := netip.AddrPortFrom(dhcp.AssignedAddr, listenPort)
147+
listenAddr := netip.AddrPortFrom(addr, listenPort)
142148
var listener tcp.Listener
143149
err = listener.Reset(listenPort, tcpPool)
144150
if err != nil {
145151
failure("listener reset: " + err.Error())
146152
}
147-
err = lstack.RegisterListener(&listener)
153+
err = lstack.RegisterListenerTCP(&listener)
148154
if err != nil {
149155
failure("listener register: " + err.Error())
150156
}

examples/http-static/main-httpstatic.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func main() {
8888
// VERY IMPORTANT TO START BEFORE USING STACK!
8989
go loopForeverStack(espstack)
9090

91-
dhcpResults, err := espstack.SetupWithDHCP(espradio.DHCPConfig{})
91+
dhcp, err := espstack.SetupWithDHCP(espradio.DHCPConfig{})
9292
if err != nil {
9393
failure("DHCP failed: " + err.Error())
9494
}
@@ -111,15 +111,21 @@ func main() {
111111
}
112112

113113
lstack := espstack.LnetoStack()
114-
listenAddr := netip.AddrPortFrom(dhcpResults.AssignedAddr, listenPort)
114+
addr, ok := netip.AddrFromSlice(dhcp.AssignedAddr4[:])
115+
if !ok {
116+
failure("invalid IP address")
117+
}
118+
119+
println("got IP:", addr.String())
120+
listenAddr := netip.AddrPortFrom(addr, listenPort)
115121

116122
// Create and register TCP listener.
117123
var listener tcp.Listener
118124
err = listener.Reset(listenPort, tcpPool)
119125
if err != nil {
120126
failure("listener reset: " + err.Error())
121127
}
122-
err = lstack.RegisterListener(&listener)
128+
err = lstack.RegisterListenerTCP(&listener)
123129
if err != nil {
124130
failure("listener register: " + err.Error())
125131
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module tinygo.org/x/espradio
33
go 1.24.4
44

55
require (
6-
github.com/soypat/lneto v0.1.1-0.20260425023453-aa77403a2b32
6+
github.com/soypat/lneto v0.1.1-0.20260527165357-24d5d303bcb8
77
tinygo.org/x/drivers v0.35.0
88
)
99

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
github.com/soypat/lneto v0.1.1-0.20260425023453-aa77403a2b32 h1:4fNa4mcNPVTMJ3Kzn+cS/LqmpXhKM9SiZ9Vgu/Ucq3c=
2-
github.com/soypat/lneto v0.1.1-0.20260425023453-aa77403a2b32/go.mod h1:Be5PjwoYukvHFiUXxpYi8+ppH2F/gw/vjGBvFdv+Ti8=
1+
github.com/soypat/lneto v0.1.1-0.20260527165357-24d5d303bcb8 h1:w0XI6cvLwkR+7FQa3zKiziBpRq+yrtBGCYbdThy8H5A=
2+
github.com/soypat/lneto v0.1.1-0.20260527165357-24d5d303bcb8/go.mod h1:Be5PjwoYukvHFiUXxpYi8+ppH2F/gw/vjGBvFdv+Ti8=
33
github.com/soypat/natiu-mqtt v0.6.0 h1:ddrem9iAqFYtQOx2C7AhCizhPXXmGZs1T5fkvLroPO4=
44
github.com/soypat/natiu-mqtt v0.6.0/go.mod h1:xEta+cwop9izVCW7xOx2W+ct9PRMqr0gNVkvBPnQTc4=
55
tinygo.org/x/drivers v0.35.0 h1:cTK36tsI/S4Mg3hCPH0MBjV/ta7XKQ+wpvch4mVqgsE=

netlink/errors.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package netlink
2+
3+
import "errors"
4+
5+
var (
6+
errInvalidIPAddress = errors.New("invalid IP address")
7+
errEmptyHostname = errors.New("empty hostname")
8+
)

netlink/netlink.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package netlink
22

33
import (
4-
"errors"
54
"net"
65
"net/netip"
76
"sync"
@@ -98,7 +97,7 @@ func (n *Esplink) NetConnect(params *nl.ConnectParams) error {
9897
Hostname: params.Ssid,
9998
MaxUDPPorts: 2,
10099
MaxTCPPorts: 1,
101-
PassivePeers: 3,
100+
PassivePeers: 255,
102101
})
103102
if err != nil {
104103
if debug {
@@ -168,7 +167,7 @@ func (n *Esplink) GetHardwareAddr() (net.HardwareAddr, error) {
168167
if debug {
169168
println("GetHardwareAddr")
170169
}
171-
hw := n.netstack.LnetoStack().HardwareAddress()
170+
hw := n.netstack.LnetoStack().HardwareAddr()
172171
return hw[:], nil
173172
}
174173

@@ -182,7 +181,7 @@ func (n *Esplink) GetHostByName(name string) (netip.Addr, error) {
182181
if debug {
183182
println("GetHostByName: empty name")
184183
}
185-
return netip.Addr{}, errors.New("empty name")
184+
return netip.Addr{}, errEmptyHostname
186185
} else if name[0] >= '0' && name[0] <= '9' {
187186
// Special case to try for IPv4 addresses.
188187
addr, err := netip.ParseAddr(name)
@@ -209,7 +208,12 @@ func (n *Esplink) Addr() (netip.Addr, error) {
209208
if debug {
210209
println("Addr")
211210
}
212-
return n.netstack.LnetoStack().Addr(), nil
211+
addr4 := n.netstack.LnetoStack().Addr4()
212+
addr, ok := netip.AddrFromSlice(addr4[:])
213+
if !ok {
214+
return netip.Addr{}, errInvalidIPAddress
215+
}
216+
return addr, nil
213217
}
214218

215219
// Berkely Sockets-like interface, Go-ified. See man page for socket(2), etc.

0 commit comments

Comments
 (0)