Add ICMPv4 and lneto.StackNode and deprecate internet.StackNode (#65)

* begin adding icmp client

* rely on anon structs

* add tests

* tests passing

* icmp fleshed out

* rework icmp to include ip addr

* rename StackAsync.Demux/Encapsulate to RecvEthernet and SendEthernet

* remove legacy unreachable TCP tests

* remove uses of deprecated internet.StackNode in preference of lneto.StackNode

* documentation

* rename methods to signal no I/O happening
This commit is contained in:
Pat Whittingslow
2026-04-09 09:07:16 -03:00
committed by GitHub
parent 22c7e6c9d8
commit ec44889896
26 changed files with 679 additions and 209 deletions
+10 -10
View File
@@ -46,23 +46,23 @@ func BenchmarkARPExchange(b *testing.B) {
if err != nil {
b.Fatal(err)
}
n, err := c1.Encapsulate(buf[:], -1, 0) // Send Request.
n, err := c1.EgressEthernet(buf[:]) // Send Request.
if err != nil {
b.Fatal(err)
} else if n == 0 {
b.Fatal("expected send of data after first query")
}
err = c2.Demux(buf[:n], 0) // Receive request.
err = c2.IngressEthernet(buf[:n]) // Receive request.
if err != nil {
b.Fatal(err)
}
n, err = c2.Encapsulate(buf[:], -1, 0) // Send response.
n, err = c2.EgressEthernet(buf[:]) // Send response.
if err != nil {
b.Fatal(err)
} else if n == 0 {
b.Fatal("got no response to request")
}
err = c1.Demux(buf[:n], 0) // Receive response.
err = c1.IngressEthernet(buf[:n]) // Receive response.
if err != nil {
b.Fatal(err)
}
@@ -140,31 +140,31 @@ func BenchmarkTCPHandshake(b *testing.B) {
}
// SYN from client.
n, err := client.Encapsulate(pktbuf[:], -1, 0)
n, err := client.EgressEthernet(pktbuf[:])
if err != nil {
b.Fatal(err)
}
err = sv.Demux(pktbuf[:n], 0)
err = sv.IngressEthernet(pktbuf[:n])
if err != nil {
b.Fatal(err)
}
// SYN-ACK from server.
n, err = sv.Encapsulate(pktbuf[:], -1, 0)
n, err = sv.EgressEthernet(pktbuf[:])
if err != nil {
b.Fatal(err)
}
err = client.Demux(pktbuf[:n], 0)
err = client.IngressEthernet(pktbuf[:n])
if err != nil {
b.Fatal(err)
}
// ACK from client.
n, err = client.Encapsulate(pktbuf[:], -1, 0)
n, err = client.EgressEthernet(pktbuf[:])
if err != nil {
b.Fatal(err)
}
err = sv.Demux(pktbuf[:n], 0)
err = sv.IngressEthernet(pktbuf[:n])
if err != nil {
b.Fatal(err)
}