1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package option
- import (
- "net/netip"
- "strconv"
- E "github.com/sagernet/sing/common/exceptions"
- F "github.com/sagernet/sing/common/format"
- "github.com/sagernet/sing/common/json"
- "github.com/sagernet/sing/common/json/badoption"
- )
- type TunInboundOptions struct {
- InterfaceName string `json:"interface_name,omitempty"`
- MTU uint32 `json:"mtu,omitempty"`
- Address badoption.Listable[netip.Prefix] `json:"address,omitempty"`
- AutoRoute bool `json:"auto_route,omitempty"`
- IPRoute2TableIndex int `json:"iproute2_table_index,omitempty"`
- IPRoute2RuleIndex int `json:"iproute2_rule_index,omitempty"`
- AutoRedirect bool `json:"auto_redirect,omitempty"`
- AutoRedirectInputMark FwMark `json:"auto_redirect_input_mark,omitempty"`
- AutoRedirectOutputMark FwMark `json:"auto_redirect_output_mark,omitempty"`
- ExcludeMPTCP bool `json:"exclude_mptcp,omitempty"`
- LoopbackAddress badoption.Listable[netip.Addr] `json:"loopback_address,omitempty"`
- StrictRoute bool `json:"strict_route,omitempty"`
- RouteAddress badoption.Listable[netip.Prefix] `json:"route_address,omitempty"`
- RouteAddressSet badoption.Listable[string] `json:"route_address_set,omitempty"`
- RouteExcludeAddress badoption.Listable[netip.Prefix] `json:"route_exclude_address,omitempty"`
- RouteExcludeAddressSet badoption.Listable[string] `json:"route_exclude_address_set,omitempty"`
- IncludeInterface badoption.Listable[string] `json:"include_interface,omitempty"`
- ExcludeInterface badoption.Listable[string] `json:"exclude_interface,omitempty"`
- IncludeUID badoption.Listable[uint32] `json:"include_uid,omitempty"`
- IncludeUIDRange badoption.Listable[string] `json:"include_uid_range,omitempty"`
- ExcludeUID badoption.Listable[uint32] `json:"exclude_uid,omitempty"`
- ExcludeUIDRange badoption.Listable[string] `json:"exclude_uid_range,omitempty"`
- IncludeAndroidUser badoption.Listable[int] `json:"include_android_user,omitempty"`
- IncludePackage badoption.Listable[string] `json:"include_package,omitempty"`
- ExcludePackage badoption.Listable[string] `json:"exclude_package,omitempty"`
- UDPTimeout UDPTimeoutCompat `json:"udp_timeout,omitempty"`
- Stack string `json:"stack,omitempty"`
- Platform *TunPlatformOptions `json:"platform,omitempty"`
- InboundOptions
- // Deprecated: removed
- GSO bool `json:"gso,omitempty"`
- // Deprecated: merged to Address
- Inet4Address badoption.Listable[netip.Prefix] `json:"inet4_address,omitempty"`
- // Deprecated: merged to Address
- Inet6Address badoption.Listable[netip.Prefix] `json:"inet6_address,omitempty"`
- // Deprecated: merged to RouteAddress
- Inet4RouteAddress badoption.Listable[netip.Prefix] `json:"inet4_route_address,omitempty"`
- // Deprecated: merged to RouteAddress
- Inet6RouteAddress badoption.Listable[netip.Prefix] `json:"inet6_route_address,omitempty"`
- // Deprecated: merged to RouteExcludeAddress
- Inet4RouteExcludeAddress badoption.Listable[netip.Prefix] `json:"inet4_route_exclude_address,omitempty"`
- // Deprecated: merged to RouteExcludeAddress
- Inet6RouteExcludeAddress badoption.Listable[netip.Prefix] `json:"inet6_route_exclude_address,omitempty"`
- // Deprecated: removed
- EndpointIndependentNat bool `json:"endpoint_independent_nat,omitempty"`
- }
- type FwMark uint32
- func (f FwMark) MarshalJSON() ([]byte, error) {
- return json.Marshal(F.ToString("0x", strconv.FormatUint(uint64(f), 16)))
- }
- func (f *FwMark) UnmarshalJSON(bytes []byte) error {
- var stringValue string
- err := json.Unmarshal(bytes, &stringValue)
- if err != nil {
- if rawErr := json.Unmarshal(bytes, (*uint32)(f)); rawErr == nil {
- return nil
- }
- return E.Cause(err, "invalid number or string mark")
- }
- intValue, err := strconv.ParseUint(stringValue, 0, 32)
- if err != nil {
- return err
- }
- *f = FwMark(intValue)
- return nil
- }
|