44 lines
963 B
Go
44 lines
963 B
Go
package common
|
|
|
|
import "fmt"
|
|
import "io"
|
|
import "os"
|
|
|
|
// Configure the ARP cache parameters for the given interface. This
|
|
// makes containers react more quickly to a change in the MAC address
|
|
// associated with an IP address.
|
|
func ConfigureARPCache(name string) error {
|
|
if err := sysctl(fmt.Sprintf("net/ipv4/neigh/%s/base_reachable_time", name), "5"); err != nil {
|
|
return err
|
|
}
|
|
if err := sysctl(fmt.Sprintf("net/ipv4/neigh/%s/delay_first_probe_time", name), "2"); err != nil {
|
|
return err
|
|
}
|
|
if err := sysctl(fmt.Sprintf("net/ipv4/neigh/%s/ucast_solicit", name), "1"); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func sysctl(variable, value string) error {
|
|
f, err := os.OpenFile(fmt.Sprintf("/proc/sys/%s", variable), os.O_WRONLY, 0)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
n, err := io.WriteString(f, value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if n < len(value) {
|
|
return io.ErrShortWrite
|
|
}
|
|
|
|
err = f.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|