13 TclObject*
create(
int argc,
const char*
const*argv) {
27 this->size_ = vm->
size_;
31 res_demands = std::vector<ResDemand *>(vm->
res_demands.size(),NULL);
33 std::vector <ResDemand*>::iterator iter;
34 std::vector <ResDemand*>::iterator iter2;
35 for (iter = vm->
res_demands.begin(), iter2=res_demands.begin(); iter!=vm->
res_demands.end(); iter++,iter2++)
43 Tcl& tcl = Tcl::instance();
45 tcl.evalf(
"set vmmigrationsource_($next_migration_id) [new Agent/TCP/ProvOutAgent]");
46 tcl.evalf(
"set vmmigrationsink_($next_migration_id) [new Agent/TCPSink/VmMigrationSink]");
49 tcl.evalf(
"$ns attach-agent $servers_(%d) $vmmigrationsource_($next_migration_id)",migrated_vm_->getHost()->id_);
50 tcl.evalf(
"$ns attach-agent $servers_(%d) $vmmigrationsink_($next_migration_id)",target_->id_);
51 tcl.evalf(
"$ns connect $vmmigrationsource_($next_migration_id) $vmmigrationsink_($next_migration_id)");
55 tcl.evalf(
"$hosts_(%d) attach-vm-mig-source $vmmigrationsource_($next_migration_id)",migrated_vm_->getHost()->id_);
56 tcl.evalf(
"$hosts_(%d) attach-vm-mig-sink $vmmigrationsink_($next_migration_id)",target_->id_);
61 tcl.evalf(
"$vmmigration_($next_migration_id) set-source $vmmigrationsource_($next_migration_id)");
62 tcl.evalf(
"$vmmigration_($next_migration_id) set-sink $vmmigrationsink_($next_migration_id)");
66 tcl.evalf(
"incr next_migration_id");
78 migrated_vm_->getHost()->updateEnergyAndConsumption();
79 target_->updateEnergyAndConsumption();
81 if(target_->tryToAllocate(
this)){
84 std::cerr <<
"Error: Migration object NOT successfully allocated on target.\n";
90 int mig_s = migrated_vm_->getTotalCap(
Memory);
91 int p_s = vm_migration_sender_->getPacketSize();
92 vm_migration_sink_->seq_expected_ = mig_s % p_s ? ( mig_s / p_s ) + 1: mig_s / p_s;
93 vm_migration_sender_->sendmsg(mig_s, (
void*) 1);
97 migrated_vm_->getHost()->updateEnergyAndConsumption();
98 target_->updateEnergyAndConsumption();
100 Tcl& tcl = Tcl::instance();
102 tcl.evalf(
"$hosts_(%d) detach-vm-mig-source $vmmigrationsource_(%d)",migrated_vm_->getHost()->id_,id_);
103 tcl.evalf(
"$hosts_(%d) detach-vm-mig-sink $vmmigrationsink_(%d)",target_->id_,id_);
105 tcl.evalf(
"$ns detach-agent $servers_(%d) $vmmigrationsource_(%d)",migrated_vm_->getHost()->id_,id_);
106 tcl.evalf(
"$ns detach-agent $servers_(%d) $vmmigrationsink_(%d) ",target_->id_,id_);
109 target_->releaseAllocation(
this);
114 tcl.evalf(
"$ns detach-agent $servers_(%d) $vmtsksink_(%d) ",source->
id_,migrated_vm_->id_);
115 tcl.evalf(
"$ns attach-agent $servers_(%d) $vmtsksink_(%d) ",target_->id_,migrated_vm_->id_);
118 tcl.evalf(
"$ns detach-agent $switch_C1_([expr %d/($top(NServers)/$NTSwitches)]) $vmtskcomagnt_C_(%d)",source->
id_,migrated_vm_->id_);
119 tcl.evalf(
"$ns attach-agent $switch_C1_([expr %d/($top(NServers)/$NTSwitches)]) $vmtskcomagnt_C_(%d)",target_->id_,migrated_vm_->id_);
121 tcl.evalf(
"$ns connect $vmtskcomagnt_C_(%d) $vmtsksink_(%d)",migrated_vm_->id_,migrated_vm_->id_);
124 tcl.evalf(
"$ns detach-agent $servers_(%d) $vmtskoutputagent_(%d) ",source->
id_,migrated_vm_->id_);
125 tcl.evalf(
"$ns attach-agent $servers_(%d) $vmtskoutputagent_(%d) ",target_->id_,migrated_vm_->id_);
127 tcl.evalf(
"$ns detach-agent $switch_C1_([expr %d/($top(NServers)/$NTSwitches)]) $vmtskoutputsink_(%d)",source->
id_,migrated_vm_->id_);
128 tcl.evalf(
"$ns attach-agent $switch_C1_([expr %d/($top(NServers)/$NTSwitches)]) $vmtskoutputsink_(%d)",target_->id_,migrated_vm_->id_);
130 tcl.evalf(
"$ns connect $vmtskoutputagent_(%d) $vmtskoutputsink_(%d)",migrated_vm_->id_,migrated_vm_->id_);
133 tcl.evalf(
"$vms_(%d) attach-agent $vmtskoutputagent_(%d)",migrated_vm_->id_,migrated_vm_->id_);
135 if(target_->addVM(migrated_vm_)){
138 std::cerr <<
"Error: Migration object NOT successfully allocated on target.\n";
149 if (strcmp(argv[1],
"set-sink") == 0) {
152 vm_migration_sink_ = vms;
157 }
else if (strcmp(argv[1],
"set-source") == 0) {
158 TcpAgent *vma =
dynamic_cast<TcpAgent*
> (TcpAgent::lookup(argv[2]));
160 vm_migration_sender_=vma;
164 }
else if (strcmp(argv[1],
"set-id") == 0) {
166 int num = strtol(argv[2], &stat, 10);
VmMigrationClass class_vmmigration
TclObject * create(int argc, const char *const *argv)
void setVmMigration(VmMigration *vm_migration)
virtual int command(int argc, const char *const *argv)
void initalizeMigration(VM *vm, ResourceProvider *target)
std::vector< ResDemand * > res_demands
ResourceProvider * getHost()