1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419
|
.. include:: replace.txt
..
========================================================================================
Translated for portuguese by the students of the inter-institutional doctorate program of IME-USP/UTFPR-CM.
Traduzido para o portugus pelos alunos do programa de doutorado inter institucional do Instituto de Matemtica e Estatstica da Universidade de So Paulo --- IME-USP em parceria com a Universidade Tecnolgica Federal do Paran - Campus Campo Mouro --- UTFPR-CM:
* Frank Helbert (frank@ime.usp.br);
* Luiz Arthur Feitosa dos Santos (luizsan@ime.usp.br);
* Rodrigo Campiolo (campiolo@ime.usp.br).
========================================================================================
.. Tweaking
Aprofundando Conhecimentos
----------------------------------------
..
Using the Logging Module
Usando o Mdulo de Registro
***************************
..
We have already taken a brief look at the |ns3| logging module while
going over the ``first.cc`` script. We will now take a closer look and
see what kind of use-cases the logging subsystem was designed to cover.
J demos uma breve olhada no mdulo de Registro (do ingls, `log` ou `logging`) do |ns3|, enquanto analisvamos o cdigo ``first.cc``. Agora iremos aprofundar nossos conhecimento sobre este mdulo para utiliz-lo de forma mais eficiente.
..
Logging Overview
Viso Geral Sobre o Sistema de Registro
+++++++++++++++++++++++++++++++++++++++
..
Many large systems support some kind of message logging facility, and
|ns3| is not an exception. In some cases, only error messages are
logged to the "operator console" (which is typically ``stderr`` in Unix-
based systems). In other systems, warning messages may be output as well as
more detailed informational messages. In some cases, logging facilities are
used to output debug messages which can quickly turn the output into a blur.
A maioria dos sistemas de grande porte suportam mensagens de registros (mensagens de 'log' que informam o que esta ocorrendo no sistema) e o |ns3| no nenhuma exceo. Em alguns casos, somente mensagens de erros so reportadas para o "operador do console" (que geralmente o ``stderr`` dos sistemas baseados no Unix). Em outros sistemas, mensagens de avisos podem ser impressas detalhando informaes do sistema. Em alguns casos, o sistema de registro fornece mensagens de depurao que podem rapidamente mostrar o que est ocorrendo de errado.
..
|ns3| takes the view that all of these verbosity levels are useful
and we provide a selectable, multi-level approach to message logging. Logging
can be disabled completely, enabled on a component-by-component basis, or
enabled globally; and it provides selectable verbosity levels. The
|ns3| log module provides a straightforward, relatively easy to use
way to get useful information out of your simulation.
O |ns3| permite que o usurio tenha vises de todos os nveis do sistema atravs das mensagens de registro. Podemos selecionar o nvel de sada das mensagens de registro(`verbosty`), atravs de um abordagem multinvel. As mensagens de registro podem ser desabilitadas completamente, habilitadas componente por componente ou habilitada globalmente. Ou seja, permite selecionar o nvel de detalhamento das mensagens de sada. O mdulo de registro do |ns3| fornece uma forma correta e segura de obtermos informaes sobre as simulaes.
..
You should understand that we do provide a general purpose mechanism ---
tracing --- to get data out of your models which should be preferred for
simulation output (see the tutorial section Using the Tracing System for
more details on our tracing system). Logging should be preferred for
debugging information, warnings, error messages, or any time you want to
easily get a quick message out of your scripts or models.
No |ns3| foi implementado um mecanismo de --- rastreamento --- de propsito geral, que permite a obteno de sadas de dados dos modelos simulados (veja a seo Usando o Sistema de Rastreamento do tutorial para mais detalhes). O sistema de registro deve ser usado para depurar informaes, alertas, mensagens de erros ou para mostrar qualquer informao dos `scripts` ou modelos.
..
There are currently seven levels of log messages of increasing verbosity
defined in the system.
Atualmente existem sete nveis de mensagens de registro definidas no sistema.
..
* NS_LOG_ERROR --- Log error messages;
* NS_LOG_WARN --- Log warning messages;
* NS_LOG_DEBUG --- Log relatively rare, ad-hoc debugging messages;
* NS_LOG_INFO --- Log informational messages about program progress;
* NS_LOG_FUNCTION --- Log a message describing each function called;
* NS_LOG_LOGIC -- Log messages describing logical flow within a function;
* NS_LOG_ALL --- Log everything.
* NS_LOG_ERROR --- Registra mensagens de erro;
* NS_LOG_WARN --- Registra mensagens de alertas;
* NS_LOG_DEBUG --- Registra mensagens mais raras, mensagens de depurao `ad-hoc`;
* NS_LOG_INFO --- Registra mensagens informativas sobre o progresso do programa;
* NS_LOG_FUNCTION --- Registra mensagens descrevendo cada funo chamada;
* NS_LOG_LOGIC --- Registra mensagens que descrevem o fluxo lgico dentro de uma funo;
* NS_LOG_ALL --- Registra tudo.
..
We also provide an unconditional logging level that is always displayed,
irrespective of logging levels or component selection.
Tambm fornecido um nvel de registro incondicional, que sempre exibido independente do nvel de registro ou do componente selecionado.
..
* NS_LOG_UNCOND -- Log the associated message unconditionally.
* NS_LOG_UNCOND --- Registra mensagens incondicionalmente.
..
Each level can be requested singly or cumulatively; and logging can be set
up using a shell environment variable (NS_LOG) or by logging system function
call. As was seen earlier in the tutorial, the logging system has Doxygen
documentation and now would be a good time to peruse the Logging Module
documentation if you have not done so.
Cada nvel pode ser requerido individualmente ou de forma cumulativa. O registro pode ser configurado usando uma varivel de ambiente (``NS_LOG``) ou atravs de uma chamada ao sistema de registro. J havamos abordado anteriormente o sistema de registro, atravs da documentao Doxygen, agora uma boa hora para ler com ateno esta documentao no Doxygen.
..
Now that you have read the documentation in great detail, let's use some of
that knowledge to get some interesting information out of the
``scratch/myfirst.cc`` example script you have already built.
Depois de ler a documentao, vamos usar nosso conhecimento para obter algumas informaes importante do cdigo de exemplo ``scratch/myfirst.cc``.
..
Enabling Logging
Habilitando o Sistema de Registro
+++++++++++++++++++++++++++++++++
..
Let's use the NS_LOG environment variable to turn on some more logging, but
first, just to get our bearings, go ahead and run the last script just as you
did previously,
Utilizaremos a varivel de ambiente ``NS_LOG`` para habilitar o sistema de Registro, mas antes de prosseguir, execute o cdigo feito na seo anterior,
::
./waf --run scratch/myfirst
..
You should see the now familiar output of the first |ns3| example
program
Veremos a sada do nosso primeiro programa |ns3| de exemplo, tal como visto anteriormente.
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.413s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2
..
It turns out that the "Sent" and "Received" messages you see above are
actually logging messages from the ``UdpEchoClientApplication`` and
``UdpEchoServerApplication``. We can ask the client application, for
example, to print more information by setting its logging level via the
NS_LOG environment variable.
As mensagens de envio e recebimentos apresentadas anteriormente so mensagens de registro, obtidas de ``UdpEchoClientApplication`` e ``UdpEchoServerApplication``. Podemos pedir para a aplicao cliente, por exemplo, imprimir mais informaes configurando o nvel de registro atravs da varivel de ambiente ``NS_LOG``.
..
I am going to assume from here on that you are using an sh-like shell that uses
the"VARIABLE=value" syntax. If you are using a csh-like shell, then you
will have to convert my examples to the "setenv VARIABLE value" syntax
required by those shells.
Aqui estamos assumindo que voc est usando um `shell` parecido com o ``sh``, que usa a sintaxe "VARIABLE=value". Se voc estiver usando um `shell` parecido com o ``csh``, ento ter que converter os exemplos para a sintaxe "setenv VARIABLE value", requerida por este `shell`.
..
Right now, the UDP echo client application is responding to the following line
of code in ``scratch/myfirst.cc``,
Agora, a aplicao cliente de eco UDP ir responder a seguinte linha de cdigo ``scratch/myfirst.cc``,
::
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
..
This line of code enables the ``LOG_LEVEL_INFO`` level of logging. When
we pass a logging level flag, we are actually enabling the given level and
all lower levels. In this case, we have enabled ``NS_LOG_INFO``,
``NS_LOG_DEBUG``, ``NS_LOG_WARN`` and ``NS_LOG_ERROR``. We can
increase the logging level and get more information without changing the
script and recompiling by setting the NS_LOG environment variable like this:
Essa linha de cdigo habilita o nvel ``LOG_LEVEL_INFO`` de registro. Quando habilitamos um dado nvel de registro, estamos habilitando este nvel e todos os nveis inferiores a este. Neste caso, habilitamos ``NS_LOG_INFO``, ``NS_LOG_DEBUG``, ``NS_LOG_WARN`` e ``NS_LOG_ERROR``. Podemos aumentar o nvel de registro e obter mais informaes sem alterar o `script`, ou seja, sem ter que recompilar. Conseguimos isto atravs da configurao da varivel de ambiente ``NS_LOG``, tal como:
::
export NS_LOG=UdpEchoClientApplication=level_all
..
This sets the shell environment variable ``NS_LOG`` to the string,
Isto configura a varivel de ambiente ``NS_LOG`` no `shell` para,
::
UdpEchoClientApplication=level_all
..
The left hand side of the assignment is the name of the logging component we
want to set, and the right hand side is the flag we want to use. In this case,
we are going to turn on all of the debugging levels for the application. If
you run the script with NS_LOG set this way, the |ns3| logging
system will pick up the change and you should see the following output:
Do lado esquerdo do comando temos o nome do componente de registro que ns queremos configurar, no lado direito fica o valor que estamos passando. Neste caso, estamos ligando todos os nveis de depurao para a aplicao. Se executarmos o cdigo com o ``NS_LOG`` configurado desta forma, o sistema de registro do |NS3| observar a mudana e mostrar a seguinte sada:
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
..
The additional debug information provided by the application is from
the NS_LOG_FUNCTION level. This shows every time a function in the application
is called during script execution. Note that there are no requirements in the
|ns3| system that models must support any particular logging
functionality. The decision regarding how much information is logged
is left to the individual model developer. In the case of the echo
applications, a good deal of log output is available.
As informaes de depurao extras, apresentadas aqui, so fornecidas pela aplicao no nvel de registros ``NS_LOG_FUNCTION``. Isto apresentado toda vez que a aplicao chamar a funo. No obrigatrio que o modelo fornea suporte a registro, no |ns3|, esta deciso cabe ao desenvolvedor do modelo. No caso da aplicao de eco uma grande quantidade de sadas de `log` esto disponveis.
..
You can now see a log of the function calls that were made to the application.
If you look closely you will notice a single colon between the string
``UdpEchoClientApplication`` and the method name where you might have
expected a C++ scope operator (``::``). This is intentional.
Podemos ver agora registros de vrias funes executadas pela aplicao. Se olharmos mais de perto veremos que as informaes so dadas em colunas separadas por (``::``), do lado esquerdo est o nome da aplicao (no exemplo, ``UdpEchoClientApplication``) e do outro lado o nome do mtodo esperado pelo escopo C++. Isto incremental.
..
The name is not actually a class name, it is a logging component name. When
there is a one-to-one correspondence between a source file and a class, this
will generally be the class name but you should understand that it is not
actually a class name, and there is a single colon there instead of a double
colon to remind you in a relatively subtle way to conceptually separate the
logging component name from the class name.
O nome que est aparece no registro no necessariamente o nome da classe, mas sim o nome do componente de registro. Quando existe uma correspondncia um-para-um, entre cdigo fonte e classe, este geralmente ser o nome da classe, mas isto nem sempre verdade. A maneira sutil de diferenciar esta situao usar ``:`` quando for o nome do componente de registro e ``::`` quando for o nome da classe.
..
It turns out that in some cases, it can be hard to determine which method
actually generates a log message. If you look in the text above, you may
wonder where the string "``Received 1024 bytes from 10.1.1.2``" comes
from. You can resolve this by OR'ing the ``prefix_func`` level into the
``NS_LOG`` environment variable. Try doing the following,
Em alguns casos pode ser complicado determinar qual mtodo gerou a mensagem. Se olharmos o texto anterior, veremos a mensagem "``Received 1024 bytes from 10.1.1.2``", nesta no existe certeza de onde a mensagem veio. Podemos resolver isto usando um "OU" (`OR`) entre o nvel de registro e o ``prefix_func``, dentro do ``NS_LOG``.
::
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
..
Note that the quotes are required since the vertical bar we use to indicate an
OR operation is also a Unix pipe connector.
As aspas so requeridas quando usamos o `|` (`pipe`) para indicar uma operao de OU.
..
Now, if you run the script you will see that the logging system makes sure
that every message from the given log component is prefixed with the component
name.
Agora, se executarmos o `script` devemos ver que o sistema de registro informa de qual componente de registro vem a mensagem.
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
..
You can now see all of the messages coming from the UDP echo client application
are identified as such. The message "Received 1024 bytes from 10.1.1.2" is
now clearly identified as coming from the echo client application. The
remaining message must be coming from the UDP echo server application. We
can enable that component by entering a colon separated list of components in
the NS_LOG environment variable.
Podemos ver, depois da configurao, que todas as mensagens do cliente de eco UDP esto identificadas. Agora a mensagem "Received 1024 bytes from 10.1.1.2" claramente identificada como sendo do cliente de eco. O restante das mensagens devem estar vindo do servidor de eco UDP. Podemos habilitar mais do que um componente usando ``:``, para separ-los na varivel ``NS_LOG``.
::
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
UdpEchoServerApplication=level_all|prefix_func'
..
Warning: You will need to remove the newline after the ``:`` in the
example text above which is only there for document formatting purposes.
Ateno: no podemos quebrar a entrada da varivel em vrias linhas como foi feito no exemplo, tudo deve estar em uma nica linha. O exemplo ficou assim por uma questo de formatao do documento.
..
Now, if you run the script you will see all of the log messages from both the
echo client and server applications. You may see that this can be very useful
in debugging problems.
Agora, se executarmos o `script` veremos todas as mensagens de registro tanto do cliente quando do servidor. Isto muito til na depurao de problemas.
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
UdpEchoServerApplication:HandleRead(): Echoing packet
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
..
It is also sometimes useful to be able to see the simulation time at which a
log message is generated. You can do this by ORing in the prefix_time bit.
As vezes tambm til registrar o tempo em que uma mensagem gerada. Podemos fazer isto atravs de um OU com o `prefix_time`, exemplo:
::
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:
UdpEchoServerApplication=level_all|prefix_func|prefix_time'
..
Again, you will have to remove the newline above. If you run the script now,
you should see the following output:
Novamente, teremos que deixar tudo em uma nica linha e no em duas como no exemplo anterior. Executando o `script`, veremos a seguinte sada:
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
..
You can see that the constructor for the UdpEchoServer was called at a
simulation time of 0 seconds. This is actually happening before the
simulation starts, but the time is displayed as zero seconds. The same is true
for the UdpEchoClient constructor message.
Podemos ver que o construtor para o ``UdpEchoServer`` foi chamado pelo simulador no segundo 0 (zero). Isto acontece antes do simulador ser iniciado, mas o tempo mostrado como zero, o mesmo acontece para o construtor do ``UdpEchoClient``.
..
Recall that the ``scratch/first.cc`` script started the echo server
application at one second into the simulation. You can now see that the
``StartApplication`` method of the server is, in fact, called at one second.
You can also see that the echo client application is started at a simulation
time of two seconds as we requested in the script.
Lembre-se que o `script` ``scratch/first.cc`` inicia a aplicao servidor de eco no primeiro segundo da simulao. Repare que o mtodo ``StartApplication`` do servidor , de fato, chamado com um segundo. Tambm podemos notar que a aplicao cliente de eco iniciada com dois segundos de simulao, como ns pedimos no `script`.
..
You can now follow the progress of the simulation from the
``ScheduleTransmit`` call in the client that calls ``Send`` to the
``HandleRead`` callback in the echo server application. Note that the
elapsed time for the packet to be sent across the point-to-point link is 3.69
milliseconds. You see the echo server logging a message telling you that it
has echoed the packet and then, after another channel delay, you see the echo
client receive the echoed packet in its ``HandleRead`` method.
..
>> rever traduo
Agora podemos acompanhar o andamento da simulao: ``ScheduleTransmit`` chamado no cliente, que invoca o ``Send`` e o ``HandleRead``, que usado na aplicao servidor de eco. Repare que o tempo decorrido entre o envio de cada pacote de 3.69 milissegundos. Veja que a mensagem de registro do servidor diz que o pacote foi ecoado e depois houve um atraso no canal. Podemos ver que o cliente recebeu o pacote ecoado pelo mtodo ``HandleRead``.
..
There is a lot that is happening under the covers in this simulation that you
are not seeing as well. You can very easily follow the entire process by
turning on all of the logging components in the system. Try setting the
``NS_LOG`` variable to the following,
Existe muita coisa acontecendo por baixo dos panos e que no estamos vendo. Podemos facilmente seguir as entradas de processo configurando todos os componentes de registro do sistema. Configure a varivel de ``NS_LOG`` da seguinte forma,
::
export 'NS_LOG=*=level_all|prefix_func|prefix_time'
..
The asterisk above is the logging component wildcard. This will turn on all
of the logging in all of the components used in the simulation. I won't
reproduce the output here (as of this writing it produces 1265 lines of output
for the single packet echo) but you can redirect this information into a file
and look through it with your favorite editor if you like,
O asterisco um componente coringa, que ira ligar todos os componentes de registro usados na simulao. No vamos reproduzir a sada aqui (cada pacote de eco produz 1265 linhas de sada), mas podemos redirecionar esta informao para um arquivo e visualiz-lo depois em um editor de textos,
::
./waf --run scratch/myfirst > log.out 2>&1
..
I personally use this extremely verbose version of logging when I am presented
with a problem and I have no idea where things are going wrong. I can follow the
progress of the code quite easily without having to set breakpoints and step
through code in a debugger. I can just edit up the output in my favorite editor
and search around for things I expect, and see things happening that I don't
expect. When I have a general idea about what is going wrong, I transition into
a debugger for a fine-grained examination of the problem. This kind of output
can be especially useful when your script does something completely unexpected.
If you are stepping using a debugger you may miss an unexpected excursion
completely. Logging the excursion makes it quickly visible.
utilizamos uma verso extremamente detalhada de registro quando surge um problema e no temos ideia do que est errado. Assim, podemos seguir o andamento do cdigo e depurar o erro. Podemos assim visualizar a sada em um editor de texto e procurar por coisas que ns esperamos e principalmente por coisa que no espervamos. Quando temos uma ideia geral sobre o que est acontecendo de errado, usamos um depurador de erros para examinarmos de forma mais detalhada o problema. Este tipo de sada pode ser especialmente til quando nosso `script` faz algo completamente inesperado. Se estivermos depurando o problema passo a passo, podemos nos perder completamente. O registro pode tornar as coisas mais visveis.
..
Adding Logging to your Code
Adicionando registros ao Cdigo
+++++++++++++++++++++++++++++++
..
You can add new logging to your simulations by making calls to the log
component via several macros. Let's do so in the ``myfirst.cc`` script we
have in the ``scratch`` directory.
Podemos adicionar novos registros nas simulaes fazendo chamadas para o componente de registro atravs de vrias macros. Vamos fazer isto em nosso cdigo ``myfirst.cc`` no diretrio ``scratch``
..
Recall that we have defined a logging component in that script:
Lembre-se que ns temos que definir o componente de registro em nosso cdigo:
::
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
..
You now know that you can enable all of the logging for this component by
setting the ``NS_LOG`` environment variable to the various levels. Let's
go ahead and add some logging to the script. The macro used to add an
informational level log message is ``NS_LOG_INFO``. Go ahead and add one
(just before we start creating the nodes) that tells you that the script is
"Creating Topology." This is done as in this code snippet,
Agora que sabemos habilitar todos os registros em vrios nveis configurando a varivel ``NS_LOG``. Vamos adicionar alguns registros ao cdigo. O macro usado para adicionar uma mensagem ao nvel de informao ``NS_LOG_INFO``, ento vamos adicionar uma mensagem dessas (pouco antes de criar os ns de rede) que diz que a "Topologia foi Criada". Isto feito como neste trecho do cdigo,
..
Open ``scratch/myfirst.cc`` in your favorite editor and add the line,
Abra o arquivo ``scratch/myfirst.cc`` e adicione a linha,
::
NS_LOG_INFO ("Creating Topology");
..
right before the lines,
antes das linhas,
::
NodeContainer nodes;
nodes.Create (2);
..
Now build the script using waf and clear the ``NS_LOG`` variable to turn
off the torrent of logging we previously enabled:
Agora construa o cdigo usando o Waf e limpe a varivel ``NS_LOG`` desabilite o registro que ns havamos habilitado anteriormente:
::
./waf
export NS_LOG=
..
Now, if you run the script,
Agora, se executarmos o cdigo,
::
./waf --run scratch/myfirst
..
you will ``not`` see your new message since its associated logging
component (``FirstScriptExample``) has not been enabled. In order to see your
message you will have to enable the ``FirstScriptExample`` logging component
with a level greater than or equal to ``NS_LOG_INFO``. If you just want to
see this particular level of logging, you can enable it by,
veremos novas mensagens, pois o componente de registro no est habilitado. Agora para ver a mensagem devemos habilitar o componente de registro do ``FirstScriptExample`` com um nvel maior ou igual a ``NS_LOG_INFO``. Se s esperamos ver um nvel particular de registro, devemos habilita-lo,
::
export NS_LOG=FirstScriptExample=info
..
If you now run the script you will see your new "Creating Topology" log
message,
Agora se executarmos o cdigo veremos nossa mensagem de registro "Creating Topology",
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
Creating Topology
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2
..
Using Command Line Arguments
Usando Argumentos na Linha de Comando
*************************************
..
Overriding Default Attributes
Sobrepondo Atributos Padres
+++++++++++++++++++++++++++++
..
Another way you can change how |ns3| scripts behave without editing
and building is via *command line arguments.* We provide a mechanism to
parse command line arguments and automatically set local and global variables
based on those arguments.
Podemos alterar o comportamento dos cdigos do |ns3| sem precisar editar ou construir cdigos, isto feito atravs de linhas de comandos. Para isto o |ns3| fornece um mecanismo de analise de argumentos de linha de comando (`parse`), que configura automaticamente variveis locais e globais atravs desses argumentos.
..
The first step in using the command line argument system is to declare the
command line parser. This is done quite simply (in your main program) as
in the following code,
O primeiro passo para usar argumentos de linha de comando declarar o analisador de linha de comandos. Isto feito com a seguinte linha de programao, em seu programa principal,
::
int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}
..
This simple two line snippet is actually very useful by itself. It opens the
door to the |ns3| global variable and ``Attribute`` systems. Go
ahead and add that two lines of code to the ``scratch/myfirst.cc`` script at
the start of ``main``. Go ahead and build the script and run it, but ask
the script for help in the following way,
Estas duas linhas de programao so muito uteis. Isto abre uma porta para as variveis globais e atributos do |ns3|. Adicione estas duas linhas no cdigo em nosso exemplo ``scratch/myfirst.cc``, bem no inicio da funo principal (``main``). Na sequencia construa o cdigo e execute-o, mas pea para o cdigo "ajudar" da seguinte forma,
::
./waf --run "scratch/myfirst --PrintHelp"
..
This will ask Waf to run the ``scratch/myfirst`` script and pass the command
line argument ``--PrintHelp`` to the script. The quotes are required to
sort out which program gets which argument. The command line parser will
now see the ``--PrintHelp`` argument and respond with,
Isto pede ao Waf para executar o ``scratch/myfirst`` e passa via linha de comando o argumento ``--PrintHelp``. As aspas so necessrias para ordenar os argumentos. O analisador de linhas de comandos agora tem como argumento o ``--PrintHelp`` e responde com,
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): Handle arg name=PrintHelp value=
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
..
Let's focus on the ``--PrintAttributes`` option. We have already hinted
at the |ns3| ``Attribute`` system while walking through the
``first.cc`` script. We looked at the following lines of code,
Vamos focar na opo ``--PrintAttributes``. J demos a dica sobre atributos no |ns3| enquanto explorvamos o cdigo do ``first.cc``. Ns olhamos as seguintes linhas de cdigo,
::
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
..
and mentioned that ``DataRate`` was actually an ``Attribute`` of the
``PointToPointNetDevice``. Let's use the command line argument parser
to take a look at the ``Attributes`` of the PointToPointNetDevice. The help
listing says that we should provide a ``TypeId``. This corresponds to the
class name of the class to which the ``Attributes`` belong. In this case it
will be ``ns3::PointToPointNetDevice``. Let's go ahead and type in,
e mencionamos que ``DataRate`` um atributo de ``PointToPointNetDevice``. Vamos usar os argumentos de linha de comando para ver os atributos de ``PointToPointNetDevice``. A lista de ajuda diz que ns devemos fornecer um ``TypeId``, este corresponde ao nome da classe do atributo. Neste caso ser ``ns3::PointToPointNetDevice``. Seguindo em frente digite,
::
./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
..
The system will print out all of the ``Attributes`` of this kind of net device.
Among the ``Attributes`` you will see listed is,
O sistema ir mostrar todos os atributos dos tipos de dispositivos de rede (`net device`). Entre os atributos veremos,
::
--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links
..
This is the default value that will be used when a ``PointToPointNetDevice``
is created in the system. We overrode this default with the ``Attribute``
setting in the ``PointToPointHelper`` above. Let's use the default values
for the point-to-point devices and channels by deleting the
``SetDeviceAttribute`` call and the ``SetChannelAttribute`` call from
the ``myfirst.cc`` we have in the scratch directory.
..
>> rever reviso
32768 bits por segundos o valor padro que ser usado quando criarmos um ``PointToPointNetDevice`` no sistema. Vamos alterar este valor padro do ``PointToPointHelper``. Para isto iremos usar os valores dos dispositivos ponto-a-ponto e dos canais, deletando a chamada ``SetDeviceAttribute`` e ``SetChannelAttribute`` do ``myfirst.cc``, que ns temos no diretrio ``scratch``.
..
Your script should now just declare the ``PointToPointHelper`` and not do
any ``set`` operations as in the following example,
Nosso cdigo agora deve apenas declarar o ``PointToPointHelper`` sem configurar qualquer operao, como no exemplo a seguir,
::
...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...
..
Go ahead and build the new script with Waf (``./waf``) and let's go back
and enable some logging from the UDP echo server application and turn on the
time prefix.
Agora construa o novo cdigo com o Waf (``./waf``) e depois vamos habilitar alguns registros para o servidor de eco UDP e ligar o prefixo de informaes sobre tempo de execuo.
::
export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'
..
If you run the script, you should now see the following output,
Agora ao executar o cdigo veremos a seguinte sada,
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
..
Recall that the last time we looked at the simulation time at which the packet
was received by the echo server, it was at 2.00369 seconds.
Lembre-se que o ltimo tempo que vimos na simulao quando recebemos um pacote de eco no servidor, foi de 2.00369 segundos.
::
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
..
Now it is receiving the packet at 2.25732 seconds. This is because we just dropped
the data rate of the ``PointToPointNetDevice`` down to its default of
32768 bits per second from five megabits per second.
Agora o pacote recebido em 2.25732 segundos. Isto porque retiramos a taxa de transferncia do ``PointToPointNetDevice`` e portanto foi assumido o valor padro 32768 bits por segundos ao invs de cinco megabits por segundo.
..
If we were to provide a new ``DataRate`` using the command line, we could
speed our simulation up again. We do this in the following way, according to
the formula implied by the help item:
Se ns passarmos uma nova taxa de dados usando a linha de comando, podemos aumentar a velocidade da rede novamente. Ns podemos fazer isto da seguinte forma, usando um `help`:
::
./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
..
This will set the default value of the ``DataRate`` ``Attribute`` back to
five megabits per second. Are you surprised by the result? It turns out that
in order to get the original behavior of the script back, we will have to set
the speed-of-light delay of the channel as well. We can ask the command line
system to print out the ``Attributes`` of the channel just like we did for
the net device:
Isto ira configurar o valor do atributo ``DataRate`` para cinco megabits por segundos. Ficou surpreso com o resultado? Acontece que para obtermos o resultado do cdigo original, teremos que configurar tambm o atraso do canal de comunicao. Podemos fazer isto via linha de comandos, tal como fizemos com o dispositivo de rede:
::
./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"
..
We discover the ``Delay`` ``Attribute`` of the channel is set in the following
way:
Ento descobrimos que o atributo ``Delay`` do canal esta configurado com o seguinte valor padro:
::
--ns3::PointToPointChannel::Delay=[0ns]:
Transmission delay through the channel
..
We can then set both of these default values through the command line system,
Podemos configurar ambos valores via linha de comando,
::
./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"
..
in which case we recover the timing we had when we explicitly set the
``DataRate`` and ``Delay`` in the script:
neste caso voltamos com os tempos de ``DataRate`` e ``Delay`` que tnhamos inicialmente no cdigo original:
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.00369s Received 1024 bytes from 10.1.1.1
2.00369s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
..
Note that the packet is again received by the server at 2.00369 seconds. We
could actually set any of the ``Attributes`` used in the script in this way.
In particular we could set the ``UdpEchoClient Attribute MaxPackets``
to some other value than one.
Repare que o pacote recebido novamente pelo servidor com 2.00369 segundos. Ento desta forma, podemos configurar qualquer atributo usado no cdigo. Em particular ns podemos configurar o atributo ``MaxPackets`` do ``UdpEchoClient`` para qualquer outro valor.
..
How would you go about that? Give it a try. Remember you have to comment
out the place we override the default ``Attribute`` and explicitly set
``MaxPackets`` in the script. Then you have to rebuild the script. You
will also have to find the syntax for actually setting the new default attribute
value using the command line help facility. Once you have this figured out
you should be able to control the number of packets echoed from the command
line. Since we're nice folks, we'll tell you that your command line should
end up looking something like,
importante lembrar que devemos retirar todas as configuraes com valores explcitos do cdigo. Depois disto devemos re-construir o cdigo (fazer novamente os binrios). Tambm teremos que achar a sintaxe do atributo usando o `help` da linha de comando. Uma vez que tenhamos este cenrio estaremos aptos para controlar o nmeros de pacotes ecoados via linha de comando. No final a linha de comando deve parecer com algo como:
::
./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms
--ns3::UdpEchoClient::MaxPackets=2"
..
Hooking Your Own Values
..
>> rever traduo de Hooking neste contexto
Conectando Seus Prprios Valores
++++++++++++++++++++++++++++++++
..
You can also add your own hooks to the command line system. This is done
quite simply by using the ``AddValue`` method to the command line parser.
Podemos tambm adicionar conectores (opes que alteram valores de variveis) ao sistema de linha de comando. Isto nada mais do que criar uma opo na linha de comando, a qual permitir a configurao de uma varivel dentro do cdigo. Isto feito usando o mtodo ``AddValue`` no analisador da linha de comando.
..
Let's use this facility to specify the number of packets to echo in a
completely different way. Let's add a local variable called ``nPackets``
to the ``main`` function. We'll initialize it to one to match our previous
default behavior. To allow the command line parser to change this value, we
need to hook the value into the parser. We do this by adding a call to
``AddValue``. Go ahead and change the ``scratch/myfirst.cc`` script to
start with the following code,
Vamos usar esta facilidade para especificar o nmero de pacotes de eco de uma forma completamente diferente. Iremos adicionar uma varivel local chamada ``nPackets`` na funo ``main``. Vamos iniciar com nosso valor anterior. Para permitir que a linha de comando altere este valor, precisamos fixar o valor no `parser`. Fazemos isto adicionando uma chamada para ``AddValue``. Altere o cdigo ``scratch/myfirst.cc`` comeando pelo seguinte trecho de cdigo,
::
int
main (int argc, char *argv[])
{
uint32_t nPackets = 1;
CommandLine cmd;
cmd.AddValue("nPackets", "Number of packets to echo", nPackets);
cmd.Parse (argc, argv);
...
..
Scroll down to the point in the script where we set the ``MaxPackets``
``Attribute`` and change it so that it is set to the variable ``nPackets``
instead of the constant ``1`` as is shown below.
D uma olhada um pouco mais para baixo, no cdigo e veja onde configuramos o atributo ``MaxPackets``, retire o ``1`` e coloque em seu lugar a varivel ``nPackets``, como mostrado a seguir:
::
echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));
..
Now if you run the script and provide the ``--PrintHelp`` argument, you
should see your new ``User Argument`` listed in the help display.
Agora se executarmos o cdigo e fornecermos o argumento ``--PrintHelp``, deveremos ver nosso argumento de usurio (`User Arguments`), listado no `help`.
..
Try,
Execute,
::
./waf --run "scratch/myfirst --PrintHelp"
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.403s)
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
User Arguments:
--nPackets: Number of packets to echo
..
If you want to specify the number of packets to echo, you can now do so by
setting the ``--nPackets`` argument in the command line,
Agora para especificar o nmero de pacotes de eco podemos utilizar o argumento ``--nPackets`` na linha de comando,
::
./waf --run "scratch/myfirst --nPackets=2"
..
You should now see
Agora deveremos ver,
::
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
Sent 1024 bytes to 10.1.1.2
3.25732s Received 1024 bytes from 10.1.1.1
3.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
..
You have now echoed two packets. Pretty easy, isn't it?
Agora, ecoamos dois pacotes. Muito fcil, no ?
..
You can see that if you are an |ns3| user, you can use the command
line argument system to control global values and ``Attributes``. If you are
a model author, you can add new ``Attributes`` to your ``Objects`` and
they will automatically be available for setting by your users through the
command line system. If you are a script author, you can add new variables to
your scripts and hook them into the command line system quite painlessly.
Usando o |ns3|, podemos usar argumentos via linha de comando para controlar valores de atributos. Ao construir modelos de simulao podemos adicionar novos atributos aos objetos e isto ficar disponvel, automaticamente para ajustes atravs do sistema via linha de comando. Ao criarmos nossos cdigos poderemos adicionar novas variveis e conect-las ao sistema de forma simples.
..
Using the Tracing System
Usando o Sistema de Rastreamento
********************************
..
The whole point of simulation is to generate output for further study, and
the |ns3| tracing system is a primary mechanism for this. Since
|ns3| is a C++ program, standard facilities for generating output
from C++ programs could be used:
O ponto principal da simulao gerar informaes de sada para estudos futuros e o sistema de rastreamento (`Tracing System`) do |ns3| o mecanismo primrio para isto. Devido ao fato do |ns3| ser um programa escrito em C++, as funcionalidades para se gerar sadas podem ser utilizadas:
::
#include <iostream>
...
int main ()
{
...
std::cout << "The value of x is " << x << std::endl;
...
}
..
You could even use the logging module to add a little structure to your
solution. There are many well-known problems generated by such approaches
and so we have provided a generic event tracing subsystem to address the
issues we thought were important.
Podemos usar o mdulo de registro (visto anteriormente) para verificar pequenas estruturas de nossas solues. Porm, os problemas gerados por esta abordagem j so bem conhecidos e portanto fornecemos um subsistema para rastrear eventos genricos para localizar problemas importantes.
..
The basic goals of the |ns3| tracing system are:
Os objetivos bsicos do sistema de rastreamento |ns3| so:
..
* For basic tasks, the tracing system should allow the user to generate
standard tracing for popular tracing sources, and to customize which objects
generate the tracing;
* Intermediate users must be able to extend the tracing system to modify
the output format generated, or to insert new tracing sources, without
modifying the core of the simulator;
* Advanced users can modify the simulator core to add new tracing sources
and sinks.
* Para as tarefas bsicas, o sistemas de rastreamento fornece ao usurio um rastreamento padro atravs de rastreamentos conhecidos e customizao dos objetos que geram o rastreamento;
* Os usurios podem estender o sistema de rastreamento para modificar os formatos das sadas geradas ou inserir novas fontes de rastreamento, sem modificar o ncleo do simulador;
* Usurios avanados podem modificar o ncleo do simulador para adicionar novas origens de rastreamentos e destino do rastreamento.
..
The |ns3| tracing system is built on the concepts of independent
tracing sources and tracing sinks, and a uniform mechanism for connecting
sources to sinks. Trace sources are entities that can signal events that
happen in a simulation and provide access to interesting underlying data.
For example, a trace source could indicate when a packet is received by a net
device and provide access to the packet contents for interested trace sinks.
O sistema de rastreamento do |ns3| feito atravs de conceitos independentes de rasteamento na origem e no destino, e um mecanismo uniforme para conectar a origem ao destino. O rastreador na origem so entidades que podem demonstrar eventos que ocorrem na simulao e fornece acesso aos dados importantes. Por exemplo, um rastreador de origem podem indicar quando um pacote recebido por um dispositivo de rede e prove acesso aos comentrios de pacote para os interessados no rastreador do destino.
..
Trace sources are not useful by themselves, they must be "connected" to
other pieces of code that actually do something useful with the information
provided by the sink. Trace sinks are consumers of the events and data
provided by the trace sources. For example, one could create a trace sink
that would (when connected to the trace source of the previous example) print
out interesting parts of the received packet.
Os rastreadores de origem no so usados sozinhos, eles devem ser "conectados" a outros pedaos de cdigo que fazem alguma coisa til com a informao fornecida pelo destino. Rastreador de destino so consumidores dos eventos e dados fornecidos pelos rastreadores de origem. Por exemplo, pode-se criar um rastreador de destino que (quando conectado ao rastreador de origem do exemplo anterior) mostrar sadas de partes importantes de pacotes recebidos.
..
The rationale for this explicit division is to allow users to attach new
types of sinks to existing tracing sources, without requiring editing and
recompilation of the core of the simulator. Thus, in the example above,
a user could define a new tracing sink in her script and attach it to an
existing tracing source defined in the simulation core by editing only the
user script.
A lgica desta diviso explicita permitir que os usurios apliquem novos tipos de rastreadores de destinos em rastreadores de origem existentes, sem precisar editar ou recompilar o ncleo do simulador. Assim, no exemplo anterior, o usurio pode definir um novo rastreador de destino em seu cdigo e aplicar isto a um rastreador de origem definido no ncleo da simulao editando, para isto, somente o cdigo do usurio.
..
In this tutorial, we will walk through some pre-defined sources and sinks and
show how they may be customized with little user effort. See the ns-3 manual
or how-to sections for information on advanced tracing configuration including
extending the tracing namespace and creating new tracing sources.
Neste tutorial, abordamos alguns rastreadores de origem e de destino j predefinidos e demonstramos como esses podem ser customizados, com um pouco de esforo. Veja o manual do ns-3 ou a seo de `how-to` para informaes avanadas sobre configurao de rastreamento incluindo extenso do `namespace` de rastreamento e criao de novos rastreadores de origem.
..
ASCII Tracing
Rastreamento ASCII
++++++++++++++++++
..
|ns3| provides helper functionality that wraps the low-level tracing
system to help you with the details involved in configuring some easily
understood packet traces. If you enable this functionality, you will see
output in a ASCII files --- thus the name. For those familiar with
|ns2| output, this type of trace is analogous to the ``out.tr``
generated by many scripts.
O |ns3| fornece uma funcionalidade de ajuda (`helper`) que cobre rastreamento em baixo nvel e ajuda com detalhes envolvendo configurao e rastros de pacotes. Se habilitarmos essa funcionalidade, veremos as sadas em arquivos ASCII (texto puro) --- da o nome. Isto parecido com a sada do |ns2|. Este tipo de rastreamento parecido com o ``out.tr`` gerado por outros cdigos.
..
Let's just jump right in and add some ASCII tracing output to our
``scratch/myfirst.cc`` script. Right before the call to
``Simulator::Run ()``, add the following lines of code:
Vamos adicionar algumas sadas de rastreamento ASCII em nosso cdigo ``scratch/myfirst.cc``. Antes de chamar ``Simulator::Run ()`` adicione as seguintes linhas de cdigo:
::
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));
..
Like in many other |ns3| idioms, this code uses a helper object to
help create ASCII traces. The second line contains two nested method calls.
The "inside" method, ``CreateFileStream()`` uses an unnamed object idiom
to create a file stream object on the stack (without an object name) and pass
it down to the called method. We'll go into this more in the future, but all
you have to know at this point is that you are creating an object representing
a file named "myfirst.tr" and passing it into ``ns-3``. You are telling
``ns-3`` to deal with the lifetime issues of the created object and also to
deal with problems caused by a little-known (intentional) limitation of C++
ofstream objects relating to copy constructors.
..
>> rever traduo no final o que ofstream?
Tal como j vimos no |ns3|, este cdigo usa o objeto Assistente para criar o rastreador ASCII. A segunda linha aninhada duas chamadas para mtodos. Dentro do mtodo ``CreateFileStream()`` utilizado um objeto para criar um outro objeto, que trata um arquivo, que passado para o mtodo. Iremos detalhar isto depois, agora tudo que precisamos saber que estamos criando um objeto que representa um arquivo chamado "myfirst.tr". Estamos dizendo para o ``ns-3`` tratar problemas de criao de objetos e tambm para tratar problemas causados por limitaes do C++ com objetos relacionados com cpias de construtores.
..
The outside call, to ``EnableAsciiAll()``, tells the helper that you
want to enable ASCII tracing on all point-to-point devices in your simulation;
and you want the (provided) trace sinks to write out information about packet
movement in ASCII format.
Fora da chamada, para ``EnableAsciiAll()``, dizemos para o Assistente que esperamos habilitar o rastreamento ASCII para todo dispositivo ponto-a-ponto da simulao; e esperamos rastrear destinos e escrever as informaes de sada sobre o movimento de pacotes no formato ASCII.
..
For those familiar with |ns2|, the traced events are equivalent to
the popular trace points that log "+", "-", "d", and "r" events.
Para queles familiarizados com |ns2|, os eventos rastreados so equivalentes aos populares pontos de rastreadores (`trace points`) que registram eventos "+", "-", "d", e "r"
..
You can now build the script and run it from the command line:
Agora podemos construir o cdigo e executa-lo:
::
./waf --run scratch/myfirst
..
Just as you have seen many times before, you will see some messages from Waf and then
"'build' finished successfully" with some number of messages from
the running program.
Veremos algumas mensagens do Waf, seguida da mensagem "'build' finished successfully", bem como algumas mensagens do programa.
..
When it ran, the program will have created a file named ``myfirst.tr``.
Because of the way that Waf works, the file is not created in the local
directory, it is created at the top-level directory of the repository by
default. If you want to control where the traces are saved you can use the
``--cwd`` option of Waf to specify this. We have not done so, thus we
need to change into the top level directory of our repo and take a look at
the ASCII trace file ``myfirst.tr`` in your favorite editor.
Quando isto for executado, o programa criar um arquivo chamado ``myfirst.tr``. Devido a forma que o Waf trabalha, o arquivo no criado no diretrio local, mas sim no diretrio raiz do repositrio. Se voc espera controlar o que salvo, ento use a opo ``-cwd`` do Waf. Agora mude para o diretrio raiz do repositrio e veja o arquivo ``myfirst.tr`` com um editor de texto.
..
Parsing Ascii Traces
Anlise de Rastros ASCII
~~~~~~~~~~~~~~~~~~~~~~~~
..
There's a lot of information there in a pretty dense form, but the first thing
to otice is that there are a number of distinct lines in this file. It may
be difficult to see this clearly unless you widen your window considerably.
Uma grande quantidade de informao gerada pelo sistema de rastreamento e pode ser difcil analis-las de forma clara e consistente.
..
Each line in the file corresponds to a *trace event*. In this case
we are tracing events on the *transmit queue* present in every
point-to-point net device in the simulation. The transmit queue is a queue
through which every packet destined for a point-to-point channel must pass.
Note that each line in the trace file begins with a lone character (has a
space after it). This character will have the following meaning:
Cada linha do arquivo corresponde a um evento de rastreamento (`trace event`). Neste caso so eventos rastreados da fila de transmisso (`transmit queue`). A fila de transmisso um lugar atravs do qual todo pacote destinado para o canal ponto-a-ponto deve passar. Note que cada linha no arquivo inicia com um nico caractere (com um espao depois). Este caractere tem o seguinte significado:
..
* ``+``: An enqueue operation occurred on the device queue;
* ``-``: A dequeue operation occurred on the device queue;
* ``d``: A packet was dropped, typically because the queue was full;
* ``r``: A packet was received by the net device.
* ``+``: Uma operao de enfileiramento (bloqueio) ocorreu no dispositivo de fila;
* ``-``: Uma operao de desenfileiramento (desbloqueio) ocorre no dispositivo de fila;
* ``d``: Um pacote foi descartado, normalmente por que a fila est cheia;
* ``r``: Um pacote foi recebido por um dispositivo de rede.
..
Let's take a more detailed view of the first line in the trace file. I'll
break it down into sections (indented for clarity) with a two digit reference
number on the left side:
Vamos detalhar mais a primeira linha do arquivo de rastreamento. Vamos dividi-la em sees com nmeros de dois dgitos para referncia:
::
00 +
01 2
02 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
03 ns3::PppHeader (
04 Point-to-Point Protocol: IP (0x0021))
05 ns3::Ipv4Header (
06 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
07 length: 1052 10.1.1.1 > 10.1.1.2)
08 ns3::UdpHeader (
09 length: 1032 49153 > 9)
10 Payload (size=1024)
..
The first line of this expanded trace event (reference number 00) is the
operation. We have a ``+`` character, so this corresponds to an
*enqueue* operation on the transmit queue. The second line (reference 01)
is the simulation time expressed in seconds. You may recall that we asked the
``UdpEchoClientApplication`` to start sending packets at two seconds. Here
we see confirmation that this is, indeed, happening.
A primeira linha do evento expandido (referncia nmero 00) a operao. Temos um caractere ``+``, que corresponde a uma operao de enfileiramento na fila de transmisso. A segunda linha (referncia 01) o tempo da simulao em segundos. Lembre-se que pedimos ao ``UdpEchoClientApplication`` para iniciar o envio de pacotes depois de dois segundos (aqui podemos confirmar que isto est acontecendo).
..
The next line of the example trace (reference 02) tell us which trace source
originated this event (expressed in the tracing namespace). You can think
of the tracing namespace somewhat like you would a filesystem namespace. The
root of the namespace is the ``NodeList``. This corresponds to a container
managed in the |ns3| core code that contains all of the nodes that are
created in a script. Just as a filesystem may have directories under the
root, we may have node numbers in the ``NodeList``. The string
``/NodeList/0`` therefore refers to the zeroth node in the ``NodeList``
which we typically think of as "node 0". In each node there is a list of
devices that have been installed. This list appears next in the namespace.
You can see that this trace event comes from ``DeviceList/0`` which is the
zeroth device installed in the node.
A prxima linha do exemplo (referncia 02) diz qual rastreador de origem iniciou este evento (expressado pelo `namespace` de rastreamento). Podemos pensar no `namespace` do rastreamento como algo parecido com um sistema de arquivos. A raiz do `namespace` o ``NodeList``. Este corresponde a um gerenciador de `container` no ncleo |ns3| que contm todos os ns de rede que foram criados no cdigo. Assim, como um sistema de arquivos pode ter diretrios dentro da raiz, podemos ter ns de rede no ``NodeList``. O texto ``/NodeList/0`` desta forma refere-se ao n de rede 0 (zero) no ``NodeList``, ou seja o "node 0". Em cada ns existe uma lista de dispositivos que esto instalados nestes ns de rede. Esta lista aparece depois do `namespace`. Podemos ver que este evento de rastreamento vem do ``DeviceList/0`` que o dispositivo 0 instalado neste n.
..
The next string, ``$ns3::PointToPointNetDevice`` tells you what kind of
device is in the zeroth position of the device list for node zero.
Recall that the operation ``+`` found at reference 00 meant that an enqueue
operation happened on the transmit queue of the device. This is reflected in
the final segments of the "trace path" which are ``TxQueue/Enqueue``.
O prximo texto, ``$ns3::PointToPointNetDevice`` informa qual o tipo de dispositivo na posio zero da lista de dispositivos para o n 0 (`node 0`). Lembre-se que a operao ``+`` significa que uma operao de enfileiramento est acontecendo na fila de transmisso do dispositivo. Isto reflete no segmento final do caminho de rastreamento, que so ``TxQueue/Enqueue``.
..
The remaining lines in the trace should be fairly intuitive. References 03-04
indicate that the packet is encapsulated in the point-to-point protocol.
References 05-07 show that the packet has an IP version four header and has
originated from IP address 10.1.1.1 and is destined for 10.1.1.2. References
08-09 show that this packet has a UDP header and, finally, reference 10 shows
that the payload is the expected 1024 bytes.
As linhas restantes no rastreamento devem ser intuitivas. As referncias 03-04 indicam que o pacote encapsulado pelo protocolo ponto-a-ponto. Referencias 05-07 mostram que foi usado o cabealho do IP na verso 4, o endereo IP de origem o 10.1.1.1 e o destino o 10.1.1.2. As referncias 08-09 mostram que o pacote tem um cabealho UDP e finalmente na referncia 10 apresentado que a rea de dados possui 1024 bytes.
..
The next line in the trace file shows the same packet being dequeued from the
transmit queue on the same node.
A prxima linha do arquivo de rastreamento mostra que o mesmo pacote inicia o desenfileiramento da fila de transmisso do mesmo n de rede.
..
The Third line in the trace file shows the packet being received by the net
device on the node with the echo server. I have reproduced that event below.
A terceira linha no arquivo mostra o pacote sendo recebido pelo dispositivo de rede no n que representa o servidor de eco. Reproduzimos o evento a seguir.
::
00 r
01 2.25732
02 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
03 ns3::Ipv4Header (
04 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
05 length: 1052 10.1.1.1 > 10.1.1.2)
06 ns3::UdpHeader (
07 length: 1032 49153 > 9)
08 Payload (size=1024)
..
Notice that the trace operation is now ``r`` and the simulation time has
increased to 2.25732 seconds. If you have been following the tutorial steps
closely this means that you have left the ``DataRate`` of the net devices
and the channel ``Delay`` set to their default values. This time should
be familiar as you have seen it before in a previous section.
A operao agora o ``r`` e o tempo de simulao foi incrementado para 2.25732 segundos. Se voc seguiu os passos do tutorial isto significa que temos o tempo padro tanto para ``DataRate`` quanto para o ``Delay``. J vimos este tempo na seo anterior.
..
The trace source namespace entry (reference 02) has changed to reflect that
this event is coming from node 1 (``/NodeList/1``) and the packet reception
trace source (``/MacRx``). It should be quite easy for you to follow the
progress of the packet through the topology by looking at the rest of the
traces in the file.
Na referncia 02, a entrada para o `namespace` foi alterada para refletir o evento vindo do n 1 (``/NodeList/1``) e o recebimento do pacote no rastreador de origem (``/MacRx``). Isto deve facilitar o acompanhamento dos pacotes atravs da topologia, pois basta olhar os rastros no arquivo.
..
PCAP Tracing
Rastreamento PCAP
+++++++++++++++++
..
The |ns3| device helpers can also be used to create trace files in the
``.pcap`` format. The acronym pcap (usually written in lower case) stands
for packet capture, and is actually an API that includes the
definition of a ``.pcap`` file format. The most popular program that can
read and display this format is Wireshark (formerly called Ethereal).
However, there are many traffic trace analyzers that use this packet format.
We encourage users to exploit the many tools available for analyzing pcap
traces. In this tutorial, we concentrate on viewing pcap traces with tcpdump.
Tambm podemos usar o formato ``.pcap`` para fazer rastreamento no |ns3|. O pcap (normalmente escrito em letras minsculas) permite a captura de pacotes e uma API que inclui a descrio de um arquivo no formato ``.pcap``. O programa mais conhecido para ler o mostrar este formato o Wireshark (formalmente chamado de Etherreal). Entretanto, existem muitos analisadores de trfego que usam este formato. Ns encorajamos que os usurios explorem vrias ferramentas disponveis para anlise do pcap. Neste tutorial nos concentraremos em dar uma rpida olhada no tcpdump.
..
The code used to enable pcap tracing is a one-liner.
O cdigo usado para habilitar o rastreamento pcap consiste de uma linha.
::
pointToPoint.EnablePcapAll ("myfirst");
..
Go ahead and insert this line of code after the ASCII tracing code we just
added to ``scratch/myfirst.cc``. Notice that we only passed the string
"myfirst," and not "myfirst.pcap" or something similar. This is because the
parameter is a prefix, not a complete file name. The helper will actually
create a trace file for every point-to-point device in the simulation. The
file names will be built using the prefix, the node number, the device number
and a ".pcap" suffix.
Insira esta linha depois do cdigo do rastreamento ASCII, no arquivo ``scratch/myfirst.cc``. Repare que passamos apenas o texto "myfirst" e no "myfirst.pcap", isto ocorre por que um prefixo e no um nome de arquivo completo. O assistente ir criar um arquivo contendo um prefixo e o nmero do n de rede, o nmero de dispositivo e o sufixo ".pcap".
..
In our example script, we will eventually see files named "myfirst-0-0.pcap"
and "myfirst-1-0.pcap" which are the pcap traces for node 0-device 0 and
node 1-device 0, respectively.
Em nosso cdigo, ns iremos ver arquivos chamados "myfirst-0-0.pcap"
e "myfirst-1-0.pcap" que so rastreamentos pcap do dispositivo 0 do n 0 e do dispositivo 0 do n de rede 1, respectivamente.
..
Once you have added the line of code to enable pcap tracing, you can run the
script in the usual way:
Uma vez que adicionamos a linha de cdigo que habilita o rastreamento pcap, podemos executar o cdigo da forma habitual:
::
./waf --run scratch/myfirst
..
If you look at the top level directory of your distribution, you should now
see three log files: ``myfirst.tr`` is the ASCII trace file we have
previously examined. ``myfirst-0-0.pcap`` and ``myfirst-1-0.pcap``
are the new pcap files we just generated.
Se olharmos no diretrio da distribuio, veremos agora trs novos arquivos de registro: ``myfirst.tr`` que o arquivo ASCII, que ns examinamos na seo anterior. ``myfirst-0-0.pcap`` e ``myfirst-1-0.pcap``, que so os novos arquivos pcap gerados.
..
Reading output with tcpdump
Lendo a sada com o tcpdump
~~~~~~~~~~~~~~~~~~~~~~~~~~~
..
The easiest thing to do at this point will be to use ``tcpdump`` to look
at the ``pcap`` files.
A forma mais confortvel de olhar os arquivos pcap usando o ``tcpdump``.
::
tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
..
You can see in the dump of ``myfirst-0-0.pcap`` (the client device) that the
echo packet is sent at 2 seconds into the simulation. If you look at the
second dump (``myfirst-1-0.pcap``) you can see that packet being received
at 2.257324 seconds. You see the packet being echoed back at 2.257324 seconds
in the second dump, and finally, you see the packet being received back at
the client in the first dump at 2.514648 seconds.
Podemos ver no primeiro `dump` do arquivo ``myfirst-0-0.pcap`` (dispositivo cliente), que o pacote de eco enviado com dois segundos de simulao. Olhando o segundo `dump` veremos que o pacote recebido com 2.257324 segundos. O pacote ecoado de volta com 2.257324 segundos e finalmente recebido de volta pelo cliente com 2.514648 segundos.
..
Reading output with Wireshark
Lendo sadas com o Wireshark
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
..
If you are unfamiliar with Wireshark, there is a web site available from which
you can download programs and documentation: http://www.wireshark.org/.
Podemos obter o Wireshark em http://www.wireshark.org/, bem como sua documentao.
..
Wireshark is a graphical user interface which can be used for displaying these
trace files. If you have Wireshark available, you can open each of the trace
files and display the contents as if you had captured the packets using a
*packet sniffer*.
O Wireshark um programa que usa interface grfica e pode ser usado para mostrar os arquivos de rastreamento. Com o Wireshark, podemos abrir cada arquivo de rastreamento e visualizar contedo como se tivssemos capturando os pacotes usando um analisador de trfego de redes (`packet sniffer`).
|