rule_ipversion.go 628 B

123456789101112131415161718192021222324252627282930
  1. package route
  2. import (
  3. "github.com/sagernet/sing-box/adapter"
  4. )
  5. var _ RuleItem = (*IPVersionItem)(nil)
  6. type IPVersionItem struct {
  7. isIPv6 bool
  8. }
  9. func NewIPVersionItem(isIPv6 bool) *IPVersionItem {
  10. return &IPVersionItem{isIPv6}
  11. }
  12. func (r *IPVersionItem) Match(metadata *adapter.InboundContext) bool {
  13. return metadata.IPVersion != 0 && metadata.IPVersion == 6 == r.isIPv6 ||
  14. metadata.Destination.IsIP() && metadata.Destination.IsIPv6() == r.isIPv6
  15. }
  16. func (r *IPVersionItem) String() string {
  17. var versionStr string
  18. if r.isIPv6 {
  19. versionStr = "6"
  20. } else {
  21. versionStr = "4"
  22. }
  23. return "ip_version=" + versionStr
  24. }