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 }