author | Mart?n Giachino <martin.giachino@gmail.com> |
Sun, 20 Jun 2010 17:21:22 +0400 | |
changeset 6366 | ef2e946450fe |
parent 6365 | 9e4fce3d1138 |
child 6367 | 702cb83d0e1c |
AUTHORS | file | annotate | diff | comparison | revisions | |
examples/mobility/default.ns_movements | file | annotate | diff | comparison | revisions | |
examples/mobility/ns2-mobility-trace.cc | file | annotate | diff | comparison | revisions | |
examples/mobility/waf | file | annotate | diff | comparison | revisions | |
examples/mobility/wscript | file | annotate | diff | comparison | revisions | |
samples/main-ns2-mob.cc | file | annotate | diff | comparison | revisions | |
samples/ns2-mob.tr | file | annotate | diff | comparison | revisions | |
samples/wscript | file | annotate | diff | comparison | revisions | |
src/helper/ns2-mobility-helper.cc | file | annotate | diff | comparison | revisions | |
src/helper/ns2-mobility-helper.h | file | annotate | diff | comparison | revisions |
--- a/AUTHORS Sat Jun 19 17:10:57 2010 +0100 +++ b/AUTHORS Sun Jun 20 17:21:22 2010 +0400 @@ -17,6 +17,7 @@ Craig Dowell (craigdo@ee.washington.edu) Jahanzeb Farooq (Jahanzeb.Farooq@sophia.inria.fr, Fahanzeb.Farooq@gmail.com) Juliana Freitag Borin (juliana.freitag@gmail.com) +Martin Giachino (martin.giachino@gmail.com,giachino@fing.edu.uy) Charline Taibi Guguen (charline.guguen@gmail.com) Tom Goff (tgoff@tgoff.net) David Gross (gdavid.devel@gmail.com)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/mobility/default.ns_movements Sun Jun 20 17:21:22 2010 +0400 @@ -0,0 +1,683 @@ +$node_(0) set X_ 150.0 +$node_(0) set Y_ 93.98597018956875 +$ns_ at 0.0 "$node_(0) setdest 150.0 110.0 50.40378694202284" +$ns_ at 0.3177148143422528 "$node_(0) setdest 159.68580405978113 110.0 50.40378694196106" +$ns_ at 0.5098790275378633 "$node_(0) setdest 164.68580405978113 110.0 50.129146111974336" +$ns_ at 0.6096214007438903 "$node_(0) setdest 170.0 110.0 50.39215470830349" +$ns_ at 0.7150782118483221 "$node_(0) setdest 170.0 90.31419594021887 50.392154708372175" +$ns_ at 1.1057303713701003 "$node_(0) setdest 170.0 90.0 49.99999999937131" +$ns_ at 1.1120142901745567 "$node_(0) setdest 184.68580405978113 90.0 50.0000000000599" +$ns_ at 1.4057303713698275 "$node_(0) setdest 199.68580405978113 90.0 50.000000000045475" +$ns_ at 1.7057303713695546 "$node_(0) setdest 210.0 90.0 50.00000000002494" +$ns_ at 1.912014290173829 "$node_(0) setdest 210.0 40.314195940218866 50.00000000004974" +$ns_ at 2.9057303713684632 "$node_(0) setdest 210.0 20.314195940218866 50.000000000045475" +$ns_ at 3.3057303713680994 "$node_(0) setdest 210.0 10.0 50.13316828893697" +$ns_ at 3.511466340034076 "$node_(0) setdest 190.0 10.0 50.13316828895926" +$ns_ at 3.9104038235923326 "$node_(0) setdest 190.0 24.685804059781134 50.13316828897492" +$ns_ at 4.203339709374177 "$node_(0) setdest 190.0 29.685804059781134 50.000000000045475" +$ns_ at 4.303339709374086 "$node_(0) setdest 190.0 39.685804059781134 50.000000000045475" +$ns_ at 4.503339709373904 "$node_(0) setdest 190.0 44.685804059781134 50.000000000045475" +$ns_ at 4.603339709373813 "$node_(0) setdest 190.0 50.0 50.00000000000561" +$ns_ at 4.7096236281781785 "$node_(0) setdest 210.0 50.0 50.000000000045475" +$ns_ at 5.109623628177815 "$node_(0) setdest 210.0 30.0 50.000000000045475" +$ns_ at 5.509623628177451 "$node_(0) setdest 195.31419594021887 30.0 50.0000000000599" +$ns_ at 5.803339709372722 "$node_(0) setdest 190.0 30.0 50.00000000000561" +$ns_ at 5.909623628177087 "$node_(0) setdest 190.0 10.0 50.000000000045475" +$ns_ at 6.309623628176723 "$node_(0) setdest 209.68580405978113 10.0 50.00000000005623" +$ns_ at 6.703339709371903 "$node_(0) setdest 210.0 10.0 50.289519364409465" +$ns_ at 6.709587451330663 "$node_(0) setdest 210.0 14.685804059781134 50.28951936579435" +$ns_ at 6.802764004196433 "$node_(0) setdest 210.0 49.685804059781134 50.000000000045475" +$ns_ at 7.502764004195797 "$node_(0) setdest 210.0 50.0 49.99999999937131" +$ns_ at 7.509047923000253 "$node_(0) setdest 190.0 50.0 50.000000000045475" +$ns_ at 7.909047922999889 "$node_(0) setdest 190.0 69.68580405978113 50.00000000005623" +$ns_ at 8.302764004195069 "$node_(0) setdest 190.0 134.68580405978113 50.374516250445616" +$ns_ at 9.593098975886733 "$node_(0) setdest 190.0 149.68580405978113 50.07536807533352" +$ns_ at 9.892647448050411 "$node_(0) setdest 190.0 150.0 50.0415402089729" +$ns_ at 9.898926150482566 "$node_(0) setdest 194.68580405978113 150.0 50.04154020787152" +$ns_ at 9.992564436600787 "$node_(0) setdest 210.0 150.0 50.062022647116656" +$ns_ at 10.298468895319274 "$node_(0) setdest 210.0 140.31419594021887 50.06202264717843" +$ns_ at 10.491944978537958 "$node_(0) setdest 210.0 130.31419594021887 50.000000000045475" +$ns_ at 10.691944978537776 "$node_(0) setdest 210.0 130.0 49.99999999937131" +$ns_ at 10.698228897342233 "$node_(0) setdest 190.0 130.0 50.000000000045475" +$ns_ at 11.098228897341869 "$node_(0) setdest 190.0 110.0 50.000000000045475" +$ns_ at 11.498228897341505 "$node_(0) setdest 199.68580405978113 110.0 50.000000000067345" +$ns_ at 11.691944978536867 "$node_(0) setdest 210.0 110.0 50.007801046995475" +$ns_ at 11.898196717751034 "$node_(0) setdest 210.0 130.0 50.00780104701215" +$ns_ at 12.298134319110432 "$node_(0) setdest 195.31419594021887 130.0 50.007801047004506" +$ns_ at 12.591804581595625 "$node_(0) setdest 175.31419594021887 130.0 50.023618760831866" +$ns_ at 12.991615720722166 "$node_(0) setdest 150.0 130.0 50.000000000037105" +$ns_ at 13.497899639526167 "$node_(0) setdest 150.0 110.0 50.000000000045475" +$ns_ at 13.897899639525804 "$node_(0) setdest 170.0 110.0 50.000000000045475" +$ns_ at 14.29789963952544 "$node_(0) setdest 170.0 130.0 50.000000000045475" +$ns_ at 14.697899639525076 "$node_(0) setdest 184.68580405978113 130.0 50.0000000000599" +$ns_ at 14.991615720720347 "$node_(0) setdest 194.68580405978113 130.0 50.000000000045475" +$ns_ at 15.191615720720165 "$node_(0) setdest 210.0 130.0 50.00000000003164" +$ns_ at 15.497899639524348 "$node_(0) setdest 210.0 150.0 50.000000000045475" +$ns_ at 15.897899639523985 "$node_(0) setdest 200.31419594021887 150.0 50.000000000067345" +$ns_ at 16.091615720719346 "$node_(0) setdest 195.31419594021887 150.0 50.05164145133088" +$ns_ at 16.191512544380203 "$node_(0) setdest 190.0 150.0 50.00000000000561" +$ns_ at 16.297796463184568 "$node_(0) setdest 190.0 90.0 50.000000000045475" +$ns_ at 17.497796463183477 "$node_(0) setdest 210.0 90.0 50.000000000045475" +$ns_ at 17.897796463183113 "$node_(0) setdest 210.0 65.31419594021887 50.00000000005406" +$ns_ at 18.3915125443782 "$node_(0) setdest 210.0 60.314195940218866 50.000000000045475" +$ns_ at 18.49151254437811 "$node_(0) setdest 210.0 50.0 50.00000000002494" +$ns_ at 18.697796463182385 "$node_(0) setdest 200.31419594021887 50.0 50.000000000067345" +$ns_ at 18.891512544377747 "$node_(0) setdest 180.31419594021887 50.0 50.00027569783147" +$ns_ at 19.291510338807257 "$node_(0) setdest 170.0 50.0 50.00000000002494" +$ns_ at 19.49779425761153 "$node_(0) setdest 170.0 10.314195940218866 50.00000000005081" +$ns_ at 20.291510338806347 "$node_(0) setdest 170.0 10.0 50.026154493940176" +$ns_ at 20.297790972274925 "$node_(0) setdest 184.68580405978113 10.0 50.0261544953949" +$ns_ at 20.59135349387816 "$node_(0) setdest 190.0 10.0 50.00000000000561" +$ns_ at 20.697637412682525 "$node_(0) setdest 190.0 30.0 50.000000000045475" +$ns_ at 21.09763741268216 "$node_(0) setdest 210.0 30.0 50.000000000045475" +$ns_ at 21.497637412681797 "$node_(0) setdest 210.0 64.68580405978113 50.00000000005158" +$ns_ at 22.191353493876704 "$node_(0) setdest 210.0 90.0 50.05269707158819" +$ns_ at 22.69710438086713 "$node_(0) setdest 180.31419594021887 90.0 50.05269707160862" +$ns_ at 23.290195378886892 "$node_(0) setdest 150.0 90.0 50.039476861574876" +$ns_ at 23.89600099160498 "$node_(0) setdest 150.0 55.314195940218866 50.039476861558356" +$ns_ at 24.589169790226606 "$node_(0) setdest 150.0 30.314195940218866 50.08853512313983" +$ns_ at 25.0882860039178 "$node_(0) setdest 150.0 30.0 50.1638254754786" +$ns_ at 25.094549400643245 "$node_(0) setdest 169.68580405978113 30.0 50.163825474119314" +$ns_ at 25.486979680306376 "$node_(0) setdest 210.0 30.0 50.026065720384665" +$ns_ at 26.29284349069576 "$node_(0) setdest 210.0 39.685804059781134 50.02606572030907" +$ns_ at 26.486458637526084 "$node_(0) setdest 210.0 49.685804059781134 50.000000000045475" +$ns_ at 26.686458637525902 "$node_(0) setdest 210.0 54.685804059781134 50.27195602117583" +$ns_ at 26.785917667882586 "$node_(0) setdest 210.0 70.0 50.036544130315455" +$ns_ at 27.09197789259224 "$node_(0) setdest 190.0 70.0 50.03654413032888" +$ns_ at 27.491685753069305 "$node_(0) setdest 190.0 84.68580405978113 50.03654413034288" +$ns_ at 27.78518731907525 "$node_(0) setdest 190.0 90.0 50.00000000000561" +$ns_ at 27.891471237879614 "$node_(0) setdest 204.68580405978113 90.0 50.0000000000599" +$ns_ at 28.185187319074885 "$node_(0) setdest 210.0 90.0 50.00000000000561" +$ns_ at 28.29147123787925 "$node_(0) setdest 210.0 60.314195940218866 50.00000000005261" +$ns_ at 28.885187319074248 "$node_(0) setdest 210.0 50.0 50.00000000002494" +$ns_ at 29.091471237878523 "$node_(0) setdest 195.31419594021887 50.0 50.0000000000599" +$ns_ at 29.385187319073793 "$node_(0) setdest 190.31419594021887 50.0 50.000000000045475" +$ns_ at 29.485187319073702 "$node_(0) setdest 190.0 50.0 50.59722417372707" +$ns_ at 29.491397065662568 "$node_(0) setdest 190.0 54.685804059781134 50.597224172173355" +$ns_ at 29.58400696939634 "$node_(0) setdest 190.0 89.68580405978113 50.04096849363424" +$ns_ at 30.2834338800576 "$node_(0) setdest 190.0 114.68580405978113 50.000000000045475" +$ns_ at 30.783433880057146 "$node_(0) setdest 190.0 144.68580405978113 50.000000000045475" +$ns_ at 31.3834338800566 "$node_(0) setdest 190.0 149.68580405978113 50.000000000045475" +$ns_ at 31.48343388005651 "$node_(0) setdest 190.0 150.0 49.99999999937131" +$ns_ at 31.489717798860966 "$node_(0) setdest 204.68580405978113 150.0 50.0000000000599" +$ns_ at 31.783433880056236 "$node_(0) setdest 210.0 150.0 50.00000000000561" +$ns_ at 31.8897177988606 "$node_(0) setdest 210.0 154.68580405978113 50.00000000009068" +$ns_ at 31.983433880056054 "$node_(0) setdest 210.0 170.0 50.00000000003164" +$ns_ at 32.28971779886024 "$node_(0) setdest 190.31419594021887 170.0 50.00000000005623" +$ns_ at 32.68343388005542 "$node_(0) setdest 160.31419594021887 170.0 50.000000000045475" +$ns_ at 33.28343388005487 "$node_(0) setdest 150.0 170.0 50.00000000002494" +$ns_ at 33.48971779885915 "$node_(0) setdest 150.0 130.31419594021887 50.00000000005081" +$ns_ at 34.28343388005396 "$node_(0) setdest 150.0 125.31419594021887 50.110476619930395" +$ns_ at 34.38321341394112 "$node_(0) setdest 150.0 90.0 50.00000000003948" +$ns_ at 35.08949733274494 "$node_(0) setdest 170.0 90.0 50.000000000045475" +$ns_ at 35.48949733274458 "$node_(0) setdest 170.0 45.314195940218866 50.000000000050214" +$ns_ at 36.3832134139393 "$node_(0) setdest 170.0 35.314195940218866 50.000000000045475" +$ns_ at 36.58321341393912 "$node_(0) setdest 170.0 30.0 50.16409295573003" +$ns_ at 36.68914966489274 "$node_(0) setdest 174.68580405978113 30.0 50.16409295572343" +$ns_ at 36.78255918918967 "$node_(0) setdest 179.68580405978113 30.0 50.35310362825518" +$ns_ at 36.881857934246455 "$node_(0) setdest 209.68580405978113 30.0 50.232661607024355" +$ns_ at 37.47907892633111 "$node_(0) setdest 210.0 30.0 50.19159724291911" +$ns_ at 37.48533885742472 "$node_(0) setdest 210.0 70.0 50.19159724163442" +$ns_ at 38.28228500375735 "$node_(0) setdest 205.31419594021887 70.0 50.19159724154828" +$ns_ at 38.37564334095532 "$node_(0) setdest 190.31419594021887 70.0 50.05456821829346" +$ns_ at 38.67531628857887 "$node_(0) setdest 190.0 70.0 50.090459271393534" +$ns_ at 38.68158885913999 "$node_(0) setdest 190.0 90.0 50.09045927159107" +$ns_ at 39.08086649186362 "$node_(0) setdest 194.68580405978113 90.0 50.09045927142169" +$ns_ at 39.17441332948374 "$node_(0) setdest 210.0 90.0 50.01083775115091" +$ns_ at 39.48063087409719 "$node_(0) setdest 210.0 104.68580405978113 50.01083775112181" +$ns_ at 39.774283304653636 "$node_(0) setdest 210.0 119.68580405978113 50.16622061891001" +$ns_ at 40.073289285469855 "$node_(0) setdest 210.0 129.68580405978113 50.00064082185439" +$ns_ at 40.27328672221529 "$node_(0) setdest 210.0 130.0 49.99999999937131" +$ns_ at 40.279570641019745 "$node_(0) setdest 200.31419594021887 130.0 50.000000000067345" +$ns_ at 40.47328672221511 "$node_(0) setdest 195.31419594021887 130.0 50.000000000045475" +$ns_ at 40.573286722215016 "$node_(0) setdest 190.0 130.0 50.00000000000561" +$ns_ at 40.67957064101938 "$node_(0) setdest 190.0 139.68580405978113 50.000000000067345" +$ns_ at 40.87328672221474 "$node_(0) setdest 190.0 164.68580405978113 50.129808751880184" +$ns_ at 41.37199199603174 "$node_(0) setdest 190.0 170.0 50.00000000000561" +$ns_ at 41.478275914836104 "$node_(0) setdest 194.68580405978113 170.0 50.00000000009068" +$ns_ at 41.57199199603156 "$node_(0) setdest 210.0 170.0 50.22164628104912" +$ns_ at 41.87692417317521 "$node_(0) setdest 210.0 110.31419594021887 50.22164628103643" +$ns_ at 43.0653719537554 "$node_(0) setdest 210.0 110.0 49.99999999937131" +$ns_ at 43.07165587255986 "$node_(0) setdest 205.31419594021887 110.0 50.00000000009068" +$ns_ at 43.16537195375531 "$node_(0) setdest 190.0 110.0 50.11272866971771" +$ns_ at 43.4709668863552 "$node_(0) setdest 190.0 114.68580405978113 50.112728669677175" +$ns_ at 43.564472153064344 "$node_(0) setdest 190.0 154.68580405978113 50.000000000045475" +$ns_ at 44.364472153063616 "$node_(0) setdest 190.0 164.68580405978113 50.000000000045475" +$ns_ at 44.564472153063434 "$node_(0) setdest 190.0 170.0 50.00000000000561" +$ns_ at 44.6707560718678 "$node_(0) setdest 210.0 170.0 50.000000000045475" +$ns_ at 45.070756071867436 "$node_(0) setdest 210.0 179.68580405978113 50.000000000067345" +$ns_ at 45.2644721530628 "$node_(0) setdest 210.0 210.0 50.081083118532455" +$ns_ at 45.869774475867416 "$node_(0) setdest 190.0 210.0 50.081083118538814" +$ns_ at 46.269126861131554 "$node_(0) setdest 190.0 200.31419594021887 50.081083118558716" +$ns_ at 46.46252930885521 "$node_(0) setdest 190.0 190.0 50.00000000002494" +$ns_ at 46.668813227659484 "$node_(0) setdest 194.68580405978113 190.0 50.00000000009068" +$ns_ at 46.76252930885494 "$node_(0) setdest 199.68580405978113 190.0 50.000000000045475" +$ns_ at 46.862529308854846 "$node_(0) setdest 210.0 190.0 50.00000000002494" +$ns_ at 47.06881322765912 "$node_(0) setdest 210.0 170.0 50.000000000045475" +$ns_ at 47.46881322765876 "$node_(0) setdest 150.0 170.0 50.000000000045475" +$ns_ at 48.668813227657665 "$node_(0) setdest 150.0 174.68580405978113 50.00000000009068" +$ns_ at 48.76252930885312 "$node_(0) setdest 150.0 189.68580405978113 50.000000000045475" +$ns_ at 49.062529308852845 "$node_(0) setdest 150.0 210.0 50.2484922455739" +$ns_ at 49.46680404491735 "$node_(0) setdest 154.68580405978113 210.0 50.24849224547915" +$ns_ at 49.560056675004034 "$node_(0) setdest 190.0 210.0 50.116283087153136" +$ns_ at 50.264701827534736 "$node_(0) setdest 190.0 170.0 50.116283087157974" +$ns_ at 51.06284561506254 "$node_(0) setdest 210.0 170.0 50.116283087157974" +$ns_ at 51.461917508826446 "$node_(0) setdest 210.0 165.31419594021887 50.11628308719444" +$ns_ at 51.55541614382355 "$node_(0) setdest 210.0 130.0 50.37019790698176" +$ns_ at 52.256509198995445 "$node_(0) setdest 190.31419594021887 130.0 50.37019790701125" +$ns_ at 52.64733164714471 "$node_(0) setdest 185.31419594021887 130.0 50.079844902393454" +$ns_ at 52.74717221194169 "$node_(0) setdest 150.0 130.0 50.00000000003948" +$ns_ at 53.45345613074551 "$node_(0) setdest 150.0 115.31419594021887 50.0000000000599" +$ns_ at 53.74717221194078 "$node_(0) setdest 150.0 100.31419594021887 50.000000000045475" +$ns_ at 54.047172211940506 "$node_(0) setdest 150.0 95.31419594021887 50.03741587894379" +$ns_ at 54.147097436138665 "$node_(0) setdest 150.0 90.31419594021887 50.000000000045475" +$ns_ at 54.247097436138574 "$node_(0) setdest 150.0 60.314195940218866 50.000000000045475" +$ns_ at 54.84709743613803 "$node_(0) setdest 150.0 55.314195940218866 50.000000000045475" +$ns_ at 54.94709743613794 "$node_(0) setdest 150.0 30.0 50.000000000037105" +$ns_ at 55.45338135494194 "$node_(0) setdest 174.68580405978113 30.0 50.00000000005406" +$ns_ at 55.94709743613703 "$node_(0) setdest 210.0 30.0 50.00000000003948" +$ns_ at 56.65338135494085 "$node_(0) setdest 210.0 44.685804059781134 50.0000000000599" +$ns_ at 56.94709743613612 "$node_(0) setdest 210.0 50.0 50.00000000000561" +$ns_ at 57.053381354940484 "$node_(0) setdest 190.0 50.0 50.000000000045475" +$ns_ at 57.45338135494012 "$node_(0) setdest 190.0 30.314195940218866 50.00000000005623" +$ns_ at 57.8470974361353 "$node_(0) setdest 190.0 20.314195940218866 50.232758488375026" +$ns_ at 58.04617071622033 "$node_(0) setdest 190.0 10.0 50.00000000002494" +$ns_ at 58.252454635024606 "$node_(0) setdest 204.68580405978113 10.0 50.0000000000599" +$ns_ at 58.546170716219876 "$node_(0) setdest 209.68580405978113 10.0 50.000000000045475" +$ns_ at 58.646170716219785 "$node_(0) setdest 210.0 10.0 50.04341386137547" +$ns_ at 58.652449183573935 "$node_(0) setdest 210.0 24.685804059781134 50.043413860063254" +$ns_ at 58.94591045903462 "$node_(0) setdest 210.0 50.0 50.17212398805952" +$ns_ at 59.45045748491384 "$node_(0) setdest 200.31419594021887 50.0 50.17212398802743" +$ns_ at 59.64350899020974 "$node_(0) setdest 150.31419594021887 50.0 50.000000000045475" +$ns_ at 60.64350899020883 "$node_(0) setdest 130.0 50.0 50.00000000003505" +$ns_ at 61.04979290901292 "$node_(0) setdest 130.0 30.0 50.000000000045475" +$ns_ at 61.44979290901256 "$node_(0) setdest 150.0 30.0 50.000000000045475" +$ns_ at 61.849792909012194 "$node_(0) setdest 150.0 34.685804059781134 50.00000000009068" +$ns_ at 61.94350899020765 "$node_(0) setdest 150.0 39.685804059781134 50.13161210404934" +$ns_ at 62.04324645705037 "$node_(0) setdest 150.0 44.685804059781134 50.02543485470445" +$ns_ at 62.14319561320508 "$node_(0) setdest 150.0 84.68580405978113 50.257548547874336" +$ns_ at 62.93909595366631 "$node_(0) setdest 150.0 109.68580405978113 50.000000000045475" +$ns_ at 63.439095953665856 "$node_(0) setdest 150.0 110.0 49.99999999937131" +$ns_ at 63.44537987247031 "$node_(0) setdest 174.68580405978113 110.0 50.00000000005406" +$ns_ at 63.9390959536654 "$node_(0) setdest 179.68580405978113 110.0 50.000000000045475" +$ns_ at 64.03909595366531 "$node_(0) setdest 184.68580405978113 110.0 50.11443711382031" +$ns_ at 64.1388676020756 "$node_(0) setdest 194.68580405978113 110.0 50.266018524505625" +$ns_ at 64.33780915928537 "$node_(0) setdest 199.68580405978113 110.0 50.22269450597553" +$ns_ at 64.43736574519107 "$node_(0) setdest 210.0 110.0 50.32155630980134" +$ns_ at 64.64233150333894 "$node_(0) setdest 210.0 70.0 50.32155630980632" +$ns_ at 65.43721947845916 "$node_(0) setdest 190.0 70.0 50.32155630980632" +$ns_ at 65.83466346601926 "$node_(0) setdest 190.0 74.68580405978113 50.32155630981729" +$ns_ at 65.92778069854148 "$node_(0) setdest 190.0 90.0 50.00000000003164" +$ns_ at 66.23406461734567 "$node_(0) setdest 210.0 90.0 50.000000000045475" +$ns_ at 66.6340646173453 "$node_(0) setdest 210.0 65.31419594021887 50.00000000005406" +$ns_ at 67.12778069854039 "$node_(0) setdest 210.0 60.314195940218866 50.09998445196074" +$ns_ at 67.22758112871406 "$node_(0) setdest 210.0 50.314195940218866 50.000000000045475" +$ns_ at 67.42758112871388 "$node_(0) setdest 210.0 50.0 49.99999999937131" +$ns_ at 67.43386504751834 "$node_(0) setdest 200.31419594021887 50.0 50.000000000067345" +$ns_ at 67.6275811287137 "$node_(0) setdest 195.31419594021887 50.0 50.168007808608984" +$ns_ at 67.7272462383803 "$node_(0) setdest 150.0 50.0 50.0000000000408" +$ns_ at 68.63353015718394 "$node_(0) setdest 150.0 59.685804059781134 50.000000000067345" +$ns_ at 68.8272462383793 "$node_(0) setdest 150.0 74.68580405978113 50.000000000045475" +$ns_ at 69.12724623837903 "$node_(0) setdest 150.0 89.68580405978113 50.000000000045475" +$ns_ at 69.42724623837876 "$node_(0) setdest 150.0 90.0 49.99999999937131" +$ns_ at 69.43353015718321 "$node_(0) setdest 170.0 90.0 50.000000000045475" +$ns_ at 69.83353015718285 "$node_(0) setdest 170.0 109.68580405978113 50.00000000005623" +$ns_ at 70.22724623837803 "$node_(0) setdest 170.0 124.68580405978113 50.000000000045475" +$ns_ at 70.52724623837776 "$node_(0) setdest 170.0 184.68580405978113 50.20630609913808" +$ns_ at 71.72231523790788 "$node_(0) setdest 170.0 190.0 50.00000000000561" +$ns_ at 71.82859915671224 "$node_(0) setdest 179.68580405978113 190.0 50.000000000067345" +$ns_ at 72.0223152379076 "$node_(0) setdest 210.0 190.0 50.021444549795284" +$ns_ at 72.62833923847484 "$node_(0) setdest 210.0 155.31419594021887 50.02144454979793" +$ns_ at 73.3217579186421 "$node_(0) setdest 210.0 150.31419594021887 50.15650808649834" +$ns_ at 73.42144587920302 "$node_(0) setdest 210.0 150.0 50.183759096275544" +$ns_ at 73.42770678802844 "$node_(0) setdest 195.31419594021887 150.0 50.18375909500558" +$ns_ at 73.7203473618838 "$node_(0) setdest 190.0 150.0 50.00000000000561" +$ns_ at 73.82663128068816 "$node_(0) setdest 190.0 170.0 50.000000000045475" +$ns_ at 74.2266312806878 "$node_(0) setdest 210.0 170.0 50.000000000045475" +$ns_ at 74.62663128068743 "$node_(0) setdest 210.0 150.0 50.000000000045475" +$ns_ at 75.02663128068707 "$node_(0) setdest 195.31419594021887 150.0 50.0000000000599" +$ns_ at 75.32034736188234 "$node_(0) setdest 190.0 150.0 50.00000000000561" +$ns_ at 75.4266312806867 "$node_(0) setdest 190.0 140.31419594021887 50.000000000067345" +$ns_ at 75.62034736188207 "$node_(0) setdest 190.0 135.31419594021887 50.08333718915494" +$ns_ at 75.72018096484499 "$node_(0) setdest 190.0 100.31419594021887 50.34919108876659" +$ns_ at 76.41532619445343 "$node_(0) setdest 190.0 90.0 50.245495055600195" +$ns_ at 76.62060222823129 "$node_(0) setdest 210.0 90.0 50.2454950555717" +$ns_ at 77.01864786352417 "$node_(0) setdest 210.0 70.0 50.2454950555717" +$ns_ at 77.41669349881704 "$node_(0) setdest 200.31419594021887 70.0 50.245495055541355" +$ns_ at 77.60946310033205 "$node_(0) setdest 190.0 70.0 50.212546832306806" +$ns_ at 77.81487383113335 "$node_(0) setdest 190.0 55.314195940218866 50.212546832316995" +$ns_ at 78.10734662899449 "$node_(0) setdest 190.0 50.314195940218866 50.32687984989574" +$ns_ at 78.20669711555183 "$node_(0) setdest 190.0 50.0 49.99999999937131" +$ns_ at 78.21298103435629 "$node_(0) setdest 199.68580405978113 50.0 50.000000000067345" +$ns_ at 78.40669711555165 "$node_(0) setdest 210.0 50.0 50.00000000002494" +$ns_ at 78.61298103435593 "$node_(0) setdest 210.0 35.314195940218866 50.0000000000599" +$ns_ at 78.9066971155512 "$node_(0) setdest 210.0 10.0 50.05865532250819" +$ns_ at 79.41238780534559 "$node_(0) setdest 190.0 10.0 50.05865532250727" +$ns_ at 79.81191911259202 "$node_(0) setdest 190.0 19.685804059781134 50.0586553225049" +$ns_ at 80.00540821047889 "$node_(0) setdest 190.0 30.0 50.033407596465196" +$ns_ at 80.21155439231416 "$node_(0) setdest 210.0 30.0 50.033407596444384" +$ns_ at 80.61128730999417 "$node_(0) setdest 210.0 20.314195940218866 50.03340759642223" +$ns_ at 80.80487404583891 "$node_(0) setdest 210.0 10.314195940218866 50.000000000045475" +$ns_ at 81.00487404583873 "$node_(0) setdest 210.0 10.0 50.07906805058731" +$ns_ at 81.01114804318831 "$node_(0) setdest 180.31419594021887 10.0 50.07906805153294" +$ns_ at 81.60392672727312 "$node_(0) setdest 175.31419594021887 10.0 50.35838568529393" +$ns_ at 81.70321505695165 "$node_(0) setdest 170.0 10.0 50.00000000000561" +$ns_ at 81.80949897575601 "$node_(0) setdest 170.0 19.685804059781134 50.000000000067345" +$ns_ at 82.00321505695138 "$node_(0) setdest 170.0 30.0 50.00000000002494" +$ns_ at 82.20949897575565 "$node_(0) setdest 190.0 30.0 50.000000000045475" +$ns_ at 82.60949897575529 "$node_(0) setdest 190.0 10.0 50.000000000045475" +$ns_ at 83.00949897575492 "$node_(0) setdest 209.68580405978113 10.0 50.00000000005623" +$ns_ at 83.4032150569501 "$node_(0) setdest 210.0 10.0 50.25402113846055" +$ns_ at 83.40946721216278 "$node_(0) setdest 210.0 14.685804059781134 50.25402113957457" +$ns_ at 83.50270958269402 "$node_(0) setdest 210.0 29.685804059781134 50.000000000045475" +$ns_ at 83.80270958269375 "$node_(0) setdest 210.0 30.0 49.99999999937131" +$ns_ at 83.80899350149821 "$node_(0) setdest 190.0 30.0 50.000000000045475" +$ns_ at 84.20899350149784 "$node_(0) setdest 190.0 39.685804059781134 50.000000000067345" +$ns_ at 84.4027095826932 "$node_(0) setdest 190.0 44.685804059781134 50.32171184922719" +$ns_ at 84.50207027246825 "$node_(0) setdest 190.0 59.685804059781134 50.000000000045475" +$ns_ at 84.80207027246797 "$node_(0) setdest 190.0 70.0 50.00000000002494" +$ns_ at 85.00835419127225 "$node_(0) setdest 199.68580405978113 70.0 50.000000000067345" +$ns_ at 85.20207027246761 "$node_(0) setdest 209.68580405978113 70.0 50.000000000045475" +$ns_ at 85.40207027246743 "$node_(0) setdest 210.0 70.0 50.39337373853123" +$ns_ at 85.40830513861965 "$node_(0) setdest 210.0 40.314195940218866 50.3933737367722" +$ns_ at 85.99738663601738 "$node_(0) setdest 210.0 35.314195940218866 50.000000000045475" +$ns_ at 86.09738663601729 "$node_(0) setdest 210.0 10.0 50.11452015491073" +$ns_ at 86.60251361043447 "$node_(0) setdest 190.31419594021887 10.0 50.11452015495504" +$ns_ at 86.99532998379118 "$node_(0) setdest 190.0 10.0 50.27759349055499" +$ns_ at 87.0015792077179 "$node_(0) setdest 190.0 24.685804059781134 50.277593491111354" +$ns_ at 87.29367361876757 "$node_(0) setdest 190.0 70.0 50.10520179252645" +$ns_ at 88.19805468738105 "$node_(0) setdest 199.68580405978113 70.0 50.10520179245636" +$ns_ at 88.39136403877137 "$node_(0) setdest 210.0 70.0 50.056140550229955" +$ns_ at 88.59741659949304 "$node_(0) setdest 210.0 55.314195940218866 50.05614055025426" +$ns_ at 88.89080326291423 "$node_(0) setdest 210.0 50.0 50.00000000000561" +$ns_ at 88.9970871817186 "$node_(0) setdest 200.31419594021887 50.0 50.000000000067345" +$ns_ at 89.19080326291396 "$node_(0) setdest 190.0 50.0 50.22336763100995" +$ns_ at 89.39616973726106 "$node_(0) setdest 190.0 40.314195940218866 50.22336763107361" +$ns_ at 89.5890242692576 "$node_(0) setdest 190.0 30.0 50.00254077854052" +$ns_ at 89.79529770615954 "$node_(0) setdest 210.0 30.0 50.00254077849782" +$ns_ at 90.1952773809644 "$node_(0) setdest 210.0 50.0 50.00254077849782" +$ns_ at 90.59525705576925 "$node_(0) setdest 200.31419594021887 50.0 50.002540778452335" +$ns_ at 90.78896329367217 "$node_(0) setdest 195.31419594021887 50.0 50.000000000045475" +$ns_ at 90.88896329367208 "$node_(0) setdest 190.31419594021887 50.0 50.000000000045475" +$ns_ at 90.98896329367199 "$node_(0) setdest 180.31419594021887 50.0 50.000000000045475" +$ns_ at 91.1889632936718 "$node_(0) setdest 170.0 50.0 50.00000000002494" +$ns_ at 91.39524721247608 "$node_(0) setdest 170.0 74.68580405978113 50.00000000005406" +$ns_ at 91.88896329367117 "$node_(0) setdest 170.0 89.68580405978113 50.03141905014988" +$ns_ at 92.18877489775468 "$node_(0) setdest 170.0 129.68580405978113 50.000000000045475" +$ns_ at 92.98877489775396 "$node_(0) setdest 170.0 130.0 50.05460246882012" +$ns_ at 92.99505196169457 "$node_(0) setdest 174.68580405978113 130.0 50.05460246905168" +$ns_ at 93.08866581194297 "$node_(0) setdest 189.68580405978113 130.0 50.06264040786431" +$ns_ at 93.38829043976511 "$node_(0) setdest 194.68580405978113 130.0 50.000000000045475" +$ns_ at 93.48829043976502 "$node_(0) setdest 210.0 130.0 50.202933689869916" +$ns_ at 93.79333627702272 "$node_(0) setdest 210.0 170.0 50.20293368986951" +$ns_ at 94.59010246298112 "$node_(0) setdest 205.31419594021887 170.0 50.202933689868175" +$ns_ at 94.68343971870263 "$node_(0) setdest 170.0 170.0 50.285254177126966" +$ns_ at 95.38571708645395 "$node_(0) setdest 170.0 160.31419594021887 50.285254177030914" +$ns_ at 95.5783342705231 "$node_(0) setdest 170.0 150.0 50.00000000002494" +$ns_ at 95.78461818932738 "$node_(0) setdest 189.68580405978113 150.0 50.00000000005623" +$ns_ at 96.17833427052256 "$node_(0) setdest 190.0 150.0 49.99999999937131" +$ns_ at 96.18461818932701 "$node_(0) setdest 190.0 190.0 50.000000000045475" +$ns_ at 96.98461818932628 "$node_(0) setdest 209.68580405978113 190.0 50.00000000005623" +$ns_ at 97.37833427052146 "$node_(0) setdest 210.0 190.0 49.99999999937131" +$ns_ at 97.38461818932592 "$node_(0) setdest 210.0 170.0 50.000000000045475" +$ns_ at 97.78461818932556 "$node_(0) setdest 190.31419594021887 170.0 50.00000000005623" +$ns_ at 98.17833427052074 "$node_(0) setdest 185.31419594021887 170.0 50.000000000045475" +$ns_ at 98.27833427052065 "$node_(0) setdest 130.0 170.0 50.000000000041645" +$ns_ at 99.3846181893241 "$node_(0) setdest 130.0 150.0 50.000000000045475" +$ns_ at 99.78461818932374 "$node_(0) setdest 140.76909053382604 150.0 50.00000000005991" +$node_(1) set X_ 195.41843780583298 +$node_(1) set Y_ 150.0 +$ns_ at 0.0 "$node_(1) setdest 200.66722776717626 150.0 50.1186137321417" +$ns_ at 0.10472735717303294 "$node_(1) setdest 205.66722776717626 150.0 50.12394666822694" +$ns_ at 0.20448007682807656 "$node_(1) setdest 210.0 150.0 50.07421529881941" +$ns_ at 0.29100708892337934 "$node_(1) setdest 210.0 150.66722776717626 50.074215298892376" +$ns_ at 0.30433186622030917 "$node_(1) setdest 210.0 165.66722776717626 50.000000000045475" +$ns_ at 0.6043318662200363 "$node_(1) setdest 210.0 170.0 49.999999999944244" +$ns_ at 0.6909873108766078 "$node_(1) setdest 190.0 170.0 50.000000000045475" +$ns_ at 1.090987310876244 "$node_(1) setdest 190.0 169.33277223282374 50.00000000070285" +$ns_ at 1.1043318662195816 "$node_(1) setdest 190.0 150.0 50.21107796711817" +$ns_ at 1.4893618838082148 "$node_(1) setdest 210.0 150.0 50.211077967129654" +$ns_ at 1.8876803587290851 "$node_(1) setdest 210.0 170.0 50.211077967129654" +$ns_ at 2.2859988336499555 "$node_(1) setdest 170.0 170.0 50.21107796710099" +$ns_ at 3.082635783492151 "$node_(1) setdest 170.0 169.33277223282374 50.21107796746239" +$ns_ at 3.095924240824388 "$node_(1) setdest 170.0 159.33277223282374 50.000000000045475" +$ns_ at 3.295924240824206 "$node_(1) setdest 170.0 144.33277223282374 50.19464432982333" +$ns_ at 3.594760903585211 "$node_(1) setdest 170.0 134.33277223282374 50.25387620884101" +$ns_ at 3.7937505289514775 "$node_(1) setdest 170.0 130.0 50.1079462418332" +$ns_ at 3.8802192940433997 "$node_(1) setdest 180.66722776717626 130.0 50.10794624184838" +$ns_ at 4.093104246775056 "$node_(1) setdest 190.0 130.0 50.10473676990816" +$ns_ at 4.279369514980772 "$node_(1) setdest 190.0 129.33277223282374 50.10473677068463" +$ns_ at 4.292686175444032 "$node_(1) setdest 190.0 119.33277223282374 50.32619142001604" +$ns_ at 4.491389866660029 "$node_(1) setdest 190.0 110.0 49.99999999999848" +$ns_ at 4.6780453113165095 "$node_(1) setdest 210.0 110.0 50.000000000045475" +$ns_ at 5.078045311316146 "$node_(1) setdest 210.0 145.66722776717626 50.000000000057774" +$ns_ at 5.791389866658847 "$node_(1) setdest 210.0 155.66722776717626 50.01009714770057" +$ns_ at 5.991349486222589 "$node_(1) setdest 210.0 165.66722776717626 50.000000000045475" +$ns_ at 6.191349486222407 "$node_(1) setdest 210.0 170.0 49.999999999944244" +$ns_ at 6.2780049308789785 "$node_(1) setdest 204.33277223282374 170.0 50.00000000012287" +$ns_ at 6.391349486222225 "$node_(1) setdest 194.33277223282374 170.0 50.275754456935864" +$ns_ at 6.590252518270518 "$node_(1) setdest 179.33277223282374 170.0 50.000000000045475" +$ns_ at 6.890252518270245 "$node_(1) setdest 170.0 170.0 50.07957383813818" +$ns_ at 7.076611377133304 "$node_(1) setdest 170.0 185.66722776717626 50.0795738382259" +$ns_ at 7.389458044275216 "$node_(1) setdest 170.0 190.0 50.08741531801948" +$ns_ at 7.475962253073249 "$node_(1) setdest 180.66722776717626 190.0 50.08741531791583" +$ns_ at 7.6889344677397276 "$node_(1) setdest 190.0 190.0 49.99999999999848" +$ns_ at 7.875589912396208 "$node_(1) setdest 190.0 190.66722776717626 50.00000000070285" +$ns_ at 7.888934467739546 "$node_(1) setdest 190.0 210.0 50.00000000002279" +$ns_ at 8.275589912395844 "$node_(1) setdest 195.66722776717626 210.0 50.00000000012287" +$ns_ at 8.388934467739091 "$node_(1) setdest 210.0 210.0 50.00000000001487" +$ns_ at 8.67558991239548 "$node_(1) setdest 210.0 204.33277223282374 50.00000000012287" +$ns_ at 8.788934467738727 "$node_(1) setdest 210.0 194.33277223282374 50.000000000045475" +$ns_ at 8.988934467738545 "$node_(1) setdest 210.0 184.33277223282374 50.03890482368185" +$ns_ at 9.188778969436498 "$node_(1) setdest 210.0 164.33277223282374 50.000000000045475" +$ns_ at 9.588778969436135 "$node_(1) setdest 210.0 150.0 50.1733961870809" +$ns_ at 9.874443750416503 "$node_(1) setdest 150.0 150.0 50.17339618709069" +$ns_ at 11.070296623845024 "$node_(1) setdest 150.0 149.33277223282374 50.17339618730111" +$ns_ at 11.083595061221786 "$node_(1) setdest 150.0 144.33277223282374 50.247334367659555" +$ns_ at 11.183102827413222 "$node_(1) setdest 150.0 94.33277223282374 50.0109997444354" +$ns_ at 12.18288288091162 "$node_(1) setdest 150.0 90.0 50.14933910079607" +$ns_ at 12.269280275384062 "$node_(1) setdest 155.66722776717626 90.0 50.14933910061448" +$ns_ at 12.38228730336914 "$node_(1) setdest 170.0 90.0 50.00000000001487" +$ns_ at 12.668942748025529 "$node_(1) setdest 170.0 39.33277223282374 50.00000000005413" +$ns_ at 13.682287303367957 "$node_(1) setdest 170.0 29.332772232823743 50.000000000045475" +$ns_ at 13.882287303367775 "$node_(1) setdest 170.0 14.332772232823743 50.2485967502627" +$ns_ at 14.180803102217851 "$node_(1) setdest 170.0 10.0 49.999999999944244" +$ns_ at 14.267458546874423 "$node_(1) setdest 190.0 10.0 50.000000000045475" +$ns_ at 14.667458546874059 "$node_(1) setdest 190.0 20.667227767176257 50.000000000086594" +$ns_ at 14.880803102217214 "$node_(1) setdest 190.0 30.0 50.29700493087855" +$ns_ at 15.066356342328618 "$node_(1) setdest 210.0 30.0 50.29700493093136" +$ns_ at 15.463994333446863 "$node_(1) setdest 210.0 50.0 50.29700493093136" +$ns_ at 15.861632324565107 "$node_(1) setdest 190.0 50.0 50.29700493093136" +$ns_ at 16.259270315683352 "$node_(1) setdest 190.0 90.0 50.29700493093136" +$ns_ at 17.054546297919842 "$node_(1) setdest 200.66722776717626 90.0 50.29700493097756" +$ns_ at 17.266631048926683 "$node_(1) setdest 210.0 90.0 50.160990095057876" +$ns_ at 17.452687428897207 "$node_(1) setdest 210.0 95.66722776717626 50.16099009520778" +$ns_ at 17.565668208511397 "$node_(1) setdest 210.0 105.66722776717626 50.000000000045475" +$ns_ at 17.765668208511215 "$node_(1) setdest 210.0 110.0 50.000428691125805" +$ns_ at 17.852322910205658 "$node_(1) setdest 150.0 110.0 50.000428691092786" +$ns_ at 19.052312621707642 "$node_(1) setdest 150.0 130.0 50.000428691092786" +$ns_ at 19.452309192208304 "$node_(1) setdest 170.0 130.0 50.000428691092786" +$ns_ at 19.852305762708966 "$node_(1) setdest 170.0 150.0 50.000428691092786" +$ns_ at 20.252302333209627 "$node_(1) setdest 175.66722776717626 150.0 50.00042869106754" +$ns_ at 20.365645916765516 "$node_(1) setdest 190.0 150.0 50.095894633308724" +$ns_ at 20.651752639436836 "$node_(1) setdest 190.0 185.66722776717626 50.095894633280594" +$ns_ at 21.363731695370916 "$node_(1) setdest 190.0 190.0 49.999999999944244" +$ns_ at 21.450387140027487 "$node_(1) setdest 190.66722776717626 190.0 50.00000000070285" +$ns_ at 21.463731695370825 "$node_(1) setdest 210.0 190.0 50.14609466461715" +$ns_ at 21.84926066551543 "$node_(1) setdest 210.0 210.0 50.146094664613955" +$ns_ at 22.248095313233534 "$node_(1) setdest 209.33277223282374 210.0 50.14609466452139" +$ns_ at 22.261400990807033 "$node_(1) setdest 189.33277223282374 210.0 50.000000000045475" +$ns_ at 22.66140099080667 "$node_(1) setdest 164.33277223282374 210.0 50.27645838787196" +$ns_ at 23.15865160872272 "$node_(1) setdest 144.33277223282374 210.0 50.13514618882005" +$ns_ at 23.557573353653424 "$node_(1) setdest 139.33277223282374 210.0 50.000000000045475" +$ns_ at 23.657573353653333 "$node_(1) setdest 130.0 210.0 50.177566240339544" +$ns_ at 23.84356826994963 "$node_(1) setdest 130.0 194.33277223282374 50.17756624030696" +$ns_ at 24.15580397488884 "$node_(1) setdest 130.0 189.33277223282374 50.05080606990031" +$ns_ at 24.2557024658945 "$node_(1) setdest 130.0 174.33277223282374 50.000000000045475" +$ns_ at 24.55570246589423 "$node_(1) setdest 130.0 170.0 50.00573855770331" +$ns_ at 24.642347966146644 "$node_(1) setdest 140.66722776717626 170.0 50.00573855764801" +$ns_ at 24.855668038499516 "$node_(1) setdest 150.0 170.0 49.99999999999848" +$ns_ at 25.042323483155997 "$node_(1) setdest 150.0 170.66722776717626 50.00000000070285" +$ns_ at 25.055668038499334 "$node_(1) setdest 150.0 190.0 50.08240616475188" +$ns_ at 25.441687275858385 "$node_(1) setdest 175.66722776717626 190.0 50.08240616473204" +$ns_ at 25.954187168190856 "$node_(1) setdest 210.0 190.0 50.0000000000327" +$ns_ at 26.640842612846882 "$node_(1) setdest 210.0 190.66722776717626 50.00000000070285" +$ns_ at 26.65418716819022 "$node_(1) setdest 210.0 210.0 50.00000000002279" +$ns_ at 27.040842612846518 "$node_(1) setdest 150.0 210.0 50.000000000045475" +$ns_ at 28.240842612845427 "$node_(1) setdest 150.0 204.33277223282374 50.00000000012287" +$ns_ at 28.354187168188673 "$node_(1) setdest 150.0 190.0 50.00000000001487" +$ns_ at 28.640842612845063 "$node_(1) setdest 170.0 190.0 50.000000000045475" +$ns_ at 29.0408426128447 "$node_(1) setdest 170.0 210.0 50.000000000045475" +$ns_ at 29.440842612844335 "$node_(1) setdest 185.66722776717626 210.0 50.00000000007347" +$ns_ at 29.7541871681874 "$node_(1) setdest 205.66722776717626 210.0 50.00644285456036" +$ns_ at 30.15413563199172 "$node_(1) setdest 210.0 210.0 49.999999999944244" +$ns_ at 30.240791076648293 "$node_(1) setdest 210.0 194.33277223282374 50.00000000007347" +$ns_ at 30.554135631991358 "$node_(1) setdest 210.0 189.33277223282374 50.22184474686376" +$ns_ at 30.653693902405394 "$node_(1) setdest 210.0 174.33277223282374 50.101911690652265" +$ns_ at 30.95308367604548 "$node_(1) setdest 210.0 170.0 49.999999999944244" +$ns_ at 31.039739120702052 "$node_(1) setdest 190.0 170.0 50.000000000045475" +$ns_ at 31.439739120701688 "$node_(1) setdest 190.0 175.66722776717626 50.00000000012287" +$ns_ at 31.553083676044935 "$node_(1) setdest 190.0 190.0 50.10552903814562" +$ns_ at 31.839135385466307 "$node_(1) setdest 210.0 190.0 50.10552903813946" +$ns_ at 32.2382929312289 "$node_(1) setdest 210.0 190.66722776717626 50.10552903757946" +$ns_ at 32.25160938112958 "$node_(1) setdest 210.0 195.66722776717626 50.000000000045475" +$ns_ at 32.35160938112949 "$node_(1) setdest 210.0 210.0 50.00000000001487" +$ns_ at 32.63826482578588 "$node_(1) setdest 204.33277223282374 210.0 50.00000000012287" +$ns_ at 32.75160938112913 "$node_(1) setdest 190.0 210.0 50.08148884767557" +$ns_ at 33.03779840151583 "$node_(1) setdest 190.0 194.33277223282374 50.08148884768439" +$ns_ at 33.35063310606756 "$node_(1) setdest 190.0 190.0 50.09011851512145" +$ns_ at 33.43713264652115 "$node_(1) setdest 205.66722776717626 190.0 50.090118515172016" +$ns_ at 33.74991345502394 "$node_(1) setdest 210.0 190.0 49.999999999944244" +$ns_ at 33.836568899680515 "$node_(1) setdest 210.0 154.33277223282374 50.000000000057774" +$ns_ at 34.549913455023216 "$node_(1) setdest 210.0 150.0 50.20269217980406" +$ns_ at 34.63621903037574 "$node_(1) setdest 199.33277223282374 150.0 50.202692179724856" +$ns_ at 34.84870221213396 "$node_(1) setdest 190.0 150.0 50.116336137251466" +$ns_ at 35.03492436946135 "$node_(1) setdest 190.0 160.66722776717626 50.11633613721932" +$ns_ at 35.24777368346486 "$node_(1) setdest 190.0 200.66722776717626 50.000000000045475" +$ns_ at 36.04777368346413 "$node_(1) setdest 190.0 210.0 49.99999999999848" +$ns_ at 36.23442912812061 "$node_(1) setdest 210.0 210.0 50.000000000045475" +$ns_ at 36.634429128120246 "$node_(1) setdest 210.0 174.33277223282374 50.000000000057774" +$ns_ at 37.34777368346295 "$node_(1) setdest 210.0 169.33277223282374 50.170889603230606" +$ns_ at 37.44743306840792 "$node_(1) setdest 210.0 154.33277223282374 50.195272915138894" +$ns_ at 37.74626598889745 "$node_(1) setdest 210.0 150.0 50.153939191387266" +$ns_ at 37.83265545905033 "$node_(1) setdest 194.33277223282374 150.0 50.153939191414544" +$ns_ at 38.14503825529255 "$node_(1) setdest 190.0 150.0 49.999999999944244" +$ns_ at 38.23169369994912 "$node_(1) setdest 190.0 119.33277223282374 50.00000000005978" +$ns_ at 38.84503825529191 "$node_(1) setdest 190.0 114.33277223282374 50.04450643980275" +$ns_ at 38.94494932157477 "$node_(1) setdest 190.0 110.0 50.036520020554384" +$ns_ at 39.03154151925446 "$node_(1) setdest 195.66722776717626 110.0 50.03652002060693" +$ns_ at 39.14480334811151 "$node_(1) setdest 210.0 110.0 50.595322031926976" +$ns_ at 39.4280859058108 "$node_(1) setdest 210.0 130.0 50.59532203193804" +$ns_ at 39.82337936767226 "$node_(1) setdest 204.33277223282374 130.0 50.59532203196602" +$ns_ at 39.93539027183442 "$node_(1) setdest 190.0 130.0 50.00000000001487" +$ns_ at 40.22204571649081 "$node_(1) setdest 190.0 129.33277223282374 50.00000000070285" +$ns_ at 40.23539027183415 "$node_(1) setdest 190.0 119.33277223282374 50.000000000045475" +$ns_ at 40.43539027183397 "$node_(1) setdest 190.0 110.0 50.143134818090296" +$ns_ at 40.62151290390875 "$node_(1) setdest 210.0 110.0 50.14313481808566" +$ns_ at 41.02037109401908 "$node_(1) setdest 210.0 110.66722776717626 50.14313481802085" +$ns_ at 41.033677556999464 "$node_(1) setdest 210.0 120.66722776717626 50.026451773600684" +$ns_ at 41.23357180585117 "$node_(1) setdest 210.0 150.66722776717626 50.11125914800754" +$ns_ at 41.832239660342566 "$node_(1) setdest 210.0 165.66722776717626 50.10071434729569" +$ns_ at 42.13163658901749 "$node_(1) setdest 210.0 170.0 49.999999999944244" +$ns_ at 42.21829203367406 "$node_(1) setdest 194.33277223282374 170.0 50.00000000007347" +$ns_ at 42.531636589017126 "$node_(1) setdest 190.0 170.0 50.094007042496834" +$ns_ at 42.618129414978284 "$node_(1) setdest 190.0 150.0 50.09400704258953" +$ns_ at 43.01737876995594 "$node_(1) setdest 210.0 150.0 50.09400704258953" +$ns_ at 43.416628124933595 "$node_(1) setdest 210.0 155.66722776717626 50.0940070426604" +$ns_ at 43.529759976461264 "$node_(1) setdest 210.0 165.66722776717626 50.000000000045475" +$ns_ at 43.72975997646108 "$node_(1) setdest 210.0 170.0 50.07367252074779" +$ns_ at 43.816287926473706 "$node_(1) setdest 174.33277223282374 170.0 50.07367252080704" +$ns_ at 44.528582950417785 "$node_(1) setdest 170.0 170.0 50.016042032508516" +$ns_ at 44.615210601402396 "$node_(1) setdest 170.0 170.66722776717626 50.01604203301842" +$ns_ at 44.6285508766432 "$node_(1) setdest 170.0 180.66722776717626 50.23899505678924" +$ns_ at 44.82759944416921 "$node_(1) setdest 170.0 190.0 50.155404000084765" +$ns_ at 45.01367654630576 "$node_(1) setdest 180.66722776717626 190.0 50.155404000079685" +$ns_ at 45.22636006426046 "$node_(1) setdest 185.66722776717626 190.0 50.21537081871098" +$ns_ at 45.32593117004899 "$node_(1) setdest 190.0 190.0 50.19734248996902" +$ns_ at 45.41224594326013 "$node_(1) setdest 190.0 184.33277223282374 50.19734249008905" +$ns_ at 45.525144903365344 "$node_(1) setdest 190.0 179.33277223282374 50.000000000045475" +$ns_ at 45.62514490336525 "$node_(1) setdest 190.0 170.0 50.039030256883294" +$ns_ at 45.81165475747139 "$node_(1) setdest 195.66722776717626 170.0 50.03903025677287" +$ns_ at 45.92491090448493 "$node_(1) setdest 210.0 170.0 50.00000000001487" +$ns_ at 46.21156634914132 "$node_(1) setdest 210.0 180.66722776717626 50.000000000086594" +$ns_ at 46.42491090448448 "$node_(1) setdest 210.0 185.66722776717626 50.15317019131568" +$ns_ at 46.52460549968009 "$node_(1) setdest 210.0 195.66722776717626 50.000000000045475" +$ns_ at 46.72460549967991 "$node_(1) setdest 210.0 210.0 50.082854884847315" +$ns_ at 47.01078671410505 "$node_(1) setdest 189.33277223282374 210.0 50.08285488482249" +$ns_ at 47.423447450293224 "$node_(1) setdest 130.0 210.0 50.06607854392904" +$ns_ at 48.6085367154883 "$node_(1) setdest 130.0 204.33277223282374 50.06607854399111" +$ns_ at 48.72173167566871 "$node_(1) setdest 130.0 184.33277223282374 50.000000000045475" +$ns_ at 49.12173167566834 "$node_(1) setdest 130.0 170.0 50.14446539854782" +$ns_ at 49.40756127059785 "$node_(1) setdest 150.0 170.0 50.14446539855977" +$ns_ at 49.8064088770293 "$node_(1) setdest 150.0 175.66722776717626 50.144465398589965" +$ns_ at 49.919426888531234 "$node_(1) setdest 150.0 180.66722776717626 50.01682108137802" +$ns_ at 50.01939325768262 "$node_(1) setdest 150.0 210.0 50.000000000030525" +$ns_ at 50.60604870233874 "$node_(1) setdest 155.66722776717626 210.0 50.00000000012287" +$ns_ at 50.719393257681986 "$node_(1) setdest 170.0 210.0 50.00000000001487" +$ns_ at 51.006048702338376 "$node_(1) setdest 170.0 159.33277223282374 50.00000000005413" +$ns_ at 52.019393257680804 "$node_(1) setdest 170.0 130.0 50.031020246654414" +$ns_ at 52.605684964070406 "$node_(1) setdest 180.66722776717626 130.0 50.031020246701885" +$ns_ at 52.81889724146504 "$node_(1) setdest 190.0 130.0 50.212394624865034" +$ns_ at 53.004763147732774 "$node_(1) setdest 190.0 150.0 50.212394624921615" +$ns_ at 53.40307117803877 "$node_(1) setdest 205.66722776717626 150.0 50.212394624955316" +$ns_ at 53.71509030965353 "$node_(1) setdest 210.0 150.0 49.999999999944244" +$ns_ at 53.801745754310105 "$node_(1) setdest 210.0 170.0 50.000000000045475" +$ns_ at 54.20174575430974 "$node_(1) setdest 194.33277223282374 170.0 50.00000000007347" +$ns_ at 54.515090309652805 "$node_(1) setdest 184.33277223282374 170.0 50.271295487877246" +$ns_ at 54.71401098402475 "$node_(1) setdest 170.0 170.0 50.00000000001487" +$ns_ at 55.00066642868114 "$node_(1) setdest 170.0 210.0 50.000000000045475" +$ns_ at 55.800666428680415 "$node_(1) setdest 170.66722776717626 210.0 50.00000000070285" +$ns_ at 55.81401098402375 "$node_(1) setdest 185.66722776717626 210.0 50.15474088233156" +$ns_ at 56.11308540323353 "$node_(1) setdest 190.0 210.0 50.242203970933836" +$ns_ at 56.1993231056108 "$node_(1) setdest 190.0 170.0 50.24220397113581" +$ns_ at 56.99546652366189 "$node_(1) setdest 195.66722776717626 170.0 50.24220397113831" +$ns_ at 57.10826467579773 "$node_(1) setdest 210.0 170.0 50.00000000001487" +$ns_ at 57.39492012045412 "$node_(1) setdest 210.0 154.33277223282374 50.00000000007347" +$ns_ at 57.70826467579718 "$node_(1) setdest 210.0 150.0 49.999999999944244" +$ns_ at 57.79492012045375 "$node_(1) setdest 209.33277223282374 150.0 50.00000000070285" +$ns_ at 57.80826467579709 "$node_(1) setdest 170.0 150.0 50.000000000034326" +$ns_ at 58.594920120453025 "$node_(1) setdest 170.0 134.33277223282374 50.00000000007347" +$ns_ at 58.90826467579609 "$node_(1) setdest 170.0 130.0 49.999999999944244" +$ns_ at 58.99492012045266 "$node_(1) setdest 175.66722776717626 130.0 50.00000000012287" +$ns_ at 59.10826467579591 "$node_(1) setdest 190.0 130.0 50.00000000001487" +$ns_ at 59.3949201204523 "$node_(1) setdest 190.0 90.0 50.000000000045475" +$ns_ at 60.19492012045157 "$node_(1) setdest 210.0 90.0 50.000000000045475" +$ns_ at 60.59492012045121 "$node_(1) setdest 210.0 90.66722776717626 50.00000000070285" +$ns_ at 60.608264675794544 "$node_(1) setdest 210.0 105.66722776717626 50.000000000045475" +$ns_ at 60.90826467579427 "$node_(1) setdest 210.0 115.66722776717626 50.000000000045475" +$ns_ at 61.10826467579409 "$node_(1) setdest 210.0 125.66722776717626 50.000000000045475" +$ns_ at 61.30826467579391 "$node_(1) setdest 210.0 130.0 49.999999999944244" +$ns_ at 61.39492012045048 "$node_(1) setdest 194.33277223282374 130.0 50.00000000007347" +$ns_ at 61.708264675793544 "$node_(1) setdest 190.0 130.0 50.19975742172592" +$ns_ at 61.79457529670799 "$node_(1) setdest 190.0 150.66722776717626 50.199757421761994" +$ns_ at 62.206275050424665 "$node_(1) setdest 190.0 165.66722776717626 50.091699943376135" +$ns_ at 62.505725857982725 "$node_(1) setdest 190.0 170.0 49.999999999944244" +$ns_ at 62.592381302639296 "$node_(1) setdest 210.0 170.0 50.000000000045475" +$ns_ at 62.99238130263893 "$node_(1) setdest 210.0 150.0 50.000000000045475" +$ns_ at 63.39238130263857 "$node_(1) setdest 204.33277223282374 150.0 50.00000000012287" +$ns_ at 63.505725857981815 "$node_(1) setdest 194.33277223282374 150.0 50.27022390930776" +$ns_ at 63.70465077261997 "$node_(1) setdest 174.33277223282374 150.0 50.000000000045475" +$ns_ at 64.1046507726196 "$node_(1) setdest 170.0 150.0 49.999999999944244" +$ns_ at 64.19130621727618 "$node_(1) setdest 170.0 149.33277223282374 50.00000000070285" +$ns_ at 64.20465077261952 "$node_(1) setdest 170.0 129.33277223282374 50.000000000045475" +$ns_ at 64.60465077261915 "$node_(1) setdest 170.0 124.33277223282374 50.000000000045475" +$ns_ at 64.70465077261906 "$node_(1) setdest 170.0 119.33277223282374 50.000000000045475" +$ns_ at 64.80465077261897 "$node_(1) setdest 170.0 109.33277223282374 50.06735514924175" +$ns_ at 65.00438171447104 "$node_(1) setdest 170.0 99.33277223282374 50.000000000045475" +$ns_ at 65.20438171447086 "$node_(1) setdest 170.0 90.0 50.07335008311138" +$ns_ at 65.39076373639136 "$node_(1) setdest 190.0 90.0 50.07335008312027" +$ns_ at 65.79017779530295 "$node_(1) setdest 190.0 74.33277223282374 50.07335008314375" +$ns_ at 66.10306334702182 "$node_(1) setdest 190.0 70.0 50.36882463522923" +$ns_ at 66.18908425904829 "$node_(1) setdest 190.66722776717626 70.0 50.36882463563926" +$ns_ at 66.20233109917217 "$node_(1) setdest 210.0 70.0 50.44552553599903" +$ns_ at 66.5855716745732 "$node_(1) setdest 210.0 90.0 50.445525535996154" +$ns_ at 66.9820389486772 "$node_(1) setdest 204.33277223282374 90.0 50.44552553598635" +$ns_ at 67.09438246590616 "$node_(1) setdest 150.0 90.0 50.0000000000374" +$ns_ at 68.18103791056183 "$node_(1) setdest 150.0 89.33277223282374 50.00000000070285" +$ns_ at 68.19438246590516 "$node_(1) setdest 150.0 50.0 50.02735212573105" +$ns_ at 68.98060781187132 "$node_(1) setdest 150.66722776717626 50.0 50.02735212656275" +$ns_ at 68.99394507116676 "$node_(1) setdest 170.0 50.0 50.00000000002279" +$ns_ at 69.38060051582306 "$node_(1) setdest 170.0 60.66722776717626 50.000000000086594" +$ns_ at 69.59394507116622 "$node_(1) setdest 170.0 70.0 49.99999999999848" +$ns_ at 69.7806005158227 "$node_(1) setdest 170.66722776717626 70.0 50.00000000070285" +$ns_ at 69.79394507116604 "$node_(1) setdest 190.0 70.0 50.00000000002279" +$ns_ at 70.18060051582233 "$node_(1) setdest 190.0 100.66722776717626 50.00000000005978" +$ns_ at 70.79394507116513 "$node_(1) setdest 190.0 130.0 50.30281162117056" +$ns_ at 71.37706898188662 "$node_(1) setdest 190.66722776717626 130.0 50.3028116216659" +$ns_ at 71.39033320600583 "$node_(1) setdest 205.66722776717626 130.0 50.000000000045475" +$ns_ at 71.69033320600556 "$node_(1) setdest 210.0 130.0 50.13350186686144" +$ns_ at 71.77675789351952 "$node_(1) setdest 210.0 124.33277223282374 50.13350186697103" +$ns_ at 71.88980062056089 "$node_(1) setdest 210.0 109.33277223282374 50.07152534419843" +$ns_ at 72.18937208152374 "$node_(1) setdest 210.0 89.33277223282374 50.000000000045475" +$ns_ at 72.58937208152338 "$node_(1) setdest 210.0 70.0 50.26201995616282" +$ns_ at 72.9740118602208 "$node_(1) setdest 209.33277223282374 70.0 50.262019956328594" +$ns_ at 72.98728684932303 "$node_(1) setdest 194.33277223282374 70.0 50.000000000045475" +$ns_ at 73.28728684932275 "$node_(1) setdest 184.33277223282374 70.0 50.18367378318602" +$ns_ at 73.4865548431967 "$node_(1) setdest 134.33277223282374 70.0 50.000000000045475" +$ns_ at 74.48655484319579 "$node_(1) setdest 109.33277223282374 70.0 50.157075005265675" +$ns_ at 74.98498901220137 "$node_(1) setdest 90.0 70.0 50.00000000002279" +$ns_ at 75.37164445685767 "$node_(1) setdest 90.0 95.66722776717626 50.00000000006256" +$ns_ at 75.88498901220055 "$node_(1) setdest 90.0 110.0 50.309655426348804" +$ns_ at 76.16988009546003 "$node_(1) setdest 110.0 110.0 50.3096554263802" +$ns_ at 76.56741809945743 "$node_(1) setdest 110.0 150.0 50.3096554263802" +$ns_ at 77.36249410745222 "$node_(1) setdest 110.66722776717626 150.0 50.30965542705461" +$ns_ at 77.37575652719079 "$node_(1) setdest 115.66722776717626 150.0 50.000000000045475" +$ns_ at 77.4757565271907 "$node_(1) setdest 120.66722776717626 150.0 50.000000000045475" +$ns_ at 77.5757565271906 "$node_(1) setdest 130.0 150.0 50.209588878691385" +$ns_ at 77.76163281977233 "$node_(1) setdest 130.0 150.66722776717626 50.20958887897538" +$ns_ at 77.77492167120636 "$node_(1) setdest 130.0 160.66722776717626 50.157316550543364" +$ns_ at 77.97429437867413 "$node_(1) setdest 130.0 165.66722776717626 50.000000000045475" +$ns_ at 78.07429437867404 "$node_(1) setdest 130.0 175.66722776717626 50.000000000045475" +$ns_ at 78.27429437867386 "$node_(1) setdest 130.0 205.66722776717626 50.18233028343295" +$ns_ at 78.87211436492316 "$node_(1) setdest 130.0 210.0 49.999999999944244" +$ns_ at 78.95876980957974 "$node_(1) setdest 140.66722776717626 210.0 50.000000000086594" +$ns_ at 79.17211436492289 "$node_(1) setdest 170.0 210.0 50.000000000030525" +$ns_ at 79.75876980957901 "$node_(1) setdest 170.0 209.33277223282374 50.00000000070285" +$ns_ at 79.77211436492234 "$node_(1) setdest 170.0 170.0 50.09572627769915" +$ns_ at 80.55726661553126 "$node_(1) setdest 190.0 170.0 50.095726277662465" +$ns_ at 80.95650226867156 "$node_(1) setdest 190.0 175.66722776717626 50.09572627765955" +$ns_ at 81.06963023762773 "$node_(1) setdest 190.0 185.66722776717626 50.145400130257144" +$ns_ at 81.2690503234985 "$node_(1) setdest 190.0 190.66722776717626 50.000000000045475" +$ns_ at 81.36905032349841 "$node_(1) setdest 190.0 210.0 50.00000000002279" +$ns_ at 81.75570576815471 "$node_(1) setdest 205.66722776717626 210.0 50.00000000007347" +$ns_ at 82.06905032349778 "$node_(1) setdest 210.0 210.0 50.16590435736209" +$ns_ at 82.1554191887326 "$node_(1) setdest 210.0 190.0 50.16590435748834" +$ns_ at 82.55409634318949 "$node_(1) setdest 204.33277223282374 190.0 50.16590435758486" +$ns_ at 82.66706605518311 "$node_(1) setdest 159.33277223282374 190.0 50.000000000045475" +$ns_ at 83.5670660551823 "$node_(1) setdest 150.0 190.0 50.16502088595776" +$ns_ at 83.75310748540596 "$node_(1) setdest 150.0 174.33277223282374 50.16502088604965" +$ns_ at 84.06542127478451 "$node_(1) setdest 150.0 170.0 49.999999999944244" +$ns_ at 84.15207671944108 "$node_(1) setdest 150.66722776717626 170.0 50.00000000070285" +$ns_ at 84.16542127478442 "$node_(1) setdest 195.66722776717626 170.0 50.000000000045475" +$ns_ at 85.0654212747836 "$node_(1) setdest 210.0 170.0 50.00000000001487" +$ns_ at 85.35207671943999 "$node_(1) setdest 210.0 175.66722776717626 50.00000000012287" +$ns_ at 85.46542127478324 "$node_(1) setdest 210.0 185.66722776717626 50.000000000045475" +$ns_ at 85.66542127478306 "$node_(1) setdest 210.0 210.0 50.00000000002745" +$ns_ at 86.15207671943926 "$node_(1) setdest 179.33277223282374 210.0 50.00000000005978" +$ns_ at 86.76542127478206 "$node_(1) setdest 169.33277223282374 210.0 50.000000000045475" +$ns_ at 86.96542127478187 "$node_(1) setdest 149.33277223282374 210.0 50.1117017881755" +$ns_ at 87.36452965239278 "$node_(1) setdest 139.33277223282374 210.0 50.000000000045475" +$ns_ at 87.5645296523926 "$node_(1) setdest 130.0 210.0 50.481952029625056" +$ns_ at 87.74940309443673 "$node_(1) setdest 130.0 194.33277223282374 50.48195202959622" +$ns_ at 88.05975614413637 "$node_(1) setdest 130.0 184.33277223282374 50.000000000045475" +$ns_ at 88.25975614413619 "$node_(1) setdest 130.0 174.33277223282374 50.000000000045475" +$ns_ at 88.45975614413601 "$node_(1) setdest 130.0 154.33277223282374 50.000000000045475" +$ns_ at 88.85975614413564 "$node_(1) setdest 130.0 149.33277223282374 50.242940788851016" +$ns_ at 88.95927261195175 "$node_(1) setdest 130.0 139.33277223282374 50.046005856753105" +$ns_ at 89.15908875769219 "$node_(1) setdest 130.0 130.0 50.16402361407134" +$ns_ at 89.34513388646064 "$node_(1) setdest 155.66722776717626 130.0 50.16402361413084" +$ns_ at 89.8567999355123 "$node_(1) setdest 170.66722776717626 130.0 50.2227599340266" +$ns_ at 90.1554693041353 "$node_(1) setdest 180.66722776717626 130.0 50.000000000045475" +$ns_ at 90.35546930413511 "$node_(1) setdest 190.66722776717626 130.0 50.08824582364059" +$ns_ at 90.555116942729 "$node_(1) setdest 210.0 130.0 50.055819460244216" +$ns_ at 90.94134121078196 "$node_(1) setdest 210.0 110.0 50.05581946022788" +$ns_ at 91.34089515307414 "$node_(1) setdest 204.33277223282374 110.0 50.05581946017216" +$ns_ at 91.45411331288642 "$node_(1) setdest 174.33277223282374 110.0 50.11263434864155" +$ns_ at 92.05276473861841 "$node_(1) setdest 169.33277223282374 110.0 50.0493894697903" +$ns_ at 92.15266605715533 "$node_(1) setdest 164.33277223282374 110.0 50.345561585623955" +$ns_ at 92.25197967771146 "$node_(1) setdest 154.33277223282374 110.0 50.00314057336296" +$ns_ at 92.45196711620702 "$node_(1) setdest 150.0 110.0 49.999999999944244" +$ns_ at 92.53862256086359 "$node_(1) setdest 150.0 130.66722776717626 50.0000000000667" +$ns_ at 92.95196711620656 "$node_(1) setdest 150.0 170.0 50.000000000034326" +$ns_ at 93.7386225608625 "$node_(1) setdest 150.66722776717626 170.0 50.00000000070285" +$ns_ at 93.75196711620583 "$node_(1) setdest 170.0 170.0 50.00000000002279" +$ns_ at 94.13862256086213 "$node_(1) setdest 170.0 164.33277223282374 50.00000000012287" +$ns_ at 94.25196711620538 "$node_(1) setdest 170.0 150.0 50.00000000001487" +$ns_ at 94.53862256086177 "$node_(1) setdest 185.66722776717626 150.0 50.00000000007347" +$ns_ at 94.85196711620483 "$node_(1) setdest 210.0 150.0 50.02074448777581" +$ns_ at 95.33842073623782 "$node_(1) setdest 210.0 144.33277223282374 50.02074448774428" +$ns_ at 95.45171828558887 "$node_(1) setdest 210.0 139.33277223282374 50.56746789123036" +$ns_ at 95.55059608605052 "$node_(1) setdest 210.0 130.0 49.99999999999848" +$ns_ at 95.737251530707 "$node_(1) setdest 204.33277223282374 130.0 50.00000000012287" +$ns_ at 95.85059608605025 "$node_(1) setdest 189.33277223282374 130.0 50.088912978875534" +$ns_ at 96.15006355515516 "$node_(1) setdest 170.0 130.0 50.00000000002279" +$ns_ at 96.53671899981146 "$node_(1) setdest 170.0 150.0 50.000000000045475" +$ns_ at 96.93671899981109 "$node_(1) setdest 175.66722776717626 150.0 50.00000000012287" +$ns_ at 97.05006355515434 "$node_(1) setdest 190.0 150.0 50.08112275024659" +$ns_ at 97.33625466760805 "$node_(1) setdest 190.0 170.0 50.08112275024419" +$ns_ at 97.7356067368446 "$node_(1) setdest 210.0 170.0 50.08112275024419" +$ns_ at 98.13495880608116 "$node_(1) setdest 210.0 130.0 50.08112275024419" +$ns_ at 98.93366294455427 "$node_(1) setdest 209.33277223282374 130.0 50.08112275019265" +$ns_ at 98.94698588402798 "$node_(1) setdest 170.0 130.0 50.02495631053431" +$ns_ at 99.73324888421257 "$node_(1) setdest 170.0 135.66722776717626 50.02495631052576" +$ns_ at 99.8465368945408 "$node_(1) setdest 170.0 143.34038304014302 50.00000000004556"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/mobility/ns2-mobility-trace.cc Sun Jun 20 17:21:22 2010 +0400 @@ -0,0 +1,140 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2007 INRIA + * 2009,2010 Contributors + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: MartÃn Giachino <martin.giachino@gmail.com> + * + * + * This example demonstrates the use of Ns2TransmobilityHelper class to work with mobility. + * + * Detailed example description. + * + * - intended usage: this should be used in order to load ns2 movement trace files into ns3. + * - behavior: + * - Ns2TransmobilityHelperTrace object is created, whith the specified trace file. At this moment, only + * specify the file, and no movements are scheduled. + * - A log file is created, using the log file name argument. + * - A node container is created with the correct node number specified in the command line. + * - Use Install method of Ns2TransmobilityHelperTrace to set mobility to nodes. At this moment, file is + * read line by line, and the movement is scheduled in the simulator. + * - A callback is configured, so each time a node changes its course a log message is printed. + * - expected output: example prints out messages generated by each read line from the ns2 movement trace file. + * For each line, it shows if the line is correct, or of it has errors and in this case it will + * be ignored. + * + * Usage of ns2-mobility-trace: + * + * ./waf --run "examples/mobility/ns2-mobility-trace \ + * --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements + * --nodeNum=2 --duration=100.0 --logFile=ns2-mobility-trace.log" + * + * NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements + * included in the same directory that the present file. + * NOTE 2: Number of nodes present in the trace file must match with the command line argument. + * Note that you must know it before to be able to load it. + * NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it. + */ + + +#include <iostream> +#include <fstream> +#include <sstream> + +#include "ns3/core-module.h" +#include "ns3/mobility-module.h" +#include "ns3/simulator-module.h" +#include "ns3/helper-module.h" +#include "ns3/mobility-module.h" +#include "ns3/ns2-mobility-helper.h" + +using namespace ns3; + +// Prints actual position and velocity when a course change event occurs +static void +CourseChange (std::ostream *os, std::string foo, Ptr<const MobilityModel> mobility) +{ + Vector pos = mobility->GetPosition (); // Get position + Vector vel = mobility->GetVelocity (); // Get velocity + + // Prints position and velocities + *os << Simulator::Now () << " POS: x=" << pos.x << ", y=" << pos.y + << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y + << ", z=" << vel.z << std::endl; +} + +// Example to use ns2 traces file in ns3 +int main (int argc, char *argv[]) +{ + std::string traceFile; + std::string logFile; + + int nodeNum; + double duration; + + // Enable logging from the ns2 helper + LogComponentEnable ("Ns2MobilityHelper",LOG_LEVEL_DEBUG); + + // Parse command line attribute + CommandLine cmd; + cmd.AddValue ("traceFile", "Ns2 movement trace file", traceFile); + cmd.AddValue ("nodeNum", "Number of nodes", nodeNum); + cmd.AddValue ("duration", "Duration of Simulation", duration); + cmd.AddValue ("logFile", "Log file", logFile); + cmd.Parse (argc,argv); + + // Check command line arguments + if (traceFile.empty () || nodeNum <= 0 || duration <= 0 || logFile.empty ()) + { + std::cout << "Usage of " << argv[0] << " :\n\n" + "./waf --run \"ns2-mobility-trace" + " --traceFile=/home/mgiachino/ns-3-dev/examples/mobility/default.ns_movements" + " --nodeNum=2 --duration=100.0 --logFile=main-ns2-mob.log\" \n\n" + "NOTE: ns2-traces-file could be an absolute or relative path. You could use the file default.ns_movements\n" + " included in the same directory that the present file.\n\n" + "NOTE 2: Number of nodes present in the trace file must match with the command line argument and must\n" + " be a positive number. Note that you must know it before to be able to load it.\n\n" + "NOTE 3: Duration must be a positive number. Note that you must know it before to be able to load it.\n\n"; + + return 0; + } + + // Create Ns2MobilityHelper with the specified trace log file as parameter + Ns2MobilityHelper ns2 = Ns2MobilityHelper (traceFile); + + // open log file for output + std::ofstream os; + os.open (logFile.c_str ()); + + + + // Create all nodes. + NodeContainer stas; + stas.Create (nodeNum); + + ns2.Install (); // configure movements for each node, while reading trace file + + // Configure callback for logging + Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", + MakeBoundCallback (&CourseChange, &os)); + + Simulator::Stop (Seconds (duration)); + Simulator::Run (); + Simulator::Destroy (); + + os.close (); // close log file + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/mobility/waf Sun Jun 20 17:21:22 2010 +0400 @@ -0,0 +1,1 @@ +exec "`dirname "$0"`"/../../waf "$@"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/mobility/wscript Sun Jun 20 17:21:22 2010 +0400 @@ -0,0 +1,6 @@ +## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*- + +def build(bld): + obj = bld.create_ns3_program('ns2-mobility-trace', ['core', 'simulator', 'mobility', 'wifi', 'mesh']) + obj.source = 'ns2-mobility-trace.cc' +
--- a/samples/main-ns2-mob.cc Sat Jun 19 17:10:57 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -#include "ns3/core-module.h" -#include "ns3/mobility-module.h" -#include "ns3/simulator-module.h" -#include "ns3/helper-module.h" -#include "ns3/mobility-module.h" -#include <iostream> -#include <fstream> - -using namespace ns3; - -static void -CourseChange (std::ostream *os, std::string foo, Ptr<const MobilityModel> mobility) -{ - Vector pos = mobility->GetPosition (); - Vector vel = mobility->GetVelocity (); - *os << Simulator::Now () << " POS: x=" << pos.x << ", y=" << pos.y - << ", z=" << pos.z << "; VEL:" << vel.x << ", y=" << vel.y - << ", z=" << vel.z << std::endl; -} - -int main (int argc, char *argv[]) -{ - Ns2MobilityHelper mobility(argv[1]); - std::ofstream os; - os.open (argv[2]); - NodeContainer stas; - stas.Create (1); - - mobility.Install (); - - Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", - MakeBoundCallback (&CourseChange, &os)); - - Simulator::Stop (Seconds (10.0)); - Simulator::Run (); - Simulator::Destroy (); - - os.close (); - return 0; -}
--- a/samples/ns2-mob.tr Sat Jun 19 17:10:57 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ - -$node_(0) set X_ 0.0 -$node_(0) set Y_ 25.0 -$node_(0) set Z_ 0.0 -$ns_ at 3.0 "$node_(0) setdest 25 0 0" -$ns_ at 4.8 "$node_(0) setdest 0 0 0" -$ns_ at 5.0 "$node_(0) setdest 25 0 0"
--- a/samples/wscript Sat Jun 19 17:10:57 2010 +0100 +++ b/samples/wscript Sun Jun 20 17:21:22 2010 +0400 @@ -50,10 +50,6 @@ ['core', 'simulator', 'mobility', 'wifi']) obj.source = 'main-propagation-loss.cc' - obj = bld.create_ns3_program('main-ns2-mob', - ['core', 'simulator', 'mobility', 'wifi']) - obj.source = 'main-ns2-mob.cc' - obj = bld.create_ns3_program('sample-random-variable', ['core', 'simulator']) obj.source = 'sample-random-variable.cc'
--- a/src/helper/ns2-mobility-helper.cc Sat Jun 19 17:10:57 2010 +0100 +++ b/src/helper/ns2-mobility-helper.cc Sun Jun 20 17:21:22 2010 +0400 @@ -1,6 +1,7 @@ /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ /* * Copyright (c) 2007 INRIA + * 2009,2010 Contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -16,26 +17,123 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> + * Contributors: Thomas Waldecker <twaldecker@rocketmail.com> + * MartÃn Giachino <martin.giachino@gmail.com> + * + * Brief description: Implementation of a ns2 movement trace file reader. + * + * This implementation is based on the ns2 movement documentation of ns2 + * as described in http://www.isi.edu/nsnam/ns/doc/node174.html + * + * Valid trace files use the following ns2 statements: + * + * $node set X_ x1 + * $node set Y_ y1 + * $node set Z_ z1 + * $ns at $time $node setdest x2 y2 speed + * $ns at $time $node set X_ x1 + * $ns at $time $node set Y_ Y1 + * $ns at $time $node set Z_ Z1 + * */ + + #include <fstream> #include <sstream> +#include <map> +#include <algorithm> #include "ns3/log.h" #include "ns3/simulator.h" #include "ns3/node-list.h" #include "ns3/node.h" #include "ns3/constant-velocity-mobility-model.h" +#include "ns3/test.h" +#include "ns3/node-container.h" +#include "ns3/names.h" +#include "ns3/config.h" #include "ns2-mobility-helper.h" NS_LOG_COMPONENT_DEFINE ("Ns2MobilityHelper"); +using namespace std; + namespace ns3 { +// Constants definitions +#define NS2_AT "at" +#define NS2_X_COORD "X_" +#define NS2_Y_COORD "Y_" +#define NS2_Z_COORD "Z_" +#define NS2_SETDEST "setdest" +#define NS2_SET "set" +#define NS2_NODEID "$node_(" +#define NS2_NS_SCH "$ns_" + + +// Type to maintain line parsed and its values +struct ParseResult +{ + vector<string> tokens; // tokens from a line + vector<int> ivals; // int values for each tokens + vector<bool> has_ival; // points if a tokens has an int value + vector<double> dvals; // double values for each tokens + vector<bool> has_dval; // points if a tokens has a double value + vector<string> svals; // string value for each token +}; + + +// Parses a line of ns2 mobility +static ParseResult ParseNs2Line (const string& str); + +// Put out blank spaces at the start and end of a line +static string TrimNs2Line (const string& str); + +// Checks if a string represents a number or it has others characters than digits an point. +static bool IsNumber (const string& s); + +// Check if s string represents a numeric value +template<class T> +static bool IsVal (const string& str, T& ret); + +// Checks if the value between brackets is a correct nodeId number +static bool HasNodeIdNumber (string str); + +// Gets nodeId number in string format from the string like $node_(4) +static string GetNodeIdFromToken (string str); + +// Get node id number in int format +static int GetNodeIdInt (ParseResult pr); + +// Get node id number in string format +static string GetNodeIdString (ParseResult pr); + +// Add one coord to a vector position +static Vector SetOneInitialCoord (Vector actPos, string& coord, double value); + +// Check if this corresponds to a line like this: $node_(0) set X_ 123 +static bool IsSetInitialPos (ParseResult pr); + +// Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) setdest 2 3 4" +static bool IsSchedSetPos (ParseResult pr); + +// Check if this corresponds to a line like this: $ns_ at 1 "$node_(0) set X_ 2" +static bool IsSchedMobilityPos (ParseResult pr); + +// Set waypoints and speed for movement. +static Vector SetMovement (Ptr<ConstantVelocityMobilityModel> model, Vector lastPos, double at, + double xFinalPosition, double yFinalPosition, double speed); + +// Set initial position for a node +static Vector SetInitialPosition (Ptr<ConstantVelocityMobilityModel> model, string coord, double coordVal); + +// Schedule a set of position for a node +static Vector SetSchedPosition (Ptr<ConstantVelocityMobilityModel> model, double at, string coord, double coordVal); + Ns2MobilityHelper::Ns2MobilityHelper (std::string filename) : m_filename (filename) -{} - - +{ +} Ptr<ConstantVelocityMobilityModel> Ns2MobilityHelper::GetMobilityModel (std::string idString, const ObjectStore &store) const @@ -58,90 +156,873 @@ return model; } -double -Ns2MobilityHelper::ReadDouble (std::string valueString) const + +void +Ns2MobilityHelper::ConfigNodesMovements (const ObjectStore &store) const { - std::istringstream iss; - iss.str (valueString); - double value; - iss >> value; - return value; -} + map<int, Vector> last_pos; // Vector containing lasts positions for each node -void -Ns2MobilityHelper::LayoutObjectStore (const ObjectStore &store) const -{ std::ifstream file (m_filename.c_str (), std::ios::in); - if (file.is_open()) + if (file.is_open ()) { - while (!file.eof() ) + while (!file.eof () ) { + int iNodeId = 0; + std::string nodeId; std::string line; + getline (file, line); - std::string::size_type startNodeId = line.find_first_of ("("); - std::string::size_type endNodeId = line.find_first_of (")"); - if (startNodeId == std::string::npos || - endNodeId == std::string::npos) - { - continue; - } - Ptr<ConstantVelocityMobilityModel> model = GetMobilityModel (line.substr (startNodeId + 1, - endNodeId - (startNodeId + 1)), - store); - if (model == 0) + + // ignore empty lines + if (line.empty ()) { continue; } - if (startNodeId == 6) + + ParseResult pr = ParseNs2Line (line); // Parse line and obtain tokens + + // Check if the line corresponds with one of the three types of line + if (pr.tokens.size () != 4 && pr.tokens.size () != 7 && pr.tokens.size () != 8) + { + NS_LOG_ERROR ("Line has not correct number of parameters (corrupted file?): " << line << "\n"); + continue; + } + + // Get the node Id + nodeId = GetNodeIdString (pr); + iNodeId = GetNodeIdInt (pr); + if (iNodeId == -1) + { + NS_LOG_ERROR ("Node number couldn't be obtained (corrupted file?): " << line << "\n"); + continue; + } + + // get mobility model of node + Ptr<ConstantVelocityMobilityModel> model = GetMobilityModel (nodeId,store); + + // if model not exists, continue + if (model == 0) { - double value = ReadDouble (line.substr (endNodeId + 9, std::string::npos)); - std::string coordinate = line.substr (endNodeId + 6, 1); - Vector position = model->GetPosition (); - if (coordinate == "X") + NS_LOG_ERROR ("Unknown node ID (corrupted file?): " << nodeId << "\n"); + continue; + } + + + /* + * In this case a initial position is being seted + * line like $node_(0) set X_ 151.05190721688197 + */ + if (IsSetInitialPos (pr)) + { + // coord coord value + last_pos[iNodeId] = SetInitialPosition (model, pr.tokens[2], pr.dvals[3]); + + // Log new position + NS_LOG_DEBUG ("Positions after parse for node " << iNodeId << " " << nodeId << + " x=" << last_pos[iNodeId].x << " y=" << last_pos[iNodeId].y << " z=" << last_pos[iNodeId].z); + } + + else // NOW EVENTS TO BE SCHEDULED + { + + // This is a scheduled event, so time at should be present + double at; + + if (!IsNumber (pr.tokens[2])) { - position.x = value; - NS_LOG_DEBUG ("X=" << value); + NS_LOG_WARN ("Time is not a number: " << pr.tokens[2]); + continue; } - else if (coordinate == "Y") + + at = pr.dvals[2]; // set time at + + if ( at < 0 ) { - position.y = value; - NS_LOG_DEBUG ("Y=" << value); + NS_LOG_WARN ("Time is less than cero: " << at); + continue; } - else if (coordinate == "Z") + + + + /* + * In this case a new waypoint is added + * line like $ns_ at 1 "$node_(0) setdest 2 3 4" + */ + if (IsSchedMobilityPos (pr)) { - position.z = value; - NS_LOG_DEBUG ("Z=" << value); + // last position time X coord Y coord velocity + last_pos[iNodeId] = SetMovement (model, last_pos[iNodeId], at, pr.dvals[5], pr.dvals[6], pr.dvals[7]); + + // Log new position + NS_LOG_DEBUG ("Positions after parse for node " << iNodeId << " " << nodeId << + " x=" << last_pos[iNodeId].x << " y=" << last_pos[iNodeId].y << " z=" << last_pos[iNodeId].z); + } + + + /* + * Scheduled set position + * line like $ns_ at 4.634906291962 "$node_(0) set X_ 28.675920486450" + */ + else if (IsSchedSetPos (pr)) + { + // time coordinate coord value + last_pos[iNodeId] = SetSchedPosition (model, at, pr.tokens[5], pr.dvals[6]); + + // Log new position + NS_LOG_DEBUG ("Positions after parse for node " << iNodeId << " " << nodeId << + " x=" << last_pos[iNodeId].x << " y=" << last_pos[iNodeId].y << " z=" << last_pos[iNodeId].z); } else { - continue; + NS_LOG_WARN ("Format Line is not correct: " << line << "\n"); } - model->SetPosition (position); - } - else - { - std::string::size_type atEnd = line.find_first_of (" ", 8); - std::string atStr = line.substr (8, atEnd-8); - NS_LOG_DEBUG (atStr); - double at = ReadDouble (atStr); - std::string::size_type xSpeedEnd = line.find_first_of (" ", endNodeId + 10); - std::string::size_type ySpeedEnd = line.find_first_of (" ", xSpeedEnd + 1); - double xSpeed = ReadDouble (line.substr (endNodeId + 10, xSpeedEnd - endNodeId - 10)); - double ySpeed = ReadDouble (line.substr (xSpeedEnd + 1, ySpeedEnd - xSpeedEnd - 1)); - double zSpeed = ReadDouble (line.substr (ySpeedEnd + 1, std::string::npos)); - NS_LOG_DEBUG ("at=" << at << "xSpeed=" << xSpeed << ", ySpeed=" << ySpeed << ", zSpeed=" << zSpeed); - Simulator::Schedule (Seconds (at), &ConstantVelocityMobilityModel::SetVelocity, model, - Vector (xSpeed, ySpeed, zSpeed)); } } - file.close(); + file.close (); + } +} + + +ParseResult +ParseNs2Line (const string& str) +{ + ParseResult ret; + istringstream s; + string line; + + // ignore comments (#) + size_t pos_sharp = str.find_first_of ('#'); + if (pos_sharp != string::npos) + { + line = str.substr (0, pos_sharp); + } + else + { + line = str; + } + + line = TrimNs2Line (line); + + // If line hasn't a correct node Id + if (!HasNodeIdNumber (line)) + { + NS_LOG_WARN ("Line has no node Id: " << line); + return ret; + } + + s.str (line); + + while (!s.eof ()) + { + string x; + s >> x; + ret.tokens.push_back (x); + int ii; + double d; + if (HasNodeIdNumber (x)) + { + x = GetNodeIdFromToken (x); + } + ret.has_ival.push_back (IsVal<int> (x, ii)); + ret.ivals.push_back (ii); + ret.has_dval.push_back (IsVal<double> (x, d)); + ret.dvals.push_back (d); + ret.svals.push_back (x); + } + + size_t tokensLength = ret.tokens.size (); // number of tokens in line + size_t lasTokenLength = ret.tokens[tokensLength - 1].size (); // length of the last token + + // if it is a scheduled set _[XYZ] or a setdest I need to remove the last " + // and re-calculate values + if ( (tokensLength == 7 || tokensLength == 8) + && (ret.tokens[tokensLength - 1][lasTokenLength - 1] == '"') ) + { + + // removes " from the last position + ret.tokens[tokensLength - 1] = ret.tokens[tokensLength - 1].substr (0,lasTokenLength - 1); + + string x; + x = ret.tokens[tokensLength - 1]; + + if (HasNodeIdNumber (x)) + { + x = GetNodeIdFromToken (x); + } + + // Re calculate values + int ii; + double d; + ret.has_ival[tokensLength - 1] = IsVal<int> (x, ii); + ret.ivals[tokensLength - 1] = ii; + ret.has_dval[tokensLength - 1] = IsVal<double> (x, d); + ret.dvals[tokensLength - 1] = d; + ret.svals[tokensLength - 1] = x; + + } + else if ( (tokensLength == 9 && ret.tokens[tokensLength - 1] == "\"") + || (tokensLength == 8 && ret.tokens[tokensLength - 1] == "\"")) + { + // if the line has the " character in this way: $ns_ at 1 "$node_(0) setdest 2 2 1 " + // or in this: $ns_ at 4 "$node_(0) set X_ 2 " we need to ignore this last token + + ret.tokens.erase (ret.tokens.begin () + tokensLength - 1); + ret.has_ival.erase (ret.has_ival.begin () + tokensLength - 1); + ret.ivals.erase (ret.ivals.begin () + tokensLength - 1); + ret.has_dval.erase (ret.has_dval.begin () + tokensLength - 1); + ret.dvals.erase (ret.dvals.begin () + tokensLength - 1); + ret.svals.erase (ret.svals.begin () + tokensLength - 1); + + } + + + + return ret; +} + + +string +TrimNs2Line (const string& s) +{ + string ret = s; + + while (ret.size () > 0 && isblank (ret[0])) + { + ret.erase (0, 1); // Removes blank spaces at the begining of the line + } + + while (ret.size () > 0 && isblank (ret[ret.size () - 1])) + { + ret.erase (ret.size () - 1, 1); // Removes blank spaces from at end of line + } + + return ret; +} + + +bool +IsNumber (const string& s) +{ + char *endp; + double unused; + unused = strtod (s.c_str (), &endp); // declared with warn_unused_result + return endp == s.c_str () + s.size (); +} + + +template<class T> +bool IsVal (const string& str, T& ret) +{ + if (str.size () == 0) + { + return false; + } + else if (IsNumber (str)) + { + string s2 = str; + istringstream s (s2); + s >> ret; + return true; + } + else + { + return false; + } +} + + +bool +HasNodeIdNumber (string str) +{ + + // find brackets + std::string::size_type startNodeId = str.find_first_of ("("); // index of left bracket + std::string::size_type endNodeId = str.find_first_of (")"); // index of right bracket + + // Get de nodeId in a string and in a int value + std::string nodeId; // node id + + // if no brackets, continue! + if (startNodeId == std::string::npos || endNodeId == std::string::npos) + { + return false; + } + + nodeId = str.substr (startNodeId + 1, endNodeId - (startNodeId + 1)); // set node id + + // is number is integer is not negative + if (IsNumber (nodeId) && (nodeId.find_first_of (".") == std::string::npos) && (nodeId[0] != '-')) + { + return true; + } + else + { + return false; } } -void + +string +GetNodeIdFromToken (string str) +{ + if (HasNodeIdNumber (str)) + { + // find brackets + std::string::size_type startNodeId = str.find_first_of ("("); // index of left bracket + std::string::size_type endNodeId = str.find_first_of (")"); // index of right bracket + + return str.substr (startNodeId + 1, endNodeId - (startNodeId + 1)); // set node id + } + else + { + return ""; + } +} + + +int +GetNodeIdInt (ParseResult pr) +{ + switch (pr.tokens.size ()) + { + case 4: // line like $node_(0) set X_ 11 + return pr.ivals[0]; + break; + case 7: // line like $ns_ at 4 "$node_(0) set X_ 28" + return pr.ivals[3]; + break; + case 8: // line like $ns_ at 1 "$node_(0) setdest 2 3 4" + return pr.ivals[3]; + break; + default: + return -1; + } +} + +// Get node id number in string format +string +GetNodeIdString (ParseResult pr) +{ + switch (pr.tokens.size ()) + { + case 4: // line like $node_(0) set X_ 11 + return pr.svals[0]; + break; + case 7: // line like $ns_ at 4 "$node_(0) set X_ 28" + return pr.svals[3]; + break; + case 8: // line like $ns_ at 1 "$node_(0) setdest 2 3 4" + return pr.svals[3]; + break; + default: + return ""; + } +} + + +Vector +SetOneInitialCoord (Vector position, string& coord, double value) +{ + + // set the position for the coord. + if (coord == NS2_X_COORD) + { + position.x = value; + NS_LOG_DEBUG ("X=" << value); + } + else if (coord == NS2_Y_COORD) + { + position.y = value; + NS_LOG_DEBUG ("Y=" << value); + } + else if (coord == NS2_Z_COORD) + { + position.z = value; + NS_LOG_DEBUG ("Z=" << value); + } + return position; +} + + +bool +IsSetInitialPos (ParseResult pr) +{ + // number of tokens has $node_( ? has "set" has doble for position? + return pr.tokens.size () == 4 && HasNodeIdNumber (pr.tokens[0]) && pr.tokens[1] == NS2_SET && pr.has_dval[3] + // coord name is X_, Y_ or Z_ ? + && (pr.tokens[2] == NS2_X_COORD || pr.tokens[2] == NS2_Y_COORD || pr.tokens[2] == NS2_Z_COORD); + +} + + +bool +IsSchedSetPos (ParseResult pr) +{ + // correct number of tokens, has $ns_ and at + return pr.tokens.size () == 7 && pr.tokens[0] == NS2_NS_SCH && pr.tokens[1] == NS2_AT + && pr.tokens[4] == NS2_SET && pr.has_dval[2] && pr.has_dval[3] // has set and double value for time and nodeid + && ( pr.tokens[5] == NS2_X_COORD || pr.tokens[5] == NS2_Y_COORD || pr.tokens[5] == NS2_Z_COORD) // has X_, Y_ or Z_? + && pr.has_dval[2]; // time is a number +} + +bool +IsSchedMobilityPos (ParseResult pr) +{ + // number of tokens and has $ns_ and has at + return pr.tokens.size () == 8 && pr.tokens[0] == NS2_NS_SCH && pr.tokens[1] == NS2_AT + // time x coord y coord velocity are numbers? + && pr.has_dval[2] && pr.has_dval[5] && pr.has_dval[6] && pr.has_dval[7] + && pr.tokens[4] == NS2_SETDEST; // and has setdest + +} + +Vector +SetMovement (Ptr<ConstantVelocityMobilityModel> model, Vector last_pos, double at, + double xFinalPosition, double yFinalPosition, double speed) +{ + Vector position; + position.x = last_pos.x; + position.y = last_pos.y; + position.z = last_pos.z; + + if (speed == 0) + { + // We have to maintain last position, and stop the movement + Simulator::Schedule (Seconds (at), &ConstantVelocityMobilityModel::SetVelocity, model, + Vector (0, 0, 0)); + } + else if (speed > 0) + { + // first calculate the time; time = distance / speed + double time = sqrt (pow (xFinalPosition - position.x, 2) + pow (yFinalPosition - position.y, 2)) / speed; + NS_LOG_DEBUG ("at=" << at << " time=" << time); + // now calculate the xSpeed = distance / time + double xSpeed = (xFinalPosition - position.x) / time; + double ySpeed = (yFinalPosition - position.y) / time; // & same with ySpeed + + // quick and dirty set zSpeed = 0 + double zSpeed = 0; + + NS_LOG_DEBUG ("Calculated Speed: X=" << xSpeed << " Y=" << ySpeed << " Z=" << zSpeed); + + // Set the Values + Simulator::Schedule (Seconds (at), &ConstantVelocityMobilityModel::SetVelocity, model, + Vector (xSpeed, ySpeed, zSpeed)); + + if (time >= 0) + { + Simulator::Schedule (Seconds (at + time), &ConstantVelocityMobilityModel::SetVelocity, + model, Vector (0, 0, 0)); + } + + position.x = xFinalPosition; + position.y = yFinalPosition; + position.z = 0; + } + + return position; +} + + +Vector +SetInitialPosition (Ptr<ConstantVelocityMobilityModel> model, string coord, double coordVal) +{ + model->SetPosition (SetOneInitialCoord (model->GetPosition (), coord, coordVal)); + + Vector position; + position.x = model->GetPosition ().x; + position.y = model->GetPosition ().y; + position.z = model->GetPosition ().z; + + return position; +} + +// Schedule a set of position for a node +Vector +SetSchedPosition (Ptr<ConstantVelocityMobilityModel> model, double at, string coord, double coordVal) +{ + // update position + model->SetPosition (SetOneInitialCoord (model->GetPosition (), coord, coordVal)); + + Vector position; + position.x = model->GetPosition ().x; + position.y = model->GetPosition ().y; + position.z = model->GetPosition ().z; + + // Chedule next positions + Simulator::Schedule (Seconds (at), &ConstantVelocityMobilityModel::SetPosition, model,position); + + return position; +} + +void Ns2MobilityHelper::Install (void) const { Install (NodeList::Begin (), NodeList::End ()); } +// ----------------------------------------------------------------------------- +// Testing +// ----------------------------------------------------------------------------- +bool operator== (Vector const & a, Vector const & b) +{ + return (a.x == b.x && a.y == b.y && a.z == b.z); +} +/** + * Every test case is supposed to: + * 1. Generate short mobility trace file + * 2. Read it back using Ns2MobilityHelper + * 3. Check initial node positions and speeds. + * 4. Run simulation listening for all CourseChange events and compare actual mobility with the reference + */ +class Ns2MobilityHelperTest : public TestCase +{ +public: + /// Single record in mobility reference + struct ReferencePoint + { + std::string node; ///< node ID as string, e.g. "1" + Time time; ///< timestamp + Vector pos; ///< reference position + Vector vel; ///< reference velocity + + ReferencePoint (std::string const & id, Time t, Vector const & p, Vector const & v) + : node (id), + time (t), + pos (p), + vel (v) + { + } + /// Sort by timestamp + bool operator< (ReferencePoint const & o) const + { + return (time < o.time); + } + }; + /** + * Create new test case. To make it useful SetTrace () and AddReferencePoint () must be called + * + * \param name Short description + * \param nodes Number of nodes used in the test trace, 1 by default + */ + Ns2MobilityHelperTest (std::string const & name, Time timeLimit, uint32_t nodes = 1) + : TestCase (name), + m_timeLimit (timeLimit), + m_nodeCount (nodes), + m_nextRefPoint (0) + { + } + /// Empty + virtual ~Ns2MobilityHelperTest () + { + } + /// Set NS-2 trace to read as single large string (don't forget to add \n and quote ") + void SetTrace (std::string const & trace) + { + m_trace = trace; + } + /// Add next reference point + void AddReferencePoint (ReferencePoint const & r) + { + m_reference.push_back (r); + } + /// Sugar + void AddReferencePoint (const char * id, double sec, Vector const & p, Vector const & v) + { + AddReferencePoint (ReferencePoint (id, Seconds (sec), p, v)); + } + +private: + /// Test time limit + Time m_timeLimit; + /// Number of nodes used in the test + uint32_t m_nodeCount; + /// Trace as string + std::string m_trace; + /// Reference mobility + std::vector<ReferencePoint> m_reference; + /// Next reference point to be checked + size_t m_nextRefPoint; + /// TMP trace file name + std::string m_traceFile; + +private: + /// Dump NS-2 trace to tmp file + bool WriteTrace () + { + m_traceFile = GetTempDir () + "Ns2MobilityHelperTest.tcl"; + std::ofstream of (m_traceFile.c_str ()); + NS_TEST_ASSERT_MSG_EQ (of.is_open (), true, "Need to write tmp. file"); + of << m_trace; + of.close (); + return false; // no errors + } + /// Create and name nodes + void CreateNodes () + { + NodeContainer nodes; + nodes.Create (m_nodeCount); + for (uint32_t i = 0; i < m_nodeCount; ++i) + { + std::ostringstream os; + os << i; + Names::Add (os.str (), nodes.Get (i)); + } + } + /// Check that all initial positions are correct + bool CheckInitialPositions () + { + std::stable_sort (m_reference.begin (), m_reference.end ()); + while (m_nextRefPoint < m_reference.size () && m_reference[m_nextRefPoint].time == Seconds (0)) + { + ReferencePoint const & rp = m_reference[m_nextRefPoint]; + Ptr<Node> node = Names::Find<Node> (rp.node); + NS_TEST_ASSERT_MSG_NE (node, 0, "Can't find node with id " << rp.node); + Ptr<MobilityModel> mob = node->GetObject<MobilityModel> (); + NS_TEST_ASSERT_MSG_NE (mob, 0, "Can't find mobility for node " << rp.node); + + NS_TEST_EXPECT_MSG_EQ (rp.pos, mob->GetPosition (), "Initial position mismatch for node " << rp.node); + NS_TEST_EXPECT_MSG_EQ (rp.vel, mob->GetVelocity (), "Initial velocity mismatch for node " << rp.node); + + m_nextRefPoint++; + } + return GetErrorStatus (); + } + /// Listen for course change events + void CourseChange (std::string context, Ptr<const MobilityModel> mobility) + { + Time time = Simulator::Now (); + Ptr<Node> node = mobility->GetObject<Node> (); + NS_ASSERT (node); + std::string id = Names::FindName (node); + NS_ASSERT (!id.empty ()); + Vector pos = mobility->GetPosition (); + Vector vel = mobility->GetVelocity (); + + NS_TEST_EXPECT_MSG_LT (m_nextRefPoint, m_reference.size (), "Not enough reference points"); + if (m_nextRefPoint >= m_reference.size ()) + { + return; + } + + ReferencePoint const & ref = m_reference [m_nextRefPoint++]; + NS_TEST_EXPECT_MSG_EQ (time, ref.time, "Time mismatch"); + NS_TEST_EXPECT_MSG_EQ (id, ref.node, "Node ID mismatch at time " << time.GetSeconds () << " s"); + NS_TEST_EXPECT_MSG_EQ (pos, ref.pos, "Position mismatch at time " << time.GetSeconds () << " s for node " << id); + NS_TEST_EXPECT_MSG_EQ (vel, ref.vel, "Velocity mismatch at time " << time.GetSeconds () << " s for node " << id); + } + /// Go + bool DoRun () + { + NS_TEST_ASSERT_MSG_EQ (m_trace.empty (), false, "Need trace"); + NS_TEST_ASSERT_MSG_EQ (m_reference.empty (), false, "Need reference"); + + if (WriteTrace ()) + { + return GetErrorStatus (); + } + CreateNodes (); + Ns2MobilityHelper mobility (m_traceFile); + mobility.Install (); + if (CheckInitialPositions ()) + { + return GetErrorStatus (); + } + Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", + MakeCallback (&Ns2MobilityHelperTest::CourseChange, this)); + Simulator::Stop (m_timeLimit); + Simulator::Run (); + Names::Clear (); + std::remove (m_traceFile.c_str ()); + Simulator::Destroy (); + return GetErrorStatus (); + } +}; + +/// The test suite +class Ns2MobilityHelperTestSuite : public TestSuite +{ +public: + Ns2MobilityHelperTestSuite () : TestSuite ("mobility-ns2-trace-helper", UNIT) + { + // to be used as temporary variable for test cases. + // Note that test suite takes care of deleting all test cases. + Ns2MobilityHelperTest * t (0); + + // Initial position + t = new Ns2MobilityHelperTest ("initial position", Seconds (1)); + t->SetTrace ("$node_(0) set X_ 1.0\n" + "$node_(0) set Y_ 2.0\n" + "$node_(0) set Z_ 3.0\n" + ); + t->AddReferencePoint ("0", 0, Vector (1, 2, 3), Vector (0, 0, 0)); + AddTestCase (t); + + // Check parsing comments, empty lines and no EOF at the end of file + t = new Ns2MobilityHelperTest ("comments", Seconds (1)); + t->SetTrace ("# comment\n" + "\n\n" // empty lines + "$node_(0) set X_ 1.0 # comment \n" + "$node_(0) set Y_ 2.0 ### \n" + "$node_(0) set Z_ 3.0 # $node_(0) set Z_ 3.0\n" + "#$node_(0) set Z_ 100 #" + ); + t->AddReferencePoint ("0", 0, Vector (1, 2, 3), Vector (0, 0, 0)); + AddTestCase (t); + + // Simple setdest. Arguments are interpreted as x, y, speed by default + t = new Ns2MobilityHelperTest ("simple setdest", Seconds (10)); + t->SetTrace ("$ns_ at 1.0 \"$node_(0) setdest 25 0 5\""); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (0, 0, 0), Vector (5, 0, 0)); + t->AddReferencePoint ("0", 6, Vector (25, 0, 0), Vector (0, 0, 0)); + AddTestCase (t); + + // Several set and setdest. Arguments are interpreted as x, y, speed by default + t = new Ns2MobilityHelperTest ("square setdest", Seconds (6)); + t->SetTrace ("$node_(0) set X_ 0.0\n" + "$node_(0) set Y_ 0.0\n" + "$ns_ at 1.0 \"$node_(0) setdest 5 0 5\"\n" + "$ns_ at 2.0 \"$node_(0) setdest 5 5 5\"\n" + "$ns_ at 3.0 \"$node_(0) setdest 0 5 5\"\n" + "$ns_ at 4.0 \"$node_(0) setdest 0 0 5\"\n" + ); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (0, 0, 0), Vector (5, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (5, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (5, 0, 0), Vector (0, 5, 0)); + t->AddReferencePoint ("0", 3, Vector (5, 5, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 3, Vector (5, 5, 0), Vector (-5, 0, 0)); + t->AddReferencePoint ("0", 4, Vector (0, 5, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 4, Vector (0, 5, 0), Vector (0, -5, 0)); + t->AddReferencePoint ("0", 5, Vector (0, 0, 0), Vector (0, 0, 0)); + AddTestCase (t); + + // Scheduled set position + t = new Ns2MobilityHelperTest ("scheduled set position", Seconds (2)); + t->SetTrace ("$ns_ at 1.0 \"$node_(0) set X_ 10\"\n" + "$ns_ at 1.0 \"$node_(0) set Z_ 10\"\n" + "$ns_ at 1.0 \"$node_(0) set Y_ 10\""); + // id t position velocity + t->AddReferencePoint ("0", 1, Vector (10, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (10, 0, 10), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (10, 10, 10), Vector (0, 0, 0)); + AddTestCase (t); + + // Malformed lines + t = new Ns2MobilityHelperTest ("malformed lines", Seconds (2)); + t->SetTrace ("$node() set X_ 1 # node id is not present\n" + "$node # incoplete line\"\n" + "$node this line is not correct\n" + "$node_(0) set X_ 1 # line OK \n" + "$node_(0) set Y_ 2 # line OK \n" + "$node_(0) set Z_ 3 # line OK \n" + "$ns_ at \"$node_(0) setdest 4 4 4\" # time not present\n" + "$ns_ at 1 \"$node_(0) setdest 2 2 1 \" # line OK \n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (1, 2, 3), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (1, 2, 3), Vector (1, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (2, 2, 3), Vector (0, 0, 0)); + AddTestCase (t); + + // Non possible values + t = new Ns2MobilityHelperTest ("non possible values", Seconds (2)); + t->SetTrace ("$node_(0) set X_ 1 # line OK \n" + "$node_(0) set Y_ 2 # line OK \n" + "$node_(0) set Z_ 3 # line OK \n" + "$node_(-22) set Y_ 3 # node id not correct\n" + "$node_(3.3) set Y_ 1111 # node id not correct\n" + "$ns_ at sss \"$node_(0) setdest 5 5 5\" # time is not a number\n" + "$ns_ at 1 \"$node_(0) setdest 2 2 1\" # line OK \n" + "$ns_ at 1 \"$node_(0) setdest 2 2 -1\" # negative speed is not correct\n" + "$ns_ at 1 \"$node_(0) setdest 2 2 sdfs\" # speed is not a number\n" + "$ns_ at 1 \"$node_(0) setdest 2 2 s232dfs\" # speed is not a number\n" + "$ns_ at 1 \"$node_(0) setdest 233 2.. s232dfs\" # more than one non numbers\n" + "$ns_ at -12 \"$node_(0) setdest 11 22 33\" # time should not be negative\n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (1, 2, 3), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (1, 2, 3), Vector (1, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (2, 2, 3), Vector (0, 0, 0)); + AddTestCase (t); + + // More than one node + t = new Ns2MobilityHelperTest ("few nodes, combinations of set and setdest", Seconds (10), 3); + t->SetTrace ("$node_(0) set X_ 1.0\n" + "$node_(0) set Y_ 2.0\n" + "$node_(0) set Z_ 3.0\n" + "$ns_ at 1.0 \"$node_(1) setdest 25 0 5\"\n" + "$node_(2) set X_ 0.0\n" + "$node_(2) set Y_ 0.0\n" + "$ns_ at 1.0 \"$node_(2) setdest 5 0 5\"\n" + "$ns_ at 2.0 \"$node_(2) setdest 5 5 5\"\n" + "$ns_ at 3.0 \"$node_(2) setdest 0 5 5\"\n" + "$ns_ at 4.0 \"$node_(2) setdest 0 0 5\"\n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (1, 2, 3), Vector (0, 0, 0)); + t->AddReferencePoint ("1", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("1", 1, Vector (0, 0, 0), Vector (5, 0, 0)); + t->AddReferencePoint ("1", 6, Vector (25, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("2", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("2", 1, Vector (0, 0, 0), Vector (5, 0, 0)); + t->AddReferencePoint ("2", 2, Vector (5, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("2", 2, Vector (5, 0, 0), Vector (0, 5, 0)); + t->AddReferencePoint ("2", 3, Vector (5, 5, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("2", 3, Vector (5, 5, 0), Vector (-5, 0, 0)); + t->AddReferencePoint ("2", 4, Vector (0, 5, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("2", 4, Vector (0, 5, 0), Vector (0, -5, 0)); + t->AddReferencePoint ("2", 5, Vector (0, 0, 0), Vector (0, 0, 0)); + AddTestCase (t); + + // Test for Speed == 0, that acts as stop the node. + t = new Ns2MobilityHelperTest ("setdest with speed cero", Seconds (10)); + t->SetTrace ("$ns_ at 1.0 \"$node_(0) setdest 25 0 5\"\n" + "$ns_ at 7.0 \"$node_(0) setdest 11 22 0\"\n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (0, 0, 0), Vector (5, 0, 0)); + t->AddReferencePoint ("0", 6, Vector (25, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 7, Vector (25, 0, 0), Vector (0, 0, 0)); + AddTestCase (t); + + + // Test negative positions + t = new Ns2MobilityHelperTest ("test negative positions", Seconds (10)); + t->SetTrace ("$node_(0) set X_ -1.0\n" + "$node_(0) set Y_ 0\n" + "$ns_ at 1.0 \"$node_(0) setdest 0 0 1\"\n" + "$ns_ at 2.0 \"$node_(0) setdest 0 -1 1\"\n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (-1, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (-1, 0, 0), Vector (1, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (0, 0, 0), Vector (0, -1, 0)); + t->AddReferencePoint ("0", 3, Vector (0, -1, 0), Vector (0, 0, 0)); + AddTestCase (t); + + // Sqare setdest with values in the form 1.0e+2 + t = new Ns2MobilityHelperTest ("Foalt numbers in 1.0e+2 format", Seconds (6)); + t->SetTrace ("$node_(0) set X_ 0.0\n" + "$node_(0) set Y_ 0.0\n" + "$ns_ at 1.0 \"$node_(0) setdest 1.0e+2 0 1.0e+2\"\n" + "$ns_ at 2.0 \"$node_(0) setdest 1.0e+2 1.0e+2 1.0e+2\"\n" + "$ns_ at 3.0 \"$node_(0) setdest 0 1.0e+2 1.0e+2\"\n" + "$ns_ at 4.0 \"$node_(0) setdest 0 0 1.0e+2\"\n"); + // id t position velocity + t->AddReferencePoint ("0", 0, Vector (0, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 1, Vector (0, 0, 0), Vector (100, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (100, 0, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 2, Vector (100, 0, 0), Vector (0, 100, 0)); + t->AddReferencePoint ("0", 3, Vector (100, 100, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 3, Vector (100, 100, 0), Vector (-100, 0, 0)); + t->AddReferencePoint ("0", 4, Vector (0, 100, 0), Vector (0, 0, 0)); + t->AddReferencePoint ("0", 4, Vector (0, 100, 0), Vector (0, -100, 0)); + t->AddReferencePoint ("0", 5, Vector (0, 0, 0), Vector (0, 0, 0)); + AddTestCase (t); + + } +} g_ns2TransmobilityHelperTestSuite; + + } // namespace ns3
--- a/src/helper/ns2-mobility-helper.h Sat Jun 19 17:10:57 2010 +0100 +++ b/src/helper/ns2-mobility-helper.h Sun Jun 20 17:21:22 2010 +0400 @@ -1,6 +1,7 @@ /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ /* * Copyright (c) 2007 INRIA + * 2009,2010 Contributors * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -16,9 +17,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> + * Contributors: Thomas Waldecker <twaldecker@rocketmail.com> + * MartÃn Giachino <martin.giachino@gmail.com> */ -#ifndef NS2_MOBILITY_FILE_TOPOLOGY_H -#define NS2_MOBILITY_FILE_TOPOLOGY_H +#ifndef NS2_MOBILITY_HELPER_H +#define NS2_MOBILITY_HELPER_H #include <string> #include <stdint.h> @@ -30,8 +33,27 @@ class ConstantVelocityMobilityModel; /** - * \brief a topology object which can read ns2's movement files - * generated by the CMU setdest tool. + * \brief A helper which can read ns-2 movement files and configure nodes mobility. + * + * This implementation is based on the ns2 movement documentation of ns2 + * as described in http://www.isi.edu/nsnam/ns/doc/node174.html + * + * Valid trace files use the following ns2 statements: + * + * $node set X_ x1 + * $node set Y_ y1 + * $node set Z_ z1 + * $ns at $time $node setdest x2 y2 speed + * $ns at $time $node set X_ x1 + * $ns at $time $node set Y_ Y1 + * $ns at $time $node set Z_ Z1 + * + * Following tools are known to support this format: + * - BonnMotion http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/ + * - SUMO http://sourceforge.net/apps/mediawiki/sumo/index.php?title=Main_Page + * - TraNS http://trans.epfl.ch/ + * + * See usage example in examples/mobility/ns2-mobility-trace.cc */ class Ns2MobilityHelper { @@ -70,9 +92,8 @@ virtual ~ObjectStore () {} virtual Ptr<Object> Get (uint32_t i) const = 0; }; - void LayoutObjectStore (const ObjectStore &store) const; + void ConfigNodesMovements (const ObjectStore &store) const; Ptr<ConstantVelocityMobilityModel> GetMobilityModel (std::string idString, const ObjectStore &store) const; - double ReadDouble (std::string valueString) const; std::string m_filename; }; @@ -104,10 +125,10 @@ T m_begin; T m_end; }; - LayoutObjectStore (MyObjectStore (begin, end)); + ConfigNodesMovements (MyObjectStore (begin, end)); } } // namespace ns3 -#endif /* NS2_MOBILITY_FILE_TOPOLOGY_H */ +#endif /* NS2_MOBILITY_HELPER_H */