mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-04 23:45:34 +00:00
wgengine/router: ignore Linux ip route error adding dup route
Updates #3060
Updates #391
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
(cherry picked from commit 14f9c75293
)
This commit is contained in:
parent
66ad35c04e
commit
9df2516f96
@ -533,7 +533,21 @@ func (r *linuxRouter) addRouteDef(routeDef []string, cidr netaddr.IPPrefix) erro
|
|||||||
if r.ipRuleAvailable {
|
if r.ipRuleAvailable {
|
||||||
args = append(args, "table", tailscaleRouteTable)
|
args = append(args, "table", tailscaleRouteTable)
|
||||||
}
|
}
|
||||||
return r.cmd.run(args...)
|
err := r.cmd.run(args...)
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(bradfitz): remove this ugly hack to detect failure to
|
||||||
|
// add a route that already exists (as happens in when we're
|
||||||
|
// racing to add kernel-maintained routes when enabling exit
|
||||||
|
// nodes w/o Local LAN access, Issue 3060) and use netlink
|
||||||
|
// directly instead (Issue 391).
|
||||||
|
if errCode(err) == 2 && strings.Contains(err.Error(), "RTNETLINK answers: File exists") {
|
||||||
|
r.logf("ignoring route add of %v; already exists", cidr)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// delRoute removes the route for cidr pointing to the tunnel
|
// delRoute removes the route for cidr pointing to the tunnel
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -68,6 +69,7 @@ func (o osCommandRunner) output(args ...string) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cmd := exec.Command(args[0], args[1:]...)
|
cmd := exec.Command(args[0], args[1:]...)
|
||||||
|
cmd.Env = append(os.Environ(), "LC_ALL=C")
|
||||||
if o.ambientCapNetAdmin {
|
if o.ambientCapNetAdmin {
|
||||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||||
AmbientCaps: []uintptr{unix.CAP_NET_ADMIN},
|
AmbientCaps: []uintptr{unix.CAP_NET_ADMIN},
|
||||||
|
Loading…
Reference in New Issue
Block a user