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
@@ -145,7 +145,7 @@ func run() error {
}
for {
nwrite, err := stack.Encapsulate(buf[:], -1, 0)
nwrite, err := stack.EgressEthernet(buf[:])
if err != nil {
log.Println("ERR:ENCAPSULATE", err)
} else if nwrite > 0 {
@@ -159,13 +159,13 @@ func run() error {
log.Fatalf("mismatch written bytes %d!=%d", nwrite, n)
}
if flagMockClient && mockStack.Addr().IsValid() {
mockStack.Demux(buf[:nwrite], 0)
mockStack.IngressEthernet(buf[:nwrite])
}
}
if flagMockClient && mockStack.Addr().IsValid() {
n, _ := mockStack.Encapsulate(buf[:], -1, 0)
n, _ := mockStack.EgressEthernet(buf[:])
if n > 0 {
stack.Demux(buf[:n], 0)
stack.IngressEthernet(buf[:n])
}
}
@@ -181,7 +181,7 @@ func run() error {
if err != nil {
log.Fatal("goroutine read:", err)
} else if nread > 0 {
err = stack.Demux(buf[:nread], 0)
err = stack.IngressEthernet(buf[:nread])
if !errors.Is(err, lneto.ErrPacketDrop) {
if err = logFrames("IN", buf[:nread]); err != nil {
log.Println("ERR:INLOG", err)
+2 -2
View File
@@ -144,7 +144,7 @@ func run() (err error) {
return err
}
for {
nwrite, err := stack.Encapsulate(buf[:], -1, 0)
nwrite, err := stack.EgressEthernet(buf[:])
if err != nil {
log.Println("ERR:ENCAPSULATE", err)
} else if nwrite > 0 {
@@ -172,7 +172,7 @@ func run() (err error) {
if err != nil {
log.Fatal("goroutine read:", err)
} else if nread > 0 {
err = stack.Demux(buf[:nread], 0)
err = stack.IngressEthernet(buf[:nread])
if !errors.Is(err, lneto.ErrPacketDrop) {
err = logFrames("IN", buf[:nread])
if err != nil {
+2 -2
View File
@@ -142,7 +142,7 @@ func stackLoop(ctx context.Context, stack *xnet.StackAsync) {
frameLength, _ := network.MaxFrameLength()
buf := make([]byte, frameLength)
for ctx.Err() == nil {
nwrite, err := stack.Encapsulate(buf[:], -1, 0)
nwrite, err := stack.EgressEthernet(buf[:])
if err != nil {
fmt.Println("encaps err:", err)
} else if nwrite > 0 {
@@ -153,7 +153,7 @@ func stackLoop(ctx context.Context, stack *xnet.StackAsync) {
if err != nil {
fmt.Println("network read err:", err)
} else if nread > 0 {
err = stack.Demux(buf[:nread], 0)
err = stack.IngressEthernet(buf[:nread])
if err != nil && err != lneto.ErrPacketDrop {
fmt.Println("demux err:", err)
} else {
+2 -2
View File
@@ -164,7 +164,7 @@ func run() (err error) {
return err
}
for {
nwrite, err := stack.Encapsulate(buf[:], -1, 0)
nwrite, err := stack.EgressEthernet(buf[:])
if err != nil {
log.Println("ERR:ENCAPSULATE", err)
} else if nwrite > 0 {
@@ -193,7 +193,7 @@ func run() (err error) {
if err != nil {
log.Fatal("groutine read:", err)
} else if nread > 0 {
err = stack.Demux(buf[:nread], 0)
err = stack.IngressEthernet(buf[:nread])
if !errors.Is(err, lneto.ErrPacketDrop) {
// Only skip logging packet in case of dropped packet.
err = logFrames("IN", buf[:nread])