diff --git a/tbsetup/assign_wrapper.in b/tbsetup/assign_wrapper.in index 150d0bbe0a85b24e7d6ecd69da720d22a49a57f6..8d7bf21b075b451aea841360742ede926625d634 100644 --- a/tbsetup/assign_wrapper.in +++ b/tbsetup/assign_wrapper.in @@ -261,6 +261,7 @@ sub virtnodetype($) { return $virt_nodes{$_[0]}->{"type"}; } sub virtnodename($) { return $virt_nodes{$_[0]}->{"vname"}; } sub virtnodeelabrole($) { return $virt_nodes{$_[0]}->{"inner_elab_role"}; } sub virtnodeplabrole($) { return $virt_nodes{$_[0]}->{"plab_role"}; } +sub virtnodeosname($) { return $virt_nodes{$_[0]}->{"__osname"}; } sub virtnodeosid($) { return $virt_nodes{$_[0]}->{"__osid"}; } sub virtnodesetosid($$) { return $virt_nodes{$_[0]}->{"__osid"} = $_[1]; } sub virtnodeparent($) { return $virt_nodes{$_[0]}->{"__parent"}; } @@ -584,6 +585,10 @@ sub virtlan_use_linkdelay($$) { my $cpu_usage; my $mem_usage; +# XXX woeful NSE hack +my $sim_osid; +my $sim_osname = "FBSD-NSE"; + # Allow override of jail/delay osids. my $jail_osid; my $delay_osid; @@ -2817,10 +2822,10 @@ sub InitPnode($$) # XXX NSE hack: if (virtnodeisvnode($vnode) && virtnodeissim($vnode)) { # - # We can use the Jail hosting OSID for NSE now, but allow override. + # Use special sim_osid if it exists, jail_osid otherwise. # - if (defined($jail_osid)) { - $osid = $jail_osid; + if (defined($sim_osid)) { + $osid = $sim_osid; } else { $osid = nodejailosid(physnodetype($pnode)); @@ -3966,6 +3971,7 @@ sub LoadVirtNodes() # if (defined($osname) && $osname ne "") { my $osid; + my $ospid = "??"; if (! ($osid = TBOSID($pid, $osname)) && ! ($osid = TBOSID(TB_OPSPID, $osname))) { @@ -3975,6 +3981,8 @@ sub LoadVirtNodes() } # Stash this in the virt_nodes data structure. $rowref->{"__osid"} = $osid; + TBOsidToPid($osid, \$ospid); + $rowref->{"__osname"} = "$ospid-$osname"; } # @@ -4352,6 +4360,12 @@ sub LoadExperiment() "Invalid OS $delay_osname in project $pid!"); } } + if (!defined($sim_osid) && defined($sim_osname)) { + if (! ($sim_osid = TBOSID($pid, $sim_osname)) && + ! ($sim_osid = TBOSID(TB_OPSPID, $sim_osname))) { + $sim_osid = $jail_osid; + } + } # Keep a desire string we can use to make sure that the node type picked # for the delay node can load the right OS if ($delay_osid) { @@ -4488,7 +4502,8 @@ sub CreateTopFile() # XXX Set the OSID until I figure out something. # if (! defined(virtnodeosid($parent))) { - virtnodesetosid($parent, "emulab-ops-RHL73-IXPHOST"); + my $osid = TBOSID(TB_OPSPID, "RHL73-IXPHOST"); + virtnodesetosid($parent, $osid); } } } @@ -4522,13 +4537,17 @@ sub CreateTopFile() if (virtnodeissim($node)) { $simnodes++; + if (defined(virtnodeosid($node))) { + $osid = virtnodeosid($node); + } else { + $osid = "<SIM>"; + } # XXX apparently all simnodes can do veths - $osid = "<SIM>"; if (!exists($osdoesmlink{$osid})) { $osdoesmlink{$osid} = 0; $osdoesveth{$osid} = 1; $osdoesvlan{$osid} = 0; - $osdoeslinkdelays{$osid} = 0; + $osdoeslinkdelays{$osid} = 1; } } else { if (virtnodeisvirt($node)) { @@ -4863,10 +4882,11 @@ sub CreateTopFile() if (!defined($osid)) { tbreport(SEV_ERROR, 'node_lacks_linkdelay_support', $node, $lan, $osid); } elsif (! $osdoeslinkdelays{$osid}) { + my $osname = virtnodeosname($node); tberror({type => 'primary', severity => SEV_ERROR, error => ['node_lacks_linkdelay_support', $node, $lan, $osid]}, - "$node in link $lan is running an OSID ". - "($osid) that does not support linkdelays ". + "$node in link $lan is running an OS ". + "($osname) that does not support linkdelays ". "(endnode traffic shaping)\n"); $toperrors++; } diff --git a/tbsetup/nseparse/parse-nse.in b/tbsetup/nseparse/parse-nse.in index eb684840902582782650d4c3f7ab3e6867e94c70..7c57b8f5fe1d298a18847b7a3d1c963ea24a84a9 100644 --- a/tbsetup/nseparse/parse-nse.in +++ b/tbsetup/nseparse/parse-nse.in @@ -272,7 +272,8 @@ sub GenDefsFile($) "left join virt_nodes as vn on vn.pid=v.pid " . "and vn.eid=v.eid and vn.vname=v.vname " . "left join reserved as r on r.node_id=v.node_id " . - "where v.pid='$pid' and v.eid='$eid'"); + "where r.erole!='delaynode' and " . + "v.pid='$pid' and v.eid='$eid'"); while (my ($vnode,$vtype,$ipports,$pnode) = $query_result->fetchrow_array()) { print TCL "set v2pmapinfo($vnode) [list $vtype [list $ipports] $pnode]\n"; }