mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #9472 from yousong/bugfix/yousong-host-mtu
Bugfix/yousong host mtu
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user