7272import com .cloud .agent .api .BackupSnapshotCommand ;
7373import com .cloud .agent .api .CheckHealthAnswer ;
7474import com .cloud .agent .api .CheckHealthCommand ;
75+ import com .cloud .agent .api .CheckNetworkAnswer ;
76+ import com .cloud .agent .api .CheckNetworkCommand ;
7577import com .cloud .agent .api .CheckStateCommand ;
7678import com .cloud .agent .api .CheckVirtualMachineAnswer ;
7779import com .cloud .agent .api .CheckVirtualMachineCommand ;
179181import com .cloud .network .Networks .BroadcastDomainType ;
180182import com .cloud .network .Networks .RouterPrivateIpStrategy ;
181183import com .cloud .network .Networks .TrafficType ;
184+ import com .cloud .network .PhysicalNetworkSetupInfo ;
182185import com .cloud .resource .ServerResource ;
183186import com .cloud .resource .ServerResourceBase ;
184187import com .cloud .storage .Storage ;
@@ -718,6 +721,15 @@ private Pair<String, String> getPifs() {
718721 }
719722 return new Pair <String , String >(privPif , pubPif );
720723 }
724+
725+ private boolean checkNetwork (String networkName ) {
726+ String name = Script .runSimpleBashScript ("brctl show | grep " + networkName + " | awk '{print $4}'" );
727+ if (name == null ) {
728+ return false ;
729+ } else {
730+ return true ;
731+ }
732+ }
721733 private String getVnetId (String vnetId ) {
722734 return vnetId ;
723735 }
@@ -935,6 +947,8 @@ public Answer executeRequest(Command cmd) {
935947 return execute ((CleanupNetworkRulesCmd )cmd );
936948 } else if (cmd instanceof CopyVolumeCommand ) {
937949 return execute ((CopyVolumeCommand )cmd );
950+ } else if (cmd instanceof CheckNetworkCommand ) {
951+ return execute ((CheckNetworkCommand )cmd );
938952 } else {
939953 s_logger .warn ("Unsupported command " );
940954 return Answer .createUnsupportedCommandAnswer (cmd );
@@ -944,7 +958,28 @@ public Answer executeRequest(Command cmd) {
944958 }
945959 }
946960
947-
961+ private CheckNetworkAnswer execute (CheckNetworkCommand cmd ) {
962+ List <PhysicalNetworkSetupInfo > phyNics = cmd .getPhysicalNetworkInfoList ();
963+ String errMsg = null ;
964+ for (PhysicalNetworkSetupInfo nic : phyNics ) {
965+ if (!checkNetwork (nic .getGuestNetworkName ())) {
966+ errMsg = "Can not find network: " + nic .getGuestNetworkName ();
967+ break ;
968+ } else if (!checkNetwork (nic .getPrivateNetworkName ())) {
969+ errMsg = "Can not find network: " + nic .getPrivateNetworkName ();
970+ break ;
971+ } else if (!checkNetwork (nic .getPublicNetworkName ())) {
972+ errMsg = "Can not find network: " + nic .getPublicNetworkName ();
973+ break ;
974+ }
975+ }
976+
977+ if (errMsg != null ) {
978+ return new CheckNetworkAnswer (cmd , false , errMsg );
979+ } else {
980+ return new CheckNetworkAnswer (cmd , true , null );
981+ }
982+ }
948983 private CopyVolumeAnswer execute (CopyVolumeCommand cmd ) {
949984 boolean copyToSecondary = cmd .toSecondaryStorage ();
950985 String volumePath = cmd .getVolumePath ();
0 commit comments