mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-02 06:22:24 +00:00
tstest/natlab/vnet: use pcapng
Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
parent
f469020776
commit
88f60bd16e
@ -196,11 +196,14 @@ func (s *Server) initFromConfig(c *Config) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
nw, err := pcapgo.NewNgWriter(pcf, layers.LinkTypeEthernet)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pw := &pcapWriter{
|
||||
f: pcf,
|
||||
w: pcapgo.NewWriter(pcf),
|
||||
w: nw,
|
||||
}
|
||||
pw.w.WriteFileHeader(65536, layers.LinkTypeEthernet)
|
||||
s.pcapWriter = pw
|
||||
}
|
||||
for _, conf := range c.networks {
|
||||
@ -235,6 +238,12 @@ func (s *Server) initFromConfig(c *Config) error {
|
||||
id: i + 1,
|
||||
net: netOfConf[conf.Network()],
|
||||
}
|
||||
if s.pcapWriter != nil {
|
||||
s.pcapWriter.w.AddInterface(pcapgo.NgInterface{
|
||||
Name: fmt.Sprintf("node%d", n.id),
|
||||
LinkType: layers.LinkTypeEthernet,
|
||||
})
|
||||
}
|
||||
conf.n = n
|
||||
if _, ok := s.nodeByMAC[n.mac]; ok {
|
||||
return fmt.Errorf("two nodes have the same MAC %v", n.mac)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package vnet
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
@ -12,15 +13,24 @@ type pcapWriter struct {
|
||||
f *os.File
|
||||
|
||||
mu sync.Mutex
|
||||
w *pcapgo.Writer
|
||||
w *pcapgo.NgWriter
|
||||
}
|
||||
|
||||
func (p *pcapWriter) WritePacket(ci gopacket.CaptureInfo, data []byte) error {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
if p.w == nil {
|
||||
return io.ErrClosedPipe
|
||||
}
|
||||
return p.w.WritePacket(ci, data)
|
||||
}
|
||||
|
||||
func (p *pcapWriter) Close() error {
|
||||
p.mu.Lock()
|
||||
defer p.mu.Unlock()
|
||||
if p.w != nil {
|
||||
p.w.Flush()
|
||||
p.w = nil
|
||||
}
|
||||
return p.f.Close()
|
||||
}
|
||||
|
@ -568,7 +568,7 @@ func New(c *Config) (*Server, error) {
|
||||
}
|
||||
|
||||
func (s *Server) Close() {
|
||||
if !s.shuttingDown.Swap(true) {
|
||||
if shutdown := s.shuttingDown.Swap(true); !shutdown {
|
||||
s.shutdownCancel()
|
||||
if s.pcapWriter != nil {
|
||||
s.pcapWriter.Close()
|
||||
|
Loading…
x
Reference in New Issue
Block a user