Skip to content

Commit deeacc2

Browse files
author
gitlab
committed
Merge branch 'shixin-26023@@3' into 'master'
[BugFix: ZSTACK-26023] change mtu for vmVnic, bridge interface, vlan, vxlan interface See merge request zstackio/zstack!5963
2 parents e9e23ee + e4522ad commit deeacc2

19 files changed

Lines changed: 173 additions & 17 deletions

File tree

header/src/main/java/org/zstack/header/network/l2/L2NetworkFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ public interface L2NetworkFactory {
88
void createL2Network(L2NetworkVO vo, APICreateL2NetworkMsg msg, ReturnValueCompletion completion);
99

1010
L2Network getL2Network(L2NetworkVO vo);
11+
12+
int getMtu(L2NetworkInventory inv);
1113
}

network/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@
4343
<artifactId>tag</artifactId>
4444
<version>${project.version}</version>
4545
</dependency>
46+
<dependency>
47+
<groupId>org.zstack</groupId>
48+
<artifactId>resourceconfig</artifactId>
49+
<version>${project.version}</version>
50+
</dependency>
4651
</dependencies>
4752

4853
<build>

network/src/main/java/org/zstack/network/l2/L2NoVlanL2NetworkFactory.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.zstack.header.core.ReturnValueCompletion;
1010
import org.zstack.header.network.l2.*;
1111
import org.zstack.network.service.NetworkServiceGlobalConfig;
12+
import org.zstack.resourceconfig.ResourceConfigFacade;
1213
import org.zstack.utils.Utils;
1314
import org.zstack.utils.data.FieldPrinter;
1415
import org.zstack.utils.logging.CLogger;
@@ -22,6 +23,8 @@ public class L2NoVlanL2NetworkFactory implements L2NetworkFactory, Component, L2
2223
private CloudBus bus;
2324
@Autowired
2425
private DatabaseFacade dbf;
26+
@Autowired
27+
private ResourceConfigFacade rcf;
2528

2629
@Override
2730
public L2NetworkType getType() {
@@ -71,4 +74,9 @@ public Integer getL2NetworkVni(String l2NetworkUuid, String hostUuid) {
7174
public String getL2NetworkVniType() {
7275
return type.toString();
7376
}
77+
78+
@Override
79+
public int getMtu(L2NetworkInventory inv) {
80+
return rcf.getResourceConfigValue(NetworkServiceGlobalConfig.DHCP_MTU_NO_VLAN, inv.getUuid(), Integer.class);
81+
}
7482
}

network/src/main/java/org/zstack/network/l2/L2VlanNetworkFactory.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.zstack.header.network.l2.*;
1414
import org.zstack.network.service.NetworkServiceGlobalConfig;
1515
import org.zstack.query.QueryFacade;
16+
import org.zstack.resourceconfig.ResourceConfigFacade;
1617
import org.zstack.utils.Utils;
1718
import org.zstack.utils.gson.JSONObjectUtil;
1819
import org.zstack.utils.logging.CLogger;
@@ -29,7 +30,8 @@ public class L2VlanNetworkFactory extends AbstractService implements L2NetworkFa
2930
private CloudBus bus;
3031
@Autowired
3132
private QueryFacade qf;
32-
33+
@Autowired
34+
private ResourceConfigFacade rcf;
3335

3436
@Override
3537
public L2NetworkType getType() {
@@ -107,4 +109,9 @@ public Integer getL2NetworkVni(String l2NetworkUuid, String hostUuid) {
107109
public String getL2NetworkVniType() {
108110
return type.toString();
109111
}
112+
113+
@Override
114+
public int getMtu(L2NetworkInventory inv) {
115+
return rcf.getResourceConfigValue(NetworkServiceGlobalConfig.DHCP_MTU_VLAN, inv.getUuid(), Integer.class);
116+
}
110117
}

network/src/main/java/org/zstack/network/service/NetworkServiceGlobalConfig.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.zstack.core.config.GlobalConfig;
66
import org.zstack.core.config.GlobalConfigDefinition;
77
import org.zstack.core.config.GlobalConfigValidation;
8+
import org.zstack.header.network.l2.L2NetworkVO;
9+
import org.zstack.resourceconfig.BindResourceConfig;
810

911
/**
1012
* Created by weiwang on 13/05/2017.
@@ -14,11 +16,17 @@ public class NetworkServiceGlobalConfig {
1416
public static final String CATEGORY = "networkService";
1517

1618
@GlobalConfigValidation
19+
@BindResourceConfig({L2NetworkVO.class})
1720
public static GlobalConfig DHCP_MTU_NO_VLAN = new GlobalConfig(CATEGORY, "defaultDhcpMtu.l2NoVlanNetwork");
21+
1822
@GlobalConfigValidation
23+
@BindResourceConfig({L2NetworkVO.class})
1924
public static GlobalConfig DHCP_MTU_VLAN = new GlobalConfig(CATEGORY, "defaultDhcpMtu.l2VlanNetwork");
25+
2026
@GlobalConfigValidation
27+
@BindResourceConfig({L2NetworkVO.class})
2128
public static GlobalConfig DHCP_MTU_VXLAN = new GlobalConfig(CATEGORY, "defaultDhcpMtu.l2VxlanNetwork");
29+
2230
@GlobalConfigValidation
2331
public static GlobalConfig DHCP_MTU_DUMMY = new GlobalConfig(CATEGORY, "defaultDhcpMtu.dummyNetwork");
2432
}

plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmFacadeImpl.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@
3030
import org.zstack.header.message.APIMessage;
3131
import org.zstack.header.message.Message;
3232
import org.zstack.header.message.MessageReply;
33-
import org.zstack.header.network.l2.L2NetworkGetVniExtensionPoint;
34-
import org.zstack.header.network.l2.L2NetworkVO;
35-
import org.zstack.header.network.l2.L2NetworkVO_;
33+
import org.zstack.header.network.l2.*;
3634
import org.zstack.header.network.l3.L3NetworkVO;
3735
import org.zstack.header.network.l3.L3NetworkVO_;
3836
import org.zstack.header.vm.*;
37+
import org.zstack.network.l2.L2NetworkManager;
3938
import org.zstack.utils.CollectionUtils;
4039
import org.zstack.utils.DebugUtils;
4140
import org.zstack.utils.Utils;
@@ -70,6 +69,8 @@ public class ApplianceVmFacadeImpl extends AbstractService implements ApplianceV
7069
private GlobalConfigFacade gcf;
7170
@Autowired
7271
private AnsibleFacade asf;
72+
@Autowired
73+
private L2NetworkManager l2Mgr;
7374

7475
private List<String> createApplianceVmWorkFlow;
7576
private FlowChainBuilder createApplianceVmWorkFlowBuilder;
@@ -288,6 +289,7 @@ public Map<String, Object> prepareBootstrapInformation(VmInstanceSpec spec) {
288289

289290
mto.setCategory(l3NetworkVO.getCategory().toString());
290291
mto.setL2type(l2NetworkVO.getType());
292+
L2NetworkFactory factory = l2Mgr.getL2NetworkFactory(L2NetworkType.valueOf(l2NetworkVO.getType()));
291293
mto.setPhysicalInterface(l2NetworkVO.getPhysicalInterface());
292294
if (l2NetworkGetVniExtensionPointMap == null || l2NetworkGetVniExtensionPointMap.isEmpty() ||
293295
l2NetworkGetVniExtensionPointMap.get(l2NetworkVO.getType()) == null) {
@@ -297,6 +299,7 @@ public Map<String, Object> prepareBootstrapInformation(VmInstanceSpec spec) {
297299
.get(l2NetworkVO.getType())
298300
.getL2NetworkVni(l2NetworkVO.getUuid(), spec.getVmInventory().getHostUuid()));
299301
}
302+
mto.setMtu(factory.getMtu(L2NetworkInventory.valueOf(l2NetworkVO)));
300303

301304
ret.put(ApplianceVmConstant.BootstrapParams.managementNic.toString(), mto);
302305

@@ -321,11 +324,13 @@ public Map<String, Object> prepareBootstrapInformation(VmInstanceSpec spec) {
321324

322325
l3NetworkVO = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, defaultRouteNic.getL3NetworkUuid()).find();
323326
l2NetworkVO = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, l3NetworkVO.getL2NetworkUuid()).find();
327+
factory = l2Mgr.getL2NetworkFactory(L2NetworkType.valueOf(l2NetworkVO.getType()));
324328

325329
t.setCategory(l3NetworkVO.getCategory().toString());
326330
t.setL2type(l2NetworkVO.getType());
327331
t.setVni(l2NetworkGetVniExtensionPointMap.get(l2NetworkVO.getType()).getL2NetworkVni(l2NetworkVO.getUuid(), spec.getVmInventory().getHostUuid()));
328332
t.setPhysicalInterface(l2NetworkVO.getPhysicalInterface());
333+
t.setMtu(factory.getMtu(L2NetworkInventory.valueOf(l2NetworkVO)));
329334
deviceId ++;
330335
extraTos.add(t);
331336
additionalNics = reduceNic(additionalNics, defaultRouteNic);
@@ -336,11 +341,13 @@ public Map<String, Object> prepareBootstrapInformation(VmInstanceSpec spec) {
336341
nto.setDeviceName(String.format("eth%s", deviceId));
337342
l3NetworkVO = Q.New(L3NetworkVO.class).eq(L3NetworkVO_.uuid, nic.getL3NetworkUuid()).find();
338343
l2NetworkVO = Q.New(L2NetworkVO.class).eq(L2NetworkVO_.uuid, l3NetworkVO.getL2NetworkUuid()).find();
344+
factory = l2Mgr.getL2NetworkFactory(L2NetworkType.valueOf(l2NetworkVO.getType()));
339345

340346
nto.setCategory(l3NetworkVO.getCategory().toString());
341347
nto.setL2type(l2NetworkVO.getType());
342348
nto.setVni(l2NetworkGetVniExtensionPointMap.get(l2NetworkVO.getType()).getL2NetworkVni(l2NetworkVO.getUuid(), spec.getVmInventory().getHostUuid()));
343349
nto.setPhysicalInterface(l2NetworkVO.getPhysicalInterface());
350+
nto.setMtu(factory.getMtu(L2NetworkInventory.valueOf(l2NetworkVO)));
344351
extraTos.add(nto);
345352
deviceId ++;
346353
}

plugin/applianceVm/src/main/java/org/zstack/appliancevm/ApplianceVmNicTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class ApplianceVmNicTO {
1616
private String l2type;
1717
private Integer vni;
1818
private String physicalInterface;
19+
private Integer mtu;
1920

2021
public ApplianceVmNicTO(VmNicInventory inv) {
2122
ip = inv.getIp();
@@ -114,4 +115,12 @@ public String getPhysicalInterface() {
114115
public void setPhysicalInterface(String physicalInterface) {
115116
this.physicalInterface = physicalInterface;
116117
}
118+
119+
public Integer getMtu() {
120+
return mtu;
121+
}
122+
123+
public void setMtu(Integer mtu) {
124+
this.mtu = mtu;
125+
}
117126
}

plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,7 @@ public static class CreateBridgeCmd extends AgentCommand {
483483
private String bridgeName;
484484
private String l2NetworkUuid;
485485
private Boolean disableIptables;
486+
private Integer mtu;
486487

487488
public String getL2NetworkUuid() {
488489
return l2NetworkUuid;
@@ -515,6 +516,14 @@ public Boolean getDisableIptables() {
515516
public void setDisableIptables(Boolean disableIptables) {
516517
this.disableIptables = disableIptables;
517518
}
519+
520+
public Integer getMtu() {
521+
return mtu;
522+
}
523+
524+
public void setMtu(Integer mtu) {
525+
this.mtu = mtu;
526+
}
518527
}
519528

520529

@@ -610,6 +619,7 @@ public static class NicTO {
610619
private String metaData;
611620
private Boolean useVirtio;
612621
private int bootOrder;
622+
private Integer mtu;
613623

614624
public List<String> getIps() {
615625
return ips;
@@ -682,6 +692,14 @@ public int getBootOrder() {
682692
public void setBootOrder(int bootOrder) {
683693
this.bootOrder = bootOrder;
684694
}
695+
696+
public Integer getMtu() {
697+
return mtu;
698+
}
699+
700+
public void setMtu(Integer mtu) {
701+
this.mtu = mtu;
702+
}
685703
}
686704

687705
public static class VolumeSnapshotJobTO {

plugin/kvm/src/main/java/org/zstack/kvm/KVMConnectExtensionForL2Network.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.springframework.beans.factory.annotation.Autowired;
44
import org.springframework.transaction.annotation.Transactional;
5+
import org.zstack.compute.vm.VmInstanceBase;
56
import org.zstack.core.cloudbus.CloudBus;
67
import org.zstack.core.cloudbus.CloudBusCallBack;
78
import org.zstack.core.db.DatabaseFacade;
@@ -14,6 +15,9 @@
1415
import org.zstack.header.host.*;
1516
import org.zstack.header.message.MessageReply;
1617
import org.zstack.header.network.l2.*;
18+
import org.zstack.utils.Utils;
19+
import org.zstack.utils.gson.JSONObjectUtil;
20+
import org.zstack.utils.logging.CLogger;
1721

1822
import javax.persistence.TypedQuery;
1923
import java.util.*;
@@ -32,6 +36,7 @@ public class KVMConnectExtensionForL2Network implements KVMHostConnectExtensionP
3236
private KVMRealizeL2VlanNetworkBackend vlanNetworkBackend;
3337
@Autowired
3438
private CloudBus bus;
39+
protected static final CLogger logger = Utils.getLogger(KVMConnectExtensionForL2Network.class);
3540

3641
@Transactional(readOnly = true)
3742
private List<L2NetworkInventory> getL2Networks(String clusterUuid) {
@@ -41,15 +46,26 @@ private List<L2NetworkInventory> getL2Networks(String clusterUuid) {
4146
q.setParameter("supportTypes", getSupportTypes());
4247
List<L2NetworkVO> vos = q.getResultList();
4348
List<L2NetworkInventory> ret = new ArrayList<L2NetworkInventory>(vos.size());
49+
List<L2NetworkInventory> noVlanL2Networks = new ArrayList<>();
4450
for (L2NetworkVO vo : vos) {
45-
if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(vo.getType())) {
51+
if (L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE.equals(vo.getType())) {
52+
noVlanL2Networks.add(L2NetworkInventory.valueOf(vo));
53+
} else if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(vo.getType())) {
4654
L2VlanNetworkVO vlanvo = dbf.getEntityManager().find(L2VlanNetworkVO.class, vo.getUuid());
4755
ret.add(L2VlanNetworkInventory.valueOf(vlanvo));
4856
} else {
4957
ret.add(L2NetworkInventory.valueOf(vo));
5058
}
5159
}
52-
return ret;
60+
61+
/* when prepare l2 network, first prepare no vlan network, because mtu of vlan network must less than
62+
* no vlan network */
63+
if (!noVlanL2Networks.isEmpty()) {
64+
noVlanL2Networks.addAll(ret);
65+
return noVlanL2Networks;
66+
} else {
67+
return ret;
68+
}
5369
}
5470

5571
private List<String> getSupportTypes() {
@@ -67,6 +83,8 @@ private void prepareNetwork(final Iterator<L2NetworkInventory> it, final String
6783
FlowChain chain = FlowChainBuilder.newSimpleFlowChain();
6884
chain.setName(String.format("prepare-l2-%s-for-kvm-%s-connect", l2.getUuid(), hostUuid));
6985
chain.then(new NoRollbackFlow() {
86+
String __name__ = "check-network-physical-interface";
87+
7088
@Override
7189
public void run(final FlowTrigger trigger, Map data) {
7290
CheckNetworkPhysicalInterfaceMsg cmsg = new CheckNetworkPhysicalInterfaceMsg();
@@ -88,6 +106,8 @@ public void run(MessageReply reply) {
88106

89107
if (l2.getType().equals(L2NetworkConstant.L2_NO_VLAN_NETWORK_TYPE)) {
90108
chain.then(new NoRollbackFlow() {
109+
String __name__ = "realize_no_vlan";
110+
91111
@Override
92112
public void run(final FlowTrigger trigger, Map data) {
93113
noVlanNetworkBackend.realize(l2, hostUuid, true, new Completion(trigger) {
@@ -105,6 +125,7 @@ public void fail(ErrorCode errorCode) {
105125
});
106126
} else if (L2NetworkConstant.L2_VLAN_NETWORK_TYPE.equals(l2.getType())) {
107127
chain.then(new NoRollbackFlow() {
128+
String __name__ = "realize_vlan";
108129
@Override
109130
public void run(final FlowTrigger trigger, Map data) {
110131
vlanNetworkBackend.realize(l2, hostUuid, true, new Completion(trigger) {

plugin/kvm/src/main/java/org/zstack/kvm/KVMRealizeL2NoVlanNetworkBackend.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@
1010
import org.zstack.header.host.HostConstant;
1111
import org.zstack.header.host.HypervisorType;
1212
import org.zstack.header.message.MessageReply;
13-
import org.zstack.header.network.l2.L2NetworkConstant;
14-
import org.zstack.header.network.l2.L2NetworkInventory;
15-
import org.zstack.header.network.l2.L2NetworkRealizationExtensionPoint;
16-
import org.zstack.header.network.l2.L2NetworkType;
13+
import org.zstack.header.network.l2.*;
1714
import org.zstack.header.vm.VmNicInventory;
1815
import org.zstack.kvm.KVMAgentCommands.CheckBridgeResponse;
1916
import org.zstack.kvm.KVMAgentCommands.CreateBridgeCmd;
2017
import org.zstack.kvm.KVMAgentCommands.CreateBridgeResponse;
2118
import org.zstack.kvm.KVMAgentCommands.NicTO;
2219
import org.zstack.network.l3.NetworkGlobalProperty;
20+
import org.zstack.network.l2.L2NetworkManager;
2321
import org.zstack.tag.SystemTagCreator;
2422
import org.zstack.utils.Utils;
2523
import org.zstack.utils.logging.CLogger;
@@ -37,17 +35,22 @@ public class KVMRealizeL2NoVlanNetworkBackend implements L2NetworkRealizationExt
3735
private CloudBus bus;
3836
@Autowired
3937
private ApiTimeoutManager timeoutMgr;
38+
@Autowired
39+
private L2NetworkManager l2Mgr;
4040

4141
private static String makeBridgeName(String physicalInterfaceName) {
4242
return "br_" + physicalInterfaceName;
4343
}
4444

4545
public void realize(final L2NetworkInventory l2Network, final String hostUuid, boolean noStatusCheck, final Completion completion) {
46+
L2NetworkFactory factory = l2Mgr.getL2NetworkFactory(L2NetworkType.valueOf(l2Network.getType()));
47+
4648
final CreateBridgeCmd cmd = new CreateBridgeCmd();
4749
cmd.setPhysicalInterfaceName(l2Network.getPhysicalInterface());
4850
cmd.setBridgeName(makeBridgeName(l2Network.getPhysicalInterface()));
4951
cmd.setL2NetworkUuid(l2Network.getUuid());
5052
cmd.setDisableIptables(NetworkGlobalProperty.BRIDGE_DISABLE_IPTABLES);
53+
cmd.setMtu(factory.getMtu(l2Network));
5154

5255
KVMHostAsyncHttpCallMsg msg = new KVMHostAsyncHttpCallMsg();
5356
msg.setCommand(cmd);
@@ -158,6 +161,10 @@ public NicTO completeNicInformation(L2NetworkInventory l2Network, VmNicInventory
158161
to.setBridgeName(makeBridgeName(l2Network.getPhysicalInterface()));
159162
to.setDeviceId(nic.getDeviceId());
160163
to.setNicInternalName(nic.getInternalName());
164+
165+
L2NetworkFactory factory = l2Mgr.getL2NetworkFactory(L2NetworkType.valueOf(l2Network.getType()));
166+
to.setMtu(factory.getMtu(l2Network));
167+
161168
return to;
162169
}
163170

0 commit comments

Comments
 (0)