mirror of
https://github.com/soypat/lneto.git
synced 2026-07-26 10:38:47 +00:00
upload changes done on plane
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
package lneto
|
package lneto
|
||||||
|
|
||||||
//go:generate stringer -type=IPProto -linecomment -output stringers.go .
|
//go:generate stringer -type=IPProto,errGeneric -linecomment -output stringers.go .
|
||||||
|
|
||||||
// IPProto represents the IP protocol number.
|
// IPProto represents the IP protocol number.
|
||||||
type IPProto uint8
|
type IPProto uint8
|
||||||
|
|||||||
+14
-4
@@ -8,6 +8,7 @@ func _() {
|
|||||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
// Re-run the stringer command to generate them again.
|
// Re-run the stringer command to generate them again.
|
||||||
var x [1]struct{}
|
var x [1]struct{}
|
||||||
|
_ = x[OptEnd-255]
|
||||||
_ = x[OptWordAligned-0]
|
_ = x[OptWordAligned-0]
|
||||||
_ = x[OptSubnetMask-1]
|
_ = x[OptSubnetMask-1]
|
||||||
_ = x[OptTimeOffset-2]
|
_ = x[OptTimeOffset-2]
|
||||||
@@ -72,15 +73,24 @@ func _() {
|
|||||||
_ = x[OptClientIdentifier1-61]
|
_ = x[OptClientIdentifier1-61]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _OptNum_name = "word-alignedsubnet maskTime offset in seconds from UTCN/4 router addressesN/4 time server addressesN/4 IEN-116 server addressesN/4 DNS server addressesN/4 logging server addressesN/4 quote server addressesN/4 printer server addressesN/4 impress server addressesN/4 RLP server addressesHostname stringSize of boot file in 512 byte chunksClient to dump and name of file to dump toThe DNS domain name of the clientSwap server addressesPath name for root diskPatch name for more BOOTP infoEnable or disable IP forwardingEnable or disable source routingRouting policy filtersMaximum datagram reassembly sizeDefault IP time-to-livePath MTU aging timeoutPath MTU plateau tableInterface MTU sizeAll subnets are localBroadcast addressPerform mask discoveryProvide mask to othersPerform router discoveryRouter solicitation addressStatic routing tableTrailer encapsulationARP cache timeoutEthernet encapsulationDefault TCP time to liveTCP keepalive intervalTCP keepalive garbageNIS domain nameNIS server addressesNTP servers addressesVendor specific informationNetBIOS name serverNetBIOS datagram distributionNetBIOS node typeNetBIOS scopeX window font serverX window display managerRequested IP addressIP address lease timeOverload “sname” or “file”DHCP message type.DHCP server identificationParameter request listDHCP error messageDHCP maximum message sizeDHCP renewal (T1) timeDHCP rebinding (T2) timeClient identifierClient identifier(1)"
|
const (
|
||||||
|
_OptNum_name_0 = "word-alignedsubnet maskTime offset in seconds from UTCN/4 router addressesN/4 time server addressesN/4 IEN-116 server addressesN/4 DNS server addressesN/4 logging server addressesN/4 quote server addressesN/4 printer server addressesN/4 impress server addressesN/4 RLP server addressesHostname stringSize of boot file in 512 byte chunksClient to dump and name of file to dump toThe DNS domain name of the clientSwap server addressesPath name for root diskPatch name for more BOOTP infoEnable or disable IP forwardingEnable or disable source routingRouting policy filtersMaximum datagram reassembly sizeDefault IP time-to-livePath MTU aging timeoutPath MTU plateau tableInterface MTU sizeAll subnets are localBroadcast addressPerform mask discoveryProvide mask to othersPerform router discoveryRouter solicitation addressStatic routing tableTrailer encapsulationARP cache timeoutEthernet encapsulationDefault TCP time to liveTCP keepalive intervalTCP keepalive garbageNIS domain nameNIS server addressesNTP servers addressesVendor specific informationNetBIOS name serverNetBIOS datagram distributionNetBIOS node typeNetBIOS scopeX window font serverX window display managerRequested IP addressIP address lease timeOverload “sname” or “file”DHCP message type.DHCP server identificationParameter request listDHCP error messageDHCP maximum message sizeDHCP renewal (T1) timeDHCP rebinding (T2) timeClient identifierClient identifier(1)"
|
||||||
|
_OptNum_name_1 = "end options"
|
||||||
|
)
|
||||||
|
|
||||||
var _OptNum_index = [...]uint16{0, 12, 23, 54, 74, 99, 127, 151, 179, 205, 233, 261, 285, 300, 336, 378, 411, 432, 455, 485, 516, 548, 570, 602, 625, 647, 669, 687, 708, 725, 747, 769, 793, 820, 840, 861, 878, 900, 924, 946, 967, 982, 1002, 1023, 1050, 1069, 1098, 1115, 1128, 1148, 1172, 1192, 1213, 1247, 1265, 1291, 1313, 1331, 1356, 1378, 1402, 1419, 1439}
|
var (
|
||||||
|
_OptNum_index_0 = [...]uint16{0, 12, 23, 54, 74, 99, 127, 151, 179, 205, 233, 261, 285, 300, 336, 378, 411, 432, 455, 485, 516, 548, 570, 602, 625, 647, 669, 687, 708, 725, 747, 769, 793, 820, 840, 861, 878, 900, 924, 946, 967, 982, 1002, 1023, 1050, 1069, 1098, 1115, 1128, 1148, 1172, 1192, 1213, 1247, 1265, 1291, 1313, 1331, 1356, 1378, 1402, 1419, 1439}
|
||||||
|
)
|
||||||
|
|
||||||
func (i OptNum) String() string {
|
func (i OptNum) String() string {
|
||||||
if i >= OptNum(len(_OptNum_index)-1) {
|
switch {
|
||||||
|
case i <= 61:
|
||||||
|
return _OptNum_name_0[_OptNum_index_0[i]:_OptNum_index_0[i+1]]
|
||||||
|
case i == 255:
|
||||||
|
return _OptNum_name_1
|
||||||
|
default:
|
||||||
return "OptNum(" + strconv.FormatInt(int64(i), 10) + ")"
|
return "OptNum(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
}
|
}
|
||||||
return _OptNum_name[_OptNum_index[i]:_OptNum_index[i+1]]
|
|
||||||
}
|
}
|
||||||
func _() {
|
func _() {
|
||||||
// An "invalid array index" compiler error signifies that the constant values have changed.
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ const (
|
|||||||
TypeSRV Type = 33 // SRV
|
TypeSRV Type = 33 // SRV
|
||||||
TypeOPT Type = 41 // OPT
|
TypeOPT Type = 41 // OPT
|
||||||
|
|
||||||
|
TypeHTTPS Type = 65 // HTTPS SSE
|
||||||
// Question.Type
|
// Question.Type
|
||||||
TypeWKS Type = 11 // WKS
|
TypeWKS Type = 11 // WKS
|
||||||
TypeHINFO Type = 13 // HINFO
|
TypeHINFO Type = 13 // HINFO
|
||||||
|
|||||||
+8
-4
@@ -18,6 +18,7 @@ func _() {
|
|||||||
_ = x[TypeAAAA-28]
|
_ = x[TypeAAAA-28]
|
||||||
_ = x[TypeSRV-33]
|
_ = x[TypeSRV-33]
|
||||||
_ = x[TypeOPT-41]
|
_ = x[TypeOPT-41]
|
||||||
|
_ = x[TypeHTTPS-65]
|
||||||
_ = x[TypeWKS-11]
|
_ = x[TypeWKS-11]
|
||||||
_ = x[TypeHINFO-13]
|
_ = x[TypeHINFO-13]
|
||||||
_ = x[TypeMINFO-14]
|
_ = x[TypeMINFO-14]
|
||||||
@@ -32,8 +33,9 @@ const (
|
|||||||
_Type_name_3 = "AAAA"
|
_Type_name_3 = "AAAA"
|
||||||
_Type_name_4 = "SRV"
|
_Type_name_4 = "SRV"
|
||||||
_Type_name_5 = "OPT"
|
_Type_name_5 = "OPT"
|
||||||
_Type_name_6 = "AXFR"
|
_Type_name_6 = "HTTPS SSE"
|
||||||
_Type_name_7 = "ALL"
|
_Type_name_7 = "AXFR"
|
||||||
|
_Type_name_8 = "ALL"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -59,10 +61,12 @@ func (i Type) String() string {
|
|||||||
return _Type_name_4
|
return _Type_name_4
|
||||||
case i == 41:
|
case i == 41:
|
||||||
return _Type_name_5
|
return _Type_name_5
|
||||||
case i == 252:
|
case i == 65:
|
||||||
return _Type_name_6
|
return _Type_name_6
|
||||||
case i == 255:
|
case i == 252:
|
||||||
return _Type_name_7
|
return _Type_name_7
|
||||||
|
case i == 255:
|
||||||
|
return _Type_name_8
|
||||||
default:
|
default:
|
||||||
return "Type(" + strconv.FormatInt(int64(i), 10) + ")"
|
return "Type(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package lneto
|
|||||||
// Message string
|
// Message string
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// var genericErrPacketDrop = &ErrorPacketDrop{Message: "lneto: packet dropped"}
|
// var genericErrPacketDrop = &ErrorPacketDrop{Message: ErrPacketDrop.Error()}
|
||||||
|
|
||||||
// // ErrGenericPacketDrop returns the generic packet drop error. It performs no allocations.
|
// // ErrGenericPacketDrop returns the generic packet drop error. It performs no allocations.
|
||||||
// func ErrGenericPacketDrop() error {
|
// func ErrGenericPacketDrop() error {
|
||||||
@@ -14,3 +14,15 @@ package lneto
|
|||||||
// func (err *ErrorPacketDrop) Error() string {
|
// func (err *ErrorPacketDrop) Error() string {
|
||||||
// return err.Message
|
// return err.Message
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
type errGeneric uint8
|
||||||
|
|
||||||
|
// Generic errors common to internet functioning.
|
||||||
|
const (
|
||||||
|
_ errGeneric = iota // non-initialized err
|
||||||
|
ErrPacketDrop // packet dropped
|
||||||
|
)
|
||||||
|
|
||||||
|
func (err errGeneric) Error() string {
|
||||||
|
return err.String()
|
||||||
|
}
|
||||||
|
|||||||
+10
-2
@@ -1,9 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"log/slog"
|
||||||
"net"
|
"net"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"os"
|
"os"
|
||||||
@@ -11,6 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/soypat/lneto"
|
||||||
"github.com/soypat/lneto/dns"
|
"github.com/soypat/lneto/dns"
|
||||||
"github.com/soypat/lneto/http/httpraw"
|
"github.com/soypat/lneto/http/httpraw"
|
||||||
"github.com/soypat/lneto/internal"
|
"github.com/soypat/lneto/internal"
|
||||||
@@ -105,13 +108,14 @@ func run() (err error) {
|
|||||||
lastAction := time.Now()
|
lastAction := time.Now()
|
||||||
buf := make([]byte, mtu)
|
buf := make([]byte, mtu)
|
||||||
var cap pcap.PacketBreakdown
|
var cap pcap.PacketBreakdown
|
||||||
|
var frames []pcap.Frame
|
||||||
for {
|
for {
|
||||||
clear(buf)
|
clear(buf)
|
||||||
nwrite, err := stack.Encapsulate(buf[:], 0)
|
nwrite, err := stack.Encapsulate(buf[:], 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("ERR:ENCAPSULATE", err)
|
fmt.Println("ERR:ENCAPSULATE", err)
|
||||||
} else if nwrite > 0 {
|
} else if nwrite > 0 {
|
||||||
frames, err := cap.CaptureEthernet(nil, buf[:nwrite], 0)
|
frames, err = cap.CaptureEthernet(frames[:0], buf[:nwrite], 0)
|
||||||
if len(frames) > 0 {
|
if len(frames) > 0 {
|
||||||
fmt.Println("OUT", frames)
|
fmt.Println("OUT", frames)
|
||||||
}
|
}
|
||||||
@@ -130,7 +134,10 @@ func run() (err error) {
|
|||||||
} else if nread > 0 {
|
} else if nread > 0 {
|
||||||
err = stack.Demux(buf[:nread], 0)
|
err = stack.Demux(buf[:nread], 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("groutine demux:", err)
|
if !errors.Is(err, lneto.ErrPacketDrop) {
|
||||||
|
frames, err = cap.CaptureEthernet(frames[:0], buf[:nread], 0)
|
||||||
|
log.Println("groutine demux:", err, frames)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,6 +164,7 @@ func run() (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("assimilating DHCP results: %w", err)
|
return fmt.Errorf("assimilating DHCP results: %w", err)
|
||||||
}
|
}
|
||||||
|
slog.Info("dhcp-complete", slog.String("assignedIP", results.AssignedAddr.String()), slog.String("routerIP", results.Router.String()), slog.Any("DNS", results.DNSServers), slog.Any("subnet", results.Subnet.String()))
|
||||||
const (
|
const (
|
||||||
arpTimeout = 2 * time.Second
|
arpTimeout = 2 * time.Second
|
||||||
arpRetries = 2
|
arpRetries = 2
|
||||||
|
|||||||
@@ -21,11 +21,12 @@ func _() {
|
|||||||
_ = x[FieldClassOptions-10]
|
_ = x[FieldClassOptions-10]
|
||||||
_ = x[FieldClassPayload-11]
|
_ = x[FieldClassPayload-11]
|
||||||
_ = x[FieldClassText-12]
|
_ = x[FieldClassText-12]
|
||||||
|
_ = x[FieldClassAddress-13]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _FieldClass_name = "undefinedsourcedestinationprotocolversiontypefield sizeflagsidentificationchecksumoptionspayloadtext"
|
const _FieldClass_name = "undefinedsourcedestinationprotocolversiontypefield sizeflagsidentificationchecksumoptionspayloadtextaddress"
|
||||||
|
|
||||||
var _FieldClass_index = [...]uint8{0, 9, 15, 26, 34, 41, 45, 55, 60, 74, 82, 89, 96, 100}
|
var _FieldClass_index = [...]uint8{0, 9, 15, 26, 34, 41, 45, 55, 60, 74, 82, 89, 96, 100, 107}
|
||||||
|
|
||||||
func (i FieldClass) String() string {
|
func (i FieldClass) String() string {
|
||||||
if i >= FieldClass(len(_FieldClass_index)-1) {
|
if i >= FieldClass(len(_FieldClass_index)-1) {
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ func (ls *StackEthernet) Demux(carrierData []byte, frameOffset int) (err error)
|
|||||||
}
|
}
|
||||||
DROP:
|
DROP:
|
||||||
ls.info("LinkStack:drop-packet", slog.String("dsthw", net.HardwareAddr(dstaddr[:]).String()), slog.String("ethertype", efrm.EtherTypeOrSize().String()))
|
ls.info("LinkStack:drop-packet", slog.String("dsthw", net.HardwareAddr(dstaddr[:]).String()), slog.String("ethertype", efrm.EtherTypeOrSize().String()))
|
||||||
return errors.New("drop packet")
|
return lneto.ErrPacketDrop
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ls *StackEthernet) Encapsulate(carrierData []byte, frameOffset int) (n int, err error) {
|
func (ls *StackEthernet) Encapsulate(carrierData []byte, frameOffset int) (n int, err error) {
|
||||||
|
|||||||
+19
-1
@@ -1,4 +1,4 @@
|
|||||||
// Code generated by "stringer -type=IPProto -linecomment -output stringers.go ."; DO NOT EDIT.
|
// Code generated by "stringer -type=IPProto,errGeneric -linecomment -output stringers.go ."; DO NOT EDIT.
|
||||||
|
|
||||||
package lneto
|
package lneto
|
||||||
|
|
||||||
@@ -190,3 +190,21 @@ func (i IPProto) String() string {
|
|||||||
return "IPProto(" + strconv.FormatInt(int64(i), 10) + ")"
|
return "IPProto(" + strconv.FormatInt(int64(i), 10) + ")"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func _() {
|
||||||
|
// An "invalid array index" compiler error signifies that the constant values have changed.
|
||||||
|
// Re-run the stringer command to generate them again.
|
||||||
|
var x [1]struct{}
|
||||||
|
_ = x[ErrPacketDrop-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
const _errGeneric_name = "packet dropped"
|
||||||
|
|
||||||
|
var _errGeneric_index = [...]uint8{0, 14}
|
||||||
|
|
||||||
|
func (i errGeneric) String() string {
|
||||||
|
i -= 1
|
||||||
|
if i >= errGeneric(len(_errGeneric_index)-1) {
|
||||||
|
return "errGeneric(" + strconv.FormatInt(int64(i+1), 10) + ")"
|
||||||
|
}
|
||||||
|
return _errGeneric_name[_errGeneric_index[i]:_errGeneric_index[i+1]]
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user