rule.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package netlink
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. // Rule represents a netlink rule.
  7. type Rule struct {
  8. Priority int
  9. Family int
  10. Table int
  11. Mark uint32
  12. Mask *uint32
  13. Tos uint
  14. TunID uint
  15. Goto int
  16. Src *net.IPNet
  17. Dst *net.IPNet
  18. Flow int
  19. IifName string
  20. OifName string
  21. SuppressIfgroup int
  22. SuppressPrefixlen int
  23. Invert bool
  24. Dport *RulePortRange
  25. Sport *RulePortRange
  26. IPProto int
  27. UIDRange *RuleUIDRange
  28. Protocol uint8
  29. Type uint8
  30. }
  31. func (r Rule) String() string {
  32. from := "all"
  33. if r.Src != nil && r.Src.String() != "<nil>" {
  34. from = r.Src.String()
  35. }
  36. to := "all"
  37. if r.Dst != nil && r.Dst.String() != "<nil>" {
  38. to = r.Dst.String()
  39. }
  40. return fmt.Sprintf("ip rule %d: from %s to %s table %d %s",
  41. r.Priority, from, to, r.Table, r.typeString())
  42. }
  43. // NewRule return empty rules.
  44. func NewRule() *Rule {
  45. return &Rule{
  46. SuppressIfgroup: -1,
  47. SuppressPrefixlen: -1,
  48. Priority: -1,
  49. Mark: 0,
  50. Mask: nil,
  51. Goto: -1,
  52. Flow: -1,
  53. }
  54. }
  55. // NewRulePortRange creates rule sport/dport range.
  56. func NewRulePortRange(start, end uint16) *RulePortRange {
  57. return &RulePortRange{Start: start, End: end}
  58. }
  59. // RulePortRange represents rule sport/dport range.
  60. type RulePortRange struct {
  61. Start uint16
  62. End uint16
  63. }
  64. // NewRuleUIDRange creates rule uid range.
  65. func NewRuleUIDRange(start, end uint32) *RuleUIDRange {
  66. return &RuleUIDRange{Start: start, End: end}
  67. }
  68. // RuleUIDRange represents rule uid range.
  69. type RuleUIDRange struct {
  70. Start uint32
  71. End uint32
  72. }