Skip to content

Commit eb88a6a

Browse files
authored
Add --ipvx-route-metric option for ha network (#629)
* Add `--ipvx-route-metric` option for ha network Signed-off-by: David Rapan <david@rapan.cz> * Extend NetworkArg to support Int Signed-off-by: David Rapan <david@rapan.cz> * Check IsInt first.. Signed-off-by: David Rapan <david@rapan.cz> * Rewrite as switch to appease go-critic Signed-off-by: David Rapan <david@rapan.cz> --------- Signed-off-by: David Rapan <david@rapan.cz>
1 parent 14a1dfb commit eb88a6a

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

cmd/network_update.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,15 @@ func init() {
7777
networkUpdateCmd.Flags().String("ipv4-gateway", "", "The IPv4 gateway the interface should use")
7878
networkUpdateCmd.Flags().String("ipv4-method", "", "Method on IPv4: static|auto|disabled")
7979
networkUpdateCmd.Flags().StringArray("ipv4-nameserver", []string{}, "IPv4 address of upstream DNS servers. Use multiple times for multiple servers.")
80+
networkUpdateCmd.Flags().Int("ipv4-route-metric", -1, "IPv4 route metric. Lower value has higher priority.")
8081

8182
networkUpdateCmd.Flags().StringArray("ipv6-address", []string{}, "IPv6 address for the interface in CIDR notation (e.g. 2001:db8:85a3::8a2e:370:7334/64)")
8283
networkUpdateCmd.Flags().String("ipv6-gateway", "", "The IPv6 gateway the interface should use")
8384
networkUpdateCmd.Flags().String("ipv6-method", "", "Method on IPv6: static|auto|disabled")
8485
networkUpdateCmd.Flags().String("ipv6-addr-gen-mode", "", "IPv6 address generation mode: eui64|stable-privacy|default-or-eui64|default")
8586
networkUpdateCmd.Flags().String("ipv6-privacy", "", "IPv6 privacy extensions: disabled|enabled-prefer-public|enabled|default")
8687
networkUpdateCmd.Flags().StringArray("ipv6-nameserver", []string{}, "IPv6 address for upstream DNS servers. Use multiple times for multiple servers.")
88+
networkUpdateCmd.Flags().Int("ipv6-route-metric", -1, "IPv6 route metric. Lower value has higher priority. The kernel accepts zero (0) but coerces it to 1024 (user default).")
8789

8890
networkUpdateCmd.Flags().String("wifi-mode", "", "Wifi mode: infrastructure, adhoc, mesh or ap")
8991
networkUpdateCmd.Flags().String("wifi-ssid", "", "SSID for wifi connection")
@@ -99,13 +101,15 @@ func init() {
99101
networkUpdateCmd.RegisterFlagCompletionFunc("ipv4-gateway", cobra.NoFileCompletions)
100102
networkUpdateCmd.RegisterFlagCompletionFunc("ipv4-method", ipMethodCompletions)
101103
networkUpdateCmd.RegisterFlagCompletionFunc("ipv4-nameservers", cobra.NoFileCompletions)
104+
networkUpdateCmd.RegisterFlagCompletionFunc("ipv4-route-metric", cobra.NoFileCompletions)
102105

103106
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-address", cobra.NoFileCompletions)
104107
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-gateway", cobra.NoFileCompletions)
105108
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-method", ipMethodCompletions)
106109
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-addr-gen-mode", ipAddrGenModeCompletions)
107110
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-privacy", ip6PrivacyCompletions)
108111
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-nameservers", cobra.NoFileCompletions)
112+
networkUpdateCmd.RegisterFlagCompletionFunc("ipv6-route-metric", cobra.NoFileCompletions)
109113

110114
networkUpdateCmd.RegisterFlagCompletionFunc("wifi-mode", func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
111115
return []string{"infrastructure", "adhoc", "mesh", "ap"}, cobra.ShellCompDirectiveNoFileComp
@@ -128,6 +132,7 @@ type NetworkArg struct {
128132
Arg string
129133
ApiKey string
130134
IsArray bool
135+
IsInt bool
131136
}
132137

133138
func parseNetworkArgs(cmd *cobra.Command, args []NetworkArg) map[string]any {
@@ -137,10 +142,14 @@ func parseNetworkArgs(cmd *cobra.Command, args []NetworkArg) map[string]any {
137142
var err error
138143
var changed bool
139144

140-
if arg.IsArray {
145+
switch {
146+
case arg.IsInt:
147+
val, err = cmd.Flags().GetInt(arg.Arg)
148+
changed = true
149+
case arg.IsArray:
141150
val, err = cmd.Flags().GetStringArray(arg.Arg)
142151
changed = len(val.([]string)) > 0
143-
} else {
152+
default:
144153
val, err = cmd.Flags().GetString(arg.Arg)
145154
changed = val.(string) != ""
146155
}
@@ -160,6 +169,7 @@ func helperIpConfig(version string, cmd *cobra.Command, options map[string]any)
160169
{Arg: version + "-privacy", ApiKey: "ip6_privacy"},
161170
{Arg: version + "-address", ApiKey: "address", IsArray: true},
162171
{Arg: version + "-nameserver", ApiKey: "nameservers", IsArray: true},
172+
{Arg: version + "-route-metric", ApiKey: "route_metric", IsInt: true},
163173
}
164174

165175
ipConfig := parseNetworkArgs(cmd, args)

cmd/network_vlan.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,15 @@ func init() {
7474
networkVlanCmd.Flags().String("ipv4-gateway", "", "The IPv4 gateway the interface should use")
7575
networkVlanCmd.Flags().String("ipv4-method", "", "Method on IPv4: static|auto|disabled")
7676
networkVlanCmd.Flags().StringArray("ipv4-nameserver", []string{}, "IPv4 address of upstream DNS servers. Use multiple times for multiple servers.")
77+
networkVlanCmd.Flags().Int("ipv4-route-metric", -1, "IPv4 route metric. Lower value has higher priority.")
7778

7879
networkVlanCmd.Flags().StringArray("ipv6-address", []string{}, "IPv6 address for the interface in CIDR notation (e.g. 2001:db8:85a3::8a2e:370:7334/64)")
7980
networkVlanCmd.Flags().String("ipv6-gateway", "", "The IPv6 gateway the interface should use")
8081
networkVlanCmd.Flags().String("ipv6-method", "", "Method on IPv6: static|auto|disabled")
8182
networkVlanCmd.Flags().String("ipv6-addr-gen-mode", "", "IPv6 address generation mode: eui64|stable-privacy|default-or-eui64|default")
8283
networkVlanCmd.Flags().String("ipv6-privacy", "", "IPv6 privacy extensions: disabled|enabled-prefer-public|enabled|default")
8384
networkVlanCmd.Flags().StringArray("ipv6-nameserver", []string{}, "IPv6 address for upstream DNS servers. Use multiple times for multiple servers.")
85+
networkVlanCmd.Flags().Int("ipv6-route-metric", -1, "IPv6 route metric. Lower value has higher priority. The kernel accepts zero (0) but coerces it to 1024 (user default).")
8486

8587
networkVlanCmd.Flags().String("mdns", "", "mDNS mode: default|off|resolve|announce")
8688
networkVlanCmd.Flags().String("llmnr", "", "LLMNR mode: default|off|resolve|announce")
@@ -89,13 +91,15 @@ func init() {
8991
networkVlanCmd.RegisterFlagCompletionFunc("ipv4-gateway", cobra.NoFileCompletions)
9092
networkVlanCmd.RegisterFlagCompletionFunc("ipv4-method", ipMethodCompletions)
9193
networkVlanCmd.RegisterFlagCompletionFunc("ipv4-nameserver", cobra.NoFileCompletions)
94+
networkVlanCmd.RegisterFlagCompletionFunc("ipv4-route-metric", cobra.NoFileCompletions)
9295

9396
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-address", cobra.NoFileCompletions)
9497
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-gateway", cobra.NoFileCompletions)
9598
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-method", ipMethodCompletions)
9699
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-addr-gen-mode", ipAddrGenModeCompletions)
97100
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-privacy", ip6PrivacyCompletions)
98101
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-nameserver", cobra.NoFileCompletions)
102+
networkVlanCmd.RegisterFlagCompletionFunc("ipv6-route-metric", cobra.NoFileCompletions)
99103

100104
networkVlanCmd.RegisterFlagCompletionFunc("mdns", mdnsCompletions)
101105
networkVlanCmd.RegisterFlagCompletionFunc("llmnr", mdnsCompletions)

0 commit comments

Comments
 (0)