Răsfoiți Sursa

small simplification

JackDoan 1 săptămână în urmă
părinte
comite
43d26d4fe5
5 a modificat fișierele cu 4 adăugiri și 14 ștergeri
  1. 1 1
      interface.go
  2. 0 4
      outside.go
  3. 0 3
      overlay/vhostnet/device.go
  4. 1 4
      packet/packet.go
  5. 2 2
      udp/udp_linux.go

+ 1 - 1
interface.go

@@ -352,7 +352,7 @@ func (f *Interface) listenIn(reader overlay.TunDev, queueNum int) {
 
 		now := time.Now()
 		for i, pkt := range packets[:n] {
-			outPackets[i].OutLen = -1
+			outPackets[i].ReadyToSend = false
 			f.consumeInsidePacket(pkt.Payload, fwPacket, nb, outPackets[i], queueNum, conntrackCache.Get(f.l), now)
 			reader.RecycleRxSeg(pkt, i == (n-1), queueNum) //todo handle err?
 			pkt.Reset()

+ 0 - 4
outside.go

@@ -181,9 +181,7 @@ func (f *Interface) readOutsidePacketsMany(packets []*packet.Packet, out []*pack
 			}
 		}
 
-		//todo per-segment!
 		for segment := range pkt.Segments() {
-
 			err := h.Parse(segment)
 			if err != nil {
 				// Hole punch packets are 0 or 1 byte big, so lets ignore printing those errors
@@ -208,7 +206,6 @@ func (f *Interface) readOutsidePacketsMany(packets []*packet.Packet, out []*pack
 
 			switch h.Type {
 			case header.Message:
-				// TODO handleEncrypted sends directly to addr on error. Handle this in the tunneling case.
 				if !f.handleEncrypted(ci, via, h) {
 					return
 				}
@@ -676,7 +673,6 @@ func (f *Interface) decryptToTunDelayWrite(hostinfo *HostInfo, messageCounter ui
 	}
 
 	f.connectionManager.In(hostinfo)
-	pkt.OutLen += len(inSegment)
 	out.Segments[seg] = out.Segments[seg][:len(out.SegmentHeaders[seg])+len(out.SegmentPayloads[seg])]
 	return true
 }

+ 0 - 3
overlay/vhostnet/device.go

@@ -271,9 +271,6 @@ func (dev *Device) TransmitPackets(pkts []*packet.OutPacket) error {
 	return nil
 }
 
-// TODO: Make above methods cancelable by taking a context.Context argument?
-// TODO: Implement zero-copy variants to transmit and receive packets?
-
 // processChains processes as many chains as needed to create one packet. The number of processed chains is returned.
 func (dev *Device) processChains(pkt *packet.VirtIOPacket, chains []virtqueue.UsedElement) (int, error) {
 	//read first element to see how many descriptors we need:

+ 1 - 4
packet/packet.go

@@ -19,9 +19,7 @@ type Packet struct {
 	Name    []byte
 	SegSize int
 
-	//todo should this hold out as well?
-	OutLen int
-
+	ReadyToSend  bool
 	wasSegmented bool
 	isV4         bool
 }
@@ -71,7 +69,6 @@ func (p *Packet) updateCtrl(ctrlLen int) {
 
 // Update sets a Packet into "just received, not processed" state
 func (p *Packet) Update(ctrlLen int) {
-	p.OutLen = -1
 	p.updateCtrl(ctrlLen)
 }
 

+ 2 - 2
udp/udp_linux.go

@@ -220,8 +220,8 @@ func (u *StdConn) Prep(pkt *packet.Packet, addr netip.AddrPort) error {
 	if err != nil {
 		return err
 	}
+	pkt.ReadyToSend = true
 	pkt.Name = pkt.Name[:nl]
-	pkt.OutLen = len(pkt.Payload)
 	return nil
 }
 
@@ -239,7 +239,7 @@ func (u *StdConn) WriteBatch(pkts []*packet.Packet) (int, error) {
 	//segmenting := false
 	idx := 0
 	for _, pkt := range pkts {
-		if len(pkt.Payload) == 0 || pkt.OutLen == -1 {
+		if !pkt.ReadyToSend || len(pkt.Payload) == 0 {
 			sent++
 			continue
 		}