kea-manage/ipv4/reservation/reservation.go

56 lines
1.5 KiB
Go
Raw Normal View History

2024-09-14 04:21:14 +00:00
package reservation
import (
"log/slog"
2024-09-14 04:21:14 +00:00
"git.staur.ca/stobbsm/kea-manage/lib/types"
"git.staur.ca/stobbsm/kea-manage/lib/validators/ipv4"
"git.staur.ca/stobbsm/kea-manage/lib/validators/macaddr"
typeValidator "git.staur.ca/stobbsm/kea-manage/lib/validators/types"
2024-09-14 04:21:14 +00:00
)
type ReservationV4 struct {
IdentifierType types.Identifier
SubnetID int
Identifier string
Ipv4 string
Hostname string
typeName string
2024-09-14 04:21:14 +00:00
}
func ReserveV4MacAddr(identifierType string, identifier string, addr string, hostname string, subnet int) *ReservationV4 {
2024-09-14 04:21:14 +00:00
r := &ReservationV4{
typeName: identifierType,
IdentifierType: types.LookupIdentifier(identifierType),
SubnetID: subnet,
Identifier: identifier,
Ipv4: addr,
Hostname: hostname,
2024-09-14 04:21:14 +00:00
}
return r
}
// Validate implements the Validator interface. Returns true when valid, false when not.
// Will print message to the slog Error channel when an error is found to provide more information
// This does not validate against the database, just validates that the written configuration
// is correct
func (r *ReservationV4) Validate() bool {
if typeValidator.IsValid(r.typeName) {
slog.Error("validate", slog.Any("reservationV4.type", "invalid"))
return false
}
if !ipv4.IsValid(r.Ipv4) {
slog.Error("validate", slog.Any("reservationV4.ipv4", r.Ipv4))
return false
}
if !macaddr.IsValid(r.Identifier) {
slog.Error("validate", slog.Any("reservationV4.identifier", r.Identifier))
return false
}
return true
}