MCPcopy Create free account
hub / github.com/encodeous/nylon / CreateTUNFromFile

Function CreateTUNFromFile

polyamide/tun/tun_linux.go:585–633  ·  view source on GitHub ↗

CreateTUNFromFile creates a Device from an os.File with the provided MTU.

(file *os.File, mtu int)

Source from the content-addressed store, hash-verified

583
584// CreateTUNFromFile creates a Device from an os.File with the provided MTU.
585func CreateTUNFromFile(file *os.File, mtu int) (Device, error) {
586 tun := &NativeTun{
587 tunFile: file,
588 events: make(chan Event, 5),
589 errors: make(chan error, 5),
590 statusListenersShutdown: make(chan struct{}),
591 tcpGROTable: newTCPGROTable(),
592 udpGROTable: newUDPGROTable(),
593 toWrite: make([]int, 0, conn.IdealBatchSize),
594 }
595
596 name, err := tun.Name()
597 if err != nil {
598 return nil, err
599 }
600
601 err = tun.initFromFlags(name)
602 if err != nil {
603 return nil, err
604 }
605
606 // start event listener
607 tun.index, err = getIFIndex(name)
608 if err != nil {
609 return nil, err
610 }
611
612 tun.netlinkSock, err = createNetlinkSocket()
613 if err != nil {
614 return nil, err
615 }
616 tun.netlinkCancel, err = rwcancel.NewRWCancel(tun.netlinkSock)
617 if err != nil {
618 unix.Close(tun.netlinkSock)
619 return nil, err
620 }
621
622 tun.hackListenerClosed.Lock()
623 go tun.routineNetlinkListener()
624 go tun.routineHackListener() // cross namespace
625
626 err = tun.setMTU(mtu)
627 if err != nil {
628 unix.Close(tun.netlinkSock)
629 return nil, err
630 }
631
632 return tun, nil
633}
634
635// CreateUnmonitoredTUNFromFD creates a Device from the provided file
636// descriptor.

Callers 2

mainFunction · 0.92
CreateTUNFunction · 0.70

Calls 11

NameMethod · 0.95
initFromFlagsMethod · 0.95
routineHackListenerMethod · 0.95
setMTUMethod · 0.95
NewRWCancelFunction · 0.92
newTCPGROTableFunction · 0.85
newUDPGROTableFunction · 0.85
getIFIndexFunction · 0.85
createNetlinkSocketFunction · 0.85
CloseMethod · 0.65

Tested by

no test coverage detected