From 19189d70181b265780f409593fcc93065be82773 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 28 Oct 2021 14:52:27 -0700 Subject: [PATCH] wgengine/router: add a addrFamily type [linux] In prep for more netlink-ification. Change-Id: I7c34a04001988107dc2583597aa4f26ddb887e91 --- wgengine/router/router_linux.go | 34 +++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/wgengine/router/router_linux.go b/wgengine/router/router_linux.go index 7ac31e66f..c30b6fafa 100644 --- a/wgengine/router/router_linux.go +++ b/wgengine/router/router_linux.go @@ -748,11 +748,29 @@ func (r *linuxRouter) downInterface() error { return netlink.LinkSetDown(link) } -func (r *linuxRouter) iprouteFamilies() []string { - if r.v6Available { - return []string{"-4", "-6"} +// 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" } - return []string{"-4"} + panic("illegal") +} + +func (r *linuxRouter) addrFamilies() []addrFamily { + if r.v6Available { + return []addrFamily{v4, v6} + } + 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), }