types.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package sdwan
  2. import "time"
  3. // SDWANMode represents the traffic distribution strategy.
  4. type SDWANMode string
  5. const (
  6. ModeWeighted SDWANMode = "weighted" // Weighted percentage distribution across healthy links
  7. ModePCC SDWANMode = "pcc" // Per-Connection Classifier (flow hash stickiness)
  8. ModeLowestLatency SDWANMode = "lowest-latency" // Quality SLA: select link with minimum RTT
  9. ModeLowestLoss SDWANMode = "lowest-loss" // Quality SLA: select link with minimum packet loss
  10. ModeFailover SDWANMode = "failover" // Active-backup priority failover
  11. )
  12. // MemberStatus represents the live health state of an SD-WAN member.
  13. type MemberStatus string
  14. const (
  15. StatusHealthy MemberStatus = "HEALTHY"
  16. StatusDegraded MemberStatus = "DEGRADED"
  17. StatusDown MemberStatus = "DOWN"
  18. StatusDisabled MemberStatus = "DISABLED"
  19. )
  20. // SDWANMember represents a single WAN link participating in an SD-WAN group.
  21. type SDWANMember struct {
  22. ID string `json:"id"`
  23. Interface string `json:"interface"` // Underlying device name, e.g. "eth0", "eth1", "aerotun0"
  24. Gateway string `json:"gateway"` // Next-hop IPv4 gateway for this link
  25. Weight int `json:"weight"` // Relative weight or percentage ratio (default: 50)
  26. Priority int `json:"priority"` // Priority for failover mode (1 = highest primary)
  27. TargetProbe string `json:"target_probe"` // Health check ping target IP (e.g. "1.1.1.1", "8.8.8.8")
  28. MaxLatency int `json:"max_latency"` // SLA maximum latency threshold in ms (default: 250)
  29. MaxLoss int `json:"max_loss"` // SLA maximum packet loss threshold in % (default: 20)
  30. Comment string `json:"comment,omitempty"`
  31. Disabled bool `json:"disabled"`
  32. // Live Telemetry from SLA Prober
  33. Status MemberStatus `json:"status"` // HEALTHY, DEGRADED, DOWN, DISABLED
  34. LiveLatency float64 `json:"live_latency"` // Latency in ms (RTT)
  35. PacketLoss float64 `json:"packet_loss"` // Packet loss percentage (0.0 - 100.0)
  36. Jitter float64 `json:"jitter"` // Latency jitter in ms
  37. LastChecked time.Time `json:"last_checked"`
  38. ConsecutiveFails int `json:"consecutive_fails"` // Counter for sequential probe failures
  39. ConsecutiveSuccesses int `json:"consecutive_successes"` // Counter for sequential probe successes
  40. TableID int `json:"table_id"` // Kernel routing table ID (e.g. 1101)
  41. MarkHex string `json:"mark_hex"` // Fwmark hex string (e.g. "0x5d01")
  42. MarkInt uint32 `json:"mark_int"` // Fwmark integer
  43. }
  44. // SDWANGroup represents a unified SD-WAN virtual interface / zone.
  45. type SDWANGroup struct {
  46. ID string `json:"id"`
  47. Name string `json:"name"` // Group name, e.g. "sdwan0", "sdwan-internet"
  48. Mode SDWANMode `json:"mode"` // "weighted", "pcc", "lowest-latency", "lowest-loss", "failover"
  49. HashFields string `json:"hash_fields"` // For PCC: "both-addresses-and-ports", "src-address", "both-addresses"
  50. AutoNAT bool `json:"auto_nat"` // Automatically masquerade egress traffic from member interfaces
  51. ProbeInterval int `json:"probe_interval"` // Health check frequency in seconds (default: 3)
  52. Comment string `json:"comment,omitempty"`
  53. Disabled bool `json:"disabled"`
  54. Running bool `json:"running"`
  55. Members []*SDWANMember `json:"members"`
  56. LastError string `json:"last_error,omitempty"`
  57. }
  58. // TelemetrySummary represents summary stats for all SD-WAN groups.
  59. type TelemetrySummary struct {
  60. TotalGroups int `json:"total_groups"`
  61. ActiveGroups int `json:"active_groups"`
  62. TotalMembers int `json:"total_members"`
  63. HealthyMembers int `json:"healthy_members"`
  64. DegradedMembers int `json:"degraded_members"`
  65. DownMembers int `json:"down_members"`
  66. }