1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #3273 from crosbymichael/set-mtu-in-dockerinit

Move MTU setting outside of lxc and set with netlink
This commit is contained in:
Victor Vieux 2013-12-19 14:25:27 -08:00
commit 93abcc3a3b
5 changed files with 42 additions and 2 deletions

View file

@ -582,6 +582,7 @@ func (container *Container) Start() (err error) {
params = append(params,
"-g", network.Gateway,
"-i", fmt.Sprintf("%s/%d", network.IPAddress, network.IPPrefixLen),
"-mtu", "1500",
)
}

View file

@ -14,7 +14,6 @@ lxc.network.type = empty
lxc.network.type = veth
lxc.network.link = {{.NetworkSettings.Bridge}}
lxc.network.name = eth0
lxc.network.mtu = 1500
{{end}}
# root filesystem

View file

@ -25,3 +25,7 @@ func AddDefaultGw(ip net.IP) error {
return fmt.Errorf("Not implemented")
}
func NetworkSetMTU(iface *net.Interface, mtu int) error {
return fmt.Errorf("Not implemented")
}

View file

@ -328,7 +328,6 @@ func AddDefaultGw(ip net.IP) error {
}
return s.HandleAck(wb.Seq)
}
// Bring up a particular network interface
@ -354,6 +353,37 @@ func NetworkLinkUp(iface *net.Interface) error {
return s.HandleAck(wb.Seq)
}
func NetworkSetMTU(iface *net.Interface, mtu int) error {
s, err := getNetlinkSocket()
if err != nil {
return err
}
defer s.Close()
wb := newNetlinkRequest(syscall.RTM_SETLINK, syscall.NLM_F_ACK)
msg := newIfInfomsg(syscall.AF_UNSPEC)
msg.Type = syscall.RTM_SETLINK
msg.Flags = syscall.NLM_F_REQUEST
msg.Index = int32(iface.Index)
msg.Change = 0xFFFFFFFF
wb.AddData(msg)
var (
b = make([]byte, 4)
native = nativeEndian()
)
native.PutUint32(b, uint32(mtu))
data := newRtAttr(syscall.IFLA_MTU, b)
wb.AddData(data)
if err := s.Send(wb); err != nil {
return err
}
return s.HandleAck(wb.Seq)
}
// Add an Ip address to an interface. This is identical to:
// ip addr add $ip/$ipNet dev $iface
func NetworkLinkAddIp(iface *net.Interface, ip net.IP, ipNet *net.IPNet) error {

View file

@ -25,6 +25,7 @@ type DockerInitArgs struct {
privileged bool
env []string
args []string
mtu int
}
func setupHostname(args *DockerInitArgs) error {
@ -50,6 +51,9 @@ func setupNetworking(args *DockerInitArgs) error {
if err := netlink.NetworkLinkAddIp(iface, ip, ipNet); err != nil {
return fmt.Errorf("Unable to set up networking: %v", err)
}
if err := netlink.NetworkSetMTU(iface, args.mtu); err != nil {
return fmt.Errorf("Unable to set MTU: %v", err)
}
if err := netlink.NetworkLinkUp(iface); err != nil {
return fmt.Errorf("Unable to set up networking: %v", err)
}
@ -227,6 +231,7 @@ func SysInit() {
ip := flag.String("i", "", "ip address")
workDir := flag.String("w", "", "workdir")
privileged := flag.Bool("privileged", false, "privileged mode")
mtu := flag.Int("mtu", 1500, "interface mtu")
flag.Parse()
// Get env
@ -250,6 +255,7 @@ func SysInit() {
privileged: *privileged,
env: env,
args: flag.Args(),
mtu: *mtu,
}
if err := executeProgram(args); err != nil {