You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docker-net-dhcp/cmd/udhcpc-handler/main.go

49 lines
1021 B
Go

package main
import (
"encoding/json"
"net"
"os"
log "github.com/sirupsen/logrus"
"github.com/devplayer0/docker-net-dhcp/pkg/udhcpc"
)
func main() {
if len(os.Args) != 2 {
log.Fatalf("Usage: %v <event type>", os.Args[0])
return
}
event := udhcpc.Event{
Type: os.Args[1],
}
switch event.Type {
case "bound", "renew":
if v6, ok := os.LookupEnv("ipv6"); ok {
// Clean up the IP (udhcpc6 emits a _lot_ of zeros)
_, netV6, err := net.ParseCIDR(v6 + "/128")
if err != nil {
log.WithError(err).Warn("Failed to parse IPv6 address")
}
event.Data.IP = netV6.String()
} else {
event.Data.IP = os.Getenv("ip") + "/" + os.Getenv("mask")
event.Data.Gateway = os.Getenv("router")
event.Data.Domain = os.Getenv("domain")
}
case "deconfig", "leasefail", "nak":
default:
log.Warnf("Ignoring unknown event type `%v`", event.Type)
return
}
if err := json.NewEncoder(os.Stdout).Encode(event); err != nil {
log.Fatalf("Failed to encode udhcpc event: %w", err)
return
}
}