Also move netlink and netns code from common to net Creates interface if not already there Adds addresses Move the set link 'up' to after addresses are added
44 lines
960 B
Go
44 lines
960 B
Go
package net
|
|
|
|
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
|
|
}
|