wgengine/router: add a addrFamily type [linux]
In prep for more netlink-ification.
@@ -748,11 +748,29 @@ func (r *linuxRouter) downInterface() error {
return netlink.LinkSetDown(link)
}
-func (r *linuxRouter) iprouteFamilies() []string {
+// addrFamily is an address family: IPv4 or IPv6.
+type addrFamily byte
+
+const (
+ v4 = addrFamily(4)
+ v6 = addrFamily(6)
+)
+
+func (f addrFamily) dashArg() string {
+ switch f {
+ case 4:
+ return "-4"
+ case 6:
+ return "-6"
+ }
+ panic("illegal")
+}
+
+func (r *linuxRouter) addrFamilies() []addrFamily {
if r.v6Available {
- return []string{"-4", "-6"}
+ return []addrFamily{v4, v6}
}
- return []string{"-4"}
+ return []addrFamily{v4}
}
// addIPRules adds the policy routing rule that avoids tailscaled
@@ -883,10 +901,10 @@ func (r *linuxRouter) justAddIPRules() error {
rg := newRunGroup(nil, r.cmd)
- for _, family := range r.iprouteFamilies() {
+ for _, family := range r.addrFamilies() {
for _, r := range ipRules {
args := []string{
- "ip", family,
+ "ip", family.dashArg(),
"rule", "add",
"pref", strconv.Itoa(r.Priority),
}
@@ -931,7 +949,7 @@ func (r *linuxRouter) delIPRules() error {
// unknown rules during deletion.
rg := newRunGroup([]int{2, 254}, r.cmd)
- for _, family := range r.iprouteFamilies() {
+ for _, family := range r.addrFamilies() {
// When deleting rules, we want to be a bit specific (mention which
// table we were routing to) but not *too* specific (fwmarks, etc).
// That leaves us some flexibility to change these values in later
@@ -939,7 +957,7 @@ func (r *linuxRouter) delIPRules() error {
// combination.
for _, r := range ipRules {
args := []string{
- "ip", family,
+ "ip", family.dashArg(),
"rule", "del",
"pref", strconv.Itoa(r.Priority),
}
