package config import ( "flag" "fmt" "net" ) type Config struct { HTTPHost string HTTPPort int UDPHost string UDPPort int MaintenanceIP string MaintenanceCIDR string AdminPassword string ServerVersion string DeviceIDFallback string } func Load(args []string) Config { cfg := Config{ HTTPHost: "0.0.0.0", HTTPPort: 48888, UDPHost: "0.0.0.0", UDPPort: 50000, MaintenanceIP: "169.254.100.2", MaintenanceCIDR: "169.254.100.2/16", AdminPassword: "Dt123$", ServerVersion: "0.1.0", DeviceIDFallback: "networktool-device", } fs := flag.NewFlagSet("networktool-server", flag.ContinueOnError) fs.StringVar(&cfg.MaintenanceIP, "ip", cfg.MaintenanceIP, "maintenance IPv4 address") fs.IntVar(&cfg.HTTPPort, "port", cfg.HTTPPort, "HTTP listen port") fs.StringVar(&cfg.AdminPassword, "password", cfg.AdminPassword, "admin password") _ = fs.Parse(args) if parsed := net.ParseIP(cfg.MaintenanceIP); parsed == nil || parsed.To4() == nil { panic(fmt.Sprintf("invalid maintenance ip: %s", cfg.MaintenanceIP)) } cfg.MaintenanceCIDR = fmt.Sprintf("%s/16", cfg.MaintenanceIP) return cfg }