Merge pull request #9472 from yousong/bugfix/yousong-host-mtu

Bugfix/yousong host mtu
This commit is contained in:
Zexi Li
2020-12-18 00:21:00 +08:00
committed by GitHub
5 changed files with 47 additions and 22 deletions
+2
View File
@@ -18,6 +18,8 @@ import (
"yunion.io/x/pkg/util/netutils"
)
const VPC_OVN_ENCAP_COST = 58
const (
VPC_EXTERNAL_ACCESS_MODE_DISTGW = "distgw" // distgw only
VPC_EXTERNAL_ACCESS_MODE_EIP_DISTGW = "eip-distgw" // eip when available, distgw otherwise
+3 -10
View File
@@ -576,7 +576,7 @@ func (self *SGuestnetwork) getJsonDesc(network *SNetwork) *jsonutils.JSONDict {
desc.Add(jsonutils.NewString(self.Driver), "driver")
desc.Add(jsonutils.NewInt(int64(network.VlanId)), "vlan")
desc.Add(jsonutils.NewInt(int64(self.getBandwidth())), "bw")
desc.Add(jsonutils.NewInt(int64(self.getMtu())), "mtu")
desc.Add(jsonutils.NewInt(int64(self.getMtu(network))), "mtu")
desc.Add(jsonutils.NewInt(int64(self.Index)), "index")
vips := self.GetVirtualIPs()
if len(vips) > 0 {
@@ -812,15 +812,8 @@ func (self *SGuestnetwork) getBandwidth() int {
}
}
func (self *SGuestnetwork) getMtu() int {
net := self.GetNetwork()
if net != nil {
wire := net.GetWire()
if wire != nil {
return wire.Mtu
}
}
return options.Options.DefaultMtu
func (self *SGuestnetwork) getMtu(net *SNetwork) int {
return net.getMtu()
}
func (self *SGuestnetwork) IsAllocated() bool {
+15
View File
@@ -134,6 +134,21 @@ func (manager *SNetworkManager) AllowCreateItem(ctx context.Context, userCred mc
return db.IsAdminAllowCreate(userCred, manager)
}
func (self *SNetwork) getMtu() int {
baseMtu := options.Options.DefaultMtu
wire := self.GetWire()
if wire != nil {
baseMtu = wire.Mtu
if IsOneCloudVpcResource(wire) {
baseMtu -= api.VPC_OVN_ENCAP_COST
}
return baseMtu
}
return baseMtu
}
func (self *SNetwork) GetNetworkInterfaces() ([]SNetworkInterface, error) {
sq := NetworkinterfacenetworkManager.Query().SubQuery()
q := NetworkInterfaceManager.Query()
+26 -11
View File
@@ -277,6 +277,7 @@ func (s *SKVMGuestInstance) getNicAddr(index int) int {
}
func (s *SKVMGuestInstance) getVnicDesc(nic jsonutils.JSONObject) string {
bridge, _ := nic.GetString("bridge")
ifname, _ := nic.GetString("ifname")
driver, _ := nic.GetString("driver")
mac, _ := nic.GetString("mac")
@@ -295,6 +296,9 @@ func (s *SKVMGuestInstance) getVnicDesc(nic jsonutils.JSONObject) string {
cmd += fmt.Sprintf(",vectors=%d", vectors)
}
cmd += fmt.Sprintf("$(nic_speed %d)", bw)
if bridge == options.HostOptions.OvnIntegrationBridge {
cmd += fmt.Sprintf("$(nic_mtu %q)", bridge)
}
}
return cmd
}
@@ -401,21 +405,32 @@ func (s *SKVMGuestInstance) _generateStartScript(data *jsonutils.JSONDict) (stri
// cmd += " fi\n"
// cmd += "else\n"
cmd += "QEMU_CMD=$DEFAULT_QEMU_CMD\n"
// cmd += "fi\n"
cmd += "function nic_speed() {\n"
cmd += " $QEMU_CMD "
if s.IsKvmSupport() {
cmd += "-enable-kvm"
cmd += "QEMU_CMD_KVM_ARG=-enable-kvm\n"
} else {
cmd += "-no-kvm"
cmd += "QEMU_CMD_KVM_ARG=-no-kvm\n"
}
// cmd += "fi\n"
cmd += `
function nic_speed() {
$QEMU_CMD $QEMU_CMD_KVM_ARG -device virtio-net-pci,help 2>&1 | grep -q "\<speed="
if [ "$?" -eq "0" ]; then
echo ",speed=$1"
fi
}
cmd += " -device virtio-net-pci,? 2>&1 | grep .speed= > /dev/null\n"
cmd += " if [ \"$?\" -eq \"0\" ]; then\n"
cmd += " echo \",speed=$1\"\n"
cmd += " fi\n"
cmd += "}\n"
function nic_mtu() {
local bridge="$1"; shift
$QEMU_CMD $QEMU_CMD_KVM_ARG -device virtio-net-pci,help 2>&1 | grep -q '\<host_mtu='
if [ "$?" -eq "0" ]; then
local origmtu="$(<"/sys/class/net/$bridge/mtu")"
if [ -n "$origmtu" -a "$origmtu" -gt 576 ]; then
echo ",host_mtu=$(($origmtu - 58))"
fi
fi
}
`
// Generate Start VM script
cmd += `CMD="$QEMU_CMD`
+1 -1
View File
@@ -296,7 +296,7 @@ func (keeper *OVNNorthboundKeeper) ClaimNetwork(ctx context.Context, network *ag
mdIp, "0.0.0.0",
"0.0.0.0/0", network.GuestGateway,
}
mtu -= 58
mtu -= apis.VPC_OVN_ENCAP_COST
const (
leaseTime = 86400 * 365 * 3
renewTime = 86400