types.go 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. TableID int `json:"table_id"` // Kernel routing table ID (e.g. 1101)
  40. MarkHex string `json:"mark_hex"` // Fwmark hex string (e.g. "0x5d01")
  41. MarkInt uint32 `json:"mark_int"` // Fwmark integer
  42. }
  43. // SDWANGroup represents a unified SD-WAN virtual interface / zone.
  44. type SDWANGroup struct {
  45. ID string `json:"id"`
  46. Name string `json:"name"` // Group name, e.g. "sdwan0", "sdwan-internet"
  47. Mode SDWANMode `json:"mode"` // "weighted", "pcc", "lowest-latency", "lowest-loss", "failover"
  48. HashFields string `json:"hash_fields"` // For PCC: "both-addresses-and-ports", "src-address", "both-addresses"
  49. AutoNAT bool `json:"auto_nat"` // Automatically masquerade egress traffic from member interfaces
  50. ProbeInterval int `json:"probe_interval"` // Health check frequency in seconds (default: 3)
  51. Comment string `json:"comment,omitempty"`
  52. Disabled bool `json:"disabled"`
  53. Running bool `json:"running"`
  54. Members []*SDWANMember `json:"members"`
  55. LastError string `json:"last_error,omitempty"`
  56. }
  57. // TelemetrySummary represents summary stats for all SD-WAN groups.
  58. type TelemetrySummary struct {
  59. TotalGroups int `json:"total_groups"`
  60. ActiveGroups int `json:"active_groups"`
  61. TotalMembers int `json:"total_members"`
  62. HealthyMembers int `json:"healthy_members"`
  63. DegradedMembers int `json:"degraded_members"`
  64. DownMembers int `json:"down_members"`
  65. }