github.com/sagernet/sing-box@v1.2.7/experimental/libbox/platform.go (about)

     1  package libbox
     2  
     3  import (
     4  	"github.com/sagernet/sing-box/option"
     5  )
     6  
     7  type PlatformInterface interface {
     8  	UsePlatformAutoDetectInterfaceControl() bool
     9  	AutoDetectInterfaceControl(fd int32) error
    10  	OpenTun(options TunOptions) (int32, error)
    11  	WriteLog(message string)
    12  	UseProcFS() bool
    13  	FindConnectionOwner(ipProtocol int32, sourceAddress string, sourcePort int32, destinationAddress string, destinationPort int32) (int32, error)
    14  	PackageNameByUid(uid int32) (string, error)
    15  	UIDByPackageName(packageName string) (int32, error)
    16  	UsePlatformDefaultInterfaceMonitor() bool
    17  	StartDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
    18  	CloseDefaultInterfaceMonitor(listener InterfaceUpdateListener) error
    19  	UsePlatformInterfaceGetter() bool
    20  	GetInterfaces() (NetworkInterfaceIterator, error)
    21  }
    22  
    23  type TunInterface interface {
    24  	FileDescriptor() int32
    25  	Close() error
    26  }
    27  
    28  type InterfaceUpdateListener interface {
    29  	UpdateDefaultInterface(interfaceName string, interfaceIndex int32)
    30  }
    31  
    32  type NetworkInterface struct {
    33  	Index     int32
    34  	MTU       int32
    35  	Name      string
    36  	Addresses StringIterator
    37  }
    38  
    39  type NetworkInterfaceIterator interface {
    40  	Next() *NetworkInterface
    41  	HasNext() bool
    42  }
    43  
    44  type OnDemandRule interface {
    45  	Target() int32
    46  	DNSSearchDomainMatch() StringIterator
    47  	DNSServerAddressMatch() StringIterator
    48  	InterfaceTypeMatch() int32
    49  	SSIDMatch() StringIterator
    50  	ProbeURL() string
    51  }
    52  
    53  type OnDemandRuleIterator interface {
    54  	Next() OnDemandRule
    55  	HasNext() bool
    56  }
    57  
    58  type onDemandRule struct {
    59  	option.OnDemandRule
    60  }
    61  
    62  func (r *onDemandRule) Target() int32 {
    63  	if r.OnDemandRule.Action == nil {
    64  		return -1
    65  	}
    66  	return int32(*r.OnDemandRule.Action)
    67  }
    68  
    69  func (r *onDemandRule) DNSSearchDomainMatch() StringIterator {
    70  	return newIterator(r.OnDemandRule.DNSSearchDomainMatch)
    71  }
    72  
    73  func (r *onDemandRule) DNSServerAddressMatch() StringIterator {
    74  	return newIterator(r.OnDemandRule.DNSServerAddressMatch)
    75  }
    76  
    77  func (r *onDemandRule) InterfaceTypeMatch() int32 {
    78  	if r.OnDemandRule.InterfaceTypeMatch == nil {
    79  		return -1
    80  	}
    81  	return int32(*r.OnDemandRule.InterfaceTypeMatch)
    82  }
    83  
    84  func (r *onDemandRule) SSIDMatch() StringIterator {
    85  	return newIterator(r.OnDemandRule.SSIDMatch)
    86  }
    87  
    88  func (r *onDemandRule) ProbeURL() string {
    89  	return r.OnDemandRule.ProbeURL
    90  }