|
|
|
|
@ -105,6 +105,29 @@ var upArgs struct { |
|
|
|
|
authKey string |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// parseIPOrCIDR parses an IP address or a CIDR prefix. If the input
|
|
|
|
|
// is an IP address, it is returned in CIDR form with a /32 mask for
|
|
|
|
|
// IPv4 or a /128 mask for IPv6.
|
|
|
|
|
func parseIPOrCIDR(s string) (wgcfg.CIDR, bool) { |
|
|
|
|
if strings.Contains(s, "/") { |
|
|
|
|
ret, err := wgcfg.ParseCIDR(s) |
|
|
|
|
if err != nil { |
|
|
|
|
return wgcfg.CIDR{}, false |
|
|
|
|
} |
|
|
|
|
return ret, true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ip, ok := wgcfg.ParseIP(s) |
|
|
|
|
if !ok { |
|
|
|
|
return wgcfg.CIDR{}, false |
|
|
|
|
} |
|
|
|
|
if ip.Is4() { |
|
|
|
|
return wgcfg.CIDR{ip, 32}, true |
|
|
|
|
} else { |
|
|
|
|
return wgcfg.CIDR{ip, 128}, true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func runUp(ctx context.Context, args []string) error { |
|
|
|
|
if len(args) > 0 { |
|
|
|
|
log.Fatalf("too many non-flag arguments: %q", args) |
|
|
|
|
@ -114,9 +137,9 @@ func runUp(ctx context.Context, args []string) error { |
|
|
|
|
if upArgs.advertiseRoutes != "" { |
|
|
|
|
advroutes := strings.Split(upArgs.advertiseRoutes, ",") |
|
|
|
|
for _, s := range advroutes { |
|
|
|
|
cidr, err := wgcfg.ParseCIDR(s) |
|
|
|
|
if err != nil { |
|
|
|
|
log.Fatalf("%q is not a valid CIDR prefix: %v", s, err) |
|
|
|
|
cidr, ok := parseIPOrCIDR(s) |
|
|
|
|
if !ok { |
|
|
|
|
log.Fatalf("%q is not a valid IP address or CIDR prefix", s) |
|
|
|
|
} |
|
|
|
|
routes = append(routes, cidr) |
|
|
|
|
} |
|
|
|
|
|