Expand documentation comments for SimpleHandler type and its methods to better explain their purpose, parameters, and behavior.
100 lines
3.1 KiB
Go
100 lines
3.1 KiB
Go
// Package database provides SQLite storage for BGP routing data.
|
|
package database
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// ASN represents an Autonomous System Number with its metadata including
|
|
// handle, description, and first/last seen timestamps.
|
|
type ASN struct {
|
|
ASN int `json:"asn"`
|
|
Handle string `json:"handle"`
|
|
Description string `json:"description"`
|
|
FirstSeen time.Time `json:"first_seen"`
|
|
LastSeen time.Time `json:"last_seen"`
|
|
}
|
|
|
|
// Prefix represents an IP prefix (CIDR block) with its IP version (4 or 6)
|
|
// and first/last seen timestamps.
|
|
type Prefix struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Prefix string `json:"prefix"`
|
|
IPVersion int `json:"ip_version"` // 4 or 6
|
|
FirstSeen time.Time `json:"first_seen"`
|
|
LastSeen time.Time `json:"last_seen"`
|
|
}
|
|
|
|
// Announcement represents a BGP announcement or withdrawal event,
|
|
// containing the prefix, AS path, origin ASN, peer ASN, next hop, and timestamp.
|
|
type Announcement struct {
|
|
ID uuid.UUID `json:"id"`
|
|
PrefixID uuid.UUID `json:"prefix_id"`
|
|
PeerASN int `json:"peer_asn"`
|
|
OriginASN int `json:"origin_asn"`
|
|
Path string `json:"path"` // JSON-encoded AS path
|
|
NextHop string `json:"next_hop"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
IsWithdrawal bool `json:"is_withdrawal"`
|
|
}
|
|
|
|
// ASNPeering represents a peering relationship between two ASNs,
|
|
// stored with the lower ASN as ASA and the higher as ASB.
|
|
type ASNPeering struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ASA int `json:"as_a"`
|
|
ASB int `json:"as_b"`
|
|
FirstSeen time.Time `json:"first_seen"`
|
|
LastSeen time.Time `json:"last_seen"`
|
|
}
|
|
|
|
// LiveRoute represents a route in the live routing table
|
|
type LiveRoute struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Prefix string `json:"prefix"`
|
|
MaskLength int `json:"mask_length"`
|
|
IPVersion int `json:"ip_version"`
|
|
OriginASN int `json:"origin_asn"`
|
|
PeerIP string `json:"peer_ip"`
|
|
ASPath []int `json:"as_path"`
|
|
NextHop string `json:"next_hop"`
|
|
LastUpdated time.Time `json:"last_updated"`
|
|
// IPv4 range fields for fast lookups (nil for IPv6)
|
|
V4IPStart *uint32 `json:"v4_ip_start,omitempty"`
|
|
V4IPEnd *uint32 `json:"v4_ip_end,omitempty"`
|
|
}
|
|
|
|
// PrefixDistribution represents the distribution of prefixes by mask length
|
|
type PrefixDistribution struct {
|
|
MaskLength int `json:"mask_length"`
|
|
Count int `json:"count"`
|
|
}
|
|
|
|
// ASInfo represents AS information for an IP lookup
|
|
type ASInfo struct {
|
|
ASN int `json:"asn"`
|
|
Handle string `json:"handle"`
|
|
Description string `json:"description"`
|
|
Prefix string `json:"prefix"`
|
|
LastUpdated time.Time `json:"last_updated"`
|
|
Age string `json:"age"`
|
|
}
|
|
|
|
// LiveRouteDeletion represents parameters for deleting a live route
|
|
type LiveRouteDeletion struct {
|
|
Prefix string
|
|
OriginASN int
|
|
PeerIP string
|
|
IPVersion int
|
|
}
|
|
|
|
// PeerUpdate represents parameters for updating a peer
|
|
type PeerUpdate struct {
|
|
PeerIP string
|
|
PeerASN int
|
|
MessageType string
|
|
Timestamp time.Time
|
|
}
|