Skip to content

Commit 624a4bf

Browse files
committed
goal: don't write to procfs if not necessary
1 parent f294ba3 commit 624a4bf

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

goal/apply_linux.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net"
1010
"os"
1111
"slices"
12+
"strconv"
1213

1314
"github.com/vishvananda/netlink"
1415
"go.uber.org/zap"
@@ -55,15 +56,26 @@ func ApplyMachineDiff(a, b Machine, md MachineDiff, client *wgctrl.Client, handl
5556
}
5657
}
5758
if md.ForwardsIPv4Changed {
58-
var data []byte
59-
if b.ForwardsIPv4 {
60-
data = []byte("1")
61-
} else {
62-
data = []byte("0")
59+
data, err := os.ReadFile("/proc/sys/net/ipv4/ip_forward")
60+
if err != nil {
61+
return fmt.Errorf("reading /proc/sys/net/ipv4/ip_forward: %w", err)
6362
}
64-
err := os.WriteFile("/proc/sys/net/ipv4/ip_forward", data, 0444)
63+
value, err := strconv.Atoi(string(data))
6564
if err != nil {
66-
zap.S().Errorf("writing /proc/sys/net/ipv4/ip_forward: %s", err)
65+
return fmt.Errorf("parsing /proc/sys/net/ipv4/ip_forward: %w", err)
66+
}
67+
oldValue := value == 1
68+
if oldValue != b.ForwardsIPv4 {
69+
var data []byte
70+
if b.ForwardsIPv4 {
71+
data = []byte("1")
72+
} else {
73+
data = []byte("0")
74+
}
75+
err := os.WriteFile("/proc/sys/net/ipv4/ip_forward", data, 0444)
76+
if err != nil {
77+
return fmt.Errorf("writing /proc/sys/net/ipv4/ip_forward: %w", err)
78+
}
6779
}
6880
}
6981
if md.ForwardsIPv6Changed {

0 commit comments

Comments
 (0)