doc/tutorial-pt-br/source/tracing.rst
author Tom Henderson <tomh@tomh.org>
Fri, 18 May 2012 13:53:24 -0700
changeset 8772 ce0699130fc4
parent 8771 6cdcf5eb2048
child 8906 11398e7abe77
permissions -rw-r--r--
Fix doxygen reference
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     1
.. include:: replace.txt
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     2
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     3
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     4
	========================================================================================
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     5
	Translated for portuguese by the students of the inter-institutional doctorate program of IME-USP/UTFPR-CM.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     6
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     7
	Traduzido para o português pelos alunos do programa de doutorado inter institucional do Instituto de Matemática e Estatística da Universidade de São Paulo --- IME-USP em parceria com a Universidade Tecnológica Federal do Paraná - Campus Campo Mourão --- UTFPR-CM:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     8
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
     9
	* Frank Helbert (frank@ime.usp.br);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    10
	* Luiz Arthur Feitosa dos Santos (luizsan@ime.usp.br);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    11
	* Rodrigo Campiolo (campiolo@ime.usp.br).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    12
	========================================================================================
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    13
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    14
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    15
	Tracing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    16
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    17
Rastreamento
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    18
------------
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    19
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    20
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    21
	Background
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    22
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    23
Introdução
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    24
**********
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    25
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    26
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    27
	As mentioned in the Using the Tracing System section, the whole point of running
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    28
	an |ns3| simulation is to generate output for study.  You have two basic 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    29
	strategies to work with in |ns3|: using generic pre-defined bulk output 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    30
	mechanisms and parsing their content to extract interesting information; or 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    31
	somehow developing an output mechanism that conveys exactly (and perhaps only) 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    32
	the information wanted.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    33
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    34
Como abordado na seção Usando o Sistema de Rastreamento, o objetivo principal de uma
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    35
simulação no |ns3| é a geração de saída para estudo. Há duas estratégias básicas: 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    36
usar mecanismos predefinidos de saída e processar o conteúdo para extrair informações
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    37
relevantes; ou desenvolver mecanismos de saída que resultam somente ou exatamente na
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    38
informação pretendida.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    39
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    40
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    41
	Using pre-defined bulk output mechanisms has the advantage of not requiring any
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    42
	changes to |ns3|, but it does require programming.  Often, pcap or NS_LOG
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    43
	output messages are gathered during simulation runs and separately run through 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    44
	scripts that use grep, sed or awk to parse the messages and reduce and transform
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    45
	the data to a manageable form.  Programs must be written to do the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    46
	transformation, so this does not come for free.  Of course, if the information
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    47
	of interest in does not exist in any of the pre-defined output mechanisms,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    48
	this approach fails.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    49
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    50
Usar mecanismos predefinidos de saída possui a vantagem de não necessitar modificações 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    51
no |ns3|, mas requer programação. Geralmente, as mensagens de saída do pcap ou ``NS_LOG``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    52
são coletadas durante a execução da simulação e processadas separadamente por códigos (`scripts`) que usam `grep`, `sed` ou `awk` para reduzir e transformar os dados para uma forma mais simples de gerenciar. Há o custo do desenvolvimento de programas para realizar as transformações e em algumas situações a informação de interesse pode não estar contida em nenhuma das saídas, logo, a abordagem falha.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    53
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    54
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    55
	If you need to add some tidbit of information to the pre-defined bulk mechanisms,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    56
	this can certainly be done; and if you use one of the |ns3| mechanisms, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    57
	you may get your code added as a contribution.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    58
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    59
Se precisarmos adicionar o mínimo de informação para os mecanismos predefinidos de saída, isto certamente pode ser feito e se usarmos os mecanismos do |ns3|, podemos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    60
ter nosso código adicionado como uma contribuição.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    61
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    62
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    63
	|ns3| provides another mechanism, called Tracing, that avoids some of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    64
	problems inherent in the bulk output mechanisms.  It has several important 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    65
	advantages.  First, you can reduce the amount of data you have to manage by only
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    66
	tracing the events of interest to you (for large simulations, dumping everything
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    67
	to disk for post-processing can create I/O bottlenecks).  Second, if you use this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    68
	method, you can control the format of the output directly so you avoid the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    69
	postprocessing step with sed or awk script.  If you desire, your output can be 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    70
	formatted directly into a form acceptable by gnuplot, for example.  You can add 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    71
	hooks in the core which can then be accessed by other users, but which will 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    72
	produce no information unless explicitly asked to do so.  For these reasons, we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    73
	believe that the |ns3| tracing system is the best way to get information 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    74
	out of a simulation and is also therefore one of the most important mechanisms
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    75
	to understand in |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    76
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    77
O |ns3| fornece outro mecanismo, chamado Rastreamento (*Tracing*), que evita alguns dos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    78
problemas associados com os mecanismos de saída predefinidos. Há várias vantagens. Primeiro, redução da quantidade de dados para gerenciar (em simulações grandes, armazenar toda saída no disco pode gerar gargalos de Entrada/Saída). Segundo, o formato da saída pode ser controlado diretamente evitando o pós-processamento com códigos `sed` ou `awk`. Se desejar,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    79
a saída pode ser processada diretamente para um formato reconhecido pelo `gnuplot`, por exemplo. Podemos adicionar ganchos ("`hooks`") no núcleo, os quais podem ser acessados por outros usuários, mas que não produzirão nenhuma informação exceto que sejam explicitamente solicitados a produzir. Por essas razões, acreditamos que o sistema de rastreamento do |ns3| é a melhor forma de obter informações fora da simulação, portanto é um dos mais importantes mecanismos para ser compreendido no |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    80
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    81
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    82
	Blunt Instruments
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    83
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    84
Métodos Simples
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    85
+++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    86
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    87
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    88
	There are many ways to get information out of a program.  The most 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    89
	straightforward way is to just directly print the information to the standard 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    90
	output, as in,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    91
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    92
Há várias formas de obter informação após a finalização de um programa. A mais direta
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    93
é imprimir a informação na saída padrão, como no exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    94
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    95
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    96
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    97
  #include <iostream>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    98
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
    99
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   100
  SomeFunction (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   101
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   102
    uint32_t x = SOME_INTERESTING_VALUE;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   103
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   104
    std::cout << "The value of x is " << x << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   105
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   106
  } 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   107
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   108
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   109
	Nobody is going to prevent you from going deep into the core of |ns3| and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   110
	adding print statements.  This is insanely easy to do and, after all, you have 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   111
	complete control of your own |ns3| branch.  This will probably not turn 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   112
	out to be very satisfactory in the long term, though.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   113
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   114
Ninguém impedirá que editemos o núcleo do |ns3| e adicionemos códigos de impressão. Isto é simples de fazer, além disso temos controle e acesso total ao código fonte do |ns3|. Entretanto, pensando no futuro, isto não é muito interessante.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   115
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   116
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   117
	As the number of print statements increases in your programs, the task of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   118
	dealing with the large number of outputs will become more and more complicated.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   119
	Eventually, you may feel the need to control what information is being printed 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   120
	in some way; perhaps by turning on and off certain categories of prints, or 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   121
	increasing or decreasing the amount of information you want.  If you continue 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   122
	down this path you may discover that you have re-implemented the ``NS_LOG``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   123
	mechanism.  In order to avoid that, one of the first things you might consider
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   124
	is using ``NS_LOG`` itself.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   125
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   126
Conforme aumentarmos o número de comandos de impressão em nossos programas, ficará mais difícil tratar a grande quantidade de saídas. Eventualmente, precisaremos controlar de alguma maneira qual a informação será impressa; talvez habilitando ou não determinadas categorias de saídas, ou aumentando ou diminuindo a quantidade de informação desejada. Se continuarmos com esse processo, descobriremos depois de um tempo que, reimplementamos o mecanismo ``NS_LOG``. Para evitar isso, utilize o próprio ``NS_LOG``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   127
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   128
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   129
	We mentioned above that one way to get information out of |ns3| is to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   130
	parse existing NS_LOG output for interesting information.  If you discover that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   131
	some tidbit of information you need is not present in existing log output, you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   132
	could edit the core of |ns3| and simply add your interesting information
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   133
	to the output stream.  Now, this is certainly better than adding your own
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   134
	print statements since it follows |ns3| coding conventions and could 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   135
	potentially be useful to other people as a patch to the existing core.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   136
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   137
Como abordado anteriormente, uma maneira de obter informação de saída do |ns3| é 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   138
processar a saída do ``NS_LOG``, filtrando as informações relevantes. Se a informação
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   139
não está presente nos registros existentes, pode-se editar o núcleo do |ns3| e 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   140
adicionar ao fluxo de saída a informação desejada. Claro, isto é muito melhor
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   141
que adicionar comandos de impressão, desde que seguindo as convenções de codificação
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   142
do |ns3|, além do que isto poderia ser potencialmente útil a outras pessoas.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   143
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   144
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   145
	Let's pick a random example.  If you wanted to add more logging to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   146
	|ns3| TCP socket (``tcp-socket-base.cc``) you could just add a new 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   147
	message down in the implementation.  Notice that in TcpSocketBase::ReceivedAck()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   148
	there is no log message for the no ack case.  You could simply add one, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   149
	changing the code from:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   150
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   151
Vamos analisar um exemplo, adicionando mais informações de registro ao `socket` TCP do arquivo ``tcp-socket-base.cc``, para isto vamos acrescentando uma nova mensagem de registro na implementação. Observe que em ``TcpSocketBase::ReceivedAck()`` não existem mensagem de registro para casos sem o *ACK*, então vamos adicionar uma da seguinte forma:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   152
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   153
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   154
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   155
  /** Processa o mais recente ACK recebido */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   156
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   157
  TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   158
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   159
    NS_LOG_FUNCTION (this << tcpHeader);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   160
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   161
    // ACK Recebido. Compara o número ACK com o mais alto seqno não confirmado
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   162
    if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   163
      { // Ignora se não há flag ACK 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   164
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   165
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   166
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   167
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   168
	to add a new ``NS_LOG_LOGIC`` in the appropriate statement:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   169
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   170
para adicionar um novo ``NS_LOG_LOGIC`` na sentença apropriada:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   171
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   172
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   173
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   174
  /** Processa o mais recente ACK recebido */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   175
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   176
  TcpSocketBase::ReceivedAck (Ptr<Packet> packet, const TcpHeader& tcpHeader)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   177
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   178
    NS_LOG_FUNCTION (this << tcpHeader);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   179
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   180
    // ACK Recebido. Compara o número ACK com o mais alto seqno não confirmado
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   181
    if (0 == (tcpHeader.GetFlags () & TcpHeader::ACK))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   182
      { // Ignora se não há flag ACK 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   183
        NS_LOG_LOGIC ("TcpSocketBase " << this << " sem flag ACK");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   184
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   185
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   186
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   187
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   188
	This may seem fairly simple and satisfying at first glance, but something to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   189
	consider is that you will be writing code to add the ``NS_LOG`` statement 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   190
	and you will also have to write code (as in grep, sed or awk scripts) to parse
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   191
	the log output in order to isolate your information.  This is because even 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   192
	though you have some control over what is output by the logging system, you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   193
	only have control down to the log component level.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   194
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   195
Isto pode parecer simples e satisfatório a primeira vista, mas lembre-se que nós escreveremos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   196
código para adicionar ao ``NS_LOG`` e para processar a saída com a finalidade de isolar
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   197
a informação de interesse. Isto porque o controle é limitado ao nível do componente de registro.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   198
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   199
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   200
	If you are adding code to an existing module, you will also have to live with the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   201
	output that every other developer has found interesting.  You may find that in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   202
	order to get the small amount of information you need, you may have to wade 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   203
	through huge amounts of extraneous messages that are of no interest to you.  You
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   204
	may be forced to save huge log files to disk and process them down to a few lines
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   205
	whenever you want to do anything.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   206
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   207
Se cada desenvolvedor adicionar códigos de saída para um módulo existente, logo conviveremos com a saída que outro desenvolvedor achou interessante. É descobriremos que para obter uma pequena quantidade de informação, precisaremos produzir uma volumosa quantidade de mensagens sem nenhuma relevância (devido aos comandos de saída de vários desenvolvedores). Assim seremos forçados a gerar arquivos de registros gigantescos no disco e processá-los para obter poucas linhas de nosso interesse.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   208
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   209
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   210
	Since there are no guarantees in |ns3| about the stability of ``NS_LOG``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   211
	output, you may also discover that pieces of log output on which you depend 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   212
	disappear or change between releases.  If you depend on the structure of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   213
	output, you may find other messages being added or deleted which may affect your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   214
	parsing code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   215
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   216
Como não há nenhuma garantia no |ns3| sobre a estabilidade da saída do ``NS_LOG``, podemos descobrir que partes do registro de saída, que dependíamos, desapareceram ou mudaram entre versões. Se dependermos da estrutura da saída, podemos encontrar outras mensagens sendo adicionadas ou removidas que podem afetar seu código de processamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   217
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   218
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   219
	For these reasons, we consider prints to ``std::cout`` and NS_LOG messages 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   220
	to be quick and dirty ways to get more information out of |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   221
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   222
Por estas razões, devemos considerar o uso do ``std::cout`` e as mensagens ``NS_LOG`` como formas rápidas e porém sujas de obter informação da saída no |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   223
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   224
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   225
	It is desirable to have a stable facility using stable APIs that allow one to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   226
	reach into the core system and only get the information required.  It is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   227
	desirable to be able to do this without having to change and recompile the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   228
	core system.  Even better would be a system that notified the user when an item
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   229
	of interest changed or an interesting event happened so the user doesn't have 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   230
	to actively poke around in the system looking for things.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   231
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   232
Na grande maioria dos casos desejamos ter um mecanismo estável, usando APIs que permitam acessar o núcleo do sistema e obter somente informações interessantes. Isto deve ser possível sem que exista a necessidade de alterar e recompilar o núcleo do sistema. Melhor ainda seria se um sistema notificasse o usuário quando um item de interesse fora modificado ou um evento de interesse aconteceu, pois o usuário não teria que constantemente vasculhar o sistema procurando por coisas.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   233
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   234
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   235
	The |ns3| tracing system is designed to work along those lines and is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   236
	well-integrated with the Attribute and Config subsystems allowing for relatively
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   237
	simple use scenarios.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   238
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   239
O sistema de rastreamento do |ns3| é projetado para trabalhar seguindo essas premissas e é 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   240
integrado com os subsistemas de Atributos (*Attribute*) e Configuração (*Config*) permitindo cenários de uso simples.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   241
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   242
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   243
	Overview
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   244
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   245
Visão Geral
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   246
***********
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   247
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   248
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   249
	The ns-3 tracing system is built on the concepts of independent tracing sources
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   250
	and tracing sinks; along with a uniform mechanism for connecting sources to sinks.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   251
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   252
O sistema de rastreamento do |ns3| é baseado no conceito independente origem do rastreamento e destino do rastreamento. O |ns3| utiliza um mecanismo uniforme para conectar origens a destinos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   253
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   254
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   255
	Trace sources are entities that can signal events that happen in a simulation and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   256
	provide access to interesting underlying data.  For example, a trace source could
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   257
	indicate when a packet is received by a net device and provide access to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   258
	packet contents for interested trace sinks.  A trace source might also indicate 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   259
	when an interesting state change happens in a model.  For example, the congestion
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   260
	window of a TCP model is a prime candidate for a trace source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   261
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   262
As origens do rastreamento (*trace source*) são entidades que podem assinalar eventos que ocorrem na simulação e fornecem acesso a dados de baixo nível. Por exemplo, uma origem do rastreamento poderia indicar quando um pacote é recebido por um dispositivo de rede e prove acesso ao conteúdo do pacote aos interessados no destino do rastreamento. Uma origem do rastreamento pode também indicar quando uma mudança de estado ocorre em um modelo. Por exemplo, a janela de congestionamento do modelo TCP é um forte candidato para uma origem do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   263
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   264
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   265
	Trace sources are not useful by themselves; they must be connected to other pieces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   266
	of code that actually do something useful with the information provided by the source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   267
	The entities that consume trace information are called trace sinks.  Trace sources 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   268
	are generators of events and trace sinks are consumers.  This explicit division 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   269
	allows for large numbers of trace sources to be scattered around the system in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   270
	places which model authors believe might be useful.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   271
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   272
A origem do rastreamento não são úteis sozinhas; elas devem ser conectadas a outras partes de código que fazem algo útil com a informação provida pela origem. As entidades que consomem a informação de rastreamento são chamadas de destino do rastreamento (*trace sinks*). As origens de rastreamento são geradores de eventos e destinos de rastreamento são consumidores. Esta divisão explícita permite que inúmeras origens de rastreamento estejam dispersas no sistema em locais que os autores do modelo acreditam ser úteis.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   273
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   274
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   275
	There can be zero or more consumers of trace events generated by a trace source.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   276
	One can think of a trace source as a kind of point-to-multipoint information link.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   277
	Your code looking for trace events from a particular piece of core code could 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   278
	happily coexist with other code doing something entirely different from the same
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   279
	information.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   280
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   281
Pode haver zero ou mais consumidores de eventos de rastreamento gerados por uma origem do rastreamento. Podemos pensar em uma origem do rastreamento como um tipo de ligação de informação ponto-para-multiponto. Seu código buscaria por eventos de rastreamento de uma parte específica do código do núcleo e poderia coexistir com outro código que faz algo inteiramente diferente com a mesma informação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   282
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   283
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   284
	Unless a user connects a trace sink to one of these sources, nothing is output.  By
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   285
	using the tracing system, both you and other people at the same trace source are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   286
	getting exactly what they want and only what they want out of the system.  Neither
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   287
	of you are impacting any other user by changing what information is output by the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   288
	system.  If you happen to add a trace source, your work as a good open-source 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   289
	citizen may allow other users to provide new utilities that are perhaps very useful
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   290
	overall, without making any changes to the |ns3| core.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   291
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   292
Ao menos que um usuário conecte um destino do rastreamento a uma destas origens, nenhuma saída é produzida. Usando o sistema de rastreamento, todos conectados em uma mesma origem do rastreamento estão obtendo a informação que desejam do sistema. Um usuário não afeta os outros alterando a informação provida pela origem. Se acontecer de adicionarmos uma origem do rastreamento, seu trabalho como um bom cidadão utilizador de código livre pode permitir que outros usuários forneçam novas utilidades para todos, sem fazer qualquer modificação no núcleo do |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   293
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   294
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   295
	A Simple Low-Level Example
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   296
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   297
Um Exemplo Simples de Baixo Nível
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   298
+++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   299
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   300
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   301
	Let's take a few minutes and walk through a simple tracing example.  We are going
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   302
	to need a little background on Callbacks to understand what is happening in the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   303
	example, so we have to take a small detour right away.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   304
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   305
Vamos gastar alguns minutos para entender um exemplo de rastreamento simples. Primeiramente
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   306
precisamos compreender o conceito de *callbacks* para entender o que está acontecendo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   307
no exemplo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   308
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   309
*Callbacks*
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   310
~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   311
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   312
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   313
	The goal of the Callback system in |ns3| is to allow one piece of code to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   314
	call a function (or method in C++) without any specific inter-module dependency.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   315
	This ultimately means you need some kind of indirection -- you treat the address
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   316
	of the called function as a variable.  This variable is called a pointer-to-function
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   317
	variable.  The relationship between function and pointer-to-function pointer is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   318
	really no different that that of object and pointer-to-object.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   319
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   320
O objetivo do sistema de *Callback*, no |ns3|, é permitir a uma parte do código invocar
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   321
uma função (ou método em C++) sem qualquer dependência entre módulos. Isto é utilizado para prover algum tipo de indireção -- desta forma tratamos o endereço da chamada de função como uma variável. Esta variável é denominada variável de ponteiro-para-função. O relacionamento entre função e ponteiro-para-função não é tão diferente que de um objeto e ponteiro-para-objeto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   322
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   323
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   324
	In C the canonical example of a pointer-to-function is a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   325
	pointer-to-function-returning-integer (PFI).  For a PFI taking one int parameter,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   326
	this could be declared like,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   327
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   328
Em C, o exemplo clássico de um ponteiro-para-função é um ponteiro-para-função-retornando-inteiro (PFI). Para um PFI ter um parâmetro inteiro, poderia ser declarado como,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   329
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   330
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   331
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   332
  int (*pfi)(int arg) = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   333
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   334
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   335
	What you get from this is a variable named simply "pfi" that is initialized
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   336
	to the value 0.  If you want to initialize this pointer to something meaningful,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   337
	you have to have a function with a matching signature.  In this case, you could
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   338
	provide a function that looks like,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   339
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   340
O código descreve uma variável nomeada como "pfi" que é inicializada com o valor 0. Se quisermos inicializar este ponteiro com um valor significante, temos que ter uma função com uma assinatura idêntica. Neste caso, poderíamos prover uma função como,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   341
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   342
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   343
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   344
  int MyFunction (int arg) {}
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   345
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   346
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   347
	If you have this target, you can initialize the variable to point to your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   348
	function:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   349
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   350
Dessa forma, podemos inicializar a variável apontando para uma função:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   351
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   352
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   353
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   354
  pfi = MyFunction;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   355
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   356
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   357
	You can then call MyFunction indirectly using the more suggestive form of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   358
	the call,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   359
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   360
Podemos então chamar ``MyFunction`` indiretamente, usando uma forma mais clara da chamada,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   361
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   362
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   363
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   364
  int result = (*pfi) (1234);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   365
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   366
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   367
	This is suggestive since it looks like you are dereferencing the function
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   368
	pointer just like you would dereference any pointer.  Typically, however,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   369
	people take advantage of the fact that the compiler knows what is going on
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   370
	and will just use a shorter form,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   371
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   372
É uma forma mais clara, pois é como se estivéssemos dereferenciando o ponteiro da função como dereferenciamos qualquer outro ponteiro. Tipicamente, todavia, usa-se uma forma mais curta pois o compilador sabe o que está fazendo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   373
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   374
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   375
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   376
  int result = pfi (1234);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   377
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   378
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   379
	This looks like you are calling a function named "pfi," but the compiler is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   380
	smart enough to know to call through the variable ``pfi`` indirectly to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   381
	the function ``MyFunction``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   382
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   383
Esta forma é como se estivessemos chamando uma função nomeada "pfi", mas o compilador reconhece que é uma chamada indireta da função ``MyFunction`` por meio da variável ``pfi``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   384
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   385
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   386
	Conceptually, this is almost exactly how the tracing system will work.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   387
	Basically, a trace source *is* a callback.  When a trace sink expresses
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   388
	interest in receiving trace events, it adds a Callback to a list of Callbacks
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   389
	internally held by the trace source.  When an interesting event happens, the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   390
	trace source invokes its ``operator()`` providing zero or more parameters.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   391
	The ``operator()`` eventually wanders down into the system and does something
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   392
	remarkably like the indirect call you just saw.  It provides zero or more 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   393
	parameters (the call to "pfi" above passed one parameter to the target function
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   394
	``MyFunction``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   395
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   396
Conceitualmente, é quase exatamente como o sistema de rastreamento funciona. Basicamente, uma origem do rastreamento *é* um *callback*. Quando um destino do rastreamento expressa interesse em receber eventos de rastreamento, ela adiciona a *callback* para a lista de *callbacks*  mantida internamente pela origem do rastreamento. Quando um evento de interesse ocorre, a origem do rastreamento invoca seu ``operator()`` provendo zero ou mais parâmetros. O ``operator()`` eventualmente percorre o sistema e faz uma chamada indireta com zero ou mais parâmetros.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   397
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   398
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   399
	The important difference that the tracing system adds is that for each trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   400
	source there is an internal list of Callbacks.  Instead of just making one 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   401
	indirect call, a trace source may invoke any number of Callbacks.  When a trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   402
	sink expresses interest in notifications from a trace source, it basically just
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   403
	arranges to add its own function to the callback list.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   404
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   405
Uma diferença importante é que o sistema de rastreamento adiciona para cada origem do rastreamento uma lista interna de *callbacks*. Ao invés de apenas fazer uma chamada indireta, uma origem do rastreamento pode invocar qualquer número de *callbacks*. Quando um destino do rastreamento expressa interesse em notificações de uma origem, ela adiciona sua própria função para a lista de *callback*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   406
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   407
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   408
	If you are interested in more details about how this is actually arranged in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   409
	|ns3|, feel free to peruse the Callback section of the manual.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   410
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   411
Estando interessado em mais detalhes sobre como é organizado o sistema de *callback* no |ns3|, leia a seção *Callback* do manual.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   412
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   413
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   414
	Example Code
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   415
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   416
Código de Exemplo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   417
~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   418
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   419
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   420
	We have provided some code to implement what is really the simplest example
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   421
	of tracing that can be assembled.  You can find this code in the tutorial
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   422
	directory as ``fourth.cc``.  Let's walk through it.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   423
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   424
Analisaremos uma implementação simples de um exemplo de rastreamento. Este código está no diretório do tutorial, no arquivo ``fourth.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   425
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   426
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   427
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   428
  /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   429
  /*
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   430
   * This program is free software; you can redistribute it and/or modify
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   431
   * it under the terms of the GNU General Public License version 2 as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   432
   * published by the Free Software Foundation;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   433
   *
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   434
   * This program is distributed in the hope that it will be useful,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   435
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   436
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   437
   * GNU General Public License for more details.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   438
   *
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   439
   * You should have received a copy of the GNU General Public License
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   440
   * along with this program; if not, write to the Free Software
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   441
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   442
   */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   443
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   444
  #include "ns3/object.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   445
  #include "ns3/uinteger.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   446
  #include "ns3/traced-value.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   447
  #include "ns3/trace-source-accessor.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   448
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   449
  #include <iostream>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   450
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   451
  using namespace ns3;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   452
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   453
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   454
	Most of this code should be quite familiar to you.  As mentioned above, the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   455
	trace system makes heavy use of the Object and Attribute systems, so you will 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   456
	need to include them.  The first two includes above bring in the declarations
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   457
	for those systems explicitly.  You could use the core module header, but this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   458
	illustrates how simple this all really is.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   459
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   460
A maior parte deste código deve ser familiar, pois como já abordado, o sistema de rastreamento faz uso constante dos sistemas Objeto (*Object*) e Atributos (*Attribute*), logo é necessário incluí-los. As duas primeiras inclusões (*include*) declaram explicitamente estes dois sistemas. Poderíamos usar o cabeçalho (*header*) do módulo núcleo, este exemplo é simples.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   461
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   462
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   463
	The file, ``traced-value.h`` brings in the required declarations for tracing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   464
	of data that obeys value semantics.  In general, value semantics just means that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   465
	you can pass the object around, not an address.  In order to use value semantics
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   466
	at all you have to have an object with an associated copy constructor and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   467
	assignment operator available.  We extend the requirements to talk about the set
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   468
	of operators that are pre-defined for plain-old-data (POD) types.  Operator=, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   469
	operator++, operator---, operator+, operator==, etc.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   470
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   471
O arquivo ``traced-value.h`` é uma declaração obrigatória para rastreamento de dados que usam passagem por valor. Na passagem por valor é passada uma cópia do objeto e não um endereço. Com a finalidade de usar passagem por valor, precisa-se de um objeto com um construtor de cópia associado e um operador de atribuição. O conjunto de operadores predefinidos para tipos de dados primitivos (*plain-old-data*) são ++, ---, +, ==, etc.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   472
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   473
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   474
	What this all really means is that you will be able to trace changes to a C++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   475
	object made using those operators.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   476
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   477
Isto significa que somos capazes de rastrear alterações em um objeto C++ usando estes operadores.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   478
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   479
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   480
	Since the tracing system is integrated with Attributes, and Attributes work
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   481
	with Objects, there must be an |ns3| ``Object`` for the trace source
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   482
	to live in.  The next code snippet declares and defines a simple Object we can
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   483
	work with.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   484
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   485
Como o sistema de rastreamento é integrado com Atributos e este trabalham com Objetos, deve obrigatoriamente existir um ``Object`` |ns3| para cada origem do rastreamento. O próximo código define e declara um Objeto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   486
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   487
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   488
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   489
  class MyObject : public Object
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   490
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   491
  public:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   492
    static TypeId GetTypeId (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   493
    {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   494
      static TypeId tid = TypeId ("MyObject")
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   495
        .SetParent (Object::GetTypeId ())
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   496
        .AddConstructor<MyObject> ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   497
        .AddTraceSource ("MyInteger",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   498
                         "An integer value to trace.",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   499
                         MakeTraceSourceAccessor (&MyObject::m_myInt))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   500
        ;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   501
      return tid;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   502
    }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   503
    
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   504
    MyObject () {}
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   505
    TracedValue<int32_t> m_myInt;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   506
  };
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   507
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   508
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   509
	The two important lines of code, above, with respect to tracing are the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   510
	``.AddTraceSource`` and the ``TracedValue`` declaration of ``m_myInt``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   511
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   512
As duas linhas mais importantes com relação ao rastreamento são ``.AddTraceSource`` e a declaração ``TracedValue`` do ``m_myInt``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   513
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   514
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   515
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   516
	The ``.AddTraceSource`` provides the "hooks" used for connecting the trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   517
	source to the outside world through the config system.  The ``TracedValue`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   518
	declaration provides the infrastructure that overloads the operators mentioned 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   519
	above and drives the callback process.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   520
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   521
O método ``.AddTraceSource`` provê a "ligação" usada para conectar a origem do rastreamento com o mundo externo, por meio do sistema de configuração. A declaração ``TracedValue`` provê a infraestrutura que sobrecarrega os operadores abordados anteriormente e  gerencia o processo de *callback*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   522
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   523
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   524
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   525
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   526
  IntTrace (int32_t oldValue, int32_t newValue)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   527
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   528
    std::cout << "Traced " << oldValue << " to " << newValue << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   529
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   530
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   531
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   532
	This is the definition of the trace sink.  It corresponds directly to a callback
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   533
	function.  Once it is connected, this function will be called whenever one of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   534
	overloaded operators of the ``TracedValue`` is executed.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   535
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   536
Esta é a definição do destino do rastreamento. Isto corresponde diretamente a função de *callback*. Uma vez que está conectada, esta função será chamada sempre que um dos operadores sobrecarregados de ``TracedValue`` é executado.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   537
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   538
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   539
	We have now seen the trace source and the trace sink.  What remains is code to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   540
	connect the source to the sink.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   541
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   542
Nós temos a origem e o destino do rastreamento. O restante é o código para conectar a origem ao destino.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   543
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   544
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   545
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   546
  int
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   547
  main (int argc, char *argv[])
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   548
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   549
    Ptr<MyObject> myObject = CreateObject<MyObject> ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   550
    myObject->TraceConnectWithoutContext ("MyInteger", MakeCallback(&IntTrace));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   551
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   552
    myObject->m_myInt = 1234;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   553
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   554
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   555
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   556
	Here we first create the Object in which the trace source lives.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   557
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   558
Criamos primeiro o Objeto no qual está a origem do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   559
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   560
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   561
	The next step, the ``TraceConnectWithoutContext``, forms the connection
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   562
	between the trace source and the trace sink.  Notice the ``MakeCallback``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   563
	template function.  This function does the magic required to create the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   564
	underlying |ns3| Callback object and associate it with the function
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   565
	``IntTrace``.  TraceConnect makes the association between your provided
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   566
	function and the overloaded ``operator()`` in the traced variable referred 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   567
	to by the "MyInteger" Attribute.  After this association is made, the trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   568
	source will "fire" your provided callback function.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   569
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   570
No próximo passo, o ``TraceConnectWithoutContext`` conecta a origem ao destino do rastreamento. Observe que a função ``MakeCallback`` cria o objeto *callback* e associa com a função ``IntTrace``. ``TraceConnectWithoutContext`` faz a associação entre a sua função e o ``operator()``, sobrecarregado a variável rastreada referenciada pelo Atributo ``"MyInteger"``. Depois disso, a origem do rastreamento "disparará" sua função de callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   571
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   572
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   573
	The code to make all of this happen is, of course, non-trivial, but the essence
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   574
	is that you are arranging for something that looks just like the ``pfi()``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   575
	example above to be called by the trace source.  The declaration of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   576
	``TracedValue<int32_t> m_myInt;`` in the Object itself performs the magic 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   577
	needed to provide the overloaded operators (++, ---, etc.) that will use the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   578
	``operator()`` to actually invoke the Callback with the desired parameters.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   579
	The ``.AddTraceSource`` performs the magic to connect the Callback to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   580
	Config system, and ``TraceConnectWithoutContext`` performs the magic to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   581
	connect your function to the trace source, which is specified by Attribute
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   582
	name.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   583
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   584
O código para fazer isto acontecer não é trivial, mas a essência é a mesma que se a origem do rastreamento chamasse a função ``pfi()`` do exemplo anterior. A declaração ``TracedValue<int32_t> m_myInt;`` no Objeto é responsável pela mágica dos operadores sobrecarregados que usarão o ``operator()`` para invocar o *callback*  com os parâmetros desejados. O método ``.AddTraceSource`` conecta o *callback* ao sistema de configuração, e ``TraceConnectWithoutContext`` conecta sua função a fonte de rastreamento, a qual é especificada por um nome 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   585
Atributo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   586
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   587
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   588
	Let's ignore the bit about context for now.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   589
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   590
Vamos ignorar um pouco o contexto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   591
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   592
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   593
	Finally, the line,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   594
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   595
Finalmente a linha,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   596
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   597
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   598
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   599
   myObject->m_myInt = 1234;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   600
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   601
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   602
	should be interpreted as an invocation of ``operator=`` on the member 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   603
	variable ``m_myInt`` with the integer ``1234`` passed as a parameter.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   604
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   605
deveria ser interpretada como uma invocação do operador ``=`` na variável membro ``m_myInt`` com o inteiro ``1234`` passado como parâmetro.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   606
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   607
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   608
	It turns out that this operator is defined (by ``TracedValue``) to execute
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   609
	a callback that returns void and takes two integer values as parameters --- 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   610
	an old value and a new value for the integer in question.  That is exactly 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   611
	the function signature for the callback function we provided --- ``IntTrace``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   612
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   613
Por sua vez este operador é definido (por ``TracedValue``) para executar um *callback* que retorna ``void`` e possui dois inteiros como parâmetros --- um valor antigo e um novo valor para o inteiro em questão. Isto é exatamente a assinatura da função para a função de *callback* que nós fornecemos --- ``IntTrace``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   614
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   615
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   616
	To summarize, a trace source is, in essence, a variable that holds a list of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   617
	callbacks.  A trace sink is a function used as the target of a callback.  The
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   618
	Attribute and object type information systems are used to provide a way to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   619
	connect trace sources to trace sinks.  The act of "hitting" a trace source
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   620
	is executing an operator on the trace source which fires callbacks.  This 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   621
	results in the trace sink callbacks registering interest in the source being 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   622
	called with the parameters provided by the source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   623
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   624
Para resumir, uma origem do rastreamento é, em essência, uma variável que mantém uma lista de *callbacks*. Um destino do rastreamento é uma função usada como alvo da *callback*. O Atributo e os sistemas de informação de tipo de objeto são usados para fornecer uma maneira de conectar origens e destinos do rastreamento. O ação de "acionar" uma origem do rastreamento é executar um operador na origem, que dispara os *callbacks*. Isto resulta na execução das *callbacks* dos destinos do rastreamento registrados na origem com os parâmetros providos pela origem.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   625
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   626
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   627
	If you now build and run this example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   628
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   629
Se compilarmos e executarmos este exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   630
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   631
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   632
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   633
  ./waf --run fourth
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   634
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   635
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   636
	you will see the output from the ``IntTrace`` function execute as soon as the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   637
	trace source is hit:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   638
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   639
observaremos que a saída da função ``IntTrace`` é processada logo após a execução da
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   640
origem do rastreamento:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   641
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   642
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   643
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   644
  Traced 0 to 1234
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   645
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   646
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   647
	When we executed the code, ``myObject->m_myInt = 1234;``, the trace source 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   648
	fired and automatically provided the before and after values to the trace sink.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   649
	The function ``IntTrace`` then printed this to the standard output.  No 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   650
	problem.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   651
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   652
Quando executamos o código,  ``myObject->m_myInt = 1234;`` a origem do rastreamento disparou e automaticamente forneceu os valores anteriores e posteriores para o destino do rastreamento. A função ``IntTrace`` então imprimiu na saída padrão, sem maiores problemas.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   653
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   654
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   655
	Using the Config Subsystem to Connect to Trace Sources
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   656
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   657
Usando o Subsistema de Configuração para Conectar as Origens de Rastreamento
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   658
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   659
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   660
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   661
	The ``TraceConnectWithoutContext`` call shown above in the simple example is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   662
	actually very rarely used in the system.  More typically, the ``Config``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   663
	subsystem is used to allow selecting a trace source in the system using what is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   664
	called a *config path*.  We saw an example of this in the previous section
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   665
	where we hooked the "CourseChange" event when we were playing with 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   666
	``third.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   667
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   668
A chamada ``TraceConnectWithoutContext`` apresentada anteriormente é raramente usada no sistema. Geralmente, o subsistema ``Config`` é usado para selecionar uma origem do rastreamento no sistema usando um caminho de configuração (*config path*). Nós estudamos um exemplo onde ligamos o evento "CourseChange", quando estávamos brincando com ``third.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   669
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   670
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   671
	Recall that we defined a trace sink to print course change information from the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   672
	mobility models of our simulation.  It should now be a lot more clear to you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   673
	what this function is doing.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   674
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   675
Nós definimos um destino do rastreamento para imprimir a informação de mudança de rota dos modelos de mobilidade de nossa simulação. Agora está mais claro o que está função realizava.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   676
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   677
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   678
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   679
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   680
  CourseChange (std::string context, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   681
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   682
    Vector position = model->GetPosition ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   683
    NS_LOG_UNCOND (context << 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   684
      " x = " << position.x << ", y = " << position.y);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   685
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   686
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   687
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   688
	When we connected the "CourseChange" trace source to the above trace sink,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   689
	we used what is called a "Config Path" to specify the source when we
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   690
	arranged a connection between the pre-defined trace source and the new trace 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   691
	sink:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   692
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   693
Quando conectamos a origem do rastreamento "CourseChange" para o destino do rastreamento anteriormente, usamos o que é chamado de caminho de configuração ("`Config Path`") para especificar a origem e o novo destino do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   694
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   695
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   696
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   697
  std::ostringstream oss;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   698
  oss <<
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   699
    "/NodeList/" << wifiStaNodes.Get (nWifi - 1)->GetId () <<
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   700
    "/$ns3::MobilityModel/CourseChange";
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   701
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   702
  Config::Connect (oss.str (), MakeCallback (&CourseChange));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   703
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   704
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   705
	Let's try and make some sense of what is sometimes considered relatively
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   706
	mysterious code.  For the purposes of discussion, assume that the node 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   707
	number returned by the ``GetId()`` is "7".  In this case, the path
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   708
	above turns out to be,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   709
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   710
Para entendermos melhor o código, suponha que o número do nó retornado por ``GetId()`` é "7". Neste caso, o caminho seria,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   711
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   712
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   713
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   714
  "/NodeList/7/$ns3::MobilityModel/CourseChange"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   715
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   716
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   717
	The last segment of a config path must be an ``Attribute`` of an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   718
	``Object``.  In fact, if you had a pointer to the ``Object`` that has the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   719
	"CourseChange" ``Attribute`` handy, you could write this just like we did 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   720
	in the previous example.  You know by now that we typically store pointers to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   721
	our nodes in a NodeContainer.  In the ``third.cc`` example, the Nodes of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   722
	interest are stored in the ``wifiStaNodes`` NodeContainer.  In fact, while
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   723
	putting the path together, we used this container to get a Ptr<Node> which we
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   724
	used to call GetId() on.  We could have used this Ptr<Node> directly to call
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   725
	a connect method directly:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   726
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   727
O último segmento de um caminho de configuração deve ser um Atributo de um 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   728
Objeto. Na verdade, se tínhamos um ponteiro para o Objeto que tem o Atributo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   729
"CourseChange" ``, poderíamos escrever como no exemplo anterior.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   730
Nós já sabemos que guardamos tipicamente ponteiros para outros nós em um ``NodeContainer``. No exemplo ``third.cc``, os nós de rede de interesse estão armazenados no ``wifiStaNodes`` ``NodeContainer``. De fato enquanto colocamos o caminho junto usamos este contêiner para obter um ``Ptr<Node>``, usado na chamada ``GetId()``. Poderíamos usar diretamente o ``Ptr<Node>`` para chamar um método de conexão.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   731
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   732
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   733
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   734
  Ptr<Object> theObject = wifiStaNodes.Get (nWifi - 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   735
  theObject->TraceConnectWithoutContext ("CourseChange", MakeCallback (&CourseChange));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   736
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   737
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   738
	In the ``third.cc`` example, we actually want an additional "context" to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   739
	be delivered along with the Callback parameters (which will be explained below) so we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   740
	could actually use the following equivalent code,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   741
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   742
No exemplo ``third.cc``, queremos um "contexto" adicional para ser encaminhado com os parâmetros do *callback* (os quais são explicados a seguir) então podemos usar o código equivalente,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   743
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   744
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   745
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   746
  Ptr<Object> theObject = wifiStaNodes.Get (nWifi - 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   747
  theObject->TraceConnect ("CourseChange", MakeCallback (&CourseChange));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   748
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   749
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   750
	It turns out that the internal code for ``Config::ConnectWithoutContext`` and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   751
	``Config::Connect`` actually do find a Ptr<Object> and call the appropriate
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   752
	TraceConnect method at the lowest level.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   753
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   754
Acontece que o código interno para ``Config::ConnectWithoutContext`` e ``Config::Connect`` permite localizar um Ptr<Object> e chama o método ``TraceConnect``, no nível mais baixo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   755
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   756
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   757
	The ``Config`` functions take a path that represents a chain of ``Object`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   758
	pointers.  Each segment of a path corresponds to an Object Attribute.  The last 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   759
	segment is the Attribute of interest, and prior segments must be typed to contain
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   760
	or find Objects.  The ``Config`` code parses and "walks" this path until it 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   761
	gets to the final segment of the path.  It then interprets the last segment as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   762
	an ``Attribute`` on the last Object it found while walking the path.  The  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   763
	``Config`` functions then call the appropriate ``TraceConnect`` or 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   764
	``TraceConnectWithoutContext`` method on the final Object.  Let's see what 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   765
	happens in a bit more detail when the above path is walked.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   766
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   767
As funções ``Config`` aceitam um caminho que representa uma cadeia de ponteiros de Objetos. Cada segmento do caminho corresponde a um Atributo Objeto. O último segmento é o Atributo de interesse e os seguimentos anteriores devem ser definidos para conter ou encontrar Objetos. O  código ``Config`` processa o caminho até obter o segmento final. Então, interpreta o último segmento como um Atributo no último Objeto ele encontrou no caminho. Então as funções ``Config`` chamam o método ``TraceConnect`` ou ``TraceConnectWithoutContext`` adequado no Objeto final.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   768
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   769
Vamos analisar com mais detalhes o processo descrito.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   770
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   771
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   772
	The leading "/" character in the path refers to a so-called namespace.  One 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   773
	of the predefined namespaces in the config system is "NodeList" which is a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   774
	list of all of the nodes in the simulation.  Items in the list are referred to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   775
	by indices into the list, so "/NodeList/7" refers to the eighth node in the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   776
	list of nodes created during the simulation.  This reference is actually a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   777
	``Ptr<Node>`` and so is a subclass of an ``ns3::Object``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   778
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   779
O primeiro caractere "/" no caminho faz referência a um *namespace*. Um dos *namespaces* predefinidos no sistema de configuração é "NodeList" que é uma lista de todos os nós na simulação. Itens na lista são referenciados por índices , logo "/NodeList/7" refere-se ao oitavo nó na lista de nós criados durante a simulação. Esta referência é um ``Ptr<Node>``, por consequência é uma subclasse de um ``ns3::Object``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   780
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   781
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   782
	As described in the Object Model section of the |ns3| manual, we support
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   783
	Object Aggregation.  This allows us to form an association between different 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   784
	Objects without any programming.  Each Object in an Aggregation can be reached 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   785
	from the other Objects.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   786
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   787
Como descrito na seção Modelo de Objeto do manual |ns3|, há suporte para Agregação de Objeto. Isto permite realizar associação entre diferentes Objetos sem qualquer programação. Cada Objeto em uma Agregação pode ser acessado a partir de outros Objetos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   788
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   789
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   790
	The next path segment being walked begins with the "$" character.  This 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   791
	indicates to the config system that a ``GetObject`` call should be made 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   792
	looking for the type that follows.  It turns out that the MobilityHelper used in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   793
	``third.cc`` arranges to Aggregate, or associate, a mobility model to each of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   794
	the wireless Nodes.  When you add the "$" you are asking for another Object that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   795
	has presumably been previously aggregated.  You can think of this as switching
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   796
	pointers from the original Ptr<Node> as specified by "/NodeList/7" to its 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   797
	associated mobility model --- which is of type "$ns3::MobilityModel".  If you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   798
	are familiar with ``GetObject``, we have asked the system to do the following:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   799
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   800
O próximo segmento no caminho inicia com o carácter "$". O cifrão indica ao sistema de configuração que uma chamada ``GetObject`` deveria ser realizada procurando o tipo especificado em seguida. É diferente do que o ``MobilityHelper`` usou em ``third.cc`` gerenciar a Agregação, ou associar, um modelo de mobilidade para cada dos nós de rede sem fio. Quando adicionamos o "$", significa que estamos pedindo por outro Objeto que tinha sido presumidamente agregado anteriormente. Podemos pensar nisso como ponteiro de comutação do ``Ptr<Node>`` original como especificado por "/NodeList/7" para os modelos de mobilidade associados --- quais são do tipo "$ns3::MobilityModel". Se estivermos familiarizados com ``GetObject``, solicitamos ao sistema para fazer o 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   801
seguinte:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   802
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   803
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   804
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   805
  Ptr<MobilityModel> mobilityModel = node->GetObject<MobilityModel> ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   806
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   807
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   808
	We are now at the last Object in the path, so we turn our attention to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   809
	Attributes of that Object.  The ``MobilityModel`` class defines an Attribute 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   810
	called "CourseChange".  You can see this by looking at the source code in
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   811
	``src/mobility/model/mobility-model.cc`` and searching for "CourseChange" in your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   812
	favorite editor.  You should find,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   813
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   814
Estamos no último Objeto do caminho e neste verificamos os Atributos daquele Objeto. A classe ``MobilityModel`` define um Atributo chamado "CourseChange". Observando o código fonte em ``src/mobility/model/mobility-model.cc`` e procurando por "CourseChange", encontramos,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   815
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   816
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   817
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   818
  .AddTraceSource ("CourseChange",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   819
                   "The value of the position and/or velocity vector changed",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   820
                   MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   821
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   822
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   823
	which should look very familiar at this point.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   824
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   825
o qual parece muito familiar neste momento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   826
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   827
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   828
	If you look for the corresponding declaration of the underlying traced variable 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   829
	in ``mobility-model.h`` you will find
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   830
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   831
Se procurarmos por declarações semelhantes das variáveis rastreadas em ``mobility-model.h``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   832
encontraremos,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   833
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   834
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   835
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   836
  TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   837
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   838
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   839
	The type declaration ``TracedCallback`` identifies ``m_courseChangeTrace``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   840
	as a special list of Callbacks that can be hooked using the Config functions 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   841
	described above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   842
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   843
A declaração de tipo ``TracedCallback`` identifica ``m_courseChangeTrace`` como um lista especial de *callbacks* que pode ser ligada usando as funções de Configuração descritas anteriormente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   844
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   845
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   846
	The ``MobilityModel`` class is designed to be a base class providing a common
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   847
	interface for all of the specific subclasses.  If you search down to the end of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   848
	the file, you will see a method defined called ``NotifyCourseChange()``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   849
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   850
A classe ``MobilityModel`` é projetada para ser a classe base provendo uma interface comum para todas as subclasses. No final do arquivo, encontramos um método chamado ``NotifyCourseChange()``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   851
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   852
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   853
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   854
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   855
  MobilityModel::NotifyCourseChange (void) const
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   856
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   857
    m_courseChangeTrace(this);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   858
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   859
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   860
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   861
	Derived classes will call into this method whenever they do a course change to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   862
	support tracing.  This method invokes ``operator()`` on the underlying 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   863
	``m_courseChangeTrace``, which will, in turn, invoke all of the registered
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   864
	Callbacks, calling all of the trace sinks that have registered interest in the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   865
	trace source by calling a Config function.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   866
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   867
Classes derivadas chamarão este método toda vez que fizerem uma alteração na rota para 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   868
suportar rastreamento. Este método invoca ``operator()`` em ``m_courseChangeTrace``, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   869
que invocará todos os *callbacks* registrados, chamando todos os *trace sinks* que tem 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   870
interesse registrado na origem do rastreamento usando a função de Configuração.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   871
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   872
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   873
	So, in the ``third.cc`` example we looked at, whenever a course change is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   874
	made in one of the ``RandomWalk2dMobilityModel`` instances installed, there
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   875
	will be a ``NotifyCourseChange()`` call which calls up into the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   876
	``MobilityModel`` base class.  As seen above, this invokes ``operator()``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   877
	on ``m_courseChangeTrace``, which in turn, calls any registered trace sinks.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   878
	In the example, the only code registering an interest was the code that provided
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   879
	the config path.  Therefore, the ``CourseChange`` function that was hooked 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   880
	from Node number seven will be the only Callback called.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   881
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   882
No exemplo ``third.cc`` nós vimos que sempre que uma mudança de rota é realizada em uma das instâncias ``RandomWalk2dMobilityModel`` instaladas, haverá uma chamada ``NotifyCourseChange()`` da classe base ``MobilityModel``. Como observado, isto invoca ``operator()`` em ``m_courseChangeTrace``, que por sua vez, chama qualquer destino do rastreamento registrados. No exemplo, o único código que registrou interesse foi aquele que forneceu o caminho de configuração. Consequentemente, a função ``CourseChange`` que foi ligado no Node de número sete será a única *callback* chamada.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   883
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   884
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   885
	The final piece of the puzzle is the "context".  Recall that we saw an output 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   886
	looking something like the following from ``third.cc``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   887
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   888
A peça final do quebra-cabeça é o "contexto". Lembre-se da saída de ``third.cc``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   889
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   890
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   891
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   892
  /NodeList/7/$ns3::MobilityModel/CourseChange x = 7.27897, y = 2.22677
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   893
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   894
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   895
	The first part of the output is the context.  It is simply the path through
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   896
	which the config code located the trace source.  In the case we have been looking at
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   897
	there can be any number of trace sources in the system corresponding to any number
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   898
	of nodes with mobility models.  There needs to be some way to identify which trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   899
	source is actually the one that fired the Callback.  An easy way is to request a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   900
	trace context when you ``Config::Connect``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   901
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   902
A primeira parte da saída é o contexto. É simplesmente o caminho pelo qual o código de configuração localizou a origem do rastreamento. No caso, poderíamos ter qualquer número de origens de rastreamento no sistema correspondendo a qualquer número de nós com modelos de mobilidade. É necessário uma maneira de identificar qual origem do rastreamento disparou o *callback*. Uma forma simples é solicitar um contexto de rastreamento quando é usado o ``Config::Connect``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   903
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   904
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   905
	How to Find and Connect Trace Sources, and Discover Callback Signatures
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   906
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   907
Como Localizar e Conectar Origens de Rastreamento, e Descobrir Assinaturas de *Callback*
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   908
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   909
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   910
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   911
	The first question that inevitably comes up for new users of the Tracing system is,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   912
	"okay, I know that there must be trace sources in the simulation core, but how do
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   913
	I find out what trace sources are available to me"?  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   914
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   915
	The second question is, "okay, I found a trace source, how do I figure out the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   916
	config path to use when I connect to it"? 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   917
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   918
	The third question is, "okay, I found a trace source, how do I figure out what 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   919
	the return type and formal arguments of my callback function need to be"?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   920
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   921
	The fourth question is, "okay, I typed that all in and got this incredibly bizarre
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   922
	error message, what in the world does it mean"?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   923
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   924
As questões que inevitavelmente os novos usuários do sistema de Rastreamento fazem, são:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   925
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   926
1. "Eu sei que existem origens do rastreamento no núcleo da simulação, mas como 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   927
   eu descubro quais estão disponíveis para mim?"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   928
2. "Eu encontrei uma origem do rastreamento, como eu defino o caminho de configuração para 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   929
   usar quando eu conectar a origem?"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   930
3. "Eu encontrei uma origem do rastreamento, como eu  defino o tipo de retorno e os 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   931
   argumentos formais da minha função de *callback*?"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   932
4. "Eu fiz tudo corretamente e obtive uma mensagem de erro bizarra, o que isso significa?"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   933
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   934
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   935
	What Trace Sources are Available?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   936
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   937
Quais Origens de Rastreamento são Disponibilizadas
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   938
++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   939
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   940
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   941
	The answer to this question is found in the |ns3| Doxygen.  If you go to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   942
	the project web site, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   943
	`ns-3 project
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   944
	<http://www.nsnam.org>`_, you will find a link to "Documentation" in the navigation bar.  If you select this link, you will be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   945
	taken to our documentation page. There 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   946
	is a link to "Latest Release" that will take you to the documentation
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   947
	for the latest stable release of |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   948
	If you select the "API Documentation" link, you will be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   949
	taken to the |ns3| API documentation page.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   950
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   951
A resposta é encontrada no Doxygen do |ns3|. Acesse o sítio Web do projeto, `ns-3 project <http://www.nsnam.org>`_, em seguida, "Documentation" na barra de navegação. Logo após, "Latest Release" e "API Documentation".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   952
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   953
Acesse o item "Modules" na documentação do NS-3. Agora, selecione o item "C++ Constructs Used by All Modules". Serão exibidos quatro tópicos extremamente úteis:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   954
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   955
* The list of all trace sources
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   956
* The list of all attributes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   957
* The list of all global values
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   958
* Debugging
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   959
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   960
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   961
	The list of interest to us here is "the list of all trace sources".  Go 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   962
	ahead and select that link.  You will see, perhaps not too surprisingly, a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   963
	list of all of the trace sources available in the |ns3| core.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   964
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   965
Estamos interessados em "*the list of all trace sources*" - a lista de todas origens do rastreamento. Selecionando este item, é exibido uma lista com todas origens disponíveis no núcleo do |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   966
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   967
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   968
	As an example, scroll down to ``ns3::MobilityModel``.  You will find
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   969
	an entry for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   970
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   971
Como exemplo, ``ns3::MobilityModel``, terá uma entrada para
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   972
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   973
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   974
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   975
  CourseChange: The value of the position and/or velocity vector changed 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   976
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   977
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   978
	You should recognize this as the trace source we used in the ``third.cc``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   979
	example.  Perusing this list will be helpful.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   980
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   981
No caso, esta foi a origem do rastreamento usada no exemplo ``third.cc``, esta lista será muito útil.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   982
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   983
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   984
	What String do I use to Connect?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   985
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   986
Qual String eu uso para Conectar?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   987
+++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   988
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   989
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   990
	The easiest way to do this is to grep around in the |ns3| codebase for someone
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   991
	who has already figured it out,  You should always try to copy someone else's
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   992
	working code before you start to write your own.  Try something like:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   993
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   994
A forma mais simples é procurar na base de código do |ns3| por alguém que já fez uso do caminho de configuração que precisamos para ligar a fonte de rastreamento. Sempre deveríamos primeiro copiar um código que funciona antes de escrever nosso próprio código. Tente usar os comandos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   995
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   996
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   997
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   998
  find . -name '*.cc' | xargs grep CourseChange | grep Connect
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
   999
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1000
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1001
	and you may find your answer along with working code.  For example, in this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1002
	case, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` has something
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1003
	just waiting for you to use:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1004
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1005
e poderemos encontrar um código operacional que atenda nossas necessidades. Por exemplo, neste caso, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` tem algo que podemos usar:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1006
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1007
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1008
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1009
  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1010
    MakeCallback (&CourseChangeCallback));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1011
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1012
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1013
	If you cannot find any examples in the distribution, you can find this out
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1014
	from the |ns3| Doxygen.  It will probably be simplest just to walk 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1015
	through the "CourseChanged" example.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1016
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1017
Se não localizamos nenhum exemplo na distribuição, podemos tentar o Doxygen do |ns3|. É provavelmente mais simples que percorrer o exemplo "CourseChanged".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1018
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1019
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1020
	Let's assume that you have just found the "CourseChanged" trace source in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1021
	"The list of all trace sources" and you want to figure out how to connect to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1022
	it.  You know that you are using (again, from the ``third.cc`` example) an
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1023
	``ns3::RandomWalk2dMobilityModel``.  So open the "Class List" book in
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1024
	the NS-3 documentation tree by clicking its "+" box.  You will now see a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1025
	list of all of the classes in |ns3|.  Scroll down until you see the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1026
	entry for ``ns3::RandomWalk2dMobilityModel`` and follow that link.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1027
	You should now be looking at the "ns3::RandomWalk2dMobilityModel Class 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1028
	Reference".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1029
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1030
Suponha que encontramos a origem do rastreamento "CourseChanged" na "The list of all trace sources" e queremos resolver como nos conectar a ela. Você sabe que está usando um ``ns3::RandomWalk2dMobilityModel``. Logo, acesse o item "Class List" na documentação do |ns3|. Será exibida a lista de todas as classes. Selecione a entrada para ``ns3::RandomWalk2dMobilityModel`` para exibir a documentação da classe.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1031
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1032
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1033
	If you now scroll down to the "Member Function Documentation" section, you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1034
	will see documentation for the ``GetTypeId`` function.  You constructed one
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1035
	of these in the simple tracing example above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1036
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1037
Acesse a seção "Member Function Documentation" e obterá a documentação para a função ``GetTypeId``. Você construiu uma dessas em um exemplo anterior:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1038
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1039
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1040
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1041
    static TypeId GetTypeId (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1042
    {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1043
      static TypeId tid = TypeId ("MyObject")
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1044
        .SetParent (Object::GetTypeId ())
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1045
        .AddConstructor<MyObject> ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1046
        .AddTraceSource ("MyInteger",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1047
                         "An integer value to trace.",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1048
                         MakeTraceSourceAccessor (&MyObject::m_myInt))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1049
        ;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1050
      return tid;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1051
    }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1052
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1053
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1054
	As mentioned above, this is the bit of code that connected the Config 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1055
	and Attribute systems to the underlying trace source.  This is also the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1056
	place where you should start looking for information about the way to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1057
	connect. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1058
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1059
Como abordado, este código conecta os sistemas *Config* e Atributos à origem do rastreamento. É também o local onde devemos iniciar a busca por informação sobre como conectar.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1060
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1061
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1062
	You are looking at the same information for the RandomWalk2dMobilityModel; and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1063
	the information you want is now right there in front of you in the Doxygen:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1064
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1065
Você está observando a mesma informação para ``RandomWalk2dMobilityModel``; e a informação que você precisa está explícita no Doxygen:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1066
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1067
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1068
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1069
  This object is accessible through the following paths with Config::Set 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1070
  		and Config::Connect: 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1071
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1072
  /NodeList/[i]/$ns3::MobilityModel/$ns3::RandomWalk2dMobilityModel 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1073
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1074
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1075
	The documentation tells you how to get to the ``RandomWalk2dMobilityModel`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1076
	Object.  Compare the string above with the string we actually used in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1077
	example code:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1078
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1079
A documentação apresenta como obter o Objeto ``RandomWalk2dMobilityModel``. Compare o texto anterior com o texto que nós usamos no código do exemplo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1080
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1081
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1082
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1083
  "/NodeList/7/$ns3::MobilityModel"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1084
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1085
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1086
	The difference is due to the fact that two ``GetObject`` calls are implied 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1087
	in the string found in the documentation.  The first, for ``$ns3::MobilityModel``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1088
	will query the aggregation for the base class.  The second implied 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1089
	``GetObject`` call, for ``$ns3::RandomWalk2dMobilityModel``, is used to "cast"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1090
	the base class to the concrete implementation class.  The documentation shows 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1091
	both of these operations for you.  It turns out that the actual Attribute you are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1092
	going to be looking for is found in the base class as we have seen.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1093
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1094
A diferença é que há duas chamadas ``GetObject`` inclusas no texto da documentação. A primeira, para ``$ns3::MobilityModel`` solicita a agregação para a classe base. A segunda, para ``$ns3::RandomWalk2dMobilityModel`` é usada como *cast* da classe base para a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1095
implementação concreta da classe.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1096
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1097
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1098
	Look further down in the ``GetTypeId`` doxygen.  You will find,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1099
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1100
Analisando ainda mais o ``GetTypeId`` no Doxygen, temos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1101
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1102
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1103
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1104
  No TraceSources defined for this type.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1105
  TraceSources defined in parent class ns3::MobilityModel:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1106
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1107
  CourseChange: The value of the position and/or velocity vector changed 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1108
  Reimplemented from ns3::MobilityModel
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1109
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1110
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1111
	This is exactly what you need to know.  The trace source of interest is found in
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1112
	``ns3::MobilityModel`` (which you knew anyway).  The interesting thing this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1113
	bit of Doxygen tells you is that you don't need that extra cast in the config
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1114
	path above to get to the concrete class, since the trace source is actually in
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1115
	the base class.  Therefore the additional ``GetObject`` is not required and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1116
	you simply use the path:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1117
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1118
Isto é exatamente o que precisamos saber. A origem do rastreamento de interesse é encontrada em ``ns3::MobilityModel``.  O interessante é que pela documentação não é necessário o *cast* extra para obter a classe concreta, pois a origem do rastreamento está na classe base. Por consequência, o ``GetObject`` adicional não é necessário e podemos usar o caminho:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1119
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1120
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1121
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1122
  /NodeList/[i]/$ns3::MobilityModel
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1123
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1124
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1125
	which perfectly matches the example path:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1126
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1127
que é idêntico ao caminho do exemplo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1128
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1129
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1130
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1131
  /NodeList/7/$ns3::MobilityModel
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1132
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1133
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1134
	What Return Value and Formal Arguments?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1135
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1136
Quais são os Argumentos Formais e o Valor de Retorno?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1137
+++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1138
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1139
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1140
	The easiest way to do this is to grep around in the |ns3| codebase for someone
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1141
	who has already figured it out,  You should always try to copy someone else's
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1142
	working code.  Try something like:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1143
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1144
A forma mais simples é procurar na base de código do |ns3| por um código existente. Você sempre deveria primeiro copiar um código que funciona antes de escrever seu próprio. Tente usar os comandos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1145
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1146
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1147
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1148
  find . -name '*.cc' | xargs grep CourseChange | grep Connect
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1149
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1150
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1151
	and you may find your answer along with working code.  For example, in this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1152
	case, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` has something
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1153
	just waiting for you to use.  You will find
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1154
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1155
e você poderá encontrar código operacional. Por exemplo, neste caso, ``./ns-3-dev/examples/wireless/mixed-wireless.cc`` tem código para ser reaproveitado.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1156
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1157
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1158
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1159
  Config::Connect ("/NodeList/*/$ns3::MobilityModel/CourseChange", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1160
    MakeCallback (&CourseChangeCallback));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1161
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1162
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1163
	as a result of your grep.  The ``MakeCallback`` should indicate to you that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1164
	there is a callback function there which you can use.  Sure enough, there is:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1165
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1166
como resultado, ``MakeCallback`` indicaria que há uma função *callback* que pode ser usada.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1167
Para reforçar:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1168
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1169
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1170
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1171
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1172
  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1173
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1174
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1175
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1176
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1177
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1178
	Take my Word for It
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1179
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1180
Acredite em Minha Palavra
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1181
~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1182
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1183
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1184
	If there are no examples to work from, this can be, well, challenging to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1185
	actually figure out from the source code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1186
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1187
Se não há exemplos, pode ser desafiador descobrir por meio da análise do código fonte.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1188
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1189
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1190
	Before embarking on a walkthrough of the code, I'll be kind and just tell you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1191
	a simple way to figure this out:  The return value of your callback will always 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1192
	be void.  The formal parameter list for a ``TracedCallback`` can be found 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1193
	from the template parameter list in the declaration.  Recall that for our
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1194
	current example, this is in ``mobility-model.h``, where we have previously
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1195
	found:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1196
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1197
Antes de aventurar-se no código, diremos algo importante: O valor de retorno de sua *callback* sempre será *void*. A lista de parâmetros formais para uma ``TracedCallback`` pode ser encontrada no lista de parâmetro padrão na declaração. Recorde do exemplo atual, isto está em ``mobility-model.h``, onde encontramos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1198
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1199
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1200
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1201
  TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1202
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1203
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1204
	There is a one-to-one correspondence between the template parameter list in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1205
	the declaration and the formal arguments of the callback function.  Here,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1206
	there is one template parameter, which is a ``Ptr<const MobilityModel>``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1207
	This tells you that you need a function that returns void and takes a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1208
	a ``Ptr<const MobilityModel>``.  For example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1209
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1210
Não há uma correspondência de um-para-um entre a lista de parâmetro padrão na declaração e os argumentos formais da função *callback*. Aqui, há um parâmetro padrão, que é um ``Ptr<const MobilityModel>``. Isto significa que precisamos de uma função que retorna *void* e possui um parâmetro ``Ptr<const MobilityModel>``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1211
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1212
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1213
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1214
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1215
  CourseChangeCallback (Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1216
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1217
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1218
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1219
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1220
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1221
	That's all you need if you want to ``Config::ConnectWithoutContext``.  If
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1222
	you want a context, you need to ``Config::Connect`` and use a Callback 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1223
	function that takes a string context, then the required argument.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1224
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1225
Isto é tudo que precisamos para ``Config::ConnectWithoutContext``. Se você quer um contexto, use ``Config::Connect`` e uma função *callback* que possui como um parâmetro uma `string` de contexto, seguido pelo argumento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1226
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1227
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1228
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1229
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1230
  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1231
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1232
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1233
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1234
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1235
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1236
	If you want to ensure that your ``CourseChangeCallback`` is only visible
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1237
	in your local file, you can add the keyword ``static`` and come up with:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1238
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1239
Para garantir que ``CourseChangeCallback`` seja somente visível em seu arquivo, você pode adicionar a palavra chave ``static``, como no exemplo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1240
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1241
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1242
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1243
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1244
  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1245
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1246
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1247
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1248
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1249
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1250
	which is exactly what we used in the ``third.cc`` example.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1251
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1252
exatamente o que é usado no exemplo ``third.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1253
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1254
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1255
	The Hard Way
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1256
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1257
A Forma Complicada
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1258
~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1259
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1260
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1261
	This section is entirely optional.  It is going to be a bumpy ride, especially
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1262
	for those unfamiliar with the details of templates.  However, if you get through
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1263
	this, you will have a very good handle on a lot of the |ns3| low level
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1264
	idioms.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1265
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1266
Esta seção é opcional. Pode ser bem penosa para aqueles que conhecem poucos detalhes de tipos parametrizados de dados (*templates*). Entretanto, se continuarmos nessa seção, mergulharemos em detalhes de baixo nível do |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1267
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1268
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1269
	So, again, let's figure out what signature of callback function is required for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1270
	the "CourseChange" Attribute.  This is going to be painful, but you only need
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1271
	to do this once.  After you get through this, you will be able to just look at
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1272
	a ``TracedCallback`` and understand it.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1273
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1274
Vamos novamente descobrir qual assinatura da função de *callback* é necessária para o Atributo "CourseChange". Isto pode ser doloroso, mas precisamos fazê-lo apenas uma vez. Depois de tudo, você será capaz de entender um ``TracedCallback``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1275
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1276
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1277
	The first thing we need to look at is the declaration of the trace source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1278
	Recall that this is in ``mobility-model.h``, where we have previously
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1279
	found:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1280
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1281
Primeiro, verificamos a declaração da origem do rastreamento. Recorde que isto está em ``mobility-model.h``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1282
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1283
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1284
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1285
  TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1286
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1287
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1288
	This declaration is for a template.  The template parameter is inside the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1289
	angle-brackets, so we are really interested in finding out what that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1290
	``TracedCallback<>`` is.  If you have absolutely no idea where this might
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1291
	be found, grep is your friend.	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1292
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1293
Esta declaração é para um *template*. O parâmetro do *template* está entre ``<>``, logo estamos interessados em descobrir o que é ``TracedCallback<>``. Se não tem nenhuma ideia de onde pode ser encontrado, use o utilitário *grep*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1294
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1295
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1296
	We are probably going to be interested in some kind of declaration in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1297
	|ns3| source, so first change into the ``src`` directory.  Then, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1298
	we know this declaration is going to have to be in some kind of header file,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1299
	so just grep for it using:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1300
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1301
Estamos interessados em uma declaração similar no código fonte do |ns3|, logo buscamos no diretório ``src``. Então, sabemos que esta declaração tem um arquivo de cabeçalho, e procuramos por ele usando:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1302
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1303
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1304
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1305
  find . -name '*.h' | xargs grep TracedCallback
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1306
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1307
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1308
	You'll see 124 lines fly by (I piped this through wc to see how bad it was).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1309
	Although that may seem like it, that's not really a lot.  Just pipe the output
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1310
	through more and start scanning through it.  On the first page, you will see
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1311
	some very suspiciously template-looking stuff.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1312
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1313
Obteremos 124 linhas, com este comando. Analisando a saída, encontramos alguns *templates* que podem ser úteis.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1314
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1315
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1316
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1317
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::TracedCallback ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1318
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext (c ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1319
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Connect (const CallbackB ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1320
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::DisconnectWithoutContext ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1321
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::Disconnect (const Callba ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1322
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (void) const ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1323
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1) const ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1324
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1325
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1326
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1327
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1328
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1329
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::operator() (T1 a1, T2 a2 ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1330
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1331
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1332
	It turns out that all of this comes from the header file 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1333
	``traced-callback.h`` which sounds very promising.  You can then take a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1334
	look at ``mobility-model.h`` and see that there is a line which confirms
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1335
	this hunch:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1336
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1337
Observamos que todas linhas são do arquivo de cabeçalho ``traced-callback.h``, logo ele parece muito promissor. Para confirmar, verifique o arquivo ``mobility-model.h``  e procure uma linha que corrobore esta suspeita.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1338
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1339
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1340
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1341
  #include "ns3/traced-callback.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1342
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1343
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1344
	Of course, you could have gone at this from the other direction and started
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1345
	by looking at the includes in ``mobility-model.h`` and noticing the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1346
	include of ``traced-callback.h`` and inferring that this must be the file
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1347
	you want.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1348
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1349
Observando as inclusões em ``mobility-model.h``, verifica-se a inclusão do ``traced-callback.h`` e conclui-se que este deve ser o arquivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1350
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1351
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1352
	In either case, the next step is to take a look at ``src/core/model/traced-callback.h``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1353
	in your favorite editor to see what is happening.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1354
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1355
O próximo passo é analisar o arquivo ``src/core/model/traced-callback.h`` e entender sua funcionalidade.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1356
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1357
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1358
	You will see a comment at the top of the file that should be comforting:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1359
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1360
Há um comentário no topo do arquivo que deveria ser animador:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1361
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1362
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1363
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1364
  An ns3::TracedCallback has almost exactly the same API as a normal ns3::Callback but
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1365
  instead of forwarding calls to a single function (as an ns3::Callback normally does),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1366
  it forwards calls to a chain of ns3::Callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1367
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1368
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1369
	This should sound very familiar and let you know you are on the right track.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1370
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1371
Isto deveria ser familiar e confirma que estamos no caminho correto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1372
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1373
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1374
	Just after this comment, you will find,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1375
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1376
Depois deste comentário, encontraremos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1377
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1378
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1379
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1380
  template<typename T1 = empty, typename T2 = empty, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1381
           typename T3 = empty, typename T4 = empty,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1382
           typename T5 = empty, typename T6 = empty,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1383
           typename T7 = empty, typename T8 = empty>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1384
  class TracedCallback 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1385
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1386
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1387
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1388
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1389
	This tells you that TracedCallback is a templated class.  It has eight possible
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1390
	type parameters with default values.  Go back and compare this with the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1391
	declaration you are trying to understand:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1392
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1393
Isto significa que TracedCallback é uma classe genérica (*templated class*). Possui oito possíveis tipos de parâmetros com valores padrões. Retorne e compare com a declaração que você está tentando entender:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1394
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1395
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1396
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1397
  TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1398
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1399
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1400
	The ``typename T1`` in the templated class declaration corresponds to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1401
	``Ptr<const MobilityModel>`` in the declaration above.  All of the other
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1402
	type parameters are left as defaults.  Looking at the constructor really
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1403
	doesn't tell you much.  The one place where you have seen a connection made
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1404
	between your Callback function and the tracing system is in the ``Connect``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1405
	and ``ConnectWithoutContext`` functions.  If you scroll down, you will see
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1406
	a ``ConnectWithoutContext`` method here:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1407
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1408
O ``typename T1`` na declaração da classe corresponde a ``Ptr<const MobilityModel>`` da declaração anterior. Todos os outros parâmetros são padrões. Observe que o construtor não contribui com muita informação. O único lugar onde há uma conexão entre a função *callback* e o sistema de rastreamento é nas funções ``Connect`` e ``ConnectWithoutContext``. Como mostrado a seguir:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1409
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1410
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1411
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1412
  template<typename T1, typename T2, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1413
           typename T3, typename T4,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1414
           typename T5, typename T6,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1415
           typename T7, typename T8>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1416
  void 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1417
  TracedCallback<T1,T2,T3,T4,T5,T6,T7,T8>::ConnectWithoutContext ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1418
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1419
    Callback<void,T1,T2,T3,T4,T5,T6,T7,T8> cb;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1420
    cb.Assign (callback);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1421
    m_callbackList.push_back (cb);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1422
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1423
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1424
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1425
	You are now in the belly of the beast.  When the template is instantiated for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1426
	the declaration above, the compiler will replace ``T1`` with 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1427
	``Ptr<const MobilityModel>``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1428
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1429
Você está no olho do furação. Quando o *template* é instanciado pela declaração anterior, o compilador substitui ``T1`` por ``Ptr<const MobilityModel>``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1430
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1431
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1432
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1433
  void 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1434
  TracedCallback<Ptr<const MobilityModel>::ConnectWithoutContext ... cb
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1435
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1436
    Callback<void, Ptr<const MobilityModel> > cb;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1437
    cb.Assign (callback);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1438
    m_callbackList.push_back (cb);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1439
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1440
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1441
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1442
	You can now see the implementation of everything we've been talking about.  The
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1443
	code creates a Callback of the right type and assigns your function to it.  This
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1444
	is the equivalent of the ``pfi = MyFunction`` we discussed at the start of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1445
	this section.  The code then adds the Callback to the list of Callbacks for 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1446
	this source.  The only thing left is to look at the definition of Callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1447
	Using the same grep trick as we used to find ``TracedCallback``, you will be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1448
	able to find that the file ``./core/callback.h`` is the one we need to look at.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1449
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1450
Podemos observar a implementação de tudo que foi explicado até este ponto. O código cria uma *callback* do tipo adequado e atribui sua função para ela. Isto é equivalente a ``pfi = MyFunction`` discutida anteriormente. O código então adiciona a *callback* para a lista de *callbacks* para esta origem. O que não observamos ainda é a definição da *callback*. Usando o utilitário *grep* podemos encontrar o arquivo ``./core/callback.h`` e verificar a definição.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1451
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1452
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1453
	If you look down through the file, you will see a lot of probably almost
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1454
	incomprehensible template code.  You will eventually come to some Doxygen for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1455
	the Callback template class, though.  Fortunately, there is some English:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1456
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1457
No arquivo há muito código incompreensível. Felizmente há algum em Inglês. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1458
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1459
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1460
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1461
  This class template implements the Functor Design Pattern.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1462
  It is used to declare the type of a Callback:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1463
   - the first non-optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1464
     the return type of the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1465
   - the second optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1466
     the type of the first argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1467
   - the third optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1468
     the type of the second argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1469
   - the fourth optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1470
     the type of the third argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1471
   - the fifth optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1472
     the type of the fourth argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1473
   - the sixth optional template argument represents
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1474
     the type of the fifth argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1475
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1476
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1477
	We are trying to figure out what the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1478
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1479
Nós estamos tentando descobrir o que significa a declaração 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1480
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1481
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1482
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1483
    Callback<void, Ptr<const MobilityModel> > cb;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1484
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1485
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1486
	declaration means.  Now we are in a position to understand that the first
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1487
	(non-optional) parameter, ``void``, represents the return type of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1488
	Callback.  The second (non-optional) parameter, ``Ptr<const MobilityModel>``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1489
	represents the first argument to the callback.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1490
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1491
Agora entendemos que o primeiro parâmetro, ``void``, indica o tipo de retorno da *callback*. O segundo parâmetro, ``Ptr<const MobilityModel>`` representa o primeiro argumento da *callback*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1492
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1493
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1494
	The Callback in question is your function to receive the trace events.  From
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1495
	this you can infer that you need a function that returns ``void`` and takes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1496
	a ``Ptr<const MobilityModel>``.  For example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1497
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1498
A *callback* em questão é a sua função que recebe os eventos de rastreamento. Logo, podemos deduzir que precisamos de uma função que retorna ``void`` e possui um parâmetro ``Ptr<const MobilityModel>``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1499
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1500
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1501
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1502
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1503
  CourseChangeCallback (Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1504
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1505
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1506
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1507
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1508
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1509
	That's all you need if you want to ``Config::ConnectWithoutContext``.  If
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1510
	you want a context, you need to ``Config::Connect`` and use a Callback 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1511
	function that takes a string context.  This is because the ``Connect``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1512
	function will provide the context for you.  You'll need:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1513
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1514
Isto é tudo que precisamos no ``Config::ConnectWithoutContext``. Se você quer um contexto, use ``Config::Connect`` e uma função *callback* que possui como um parâmetro uma `string` de contexto, seguido pelo argumento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1515
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1516
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1517
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1518
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1519
  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1520
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1521
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1522
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1523
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1524
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1525
	If you want to ensure that your ``CourseChangeCallback`` is only visible
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1526
	in your local file, you can add the keyword ``static`` and come up with:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1527
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1528
Se queremos garantir que ``CourseChangeCallback`` é visível somente 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1529
em seu arquivo, você pode adicionar a palavra chave ``static``, como no exemplo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1530
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1531
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1532
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1533
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1534
  CourseChangeCallback (std::string path, Ptr<const MobilityModel> model)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1535
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1536
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1537
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1538
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1539
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1540
	which is exactly what we used in the ``third.cc`` example.  Perhaps you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1541
	should now go back and reread the previous section (Take My Word for It).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1542
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1543
o que é exatamente usado no exemplo ``third.cc``. Talvez seja interessante reler a seção (Acredite em Minha Palavra).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1544
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1545
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1546
	If you are interested in more details regarding the implementation of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1547
	Callbacks, feel free to take a look at the |ns3| manual.  They are one
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1548
	of the most frequently used constructs in the low-level parts of |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1549
	It is, in my opinion, a quite elegant thing.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1550
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1551
Há mais detalhes sobre a implementação de *callbacks* no manual do |ns3|. Elas estão entre os mais usados construtores das partes de baixo-nível do |ns3|. Em minha opinião, algo bastante elegante.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1552
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1553
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1554
	What About TracedValue?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1555
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1556
E quanto a TracedValue?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1557
+++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1558
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1559
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1560
	Earlier in this section, we presented a simple piece of code that used a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1561
	``TracedValue<int32_t>`` to demonstrate the basics of the tracing code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1562
	We just glossed over the way to find the return type and formal arguments
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1563
	for the ``TracedValue``.  Rather than go through the whole exercise, we
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1564
	will just point you at the correct file, ``src/core/model/traced-value.h`` and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1565
	to the important piece of code:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1566
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1567
No início desta seção, nós apresentamos uma parte de código simples que usou um ``TracedValue<int32_t>`` para demonstrar o básico sobre código de rastreamento. Nós desprezamos os métodos para encontrar o tipo de retorno e os argumentos formais para o ``TracedValue``. Acelerando o processo, indicamos o arquivo ``src/core/model/traced-value.h`` e a parte relevante do código:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1568
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1569
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1570
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1571
  template <typename T>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1572
  class TracedValue
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1573
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1574
  public:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1575
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1576
    void Set (const T &v) {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1577
      if (m_v != v)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1578
        {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1579
  	m_cb (m_v, v);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1580
  	m_v = v;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1581
        }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1582
    }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1583
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1584
  private:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1585
    T m_v;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1586
    TracedCallback<T,T> m_cb;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1587
  };
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1588
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1589
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1590
	Here you see that the ``TracedValue`` is templated, of course.  In the simple
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1591
	example case at the start of the section, the typename is int32_t.  This means 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1592
	that the member variable being traced (``m_v`` in the private section of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1593
	class) will be an ``int32_t m_v``.  The ``Set`` method will take a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1594
	``const int32_t &v`` as a parameter.  You should now be able to understand 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1595
	that the ``Set`` code will fire the ``m_cb`` callback with two parameters:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1596
	the first being the current value of the ``TracedValue``; and the second 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1597
	being the new value being set.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1598
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1599
Verificamos que ``TracedValue`` é uma classe parametrizada. No caso simples do início da seção, o nome do tipo é int32_t. Isto significa que  a variável membro sendo rastreada (``m_v`` na seção privada da classe) será ``int32_t m_v``. O método ``Set`` possui um argumento ``const int32_t &v``. Você deveria ser capaz de entender que o código ``Set`` dispará o *callback* ``m_cb`` com dois parâmetros: o primeiro sendo o valor atual do ``TracedValue``; e o segundo sendo o novo valor.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1600
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1601
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1602
	The callback, ``m_cb`` is declared as a ``TracedCallback<T, T>`` which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1603
	will correspond to a ``TracedCallback<int32_t, int32_t>`` when the class is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1604
	instantiated.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1605
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1606
A *callback* ``m_cb`` é declarada como um ``TracedCallback<T, T>`` que corresponderá a um ``TracedCallback<int32_t, int32_t>`` quando a classe é instanciada.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1607
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1608
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1609
	Recall that the callback target of a TracedCallback always returns ``void``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1610
	Further recall that there is a one-to-one correspondence between the template 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1611
	parameter list in the declaration and the formal arguments of the callback 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1612
	function.  Therefore the callback will need to have a function signature that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1613
	looks like:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1614
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1615
Lembre-se que o destino da *callback* de um TracedCallback sempre retorna ``void``. Lembre também que há uma correspondência de um-para-um entre a lista de parâmetros polimórfica e os argumentos formais da função *callback*. Logo, a *callback* precisa ter uma assinatura de função similar a:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1616
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1617
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1618
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1619
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1620
  MyCallback (int32_t oldValue, int32_t newValue)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1621
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1622
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1623
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1624
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1625
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1626
	It probably won't surprise you that this is exactly what we provided in that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1627
	simple example we covered so long ago:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1628
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1629
Isto é exatamente o que nós apresentamos no exemplo simples abordado anteriormente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1630
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1631
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1632
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1633
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1634
  IntTrace (int32_t oldValue, int32_t newValue)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1635
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1636
    std::cout << "Traced " << oldValue << " to " << newValue << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1637
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1638
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1639
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1640
	A Real Example
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1641
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1642
Um Exemplo Real
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1643
***************
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1644
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1645
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1646
	Let's do an example taken from one of the best-known books on TCP around.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1647
	"TCP/IP Illustrated, Volume 1: The Protocols," by W. Richard Stevens is a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1648
	classic.  I just flipped the book open and ran across a nice plot of both the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1649
	congestion window and sequence numbers versus time on page 366.  Stevens calls 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1650
	this, "Figure 21.10. Value of cwnd and send sequence number while data is being 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1651
	transmitted."  Let's just recreate the cwnd part of that plot in |ns3|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1652
	using the tracing system and ``gnuplot``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1653
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1654
Vamos fazer um exemplo retirado do livro "TCP/IP Illustrated, Volume 1: The Protocols" escrito por W. Richard Stevens. Localizei na página 366 do livro um gráfico da janela de congestionamento e números de sequência versus tempo. Stevens denomina de "Figure 21.10. Value of cwnd and send sequence number while data is being transmitted." Vamos recriar a parte *cwnd* daquele gráfico em |ns3| usando o sistema de rastreamento e ``gnuplot``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1655
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1656
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1657
	Are There Trace Sources Available?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1658
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1659
Há Fontes de Rastreamento Disponibilizadas?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1660
+++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1661
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1662
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1663
	The first thing to think about is how we want to get the data out.  What is it
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1664
	that we need to trace?  The first thing to do is to consult "The list of all
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1665
	trace sources" to see what we have to work with.  Recall that this is found
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1666
	in the |ns3| Doxygen in the "C++ Constructs Used by All Modules" Module section.  If you scroll
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1667
	through the list, you will eventually find:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1668
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1669
Primeiro devemos pensar sobre como queremos obter os dados de saída. O que é que  nós precisamos rastrear? Consultamos então *"The list of all trace sources"* para sabermos o que temos para trabalhar. Essa seção encontra-se na documentação na seção *"Module"*, no item *"C++ Constructs Used by All Modules"*. Procurando na lista, encontraremos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1670
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1671
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1672
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1673
  ns3::TcpNewReno
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1674
  CongestionWindow: The TCP connection's congestion window
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1675
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1676
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1677
	It turns out that the |ns3| TCP implementation lives (mostly) in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1678
	file ``src/internet/model/tcp-socket-base.cc`` while congestion control
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1679
	variants are in files such as ``src/internet/model/tcp-newreno.cc``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1680
	If you don't know this a priori, you can use the recursive grep trick:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1681
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1682
A maior parte da implementação do TCP no |ns3| está no arquivo ``src/internet/model/tcp-socket-base.cc`` enquanto variantes do controle de congestionamento estão em arquivos como ``src/internet/model/tcp-newreno.cc``. Se não sabe a priori dessa informação, use:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1683
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1684
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1685
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1686
  find . -name '*.cc' | xargs grep -i tcp
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1687
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1688
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1689
	You will find page after page of instances of tcp pointing you to that file. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1690
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1691
Haverá páginas de respostas apontando para aquele arquivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1692
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1693
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1694
	If you open ``src/internet/model/tcp-newreno.cc`` in your favorite 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1695
	editor, you will see right up at the top of the file, the following declarations:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1696
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1697
No início do arquivo ``src/internet/model/tcp-newreno.cc`` há as seguintes declarações:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1698
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1699
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1700
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1701
  TypeId
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1702
  TcpNewReno::GetTypeId ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1703
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1704
    static TypeId tid = TypeId("ns3::TcpNewReno")
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1705
      .SetParent<TcpSocketBase> ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1706
      .AddConstructor<TcpNewReno> ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1707
      .AddTraceSource ("CongestionWindow",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1708
                       "The TCP connection's congestion window",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1709
                       MakeTraceSourceAccessor (&TcpNewReno::m_cWnd))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1710
      ;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1711
    return tid;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1712
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1713
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1714
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1715
	This should tell you to look for the declaration of ``m_cWnd`` in the header
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1716
	file ``src/internet/model/tcp-newreno.h``.  If you open this file in your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1717
	favorite editor, you will find:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1718
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1719
Isto deveria guiá-lo para localizar a declaração de ``m_cWnd`` no arquivo de cabeçalho ``src/internet/model/tcp-newreno.h``. Temos nesse arquivo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1720
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1721
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1722
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1723
  TracedValue<uint32_t> m_cWnd; //Congestion window
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1724
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1725
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1726
	You should now understand this code completely.  If we have a pointer to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1727
	``TcpNewReno``, we can ``TraceConnect`` to the "CongestionWindow" trace 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1728
	source if we provide an appropriate callback target.  This is the same kind of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1729
	trace source that we saw in the simple example at the start of this section,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1730
	except that we are talking about ``uint32_t`` instead of ``int32_t``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1731
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1732
Você deveria entender este código. Se nós temos um ponteiro para ``TcpNewReno``, podemos fazer ``TraceConnect`` para a origem do rastreamento "CongestionWindow" se fornecermos uma *callback* adequada. É o mesmo tipo de origem do rastreamento que nós abordamos no exemplo simples no início da seção, exceto que estamos usando ``uint32_t`` ao invés de ``int32_t``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1733
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1734
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1735
	We now know that we need to provide a callback that returns void and takes 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1736
	two ``uint32_t`` parameters, the first being the old value and the second 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1737
	being the new value:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1738
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1739
Precisamos prover uma *callback* que retorne ``void`` e receba dois parâmetros ``uint32_t``, o primeiro representando o valor antigo e o segundo o novo valor:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1740
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1741
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1742
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1743
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1744
  CwndTrace (uint32_t oldValue, uint32_t newValue)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1745
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1746
    ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1747
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1748
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1749
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1750
	What Script to Use?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1752
Qual código Usar?
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1753
+++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1754
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1755
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1756
	It's always best to try and find working code laying around that you can 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1757
	modify, rather than starting from scratch.  So the first order of business now
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1758
	is to find some code that already hooks the "CongestionWindow" trace source
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1759
	and see if we can modify it.  As usual, grep is your friend:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1760
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1761
É sempre melhor localizar e modificar um código operacional que iniciar do zero. Portanto, vamos procurar uma origem do rastreamento da "CongestionWindow" e verificar se é possível modificar. Para tal, usamos novamente o *grep*:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1762
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1763
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1764
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1765
  find . -name '*.cc' | xargs grep CongestionWindow
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1766
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1767
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1768
	This will point out a couple of promising candidates: 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1769
	``examples/tcp/tcp-large-transfer.cc`` and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1770
	``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1771
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1772
Encontramos alguns candidatos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1773
``examples/tcp/tcp-large-transfer.cc`` e
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1774
``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1775
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1776
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1777
	We haven't visited any of the test code yet, so let's take a look there.  You
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1778
	will typically find that test code is fairly minimal, so this is probably a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1779
	very good bet.  Open ``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc`` in your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1780
	favorite editor and search for "CongestionWindow".  You will find,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1781
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1782
Nós não visitamos nenhum código de teste ainda, então vamos fazer isto agora. Código de teste é pequeno, logo é uma ótima escolha. Acesse o arquivo ``src/test/ns3tcp/ns3tcp-cwnd-test-suite.cc`` e localize "CongestionWindow". Como resultado, temos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1783
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1784
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1785
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1786
  ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1787
    MakeCallback (&Ns3TcpCwndTestCase1::CwndChange, this));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1788
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1789
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1790
	This should look very familiar to you.  We mentioned above that if we had a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1791
	"CongestionWindow" trace source.  That's exactly what we have here; so it
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1792
	pointer to the ``TcpNewReno``, we could ``TraceConnect`` to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1793
	turns out that this line of code does exactly what we want.  Let's go ahead
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1794
	and extract the code we need from this function 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1795
	(``Ns3TcpCwndTestCase1::DoRun (void)``).  If you look at this function,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1796
	you will find that it looks just like an |ns3| script.  It turns out that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1797
	is exactly what it is.  It is a script run by the test framework, so we can just
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1798
	pull it out and wrap it in ``main`` instead of in ``DoRun``.  Rather than
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1799
	walk through this, step, by step, we have provided the file that results from
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1800
	porting this test back to a native |ns3| script --
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1801
	``examples/tutorial/fifth.cc``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1802
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1803
Como abordado, temos uma origem do rastreamento  "CongestionWindow"; então ela aponta para ``TcpNewReno``, poderíamos alterar o ``TraceConnect`` para o que nós desejamos. Vamos extrair o código que precisamos desta função (``Ns3TcpCwndTestCase1::DoRun (void)``). Se você observar, perceberá que parece como um código |ns3|. E descobre-se exatamente que realmente é um código. É um código executado pelo `framework` de teste, logo podemos apenas colocá-lo no ``main`` ao invés de ``DoRun``.  A tradução deste teste para um código nativo do |ns3| é apresentada no arquivo ``examples/tutorial/fifth.cc``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1804
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1805
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1806
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1807
	A Common Problem and Solution
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1808
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1809
Um Problema Comum e a Solução
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1810
+++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1811
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1812
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1813
	The ``fifth.cc`` example demonstrates an extremely important rule that you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1814
	must understand before using any kind of ``Attribute``:  you must ensure 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1815
	that the target of a ``Config`` command exists before trying to use it.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1816
	This is no different than saying an object must be instantiated before trying
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1817
	to call it.  Although this may seem obvious when stated this way, it does
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1818
	trip up many people trying to use the system for the first time.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1819
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1820
O exemplo ``fifth.cc`` demonstra um importante regra que devemos entender antes de usar qualquer tipo de  Atributo: devemos garantir que o alvo de um comando ``Config`` existe antes de tentar usá-lo. É a mesma ideia que um objeto não pode ser usado sem ser primeiro instanciado. Embora pareça óbvio, muitas pessoas erram ao usar o sistema pela primeira vez.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1821
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1822
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1823
	Let's return to basics for a moment.  There are three basic time periods that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1824
	exist in any |ns3| script.  The first time period is sometimes called 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1825
	"Configuration Time" or "Setup Time," and is in force during the period 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1826
	when the ``main`` function of your script is running, but before 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1827
	``Simulator::Run`` is called.  The second time period  is sometimes called
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1828
	"Simulation Time" and is in force during the time period when 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1829
	``Simulator::Run`` is actively executing its events.  After it completes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1830
	executing the simulation,  ``Simulator::Run`` will return control back to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1831
	the ``main`` function.  When this happens, the script enters what can be 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1832
	called "Teardown Time," which is when the structures and objects created 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1833
	during setup and taken apart and released.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1834
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1835
Há três fases básicas em qualquer código |ns3|. A primeira é a chamada de "Configuration Time" ou "Setup Time" e ocorre durante a execução da função ``main``, mas antes da chamada ``Simulator::Run``. O segunda fase é chamada de "Simulation Time" e é quando o ``Simulator::Run`` está executando seus eventos. Após completar a execução da simulação, ``Simulator::Run`` devolve o controle a função ``main``. Quando isto acontece, o código entra na terceira fase, o "Teardown Time", que  é quando estruturas e objetos criados durante a configuração são analisados e liberados.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1836
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1837
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1838
	Perhaps the most common mistake made in trying to use the tracing system is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1839
	assuming that entities constructed dynamically during simulation time are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1840
	available during configuration time.  In particular, an |ns3|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1841
	``Socket`` is a dynamic object often created by ``Applications`` to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1842
	communicate between ``Nodes``.  An |ns3| ``Application`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1843
	always has a "Start Time" and a "Stop Time" associated with it.  In the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1844
	vast majority of cases, an ``Application`` will not attempt to create 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1845
	a dynamic object until its ``StartApplication`` method is called at some
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1846
	"Start Time".  This is to ensure that the simulation is completely 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1847
	configured before the app tries to do anything (what would happen if it tried
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1848
	to connect to a node that didn't exist yet during configuration time). 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1849
	The answer to this issue is to 1) create a simulator event that is run after the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1850
	dynamic object is created and hook the trace when that event is executed; or
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1851
	2) create the dynamic object at configuration time, hook it then, and give 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1852
	the object to the system to use during simulation time.  We took the second 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1853
	approach in the ``fifth.cc`` example.  This decision required us to create
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1854
	the ``MyApp`` ``Application``, the entire purpose of which is to take 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1855
	a ``Socket`` as a parameter.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1856
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1857
Talvez o erro mais comum em tentar usar o sistema de rastreamento é supor que entidades construídas dinamicamente durante a fase de simulação estão acessíveis durante  a fase de configuração. Em particular, um ``Socket`` |ns3| é um objeto dinâmico frequentemente criado por Aplicações (``Applications``) para comunicação entre nós de redes.  Uma Aplicação |ns3| tem um "Start Time" e "Stop Time" associado a ela. Na maioria dos casos, uma Aplicação não tentar criar um objeto dinâmico até que seu método ``StartApplication`` é chamado
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1858
em algum "Start Time". Isto é para garantir que a simulação está completamente configurada antes que a aplicação tente fazer alguma coisa (o que aconteceria se tentasse conectar a um nó que não existisse durante a fase de configuração). A resposta para esta questão é:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1859
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1860
1. criar um evento no simulador que é executado depois que o objeto dinâmico 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1861
   é criado e ativar o rastreador quando aquele evento é executado; ou 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1862
2. criar o objeto dinâmico na fase de configuração, ativá-lo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1863
   e passar o objeto para o sistema usar durante a fase de simulação. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1864
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1865
Nós consideramos a segunda abordagem no exemplo ``fifth.cc``. A decisão implicou na criação da Aplicação ``MyApp``, com o propósito de passar um ``Socket`` como parâmetro.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1866
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1867
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1868
	A fifth.cc Walkthrough
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1869
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1870
Analisando o exemplo fifth.cc
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1871
+++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1872
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1873
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1874
	Now, let's take a look at the example program we constructed by dissecting
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1875
	the congestion window test.  Open ``examples/tutorial/fifth.cc`` in your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1876
	favorite editor.  You should see some familiar looking code:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1877
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1878
Agora, vamos analisar o programa exemplo detalhando o teste da janela de congestionamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1879
Segue o código do arquivo localizado em ``examples/tutorial/fifth.cc``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1880
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1881
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1882
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1883
  /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1884
  /*
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1885
   * This program is free software; you can redistribute it and/or modify
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1886
   * it under the terms of the GNU General Public License version 2 as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1887
   * published by the Free Software Foundation;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1888
   *
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1889
   * This program is distributed in the hope that it will be useful,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1890
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1891
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1892
   * GNU General Public License for more details.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1893
   *
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1894
   * You should have received a copy of the GNU General Public License
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1895
   * along with this program; if not, write to the Free Software
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1896
   * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1897
   */
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1898
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1899
  #include <fstream>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1900
  #include "ns3/core-module.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1901
  #include "ns3/network-module.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1902
  #include "ns3/internet-module.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1903
  #include "ns3/point-to-point-module.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1904
  #include "ns3/applications-module.h"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1905
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1906
  using namespace ns3;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1907
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1908
  NS_LOG_COMPONENT_DEFINE ("FifthScriptExample");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1909
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1910
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1911
	This has all been covered, so we won't rehash it.  The next lines of source are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1912
	the network illustration and a comment addressing the problem described above
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1913
	with ``Socket``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1914
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1915
Todo o código apresentado já foi discutido. As próximas linhas são comentários apresentando
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1916
a estrutura da rede e comentários abordando o problema descrito com o ``Socket``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1917
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1918
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1919
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1920
  // ===========================================================================
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1921
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1922
  //         node 0                 node 1
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1923
  //   +----------------+    +----------------+
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1924
  //   |    ns-3 TCP    |    |    ns-3 TCP    |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1925
  //   +----------------+    +----------------+
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1926
  //   |    10.1.1.1    |    |    10.1.1.2    |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1927
  //   +----------------+    +----------------+
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1928
  //   | point-to-point |    | point-to-point |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1929
  //   +----------------+    +----------------+
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1930
  //           |                     |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1931
  //           +---------------------+
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1932
  //                5 Mbps, 2 ms
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1933
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1934
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1935
  // We want to look at changes in the ns-3 TCP congestion window.  We need
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1936
  // to crank up a flow and hook the CongestionWindow attribute on the socket
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1937
  // of the sender.  Normally one would use an on-off application to generate a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1938
  // flow, but this has a couple of problems.  First, the socket of the on-off
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1939
  // application is not created until Application Start time, so we wouldn't be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1940
  // able to hook the socket (now) at configuration time.  Second, even if we
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1941
  // could arrange a call after start time, the socket is not public so we
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1942
  // couldn't get at it.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1943
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1944
  // So, we can cook up a simple version of the on-off application that does what
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1945
  // we want.  On the plus side we don't need all of the complexity of the on-off
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1946
  // application.  On the minus side, we don't have a helper, so we have to get
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1947
  // a little more involved in the details, but this is trivial.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1948
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1949
  // So first, we create a socket and do the trace connect on it; then we pass
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1950
  // this socket into the constructor of our simple application which we then
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1951
  // install in the source node.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1952
  // ===========================================================================
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1953
  //
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1954
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1955
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1956
	This should also be self-explanatory.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1957
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1958
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1959
	The next part is the declaration of the ``MyApp`` ``Application`` that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1960
	we put together to allow the ``Socket`` to be created at configuration time.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1961
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1962
A próxima parte é a declaração da Aplicação ``MyApp`` que permite que o ``Socket`` seja criado na fase de configuração.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1963
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1964
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1965
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1966
  class MyApp : public Application
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1967
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1968
  public:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1969
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1970
    MyApp ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1971
    virtual ~MyApp();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1972
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1973
    void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1974
      uint32_t nPackets, DataRate dataRate);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1975
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1976
  private:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1977
    virtual void StartApplication (void);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1978
    virtual void StopApplication (void);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1979
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1980
    void ScheduleTx (void);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1981
    void SendPacket (void);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1982
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1983
    Ptr<Socket>     m_socket;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1984
    Address         m_peer;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1985
    uint32_t        m_packetSize;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1986
    uint32_t        m_nPackets;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1987
    DataRate        m_dataRate;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1988
    EventId         m_sendEvent;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1989
    bool            m_running;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1990
    uint32_t        m_packetsSent;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1991
  };
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1992
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1993
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1994
	You can see that this class inherits from the |ns3| ``Application``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1995
	class.  Take a look at ``src/network/model/application.h`` if you are interested in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1996
	what is inherited.  The ``MyApp`` class is obligated to override the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1997
	``StartApplication`` and ``StopApplication`` methods.  These methods are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1998
	automatically called when ``MyApp`` is required to start and stop sending
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  1999
	data during the simulation.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2000
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2001
A classe ``MyApp`` herda a classe ``Application`` do |ns3|. Acesse  o arquivo ``src/network/model/application.h`` se estiver interessado sobre detalhes dessa herança. A classe ``MyApp`` é obrigada sobrescrever os métodos ``StartApplication`` e ``StopApplication``. Estes métodos são automaticamente chamado quando ``MyApp`` é solicitada iniciar e parar de enviar dados durante a simulação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2002
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2003
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2004
	How Applications are Started and Stopped (optional)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2005
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2006
Como Aplicações são Iniciadas e Paradas (Opcional)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2007
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2008
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2009
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2010
	It is worthwhile to spend a bit of time explaining how events actually get 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2011
	started in the system.  This is another fairly deep explanation, and can be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2012
	ignored if you aren't planning on venturing down into the guts of the system.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2013
	It is useful, however, in that the discussion touches on how some very important
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2014
	parts of |ns3| work and exposes some important idioms.  If you are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2015
	planning on implementing new models, you probably want to understand this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2016
	section.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2017
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2018
Nesta seção é explicado como eventos tem início no sistema. É uma explicação mais detalhada e não é necessária se não planeja entender detalhes do sistema. É interessante, por outro lado, pois aborda como partes do |ns3| trabalham e mostra alguns detalhes de implementação importantes. Se você planeja implementar novos modelos, então deve entender essa seção.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2019
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2020
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2021
	The most common way to start pumping events is to start an ``Application``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2022
	This is done as the result of the following (hopefully) familar lines of an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2023
	|ns3| script:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2024
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2025
A maneira mais comum de iniciar eventos é iniciar uma Aplicação. Segue as linhas de um código |ns3| que faz exatamente isso:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2026
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2027
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2028
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2029
  ApplicationContainer apps = ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2030
  apps.Start (Seconds (1.0));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2031
  apps.Stop (Seconds (10.0));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2032
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2033
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2034
	The application container code (see ``src/network/helper/application-container.h`` if
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2035
	you are interested) loops through its contained applications and calls,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2036
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2037
O código do contêiner aplicação (``src/network/helper/application-container.h``) itera pelas aplicações no contêiner e chama,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2038
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2039
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2040
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2041
  app->SetStartTime (startTime);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2042
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2043
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2044
	as a result of the ``apps.Start`` call and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2045
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2046
como um resultado da chamada ``apps.Start`` e
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2047
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2048
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2049
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2050
  app->SetStopTime (stopTime);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2051
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2052
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2053
	as a result of the ``apps.Stop`` call.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2054
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2055
como um resultado da chamada  ``apps.Stop``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2056
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2057
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2058
	The ultimate result of these calls is that we want to have the simulator 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2059
	automatically make calls into our ``Applications`` to tell them when to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2060
	start and stop.  In the case of ``MyApp``, it inherits from class
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2061
	``Application`` and overrides ``StartApplication``, and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2062
	``StopApplication``.  These are the functions that will be called by
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2063
	the simulator at the appropriate time.  In the case of ``MyApp`` you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2064
	will find that ``MyApp::StartApplication`` does the initial ``Bind``,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2065
	and ``Connect`` on the socket, and then starts data flowing by calling
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2066
	``MyApp::SendPacket``.  ``MyApp::StopApplication`` stops generating
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2067
	packets by cancelling any pending send events and closing the socket.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2068
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2069
O último resultado destas chamadas queremos ter o simulador executando chamadas em nossa ``Applications`` para controlar o inicio e a parada. No caso ``MyApp``, herda da classe ``Application`` e sobrescreve ``StartApplication`` e ``StopApplication``. Estas são as funções invocadas pelo simulador no momento certo. No caso de ``MyApp``, o ``MyApp::StartApplication`` faz o ``Bind`` e ``Connect`` no `socket`, em seguida, inicia o fluxo de dados chamando ``MyApp::SendPacket``. ``MyApp::StopApplication`` interrompe a geração de pacotes cancelando qualquer evento pendente de envio e também fechando o socket.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2070
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2071
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2072
	One of the nice things about |ns3| is that you can completely 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2073
	ignore the implementation details of how your ``Application`` is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2074
	"automagically" called by the simulator at the correct time.  But since
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2075
	we have already ventured deep into |ns3| already, let's go for it.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2076
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2077
Uma das coisas legais sobre o |ns3| é que podemos ignorar completamente os detalhes de implementação de como sua Aplicação é "automaticamente" chamada pelo simulador no momento correto. De qualquer forma, detalhamos como isso acontece a seguir.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2078
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2079
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2080
	If you look at ``src/network/model/application.cc`` you will find that the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2081
	``SetStartTime`` method of an ``Application`` just sets the member 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2082
	variable ``m_startTime`` and the ``SetStopTime`` method just sets 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2083
	``m_stopTime``.  From there, without some hints, the trail will probably
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2084
	end.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2085
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2086
Se observarmos em ``src/network/model/application.cc``, descobriremos que o 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2087
método ``SetStartTime`` de uma ``Application`` apenas altera a variável ``m_startTime`` e o método ``SetStopTime`` apenas altera a variável ``m_stopTime``.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2088
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2089
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2090
	The key to picking up the trail again is to know that there is a global 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2091
	list of all of the nodes in the system.  Whenever you create a node in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2092
	a simulation, a pointer to that node is added to the global ``NodeList``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2093
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2094
Para continuar e entender o processo, precisamos saber que há uma lista global de todos os nós no sistema. Sempre que você cria um nó em uma simulação, um ponteiro para aquele nó é adicionado para a lista global ``NodeList``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2095
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2096
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2097
	Take a look at ``src/network/model/node-list.cc`` and search for 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2098
	``NodeList::Add``.  The public static implementation calls into a private
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2099
	implementation called ``NodeListPriv::Add``.  This is a relatively common
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2100
	idom in |ns3|.  So, take a look at ``NodeListPriv::Add``.  There
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2101
	you will find,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2102
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2103
Observe em ``src/network/model/node-list.cc`` e procure por ``NodeList::Add``. A implementação ``public static`` chama uma implementação privada denominada ``NodeListPriv::Add``. Isto é comum no |ns3|. Então, observe ``NodeListPriv::Add`` e encontrará,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2104
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2105
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2106
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2107
  Simulator::ScheduleWithContext (index, TimeStep (0), &Node::Start, node);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2108
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2109
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2110
	This tells you that whenever a ``Node`` is created in a simulation, as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2111
	a side-effect, a call to that node's ``Start`` method is scheduled for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2112
	you that happens at time zero.  Don't read too much into that name, yet.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2113
	It doesn't mean that the node is going to start doing anything, it can be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2114
	interpreted as an informational call into the ``Node`` telling it that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2115
	the simulation has started, not a call for action telling the ``Node``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2116
	to start doing something.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2117
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2118
Isto significa que sempre que um ``Node`` é criado em uma simulação, como uma implicação, uma chamada para o método ``Start`` do nó é agendada para que ocorra no tempo zero. Isto não significa que o nó vai iniciar fazendo alguma coisa, pode ser interpretado como uma chamada informacional no ``Node`` dizendo a ele que a simulação teve início, não uma chamada para ação dizendo ao ``Node`` iniciar alguma coisa.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2119
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2120
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2121
	So, ``NodeList::Add`` indirectly schedules a call to ``Node::Start``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2122
	at time zero to advise a new node that the simulation has started.  If you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2123
	look in ``src/network/model/node.h`` you will, however, not find a method called
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2124
	``Node::Start``.  It turns out that the ``Start`` method is inherited
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2125
	from class ``Object``.  All objects in the system can be notified when
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2126
	the simulation starts, and objects of class ``Node`` are just one kind
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2127
	of those objects.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2128
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2129
Então, o ``NodeList::Add`` indiretamente agenda uma chamada para ``Node::Start`` no tempo zero, para informar ao novo nó que a simulação foi iniciada. Se olharmos em ``src/network/model/node.h`` não acharemos um método chamado ``Node::Start``. Acontece que o método ``Start`` é herdado da classe ``Object``. Todos objetos no sistema podem ser avisados que a simulação iniciou e objetos da classe ``Node`` são exemplos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2130
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2131
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2132
	Take a look at ``src/core/model/object.cc`` next and search for ``Object::Start``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2133
	This code is not as straightforward as you might have expected since 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2134
	|ns3| ``Objects`` support aggregation.  The code in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2135
	``Object::Start`` then loops through all of the objects that have been
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2136
	aggregated together and calls their ``DoStart`` method.  This is another
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2137
	idiom that is very common in |ns3|.  There is a public API method,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2138
	that stays constant across implementations, that calls a private implementation
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2139
	method that is inherited and implemented by subclasses.  The names are typically
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2140
	something like ``MethodName`` for the public API and ``DoMethodName`` for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2141
	the private API.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2142
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2143
Observe em seguida ``src/core/model/object.cc``. Localize por ``Object::Start``. Este código não é tão simples como você esperava desde que ``Objects`` |ns3| suportam agregação. O código em ``Object::Start`` então percorre todos os objetos que estão agregados e chama o método ``DoStart`` de cada um. Este é uma outra prática muito comum em |ns3|. Há um método pública na API, que permanece constante entre implementações, que chama um método de implementação privada que é herdado e implementado por subclasses. Os nomes são tipicamente
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2144
algo como ``MethodName`` para os da API pública e ``DoMethodName`` para os da API privada.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2145
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2146
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2147
	This tells us that we should look for a ``Node::DoStart`` method in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2148
	``src/network/model/node.cc`` for the method that will continue our trail.  If you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2149
	locate the code, you will find a method that loops through all of the devices
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2150
	in the node and then all of the applications in the node calling 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2151
	``device->Start`` and ``application->Start`` respectively.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2152
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2153
Logo, deveríamos procurar por um método ``Node::DoStart`` em  ``src/network/model/node.cc``. Ao localizar o método, descobrirá um método que percorre todos os dispositivos e aplicações no nó chamando respectivamente ``device->Start`` e ``application->Start``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2154
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2155
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2156
	You may already know that classes ``Device`` and ``Application`` both
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2157
	inherit from class ``Object`` and so the next step will be to look at
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2158
	what happens when ``Application::DoStart`` is called.  Take a look at
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2159
	``src/network/model/application.cc`` and you will find:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2160
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2161
As classes ``Device`` e ``Application`` herdam da classe ``Object``, então o próximo passo é entender o que acontece quando ``Application::DoStart`` é executado. Observe o código em ``src/network/model/application.cc``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2162
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2163
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2164
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2165
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2166
  Application::DoStart (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2167
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2168
    m_startEvent = Simulator::Schedule (m_startTime, &Application::StartApplication, this);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2169
    if (m_stopTime != TimeStep (0))
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2170
      {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2171
        m_stopEvent = Simulator::Schedule (m_stopTime, &Application::StopApplication, this);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2172
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2173
    Object::DoStart ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2174
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2175
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2176
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2177
	Here, we finally come to the end of the trail.  If you have kept it all straight,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2178
	when you implement an |ns3| ``Application``, your new application 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2179
	inherits from class ``Application``.  You override the ``StartApplication``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2180
	and ``StopApplication`` methods and provide mechanisms for starting and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2181
	stopping the flow of data out of your new ``Application``.  When a ``Node``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2182
	is created in the simulation, it is added to a global ``NodeList``.  The act
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2183
	of adding a node to this ``NodeList`` causes a simulator event to be scheduled
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2184
	for time zero which calls the ``Node::Start`` method of the newly added 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2185
	``Node`` to be called when the simulation starts.  Since a ``Node`` inherits
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2186
	from ``Object``, this calls the ``Object::Start`` method on the ``Node``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2187
	which, in turn, calls the ``DoStart`` methods on all of the ``Objects``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2188
	aggregated to the ``Node`` (think mobility models).  Since the ``Node``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2189
	``Object`` has overridden ``DoStart``, that method is called when the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2190
	simulation starts.  The ``Node::DoStart`` method calls the ``Start`` methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2191
	of all of the ``Applications`` on the node.  Since ``Applications`` are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2192
	also ``Objects``, this causes ``Application::DoStart`` to be called.  When
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2193
	``Application::DoStart`` is called, it schedules events for the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2194
	``StartApplication`` and ``StopApplication`` calls on the ``Application``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2195
	These calls are designed to start and stop the flow of data from the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2196
	``Application``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2197
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2198
Aqui finalizamos nosso detalhamento. Ao implementar uma Aplicação do |ns3|, sua nova aplicação herda da classe ``Application``. Você sobrescreve os métodos ``StartApplication`` e ``StopApplication`` e provê mecanismos para iniciar e finalizar o fluxo de dados de sua nova ``Application``. Quando um ``Node`` é criado na simulação, ele é adicionado a uma lista global ``NodeList``. A ação de adicionar um nó na lista faz com que um evento do simulador seja agendado para o tempo zero e que chama o método ``Node::Start`` do ``Node`` recentemente adicionado para ser chamado quando a simulação inicia. Como um ``Node`` herda de ``Object``,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2199
a chamada invoca o método ``Object::Start`` no ``Node``, o qual, por sua vez, chama os métodos ``DoStart`` em todos os ``Objects`` agregados ao ``Node`` (pense em modelos móveis).  Como o ``Node`` ``Object`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2200
tem sobrescritos ``DoStart``, o método é chamado quando a simulação inicia. O método ``Node::DoStart`` chama o método ``Start`` de todas as ``Applications`` no nó. Por sua vez, ``Applications`` são também ``Objects``, o que resulta na invocação do ``Application::DoStart``.  Quando ``Application::DoStart`` é chamada, ela agenda eventos para as chamadas ``StartApplication`` e ``StopApplication`` na ``Application``. Estas chamadas são projetadas para iniciar e parar o fluxo de dados da ``Application``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2201
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2202
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2203
	This has been another fairly long journey, but it only has to be made once, and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2204
	you now understand another very deep piece of |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2205
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2206
Após essa longa jornada, você pode entende melhor outra parte do |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2207
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2208
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2209
	The MyApp Application
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2210
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2211
A Aplicação MyApp
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2212
~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2213
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2214
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2215
	The ``MyApp`` ``Application`` needs a constructor and a destructor,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2216
	of course:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2217
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2218
A Aplicação ``MyApp`` precisa de um construtor e um destrutor,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2219
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2220
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2221
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2222
  MyApp::MyApp ()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2223
    : m_socket (0),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2224
      m_peer (),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2225
      m_packetSize (0),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2226
      m_nPackets (0),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2227
      m_dataRate (0),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2228
      m_sendEvent (),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2229
      m_running (false),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2230
      m_packetsSent (0)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2231
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2232
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2233
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2234
  MyApp::~MyApp()
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2235
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2236
    m_socket = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2237
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2238
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2239
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2240
	The existence of the next bit of code is the whole reason why we wrote this
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2241
	``Application`` in the first place.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2242
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2243
O código seguinte é a principal razão da existência desta Aplicação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2244
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2245
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2246
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2247
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2248
  MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2249
                       uint32_t nPackets, DataRate dataRate)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2250
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2251
    m_socket = socket;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2252
    m_peer = address;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2253
    m_packetSize = packetSize;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2254
    m_nPackets = nPackets;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2255
    m_dataRate = dataRate;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2256
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2257
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2258
..  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2259
	This code should be pretty self-explanatory.  We are just initializing member
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2260
	variables.  The important one from the perspective of tracing is the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2261
	``Ptr<Socket> socket`` which we needed to provide to the application 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2262
	during configuration time.  Recall that we are going to create the ``Socket``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2263
	as a ``TcpSocket`` (which is implemented by ``TcpNewReno``) and hook 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2264
	its "CongestionWindow" trace source before passing it to the ``Setup``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2265
	method.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2266
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2267
Neste código inicializamos os atributos da classe. Do ponto de vista do rastreamento, a mais importante é ``Ptr<Socket> socket`` que deve ser passado para a aplicação durante o fase de configuração. Lembre-se que vamos criar o ``Socket`` como um ``TcpSocket`` (que é implementado por ``TcpNewReno``) e associar sua origem do rastreamento de sua *"CongestionWindow"* antes de passá-lo no método ``Setup``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2268
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2269
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2270
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2271
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2272
  MyApp::StartApplication (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2273
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2274
    m_running = true;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2275
    m_packetsSent = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2276
    m_socket->Bind ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2277
    m_socket->Connect (m_peer);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2278
    SendPacket ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2279
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2280
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2281
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2282
	The above code is the overridden implementation ``Application::StartApplication``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2283
	that will be automatically called by the simulator to start our ``Application``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2284
	running at the appropriate time.  You can see that it does a ``Socket`` ``Bind``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2285
	operation.  If you are familiar with Berkeley Sockets this shouldn't be a surprise.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2286
	It performs the required work on the local side of the connection just as you might 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2287
	expect.  The following ``Connect`` will do what is required to establish a connection 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2288
	with the TCP at ``Address`` m_peer.  It should now be clear why we need to defer
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2289
	a lot of this to simulation time, since the ``Connect`` is going to need a fully
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2290
	functioning network to complete.  After the ``Connect``, the ``Application`` 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2291
	then starts creating simulation events by calling ``SendPacket``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2292
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2293
Este código sobrescreve ``Application::StartApplication`` que será chamado automaticamente pelo simulador para iniciar a  ``Application`` no momento certo. Observamos que é realizada uma operação ``Socket`` ``Bind``. Se você conhece Sockets de Berkeley isto não é uma novidade. É responsável pelo conexão no lado do cliente, ou seja, o ``Connect`` estabelece uma  conexão usando TCP no endereço ``m_peer``. Por isso, precisamos de uma infraestrutura funcional de rede antes de executar a fase de simulação. Depois do ``Connect``, a ``Application`` inicia a criação dos eventos de simulação chamando ``SendPacket``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2294
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2295
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2296
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2297
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2298
  MyApp::StopApplication (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2299
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2300
    m_running = false;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2301
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2302
    if (m_sendEvent.IsRunning ())
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2303
      {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2304
        Simulator::Cancel (m_sendEvent);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2305
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2306
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2307
    if (m_socket)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2308
      {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2309
        m_socket->Close ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2310
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2311
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2312
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2313
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2314
	Every time a simulation event is scheduled, an ``Event`` is created.  If the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2315
	``Event`` is pending execution or executing, its method ``IsRunning`` will
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2316
	return ``true``.  In this code, if ``IsRunning()`` returns true, we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2317
	``Cancel`` the event which removes it from the simulator event queue.  By 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2318
	doing this, we break the chain of events that the ``Application`` is using to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2319
	keep sending its ``Packets`` and the ``Application`` goes quiet.  After we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2320
	quiet the ``Application`` we ``Close`` the socket which tears down the TCP 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2321
	connection.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2322
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2323
A todo instante um evento da simulação é agendado, isto é, um ``Event`` é criado. Se o ``Event`` é uma execução pendente ou está executando, seu método ``IsRunning`` retornará ``true``. Neste código, se ``IsRunning()`` retorna verdadeiro (`true`), nós cancelamos (``Cancel``) o evento, e por consequência, é removido da fila de eventos do simulador. Dessa forma, interrompemos a cadeia de eventos que a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2324
``Application`` está usando para enviar seus ``Packets``. A Aplicação não enviará mais pacotes e em seguida fechamos (``Close``) o `socket` encerrando a conexão TCP.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2325
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2326
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2327
	The socket is actually deleted in the destructor when the ``m_socket = 0`` is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2328
	executed.  This removes the last reference to the underlying Ptr<Socket> which 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2329
	causes the destructor of that Object to be called.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2330
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2331
O socket é deletado no destrutor quando ``m_socket = 0`` é executado. Isto remove a última referência para Ptr<Socket>  que ocasiona o destrutor daquele Objeto ser chamado.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2332
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2333
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2334
	Recall that ``StartApplication`` called ``SendPacket`` to start the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2335
	chain of events that describes the ``Application`` behavior.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2336
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2337
Lembre-se que ``StartApplication`` chamou ``SendPacket`` para iniciar a cadeia de eventos que descreve o comportamento da ``Application``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2338
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2339
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2340
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2341
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2342
  MyApp::SendPacket (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2343
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2344
    Ptr<Packet> packet = Create<Packet> (m_packetSize);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2345
    m_socket->Send (packet);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2346
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2347
    if (++m_packetsSent < m_nPackets)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2348
      {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2349
        ScheduleTx ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2350
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2351
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2352
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2353
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2354
	Here, you see that ``SendPacket`` does just that.  It creates a ``Packet``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2355
	and then does a ``Send`` which, if you know Berkeley Sockets, is probably 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2356
	just what you expected to see.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2357
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2358
Este código apenas cria um pacote (``Packet``) e então envia (``Send``).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2359
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2360
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2361
	It is the responsibility of the ``Application`` to keep scheduling the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2362
	chain of events, so the next lines call ``ScheduleTx`` to schedule another
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2363
	transmit event (a ``SendPacket``) until the ``Application`` decides it
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2364
	has sent enough.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2365
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2366
É responsabilidade da ``Application`` gerenciar o agendamento da cadeia de eventos, então, a chamada ``ScheduleTx`` agenda outro evento de transmissão (um ``SendPacket``) até que a ``Application`` decida que enviou o suficiente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2367
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2368
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2369
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2370
  void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2371
  MyApp::ScheduleTx (void)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2372
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2373
    if (m_running)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2374
      {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2375
        Time tNext (Seconds (m_packetSize * 8 / static_cast<double> (m_dataRate.GetBitRate ())));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2376
        m_sendEvent = Simulator::Schedule (tNext, &MyApp::SendPacket, this);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2377
      }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2378
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2379
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2380
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2381
	Here, you see that ``ScheduleTx`` does exactly that.  If the ``Application``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2382
	is running (if ``StopApplication`` has not been called) it will schedule a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2383
	new event, which calls ``SendPacket`` again.  The alert reader will spot
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2384
	something that also trips up new users.  The data rate of an ``Application`` is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2385
	just that.  It has nothing to do with the data rate of an underlying ``Channel``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2386
	This is the rate at which the ``Application`` produces bits.  It does not take
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2387
	into account any overhead for the various protocols or channels that it uses to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2388
	transport the data.  If you set the data rate of an ``Application`` to the same
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2389
	data rate as your underlying ``Channel`` you will eventually get a buffer overflow.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2390
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2391
Enquanto a ``Application`` está executando, ``ScheduleTx`` agendará um novo evento, que chama ``SendPacket`` novamente. Verifica-se que a taxa de transmissão é sempre a mesma, ou seja, é a taxa que a ``Application`` produz os bits. Não considera nenhuma sobrecarga de protocolos ou canais físicos no transporte dos dados. Se alterarmos a taxa de transmissão da ``Application`` para a mesma taxa dos canais físicos,  poderemos
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2392
ter um estouro de *buffer*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2393
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2394
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2395
	The Trace Sinks
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2396
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2397
Destino do Rastreamento
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2398
~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2399
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2400
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2401
	The whole point of this exercise is to get trace callbacks from TCP indicating the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2402
	congestion window has been updated.  The next piece of code implements the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2403
	corresponding trace sink:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2404
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2405
O foco deste exercício é obter notificações (*callbacks*) do TCP indicando a modificação da janela de congestionamento. O código a seguir implementa o destino do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2406
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2407
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2408
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2409
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2410
  CwndChange (uint32_t oldCwnd, uint32_t newCwnd)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2411
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2412
    NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2413
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2414
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2415
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2416
	This should be very familiar to you now, so we won't dwell on the details.  This
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2417
	function just logs the current simulation time and the new value of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2418
	congestion window every time it is changed.  You can probably imagine that you
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2419
	could load the resulting output into a graphics program (gnuplot or Excel) and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2420
	immediately see a nice graph of the congestion window behavior over time.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2421
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2422
Esta função registra o tempo de simulação atual e o novo valor da janela de congestionamento toda vez que é modificada. Poderíamos usar essa saída para construir um gráfico  do comportamento da janela de congestionamento com relação ao tempo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2423
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2424
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2425
	We added a new trace sink to show where packets are dropped.  We are going to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2426
	add an error model to this code also, so we wanted to demonstrate this working.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2427
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2428
Nós adicionamos um novo destino do rastreamento para mostrar onde pacotes são perdidos. Vamos adicionar um modelo de erro.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2429
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2430
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2431
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2432
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2433
  RxDrop (Ptr<const Packet> p)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2434
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2435
    NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2436
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2437
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2438
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2439
	This trace sink will be connected to the "PhyRxDrop" trace source of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2440
	point-to-point NetDevice.  This trace source fires when a packet is dropped
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2441
	by the physical layer of a ``NetDevice``.  If you take a small detour to the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2442
	source (``src/point-to-point/model/point-to-point-net-device.cc``) you will
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2443
	see that this trace source refers to ``PointToPointNetDevice::m_phyRxDropTrace``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2444
	If you then look in ``src/point-to-point/model/point-to-point-net-device.h``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2445
	for this member variable, you will find that it is declared as a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2446
	``TracedCallback<Ptr<const Packet> >``.  This should tell you that the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2447
	callback target should be a function that returns void and takes a single
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2448
	parameter which is a ``Ptr<const Packet>`` -- just what we have above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2449
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2450
Este destino do rastreamento será conectado a origem do rastreamento "PhyRxDrop" do ``NetDevice`` ponto-a-ponto. Esta origem do rastreamento dispara quando um pacote é removido da camada física de um ``NetDevice``. Se olharmos rapidamente ``src/point-to-point/model/point-to-point-net-device.cc`` verificamos que a origem do rastreamento refere-se a ``PointToPointNetDevice::m_phyRxDropTrace``. E se procurarmos em ``src/point-to-point/model/point-to-point-net-device.h`` por essa variável, encontraremos que ela está declarada como uma ``TracedCallback<Ptr<const Packet> >``. Isto significa que nosso *callback* deve ser uma função que retorna ``void`` e tem um único parâmetro ``Ptr<const Packet>``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2451
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2452
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2453
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2454
	The Main Program
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2455
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2456
O Programa Principal
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2457
~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2458
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2459
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2460
	The following code should be very familiar to you by now:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2461
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2462
O código a seguir corresponde ao início da função principal:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2463
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2464
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2465
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2466
  int
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2467
  main (int argc, char *argv[])
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2468
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2469
    NodeContainer nodes;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2470
    nodes.Create (2);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2471
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2472
    PointToPointHelper pointToPoint;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2473
    pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2474
    pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2475
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2476
    NetDeviceContainer devices;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2477
    devices = pointToPoint.Install (nodes);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2478
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2479
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2480
	This creates two nodes with a point-to-point channel between them, just as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2481
	shown in the illustration at the start of the file.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2482
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2483
São criados dois nós ligados por um canal ponto-a-ponto, como mostrado na ilustração
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2484
no início do arquivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2485
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2486
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2487
	The next few lines of code show something new.  If we trace a connection that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2488
	behaves perfectly, we will end up with a monotonically increasing congestion
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2489
	window.  To see any interesting behavior, we really want to introduce link 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2490
	errors which will drop packets, cause duplicate ACKs and trigger the more
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2491
	interesting behaviors of the congestion window.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2492
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2493
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2494
Nas próximas linhas, temos um código com algumas informações novas. Se nós rastrearmos uma conexão que comporta-se perfeitamente, terminamos com um janela de congestionamento que aumenta monoliticamente. Para observarmos um comportamento interessante, introduzimos erros que causarão perda de pacotes, duplicação de `ACK`s e assim, introduz comportamentos mais interessantes a janela de congestionamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2495
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2496
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2497
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2498
	|ns3| provides ``ErrorModel`` objects which can be attached to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2499
	``Channels``.  We are using the ``RateErrorModel`` which allows us
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2500
	to introduce errors into a ``Channel`` at a given *rate*. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2501
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2502
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2503
O |ns3| provê objetos de um modelo de erros (``ErrorModel``) que pode ser adicionado aos canais (``Channels``). Nós usamos o ``RateErrorModel`` que permite introduzir erros no canal dada uma *taxa*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2504
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2505
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2506
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2507
  Ptr<RateErrorModel> em = CreateObjectWithAttributes<RateErrorModel> (
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2508
    "RanVar", RandomVariableValue (UniformVariable (0., 1.)),
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2509
    "ErrorRate", DoubleValue (0.00001));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2510
  devices.Get (1)->SetAttribute ("ReceiveErrorModel", PointerValue (em));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2511
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2512
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2513
	The above code instantiates a ``RateErrorModel`` Object.  Rather than 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2514
	using the two-step process of instantiating it and then setting Attributes,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2515
	we use the convenience function ``CreateObjectWithAttributes`` which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2516
	allows us to do both at the same time.  We set the "RanVar" 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2517
	``Attribute`` to a random variable that generates a uniform distribution
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2518
	from 0 to 1.  We also set the "ErrorRate" ``Attribute``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2519
	We then set the resulting instantiated ``RateErrorModel`` as the error
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2520
	model used by the point-to-point ``NetDevice``.  This will give us some
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2521
	retransmissions and make our plot a little more interesting.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2522
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2523
O código instancia um objeto ``RateErrorModel``. Para simplificar usamos a função ``CreateObjectWithAttributes`` que instancia e configura os Atributos. O Atributo "RanVar" foi configurado para uma variável randômica que gera uma distribuição uniforme entre 0 e 1. O Atributo "ErrorRate" também foi alterado. Por fim, configuramos o modelo erro no ``NetDevice`` ponto-a-ponto modificando o atributo "ReceiveErrorModel".  Isto causará retransmissões e o gráfico ficará mais interessante.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2524
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2525
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2526
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2527
  InternetStackHelper stack;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2528
  stack.Install (nodes);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2529
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2530
  Ipv4AddressHelper address;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2531
  address.SetBase ("10.1.1.0", "255.255.255.252");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2532
  Ipv4InterfaceContainer interfaces = address.Assign (devices);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2533
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2534
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2535
	The above code should be familiar.  It installs internet stacks on our two
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2536
	nodes and creates interfaces and assigns IP addresses for the point-to-point
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2537
	devices.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2538
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2539
Neste código configura a pilha de protocolos da internet nos dois nós de rede, cria interfaces e associa endereços IP para os dispositivos ponto-a-ponto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2540
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2541
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2542
	Since we are using TCP, we need something on the destination node to receive
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2543
	TCP connections and data.  The ``PacketSink`` ``Application`` is commonly
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2544
	used in |ns3| for that purpose.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2545
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2546
Como estamos usando TCP, precisamos de um nó de destino para receber as conexões e os dados.  O ``PacketSink`` ``Application``  é comumente usado no |ns3| para este propósito.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2547
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2548
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2549
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2550
  uint16_t sinkPort = 8080;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2551
  Address sinkAddress (InetSocketAddress(interfaces.GetAddress (1), sinkPort));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2552
  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2553
    InetSocketAddress (Ipv4Address::GetAny (), sinkPort));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2554
  ApplicationContainer sinkApps = packetSinkHelper.Install (nodes.Get (1));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2555
  sinkApps.Start (Seconds (0.));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2556
  sinkApps.Stop (Seconds (20.));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2557
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2558
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2559
	This should all be familiar, with the exception of,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2560
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2561
Este código deveria ser familiar, com exceção de,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2562
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2563
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2564
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2565
  PacketSinkHelper packetSinkHelper ("ns3::TcpSocketFactory", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2566
    InetSocketAddress (Ipv4Address::GetAny (), sinkPort));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2567
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2568
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2569
	This code instantiates a ``PacketSinkHelper`` and tells it to create sockets
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2570
	using the class ``ns3::TcpSocketFactory``.  This class implements a design 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2571
	pattern called "object factory" which is a commonly used mechanism for 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2572
	specifying a class used to create objects in an abstract way.  Here, instead of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2573
	having to create the objects themselves, you provide the ``PacketSinkHelper``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2574
	a string that specifies a ``TypeId`` string used to create an object which 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2575
	can then be used, in turn, to create instances of the Objects created by the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2576
	factory.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2577
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2578
Este código instancia um ``PacketSinkHelper`` e cria sockets usando a classe ``ns3::TcpSocketFactory``. Esta classe implementa o padrão de projeto "fábrica de objetos". Dessa forma, em vez de criar os objetos diretamente, fornecemos ao ``PacketSinkHelper`` um texto que especifica um ``TypeId`` usado para criar
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2579
um objeto que, por sua vez, pode ser usado para criar instâncias de Objetos criados pela implementação da fábrica de objetos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2580
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2581
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2582
	The remaining parameter tells the ``Application`` which address and port it
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2583
	should ``Bind`` to.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2584
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2585
O parâmetro seguinte especifica o endereço e a porta para o mapeamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2586
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2587
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2588
	The next two lines of code will create the socket and connect the trace source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2589
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2590
As próximas duas linhas do código criam o `socket` e conectam a origem do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2591
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2592
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2593
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2594
  Ptr<Socket> ns3TcpSocket = Socket::CreateSocket (nodes.Get (0), 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2595
    TcpSocketFactory::GetTypeId ());
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2596
  ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2597
    MakeCallback (&CwndChange));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2598
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2599
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2600
	The first statement calls the static member function ``Socket::CreateSocket``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2601
	and provides a ``Node`` and an explicit ``TypeId`` for the object factory
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2602
	used to create the socket.  This is a slightly lower level call than the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2603
	``PacketSinkHelper`` call above, and uses an explicit C++ type instead of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2604
	one referred to by a string.  Otherwise, it is conceptually the same thing.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2605
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2606
A primeira declaração chama a função estática ``Socket::CreateSocket`` e passa um ``Node`` e um ``TypeId`` para o objeto fábrica usado para criar o `socket`. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2607
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2608
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2609
	Once the ``TcpSocket`` is created and attached to the ``Node``, we can
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2610
	use ``TraceConnectWithoutContext`` to connect the CongestionWindow trace 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2611
	source to our trace sink.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2612
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2613
Uma vez que o ``TcpSocket`` é criado e adicionado ao ``Node``, nós usamos ``TraceConnectWithoutContext`` para conectar a origem do rastreamento "CongestionWindow" para o nosso destino do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2614
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2615
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2616
	Recall that we coded an ``Application`` so we could take that ``Socket``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2617
	we just made (during configuration time) and use it in simulation time.  We now 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2618
	have to instantiate that ``Application``.  We didn't go to any trouble to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2619
	create a helper to manage the ``Application`` so we are going to have to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2620
	create and install it "manually".  This is actually quite easy:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2621
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2622
Codificamos uma ``Application`` então podemos obter um ``Socket`` (durante a fase de configuração) e usar na fase de simulação. Temos agora que instanciar a ``Application``. Para tal, segue os passos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2623
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2624
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2625
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2626
  Ptr<MyApp> app = CreateObject<MyApp> ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2627
  app->Setup (ns3TcpSocket, sinkAddress, 1040, 1000, DataRate ("1Mbps"));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2628
  nodes.Get (0)->AddApplication (app);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2629
  app->Start (Seconds (1.));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2630
  app->Stop (Seconds (20.));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2631
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2632
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2633
	The first line creates an ``Object`` of type ``MyApp`` -- our
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2634
	``Application``.  The second line tells the ``Application`` what
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2635
	``Socket`` to use, what address to connect to, how much data to send 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2636
	at each send event, how many send events to generate and the rate at which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2637
	to produce data from those events.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2638
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2639
A primeira linha cria um Objeto do tipo ``MyApp`` -- nossa ``Application``. A segunda linha especifica o `socket`, o endereço de conexão, a quantidade de dados a ser enviada em cada evento, a quantidade de eventos de transmissão a ser gerados e a taxa de produção de dados para estes eventos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2640
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2641
	Next, we manually add the ``MyApp Application`` to the source node
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2642
	and explicitly call the ``Start`` and ``Stop`` methods on the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2643
	``Application`` to tell it when to start and stop doing its thing.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2644
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2645
Depois, adicionamos a ``MyApp Application`` para o nó origem e chamamos os métodos ``Start`` e ``Stop`` para dizer quando e iniciar e parar a simulação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2646
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2647
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2648
	We need to actually do the connect from the receiver point-to-point ``NetDevice``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2649
	to our callback now.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2650
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2651
Precisamos agora fazer a conexão entre o receptor com nossa *callback*.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2652
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2653
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2654
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2655
  devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&RxDrop));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2656
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2657
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2658
	It should now be obvious that we are getting a reference to the receiving 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2659
	``Node NetDevice`` from its container and connecting the trace source defined
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2660
	by the attribute "PhyRxDrop" on that device to the trace sink ``RxDrop``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2661
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2662
Estamos obtendo uma referência para o ``Node NetDevice`` receptor e conectando a origem do rastreamento pelo Atributo "PhyRxDrop" do dispositivo no destino do rastreamento ``RxDrop``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2663
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2664
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2665
	Finally, we tell the simulator to override any ``Applications`` and just
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2666
	stop processing events at 20 seconds into the simulation.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2667
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2668
Finalmente, dizemos ao simulador para sobrescrever qualquer ``Applications`` e parar o processamento de eventos em 20 segundos na simulação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2669
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2670
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2671
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2672
    Simulator::Stop (Seconds(20));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2673
    Simulator::Run ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2674
    Simulator::Destroy ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2675
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2676
    return 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2677
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2678
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2679
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2680
	Recall that as soon as ``Simulator::Run`` is called, configuration time
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2681
	ends, and simulation time begins.  All of the work we orchestrated by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2682
	creating the ``Application`` and teaching it how to connect and send
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2683
	data actually happens during this function call.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2684
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2685
Lembre-se que quando ``Simulator::Run`` é chamado, a fase de configuração termina e a fase de simulação inicia. Todo o processo descrito anteriormente ocorre durante a chamada dessa função.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2686
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2687
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2688
	As soon as ``Simulator::Run`` returns, the simulation is complete and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2689
	we enter the teardown phase.  In this case, ``Simulator::Destroy`` takes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2690
	care of the gory details and we just return a success code after it completes.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2691
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2692
Após o retorno do ``Simulator::Run``, a simulação é terminada e entramos na fase de finalização. Neste caso, ``Simulator::Destroy`` executa a tarefa pesada e nós apenas retornamos o código de sucesso.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2693
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2694
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2695
	Running fifth.cc
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2696
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2697
Executando fifth.cc
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2698
+++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2699
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2700
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2701
	Since we have provided the file ``fifth.cc`` for you, if you have built
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2702
	your distribution (in debug mode since it uses NS_LOG -- recall that optimized
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2703
	builds optimize out NS_LOGs) it will be waiting for you to run.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2704
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2705
O arquivo ``fifth.cc`` é distribuído no código fonte, no diretório ``examples/tutorial``. Para executar:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2706
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2707
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2708
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2709
  ./waf --run fifth
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2710
  Waf: Entering directory `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2711
  Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone-dev/ns-3-dev/build'
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2712
  'build' finished successfully (0.684s)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2713
  1.20919 1072
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2714
  1.21511 1608
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2715
  1.22103 2144
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2716
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2717
  1.2471  8040
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2718
  1.24895 8576
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2719
  1.2508  9112
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2720
  RxDrop at 1.25151
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2721
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2722
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2723
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2724
	You can probably see immediately a downside of using prints of any kind in your
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2725
	traces.  We get those extraneous waf messages printed all over our interesting
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2726
	information along with those RxDrop messages.  We will remedy that soon, but I'm
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2727
	sure you can't wait to see the results of all of this work.  Let's redirect that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2728
	output to a file called ``cwnd.dat``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2729
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2730
Podemos observar o lado negativo de usar "prints" de qualquer tipo no rastreamento. Temos mensagens ``waf`` sendo impressas sobre a informação relevante. Vamos resolver esse problema, mas primeiro vamos verificar o resultado redirecionando a saída para um arquivo ``cwnd.dat``:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2731
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2732
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2733
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2734
  ./waf --run fifth > cwnd.dat 2>&1
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2735
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2736
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2737
	Now edit up "cwnd.dat" in your favorite editor and remove the waf build status
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2738
	and drop lines, leaving only the traced data (you could also comment out the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2739
	``TraceConnectWithoutContext("PhyRxDrop", MakeCallback (&RxDrop));`` in the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2740
	script to get rid of the drop prints just as easily. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2741
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2742
Removemos as mensagens do ``waf`` e deixamos somente os dados rastreados.  Pode-se também comentar as mensagens de "RxDrop...".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2743
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2744
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2745
	You can now run gnuplot (if you have it installed) and tell it to generate some 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2746
	pretty pictures:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2747
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2748
Agora podemos executar o gnuplot (se instalado) e gerar um gráfico:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2749
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2750
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2752
  gnuplot> set terminal png size 640,480
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2753
  gnuplot> set output "cwnd.png"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2754
  gnuplot> plot "cwnd.dat" using 1:2 title 'Congestion Window' with linespoints
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2755
  gnuplot> exit
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2756
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2757
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2758
	You should now have a graph of the congestion window versus time sitting in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2759
	file "cwnd.png" that looks like:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2760
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2761
Devemos obter um gráfico da janela de congestionamento pelo tempo no arquivo "cwnd.png", similar ao gráfico 7.1:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2762
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2763
figure:: figures/cwnd.png
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2764
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2765
   Gráfico da janela de congestionamento versus tempo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2766
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2767
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2768
	Using Mid-Level Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2769
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2770
Usando Auxiliares Intermediários
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2771
++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2772
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2773
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2774
	In the previous section, we showed how to hook a trace source and get hopefully
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2775
	interesting information out of a simulation.  Perhaps you will recall that we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2776
	called logging to the standard output using ``std::cout`` a "Blunt Instrument" 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2777
	much earlier in this chapter.  We also wrote about how it was a problem having
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2778
	to parse the log output in order to isolate interesting information.  It may 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2779
	have occurred to you that we just spent a lot of time implementing an example
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2780
	that exhibits all of the problems we purport to fix with the |ns3| tracing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2781
	system!  You would be correct.  But, bear with us.  We're not done yet.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2782
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2783
Na seção anterior, mostramos como adicionar uma origem do rastreamento e obter informações de interesse fora da simulação. Entretanto, no início do capítulo foi comentado que imprimir informações na saída padrão não é uma boa prática. Além disso, comentamos que não é interessante realizar processamento sobre a saída para isolar a informação de interesse. Podemos pensar que perdemos muito tempo em um exemplo que apresenta todos os problemas que propomos resolver usando o sistema de rastreamento do |ns3|. Você estaria correto, mas nós ainda não terminamos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2784
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2785
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2786
	One of the most important things we want to do is to is to have the ability to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2787
	easily control the amount of output coming out of the simulation; and we also 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2788
	want to save those data to a file so we can refer back to it later.  We can use
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2789
	the mid-level trace helpers provided in |ns3| to do just that and complete
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2790
	the picture.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2791
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2792
Uma da coisas mais importantes que queremos fazer é controlar a quantidade de saída da simulação. Nós podemos usar assistentes de rastreamento intermediários fornecido pelo |ns3| para alcançar com sucesso esse objetivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2793
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2794
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2795
	We provide a script that writes the cwnd change and drop events developed in 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2796
	the example ``fifth.cc`` to disk in separate files.  The cwnd changes are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2797
	stored as a tab-separated ASCII file and the drop events are stored in a pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2798
	file.  The changes to make this happen are quite small.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2799
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2800
Fornecemos um código que separa em arquivos distintos no disco os eventos de modificação da janela e os eventos de remoção. As alterações em cwnd são armazenadas em um arquivo ASCII separadas por TAB e os eventos de remoção são armazenados em um arquivo *pcap*. As alterações para obter esse resultado são pequenas.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2801
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2802
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2803
	A sixth.cc Walkthrough
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2804
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2805
Analisando sixth.cc
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2806
~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2807
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2808
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2809
	Let's take a look at the changes required to go from ``fifth.cc`` to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2810
	``sixth.cc``.  Open ``examples/tutorial/fifth.cc`` in your favorite 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2811
	editor.  You can see the first change by searching for CwndChange.  You will 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2812
	find that we have changed the signatures for the trace sinks and have added 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2813
	a single line to each sink that writes the traced information to a stream
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2814
	representing a file.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2815
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2816
Vamos verificar as mudanças do arquivo ``fifth.cc`` para o  ``sixth.cc``. Verificamos a primeira mudança em ``CwndChange``. Notamos que as assinaturas para o destino do rastreamento foram alteradas e que foi adicionada uma linha para cada um que escreve a informação rastreada para um fluxo (*stream*) representando um arquivo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2817
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2818
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2819
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2820
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2821
  CwndChange (Ptr<OutputStreamWrapper> stream, uint32_t oldCwnd, uint32_t newCwnd)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2822
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2823
    NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2824
    *stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2825
    		<< oldCwnd << "\t" << newCwnd << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2826
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2827
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2828
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2829
  RxDrop (Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2830
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2831
    NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2832
    file->Write(Simulator::Now(), p);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2833
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2834
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2835
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2836
	We have added a "stream" parameter to the ``CwndChange`` trace sink.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2837
	This is an object that holds (keeps safely alive) a C++ output stream.  It 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2838
	turns out that this is a very simple object, but one that manages lifetime 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2839
	issues for the stream and solves a problem that even experienced C++ users 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2840
	run into.  It turns out that the copy constructor for ostream is marked 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2841
	private.  This means that ostreams do not obey value semantics and cannot 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2842
	be used in any mechanism that requires the stream to be copied.  This includes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2843
	the |ns3| callback system, which as you may recall, requires objects
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2844
	that obey value semantics.  Further notice that we have added the following 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2845
	line in the ``CwndChange`` trace sink implementation:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2846
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2847
Um parâmetro "stream" foi adicionado para o destino do rastreamento ``CwndChange``. Este é um objeto que armazena (mantém seguramente vivo) um fluxo de saída em C++. Isto resulta em um objeto muito simples, mas que gerência problemas no ciclo de vida para fluxos e resolve um problema que mesmo programadores experientes de C++ tem dificuldades. Resulta que o construtor de cópia para o fluxo de saída (*ostream*) é marcado como privado. Isto significa que fluxos de saída não seguem a semântica de passagem por valor e não podem ser usados em mecanismos que necessitam que o fluxo seja copiado. Isto inclui o sistema de *callback* do |ns3|. Além disso, adicionamos a seguinte linha:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2848
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2849
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2850
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2851
  *stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << oldCwnd 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2852
  		<< "\t" << newCwnd << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2853
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2854
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2855
	This would be very familiar code if you replaced ``*stream->GetStream ()``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2856
	with ``std::cout``, as in:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2857
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2858
que substitui ``std::cout`` por ``*stream->GetStream ()``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2859
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2860
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2861
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2862
  std::cout << Simulator::Now ().GetSeconds () << "\t" << oldCwnd << "\t" << 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2863
  		newCwnd << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2864
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2865
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2866
	This illustrates that the ``Ptr<OutputStreamWrapper>`` is really just
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2867
	carrying around a ``std::ofstream`` for you, and you can use it here like 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2868
	any other output stream.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2869
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2870
Isto demostra que o ``Ptr<OutputStreamWrapper>`` está apenas encapsulando um ``std::ofstream``, logo pode ser usado como qualquer outro fluxo de saída.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2871
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2872
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2873
	A similar situation happens in ``RxDrop`` except that the object being 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2874
	passed around (a ``Ptr<PcapFileWrapper>``) represents a pcap file.  There
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2875
	is a one-liner in the trace sink to write a timestamp and the contents of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2876
	packet being dropped to the pcap file:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2877
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2878
Uma situação similar ocorre em ``RxDrop``, exceto que o objeto passado (``Ptr<PcapFileWrapper>``) representa um arquivo pcap. Há uma linha no *trace sink* para escrever um marcador de tempo (*timestamp*) eo conteúdo do pacote perdido para o arquivo pcap.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2879
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2880
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2881
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2882
  file->Write(Simulator::Now(), p);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2883
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2884
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2885
	Of course, if we have objects representing the two files, we need to create
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2886
	them somewhere and also cause them to be passed to the trace sinks.  If you 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2887
	look in the ``main`` function, you will find new code to do just that:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2888
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2889
É claro, se nós temos objetos representando os dois arquivos, precisamos criá-los em algum lugar e também passá-los aos *trace sinks*. Se observarmos a função ``main``, temos o código:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2890
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2891
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2892
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2893
  AsciiTraceHelper asciiTraceHelper;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2894
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("sixth.cwnd");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2895
  ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2896
  		MakeBoundCallback (&CwndChange, stream));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2897
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2898
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2899
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2900
  PcapHelper pcapHelper;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2901
  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2902
  		std::ios::out, PcapHelper::DLT_PPP);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2903
  devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2904
  		MakeBoundCallback (&RxDrop, file));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2905
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2906
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2907
	In the first section of the code snippet above, we are creating the ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2908
	trace file, creating an object responsible for managing it and using a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2909
	variant of the callback creation function to arrange for the object to be 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2910
	passed to the sink.  Our ASCII trace helpers provide a rich set of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2911
	functions to make using text (ASCII) files easy.  We are just going to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2912
	illustrate the use of the file stream creation function here.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2913
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2914
Na primeira seção do código, criamos o arquivo de rastreamento ASCII e o objeto responsável para gerenciá-lo. Em seguida, usando uma das formas da função para criação da *callback* permitimos o objeto ser passado para o destino do rastreamento. As classes assistentes para rastreamento ASCII fornecem um vasto conjunto de funções para facilitar a manipulação de arquivos texto. Neste exemplo, focamos apenas na criação do arquivo para o fluxo de saída.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2915
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2916
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2917
	The ``CreateFileStream{}`` function is basically going to instantiate
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2918
	a std::ofstream object and create a new file (or truncate an existing file).
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2919
	This ofstream is packaged up in an |ns3| object for lifetime management
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2920
	and copy constructor issue resolution.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2921
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2922
A função ``CreateFileStream()`` instancia um objeto ``std::ofstream`` e cria  um novo arquivo. O fluxo de saída ``ofstream`` é encapsulado em um objeto do |ns3| para gerenciamento do ciclo de vida e para resolver o
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2923
problema do construtor de cópia.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2924
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2925
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2926
	We then take this |ns3| object representing the file and pass it to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2927
	``MakeBoundCallback()``.  This function creates a callback just like
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2928
	``MakeCallback()``, but it "binds" a new value to the callback.  This
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2929
	value is added to the callback before it is called.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2930
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2931
Então pegamos o objeto que representa o arquivo e passamos para ``MakeBoundCallback()``. Esta função cria um *callback* como ``MakeCallback()``, mas "associa" um novo valor para o *callback*. Este valor é adicionado ao *callback* antes de sua invocação.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2932
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2933
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2934
	Essentially, ``MakeBoundCallback(&CwndChange, stream)`` causes the trace 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2935
	source to add the additional "stream" parameter to the front of the formal
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2936
	parameter list before invoking the callback.  This changes the required 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2937
	signature of the ``CwndChange`` sink to match the one shown above, which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2938
	includes the "extra" parameter ``Ptr<OutputStreamWrapper> stream``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2939
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2940
Essencialmente, ``MakeBoundCallback(&CwndChange, stream)`` faz com que a origem do rastreamento adicione um parâmetro extra "fluxo" após a lista formal de parâmetros antes de invocar o *callback*. Esta mudança está de acordo com o apresentado anteriormente, a qual inclui o parâmetro ``Ptr<OutputStreamWrapper> stream``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2941
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2942
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2943
	In the second section of code in the snippet above, we instantiate a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2944
	``PcapHelper`` to do the same thing for our pcap trace file that we did
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2945
	with the ``AsciiTraceHelper``. The line of code,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2946
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2947
Na segunda seção de código, instanciamos um ``PcapHelper`` para fazer a mesma coisa para o arquivo de rastreamento pcap. A linha de código,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2948
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2949
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2950
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2951
  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", "w", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2952
  		PcapHelper::DLT_PPP);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2953
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2954
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2955
	creates a pcap file named "sixth.pcap" with file mode "w".   This means that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2956
	the new file is to truncated if an existing file with that name is found.  The
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2957
	final parameter is the "data link type" of the new pcap file.  These are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2958
	the same as the pcap library data link types defined in ``bpf.h`` if you are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2959
	familar with pcap.  In this case, ``DLT_PPP`` indicates that the pcap file
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2960
	is going to contain packets prefixed with point to point headers.  This is true
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2961
	since the packets are coming from our point-to-point device driver.  Other
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2962
	common data link types are DLT_EN10MB (10 MB Ethernet) appropriate for csma
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2963
	devices and DLT_IEEE802_11 (IEEE 802.11) appropriate for wifi devices.  These
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2964
	are defined in ``src/network/helper/trace-helper.h"`` if you are interested in seeing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2965
	the list.  The entries in the list match those in ``bpf.h`` but we duplicate
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2966
	them to avoid a pcap source dependence.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2967
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2968
cria um arquivo pcap chamado "sixth.pcap" no modo "w" (escrita). O parâmetro final é o "tipo da ligação de dados" do arquivo pcap. As opções estão definidas em ``bpf.h``. Neste caso, ``DLT_PPP`` indica que o arquivo pcap deverá conter pacotes prefixado com cabeçalhos ponto-a-ponto. Isto é verdade pois os pacotes estão chegando de nosso `driver` de dispositivo ponto-a-ponto. Outros tipos de ligação de dados comuns são DLT_EN10MB (10 MB Ethernet) apropriado para dispositivos CSMA e DLT_IEEE802_11 (IEEE 802.11) apropriado para dispositivos sem fio. O arquivo ``src/network/helper/trace-helper.h"`` define uma lista com os tipos. As entradas na lista são idênticas as definidas em ``bpf.h``, pois foram duplicadas para evitar um dependência com o pcap.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2969
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2970
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2971
	A |ns3| object representing the pcap file is returned from ``CreateFile``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2972
	and used in a bound callback exactly as it was in the ascii case.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2973
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2974
Um objeto |ns3| representando o arquivo pcap é retornado de ``CreateFile`` e usado em uma *callback* exatamente como no caso ASCII.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2975
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2976
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2977
	An important detour:  It is important to notice that even though both of these 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2978
	objects are declared in very similar ways,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2979
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2980
É importante observar que ambos objetos são declarados de maneiras muito similares,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2981
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2982
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2983
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2984
  Ptr<PcapFileWrapper> file ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2985
  Ptr<OutputStreamWrapper> stream ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2986
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2987
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2988
	The underlying objects are entirely different.  For example, the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2989
	Ptr<PcapFileWrapper> is a smart pointer to an |ns3| Object that is a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2990
	fairly heaviweight thing that supports ``Attributes`` and is integrated into
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2991
	the config system.  The Ptr<OutputStreamWrapper>, on the other hand, is a smart 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2992
	pointer to a reference counted object that is a very lightweight thing.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2993
	Remember to always look at the object you are referencing before making any
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2994
	assumptions about the "powers" that object may have.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2995
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2996
Mas os objetos internos são inteiramente diferentes. Por exemplo, o Ptr<PcapFileWrapper> é um ponteiro para um objeto |ns3| que suporta ``Attributes`` e é integrado dentro do sistema de configuração. O Ptr<OutputStreamWrapper>, por outro lado, é um ponteiro para uma referência para um simples objeto contado. Lembre-se sempre de analisar o objeto que você está referenciando antes de fazer suposições sobre os "poderes" que o objeto pode ter.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2997
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  2998
..
8771
6cdcf5eb2048 fix file path reference
Tom Henderson <tomh@tomh.org>
parents: 7751
diff changeset
  2999
	For example, take a look at ``src/network/utils/pcap-file-wrapper.h`` in the 
7751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3000
	distribution and notice, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3001
8771
6cdcf5eb2048 fix file path reference
Tom Henderson <tomh@tomh.org>
parents: 7751
diff changeset
  3002
Por exemplo, acesse o arquivo ``src/network/utils/pcap-file-wrapper.h`` e observe,
7751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3003
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3004
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3005
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3006
  class PcapFileWrapper : public Object
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3007
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3008
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3009
	that class ``PcapFileWrapper`` is an |ns3| Object by virtue of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3010
	its inheritance.  Then look at ``src/network/model/output-stream-wrapper.h`` and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3011
	notice,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3012
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3013
que a classe ``PcapFileWrapper`` é um ``Object`` |ns3| por herança. Já no arquivo ``src/network/model/output-stream-wrapper.h``, observe,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3014
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3015
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3016
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3017
  class OutputStreamWrapper : public SimpleRefCount<OutputStreamWrapper>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3018
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3019
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3020
	that this object is not an |ns3| Object at all, it is "merely" a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3021
	C++ object that happens to support intrusive reference counting.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3022
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3023
que não é um ``Object`` |ns3|, mas um objeto C++ que suporta contagem de referência.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3024
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3025
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3026
	The point here is that just because you read Ptr<something> it does not necessarily
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3027
	mean that "something" is an |ns3| Object on which you can hang |ns3|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3028
	``Attributes``, for example.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3029
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3030
A questão é que se você tem um Ptr<alguma_coisa>, não necessariamente significa que "alguma_coisa" é um ``Object`` |ns3|, no qual você pode modificar ``Attributes``, por exemplo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3031
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3032
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3033
	Now, back to the example.  If you now build and run this example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3034
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3035
Voltando ao exemplo. Se compilarmos e executarmos o exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3036
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3037
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3038
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3039
  ./waf --run sixth
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3040
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3041
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3042
	you will see the same messages appear as when you ran "fifth", but two new 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3043
	files will appear in the top-level directory of your |ns3| distribution.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3044
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3045
Veremos as mesmas mensagens do "fifth", mas dois novos arquivos aparecerão no diretório base de sua distribuição do |ns3|.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3046
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3047
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3048
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3049
  sixth.cwnd  sixth.pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3050
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3051
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3052
	Since "sixth.cwnd" is an ASCII text file, you can view it with ``cat``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3053
	or your favorite file viewer.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3054
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3055
Como "sixth.cwnd" é um arquivo texto ASCII, você pode visualizar usando *cat* ou um editor de texto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3056
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3057
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3058
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3059
  1.20919 536     1072
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3060
  1.21511 1072    1608
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3061
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3062
  9.30922 8893    8925
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3063
  9.31754 8925    8957
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3064
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3065
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3066
	You have a tab separated file with a timestamp, an old congestion window and a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3067
	new congestion window suitable for directly importing into your plot program.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3068
	There are no extraneous prints in the file, no parsing or editing is required.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3069
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3070
Cada linha tem um marcador de tempo, o valor da janela de congestionamento e o valor da nova janela de congestionamento separados por tabulação, para importar diretamente para seu programa de plotagem de gráficos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3071
Não há nenhuma outra informação além da rastreada, logo não é necessário processamento ou edição do arquivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3072
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3073
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3074
	Since "sixth.pcap" is a pcap file, you can view it with ``tcpdump``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3075
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3076
Como "sixth.pcap" é um arquivo pcap, você pode visualizar usando o ``tcpdump`` ou ``wireshark``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3077
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3078
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3079
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3080
  reading from file ../../sixth.pcap, link-type PPP (PPP)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3081
  1.251507 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 17689:18225(536) ack 1 win 65535
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3082
  1.411478 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 33808:34312(504) ack 1 win 65535
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3083
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3084
  7.393557 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 781568:782072(504) ack 1 win 65535
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3085
  8.141483 IP 10.1.1.1.49153 > 10.1.1.2.8080: . 874632:875168(536) ack 1 win 65535
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3086
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3087
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3088
	You have a pcap file with the packets that were dropped in the simulation.  There
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3089
	are no other packets present in the file and there is nothing else present to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3090
	make life difficult.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3091
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3092
Você tem um arquivo pcap com os pacotes que foram descartados na simulação. Não há nenhum outro pacote presente no arquivo e nada mais para dificultar sua análise.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3093
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3094
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3095
	It's been a long journey, but we are now at a point where we can appreciate the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3096
	|ns3| tracing system.  We have pulled important events out of the middle
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3097
	of a TCP implementation and a device driver.  We stored those events directly in
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3098
	files usable with commonly known tools.  We did this without modifying any of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3099
	core code involved, and we did this in only 18 lines of code:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3100
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3101
Foi uma longa jornada, mas agora entendemos porque o sistema de rastreamento é interessante. Nós obtemos e armazenamos importantes eventos da implementação do TCP e do `driver` de dispositivo. E não modificamos nenhuma linha do código do núcleo do |ns3|, e ainda fizemos isso com apenas 18 linhas de código:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3102
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3103
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3104
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3105
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3106
  CwndChange (Ptr<OutputStreamWrapper> stream, uint32_t oldCwnd, uint32_t newCwnd)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3107
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3108
    NS_LOG_UNCOND (Simulator::Now ().GetSeconds () << "\t" << newCwnd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3109
    *stream->GetStream () << Simulator::Now ().GetSeconds () << "\t" << 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3110
    		oldCwnd << "\t" << newCwnd << std::endl;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3111
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3112
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3113
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3114
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3115
  AsciiTraceHelper asciiTraceHelper;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3116
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream ("sixth.cwnd");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3117
  ns3TcpSocket->TraceConnectWithoutContext ("CongestionWindow", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3118
  		MakeBoundCallback (&CwndChange, stream));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3119
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3120
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3121
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3122
  static void
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3123
  RxDrop (Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3124
  {
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3125
    NS_LOG_UNCOND ("RxDrop at " << Simulator::Now ().GetSeconds ());
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3126
    file->Write(Simulator::Now(), p);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3127
  }
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3128
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3129
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3130
  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3131
  PcapHelper pcapHelper;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3132
  Ptr<PcapFileWrapper> file = pcapHelper.CreateFile ("sixth.pcap", "w", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3133
  		PcapHelper::DLT_PPP);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3134
  devices.Get (1)->TraceConnectWithoutContext("PhyRxDrop", 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3135
  		MakeBoundCallback (&RxDrop, file));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3136
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3137
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3138
	Using Trace Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3139
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3140
Usando Classes Assistentes para Rastreamento
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3141
********************************************
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3142
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3143
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3144
	The |ns3| trace helpers provide a rich environment for configuring and
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3145
	selecting different trace events and writing them to files.  In previous
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3146
	sections, primarily "Building Topologies," we have seen several varieties
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3147
	of the trace helper methods designed for use inside other (device) helpers.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3148
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3149
As classes assistentes (*trace helpers*) de rastreamento do |ns3| proveem um ambiente rico para configurar, selecionar e escrever diferentes eventos de rastreamento para arquivos. Nas seções anteriores, primeiramente em "Construindo Topologias", nós vimos diversas formas de métodos assistentes para rastreamento projetados para uso dentro de outras classes assistentes.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3150
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3151
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3152
	Perhaps you will recall seeing some of these variations: 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3153
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3154
Segue alguns desses métodos já estudados:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3155
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3156
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3157
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3158
  pointToPoint.EnablePcapAll ("second");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3159
  pointToPoint.EnablePcap ("second", p2pNodes.Get (0)->GetId (), 0);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3160
  csma.EnablePcap ("third", csmaDevices.Get (0), true);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3161
  pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3162
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3163
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3164
	What may not be obvious, though, is that there is a consistent model for all of 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3165
	the trace-related methods found in the system.  We will now take a little time
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3166
	and take a look at the "big picture".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3167
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3168
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3169
O que não parece claro é que há um modelo consistente para todos os métodos relacionados à rastreamento encontrados no sistema. Apresentaremos uma visão geral desse modelo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3170
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3171
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3172
	There are currently two primary use cases of the tracing helpers in |ns3|:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3173
	Device helpers and protocol helpers.  Device helpers look at the problem
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3174
	of specifying which traces should be enabled through a node, device pair.  For 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3175
	example, you may want to specify that pcap tracing should be enabled on a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3176
	particular device on a specific node.  This follows from the |ns3| device
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3177
	conceptual model, and also the conceptual models of the various device helpers.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3178
	Following naturally from this, the files created follow a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3179
	<prefix>-<node>-<device> naming convention.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3180
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3181
Há dois casos de uso primários de classes assistentes em |ns3|: Classes assistentes de dispositivo e classes assistentes de protocolo. Classes assistentes de dispositivo tratam o problema de especificar quais rastreamentos deveriam ser habilitados no domínio do nó de rede. Por exemplo, poderíamos querer especificar que o rastreamento pcap deveria ser ativado em um dispositivo particular de um nó específico. Isto é o que define o modelo conceitual de dispositivo no |ns3| e também os modelos conceituais de várias classes assistentes de dispositivos. Baseado nisso, os arquivos criados seguem a convenção de nome `<prefixo>-<nó>-<dispositivo>`.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3182
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3183
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3184
	Protocol helpers look at the problem of specifying which traces should be
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3185
	enabled through a protocol and interface pair.  This follows from the |ns3|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3186
	protocol stack conceptual model, and also the conceptual models of internet
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3187
	stack helpers.  Naturally, the trace files should follow a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3188
	<prefix>-<protocol>-<interface> naming convention.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3189
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3190
As classes assistentes de protocolos tratam o problema de especificar quais rastreamentos deveriam ser ativados no protocolo e interface. Isto é definido pelo modelo conceitual de pilha de protocolo do |ns3| e também pelos modelos conceituais de classes assistentes de pilha de rede. Baseado nisso, os arquivos criados seguem a convenção de nome `<prefixo>-<protocolo>-<interface>`.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3191
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3192
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3193
	The trace helpers therefore fall naturally into a two-dimensional taxonomy.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3194
	There are subtleties that prevent all four classes from behaving identically,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3195
	but we do strive to make them all work as similarly as possible; and whenever
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3196
	possible there are analogs for all methods in all classes.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3197
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3198
As classes assistentes consequentemente encaixam-se em uma taxinomia bi-dimensional. Há pequenos detalhes que evitam todas as classes comportarem-se da mesma forma, mas fizemos parecer que trabalham tão similarmente quanto possível e quase sempre há similares para todos métodos em todas as classes.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3199
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3200
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3201
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3202
                                                     | pcap | ascii |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3203
  ---------------------------------------------------+------+-------|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3204
  Classe Assistente de Dispositivo (*Device Helper*)   |      |       |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3205
  ---------------------------------------------------+------+-------|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3206
  Classe Assistente de Protocolo (*Protocol Helper*)   |      |       |
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3207
  ---------------------------------------------------+------+-------|
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3208
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3209
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3210
	We use an approach called a ``mixin`` to add tracing functionality to our 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3211
	helper classes.  A ``mixin`` is a class that provides functionality to that
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3212
	is inherited by a subclass.  Inheriting from a mixin is not considered a form 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3213
	of specialization but is really a way to collect functionality. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3214
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3215
Usamos uma abordagem chamada ``mixin`` para adicionar funcionalidade de rastreamento para nossas classes assistentes. Uma ``mixin`` é uma classe que provê funcionalidade para aquela que é herdada por uma subclasse. Herdar de um ``mixin`` não é considerado uma forma de especialização mas é realmente uma maneira de colecionar funcionalidade.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3216
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3217
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3218
	Let's take a quick look at all four of these cases and their respective 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3219
	``mixins``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3220
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3221
Vamos verificar rapidamente os quatro casos e seus respectivos ``mixins``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3222
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3223
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3224
	Pcap Tracing Device Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3225
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3226
Classes Assistentes de Dispositivo para Rastreamento Pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3227
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3228
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3229
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3230
	The goal of these helpers is to make it easy to add a consistent pcap trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3231
	facility to an |ns3| device.  We want all of the various flavors of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3232
	pcap tracing to work the same across all devices, so the methods of these 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3233
	helpers are inherited by device helpers.  Take a look at 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3234
	``src/network/helper/trace-helper.h`` if you want to follow the discussion while 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3235
	looking at real code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3236
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3237
O objetivo destes assistentes é simplificar a adição de um utilitário de rastreamento pcap consistente para um dispositivo |ns3|. Queremos que opere da mesma forma entre todos os dispositivos, logo os métodos destes assistentes são herdados por classes assistentes de dispositivo. Observe o arquivo ``src/network/helper/trace-helper.h`` para entender a discussão do código a seguir.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3238
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3239
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3240
	The class ``PcapHelperForDevice`` is a ``mixin`` provides the high level 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3241
	functionality for using pcap tracing in an |ns3| device.  Every device 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3242
	must implement a single virtual method inherited from this class.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3243
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3244
A classe ``PcapHelperForDevice`` é um ``mixin`` que provê a funcionalidade de alto nível para usar rastreamento pcap em um dispositivo |ns3|. Todo dispositivo deve implementar um único método virtual herdado dessa classe.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3245
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3246
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3247
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3248
  virtual void EnablePcapInternal (std::string prefix, Ptr<NetDevice> nd, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3249
  		bool promiscuous, bool explicitFilename) = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3250
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3251
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3252
	The signature of this method reflects the device-centric view of the situation
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3253
	at this level.  All of the public methods inherited from class 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3254
	``PcapUserHelperForDevice`` reduce to calling this single device-dependent
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3255
	implementation method.  For example, the lowest level pcap method,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3256
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3257
A assinatura deste método reflete a visão do dispositivo da situação neste nível. Todos os métodos públicos herdados da classe ``PcapUserHelperForDevice`` são reduzidos a chamada da implementação deste simples método dependente de dispositivo. Por exemplo, o nível mais baixo do método pcap,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3258
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3259
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3260
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3261
  void EnablePcap (std::string prefix, Ptr<NetDevice> nd, bool promiscuous = false, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3262
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3263
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3264
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3265
	will call the device implementation of ``EnablePcapInternal`` directly.  All
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3266
	other public pcap tracing methods build on this implementation to provide 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3267
	additional user-level functionality.  What this means to the user is that all 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3268
	device helpers in the system will have all of the pcap trace methods available;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3269
	and these methods will all work in the same way across devices if the device 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3270
	implements ``EnablePcapInternal`` correctly.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3271
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3272
chamaremos diretamente a implementação do dispositivo de ``EnablePcapInternal``. Todos os outros métodos de rastreamento pcap públicos desta implementação são para prover funcionalidade adicional em nível de usuário. Para o usuário, isto significa que todas as classes assistentes de dispositivo no sistema terão todos os métodos de rastreamento pcap disponíveis; e estes métodos trabalharão da mesma forma entre dispositivos se o dispositivo implementar corretamente ``EnablePcapInternal``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3273
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3274
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3275
	Pcap Tracing Device Helper Methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3276
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3277
Métodos da Classe Assistente de Dispositivo para Rastreamento Pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3278
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3279
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3280
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3281
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3282
  void EnablePcap (std::string prefix, Ptr<NetDevice> nd, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3283
  		bool promiscuous = false, bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3284
  void EnablePcap (std::string prefix, std::string ndName, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3285
  		bool promiscuous = false, bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3286
  void EnablePcap (std::string prefix, NetDeviceContainer d, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3287
  		bool promiscuous = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3288
  void EnablePcap (std::string prefix, NodeContainer n, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3289
  		bool promiscuous = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3290
  void EnablePcap (std::string prefix, uint32_t nodeid, uint32_t deviceid, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3291
  		bool promiscuous = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3292
  void EnablePcapAll (std::string prefix, bool promiscuous = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3293
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3294
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3295
	In each of the methods shown above, there is a default parameter called 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3296
	``promiscuous`` that defaults to false.  This parameter indicates that the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3297
	trace should not be gathered in promiscuous mode.  If you do want your traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3298
	to include all traffic seen by the device (and if the device supports a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3299
	promiscuous mode) simply add a true parameter to any of the calls above.  For example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3300
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3301
Em cada método apresentado existe um parâmetro padrão chamado ``promiscuous`` que é definido para o valor "false". Este parâmetro indica que o rastreamento não deveria coletar dados em modo promíscuo. Se quisermos incluir todo tráfego visto pelo dispositivo devemos modificar o valor para "true". Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3302
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3303
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3304
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3305
  Ptr<NetDevice> nd;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3306
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3307
  helper.EnablePcap ("prefix", nd, true);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3308
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3309
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3310
	will enable promiscuous mode captures on the ``NetDevice`` specified by ``nd``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3311
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3312
ativará o modo de captura promíscuo no ``NetDevice`` especificado por ``nd``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3313
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3314
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3315
	The first two methods also include a default parameter called ``explicitFilename``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3316
	that will be discussed below.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3317
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3318
Os  dois primeiros métodos também incluem um parâmetro padrão chamado ``explicitFilename`` que será abordado a seguir.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3319
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3320
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3321
	You are encouraged to peruse the Doxygen for class ``PcapHelperForDevice``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3322
	to find the details of these methods; but to summarize ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3323
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3324
É interessante procurar maiores detalhes dos métodos da classe ``PcapHelperForDevice`` no Doxygen; mas para resumir ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3325
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3326
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3327
	You can enable pcap tracing on a particular node/net-device pair by providing a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3328
	``Ptr<NetDevice>`` to an ``EnablePcap`` method.  The ``Ptr<Node>`` is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3329
	implicit since the net device must belong to exactly one ``Node``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3330
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3331
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3332
Podemos ativar o rastreamento pcap em um par nó/dispositivo-rede específico provendo um ``Ptr<NetDevice>`` para um método ``EnablePcap``. O ``Ptr<Node>`` é implícito, pois o dispositivo de rede deve estar em um ``Node``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3333
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3334
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3335
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3336
  Ptr<NetDevice> nd;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3337
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3338
  helper.EnablePcap ("prefix", nd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3339
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3340
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3341
	You can enable pcap tracing on a particular node/net-device pair by providing a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3342
	``std::string`` representing an object name service string to an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3343
	``EnablePcap`` method.  The ``Ptr<NetDevice>`` is looked up from the name
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3344
	string.  Again, the ``<Node>`` is implicit since the named net device must 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3345
	belong to exactly one ``Node``.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3346
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3347
Podemos ativar o rastreamento pcap em um par nó/dispositivo-rede passando uma ``std::string`` que representa um nome de serviço para um método ``EnablePcap``. O ``Ptr<NetDevice>`` é buscado a partir do nome da `string`.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3348
Novamente, o ``Ptr<Node>`` é implícito pois o dispositivo de rede deve estar em um ``Node``. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3349
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3350
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3351
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3352
  Names::Add ("server" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3353
  Names::Add ("server/eth0" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3354
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3355
  helper.EnablePcap ("prefix", "server/eth0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3356
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3357
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3358
	You can enable pcap tracing on a collection of node/net-device pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3359
	providing a ``NetDeviceContainer``.  For each ``NetDevice`` in the container
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3360
	the type is checked.  For each device of the proper type (the same type as is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3361
	managed by the device helper), tracing is enabled.    Again, the ``<Node>`` is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3362
	implicit since the found net device must belong to exactly one ``Node``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3363
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3364
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3365
Podemos ativar o rastreamento pcap em uma coleção de pares nós/dispositivos usando um ``NetDeviceContainer``. Para cada ``NetDevice`` no contêiner o tipo é verificado. Para cada dispositivo com o tipo adequado, o rastreamento será ativado. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3366
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3367
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3368
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3369
  NetDeviceContainer d = ...;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3370
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3371
  helper.EnablePcap ("prefix", d);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3372
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3373
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3374
	You can enable pcap tracing on a collection of node/net-device pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3375
	providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3376
	its attached ``NetDevices`` are iterated.  For each ``NetDevice`` attached
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3377
	to each node in the container, the type of that device is checked.  For each 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3378
	device of the proper type (the same type as is managed by the device helper), 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3379
	tracing is enabled.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3380
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3381
Podemos ativar o rastreamento em uma coleção de pares nó/dispositivo-rede usando um ``NodeContainer``. Para cada ``Node`` no ``NodeContainer`` seus ``NetDevices`` são percorridos e verificados segundo o tipo. Para cada dispositivo com o tipo adequado, o rastreamento é ativado.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3382
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3383
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3384
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3385
  NodeContainer n;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3386
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3387
  helper.EnablePcap ("prefix", n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3388
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3389
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3390
	You can enable pcap tracing on the basis of node ID and device ID as well as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3391
	with explicit ``Ptr``.  Each ``Node`` in the system has an integer node ID
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3392
	and each device connected to a node has an integer device ID.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3393
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3394
Podemos ativar o rastreamento pcap usando o número identificador (`ID`) do nó e do dispositivo. Todo ``Node`` no sistema tem um valor inteiro indicando o `ID` do nó e todo dispositivo conectado ao nó tem um valor inteiro indicando o `ID` do dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3395
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3396
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3397
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3398
  helper.EnablePcap ("prefix", 21, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3399
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3400
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3401
	Finally, you can enable pcap tracing for all devices in the system, with the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3402
	same type as that managed by the device helper.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3403
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3404
Por fim, podemos ativar rastreamento pcap para todos os dispositivos no sistema, desde que o tipo seja o mesmo gerenciado pela classe assistentes de dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3405
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3406
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3407
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3408
  helper.EnablePcapAll ("prefix");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3409
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3410
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3411
	Pcap Tracing Device Helper Filename Selection
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3412
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3413
Seleção de um Nome de Arquivo para o Rastreamento Pcap da Classe Assistente de Dispositivo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3414
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3415
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3416
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3417
	Implicit in the method descriptions above is the construction of a complete 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3418
	filename by the implementation method.  By convention, pcap traces in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3419
	|ns3| system are of the form "<prefix>-<node id>-<device id>.pcap"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3420
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3421
Implícito nas descrições de métodos anteriores é a construção do nome de arquivo por meio do método da implementação. Por convenção, rastreamento pcap no |ns3| usa a forma "<prefixo>-<id do nó>-<id do dispositivo>.pcap"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3422
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3423
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3424
	As previously mentioned, every node in the system will have a system-assigned
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3425
	node id; and every device will have an interface index (also called a device id)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3426
	relative to its node.  By default, then, a pcap trace file created as a result
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3427
	of enabling tracing on the first device of node 21 using the prefix "prefix"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3428
	would be "prefix-21-1.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3429
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3430
Como mencionado, todo nó no sistema terá um `id` de nó associado; e todo dispositivo terá um índice de interface (também chamado de id do dispositivo) relativo ao seu nó. Por padrão, então, um arquivo pcap criado como um resultado de ativar rastreamento no primeiro dispositivo do nó 21 usando o prefixo "prefix" seria "prefix-21-1.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3431
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3432
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3433
	You can always use the |ns3| object name service to make this more clear.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3434
	For example, if you use the object name service to assign the name "server"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3435
	to node 21, the resulting pcap trace file name will automatically become,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3436
	"prefix-server-1.pcap" and if you also assign the name "eth0" to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3437
	device, your pcap file name will automatically pick this up and be called
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3438
	"prefix-server-eth0.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3439
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3440
Sempre podemos usar o serviço de nome de objeto do |ns3| para tornar isso mais claro. Por exemplo, se você usa o serviço para associar o nome "server" ao nó 21, o arquivo pcap resultante automaticamente será, "prefix-server-1.pcap" e se você também associar o nome "eth0" ao dispositivo, seu nome do arquivo pcap automaticamente será denominado "prefix-server-eth0.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3441
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3442
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3443
	Finally, two of the methods shown above,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3444
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3445
Finalmente, dois dos métodos mostrados, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3446
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3447
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3448
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3449
  void EnablePcap (std::string prefix, Ptr<NetDevice> nd, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3450
  		bool promiscuous = false, bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3451
  void EnablePcap (std::string prefix, std::string ndName, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3452
  		bool promiscuous = false, bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3453
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3454
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3455
	have a default parameter called ``explicitFilename``.  When set to true,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3456
	this parameter disables the automatic filename completion mechanism and allows
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3457
	you to create an explicit filename.  This option is only available in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3458
	methods which enable pcap tracing on a single device.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3459
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3460
tem um parâmetro padrão ``explicitFilename``. Quando modificado para verdadeiro, este parâmetro desabilita o mecanismo automático de completar o nome do arquivo e permite criarmos um nome de arquivo abertamente. Esta opção está disponível nos métodos que ativam o rastreamento pcap em um único dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3461
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3462
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3463
	For example, in order to arrange for a device helper to create a single 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3464
	promiscuous pcap capture file of a specific name ("my-pcap-file.pcap") on a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3465
	given device, one could:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3466
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3467
Por exemplo, com a finalidade providenciar uma classe assistente de dispositivo para criar um único arquivo de captura pcap no modo promíscuo com um nome específico ("my-pcap-file.pcap") em um determinado dispositivo:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3468
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3469
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3470
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3471
  Ptr<NetDevice> nd;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3472
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3473
  helper.EnablePcap ("my-pcap-file.pcap", nd, true, true);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3474
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3475
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3476
	The first ``true`` parameter enables promiscuous mode traces and the second
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3477
	tells the helper to interpret the ``prefix`` parameter as a complete filename.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3478
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3479
O primeiro parâmetro ``true`` habilita o modo de rastreamento promíscuo e o segundo faz com que o parâmetro ``prefix`` seja interpretado como um nome de arquivo completo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3480
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3481
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3482
	Ascii Tracing Device Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3483
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3484
Classes Assistentes de Dispositivo para Rastreamento ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3485
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3486
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3487
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3488
	The behavior of the ascii trace helper ``mixin`` is substantially similar to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3489
	the pcap version.  Take a look at ``src/network/helper/trace-helper.h`` if you want to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3490
	follow the discussion while looking at real code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3491
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3492
O comportamento do assistente  de rastreamento ASCII ``mixin`` é similar a versão do pcap. Acesse o arquivo ``src/network/helper/trace-helper.h`` para compreender melhor o funcionamento dessa classe assistente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3493
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3494
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3495
	The class ``AsciiTraceHelperForDevice`` adds the high level functionality for 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3496
	using ascii tracing to a device helper class.  As in the pcap case, every device
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3497
	must implement a single virtual method inherited from the ascii trace ``mixin``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3498
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3499
A classe ``AsciiTraceHelperForDevice`` adiciona funcionalidade em alto nível para usar o rastreamento ASCII para uma classe assistente de dispositivo. Como no caso do pcap, todo dispositivo deve implementar um método herdado do rastreador ASCII ``mixin``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3500
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3501
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3502
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3503
  virtual void EnableAsciiInternal (Ptr<OutputStreamWrapper> stream,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3504
		std::string prefix, Ptr<NetDevice> nd, bool explicitFilename) = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3505
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3506
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3507
	The signature of this method reflects the device-centric view of the situation
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3508
	at this level; and also the fact that the helper may be writing to a shared
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3509
	output stream.  All of the public ascii-trace-related methods inherited from 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3510
	class ``AsciiTraceHelperForDevice`` reduce to calling this single device-
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3511
	dependent implementation method.  For example, the lowest level ascii trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3512
	methods,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3513
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3514
A assinatura deste método reflete a visão do dispositivo da situação neste nível; e também o fato que o assistente pode ser escrito para um fluxo de saída compartilhado. Todos os métodos públicos associados ao rastreamento ASCII herdam da classe ``AsciiTraceHelperForDevice`` resumem-se a chamada deste único método dependente de implementação. Por exemplo, os métodos de rastreamento ASCII de mais baixo nível,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3515
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3516
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3517
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3518
  void EnableAscii (std::string prefix, Ptr<NetDevice> nd, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3519
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3520
  void EnableAscii (Ptr<OutputStreamWrapper> stream, Ptr<NetDevice> nd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3521
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3522
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3523
	will call the device implementation of ``EnableAsciiInternal`` directly,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3524
	providing either a valid prefix or stream.  All other public ascii tracing 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3525
	methods will build on these low-level functions to provide additional user-level
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3526
	functionality.  What this means to the user is that all device helpers in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3527
	system will have all of the ascii trace methods available; and these methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3528
	will all work in the same way across devices if the devices implement 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3529
	``EnablAsciiInternal`` correctly.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3530
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3531
chamarão uma implementação de ``EnableAsciiInternal`` diretamente, passando um prefixo ou fluxo válido. Todos os outros métodos públicos serão construídos a partir destas funções de baixo nível para fornecer funcionalidades adicionais em nível de usuário. Para o usuário, isso significa que todos os assistentes de
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3532
dispositivo no sistema terão todos os métodos de rastreamento ASCII disponíveis e estes métodos trabalharão do mesmo modo em todos os dispositivos se estes implementarem ``EnableAsciiInternal``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3533
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3534
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3535
	Ascii Tracing Device Helper Methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3536
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3537
Métodos da Classe Assistente de Dispositivo para Rastreamento  ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3538
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3539
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3540
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3541
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3542
  void EnableAscii (std::string prefix, Ptr<NetDevice> nd, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3543
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3544
  void EnableAscii (Ptr<OutputStreamWrapper> stream, Ptr<NetDevice> nd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3545
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3546
  void EnableAscii (std::string prefix, std::string ndName, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3547
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3548
  void EnableAscii (Ptr<OutputStreamWrapper> stream, std::string ndName);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3549
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3550
  void EnableAscii (std::string prefix, NetDeviceContainer d);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3551
  void EnableAscii (Ptr<OutputStreamWrapper> stream, NetDeviceContainer d);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3552
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3553
  void EnableAscii (std::string prefix, NodeContainer n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3554
  void EnableAscii (Ptr<OutputStreamWrapper> stream, NodeContainer n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3555
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3556
  void EnableAsciiAll (std::string prefix);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3557
  void EnableAsciiAll (Ptr<OutputStreamWrapper> stream);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3558
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3559
  void EnableAscii (std::string prefix, uint32_t nodeid, uint32_t deviceid, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3560
  		bool explicitFilename);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3561
  void EnableAscii (Ptr<OutputStreamWrapper> stream, uint32_t nodeid, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3562
  		uint32_t deviceid);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3563
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3564
..
8772
ce0699130fc4 Fix doxygen reference
Tom Henderson <tomh@tomh.org>
parents: 8771
diff changeset
  3565
	You are encouraged to peruse the Doxygen for class ``AsciiTraceHelperForDevice``
7751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3566
	to find the details of these methods; but to summarize ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3567
8772
ce0699130fc4 Fix doxygen reference
Tom Henderson <tomh@tomh.org>
parents: 8771
diff changeset
  3568
Para maiores detalhes sobre os métodos é interessante consultar a documentação para a classe ``AsciiTraceHelperForDevice``; mas para resumir ...
7751
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3569
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3570
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3571
	There are twice as many methods available for ascii tracing as there were for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3572
	pcap tracing.  This is because, in addition to the pcap-style model where traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3573
	from each unique node/device pair are written to a unique file, we support a model
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3574
	in which trace information for many node/device pairs is written to a common file.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3575
	This means that the <prefix>-<node>-<device> file name generation mechanism is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3576
	replaced by a mechanism to refer to a common file; and the number of API methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3577
	is doubled to allow all combinations.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3578
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3579
Há duas vezes mais métodos disponíveis para rastreamento ASCII que para rastreamento pcap. Isto ocorre pois para o modelo pcap os rastreamentos de cada par nó/dispositivo-rede são escritos para um único arquivo, enquanto que no ASCII todo as as informações são escritas para um arquivo comum. Isto significa que o mecanismo de geração de nomes de arquivos `<prefixo>-<nó>-<dispositivo>` é substituído por um mecanismo para referenciar um arquivo comum; e o número de métodos da API é duplicado para permitir todas as combinações.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3580
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3581
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3582
	Just as in pcap tracing, you can enable ascii tracing on a particular 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3583
	node/net-device pair by providing a ``Ptr<NetDevice>`` to an ``EnableAscii``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3584
	method.  The ``Ptr<Node>`` is implicit since the net device must belong to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3585
	exactly one ``Node``.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3586
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3587
Assim como no rastreamento pcap, podemos ativar o rastreamento ASCII em um par nó/dispositivo-rede passando um ``Ptr<NetDevice>`` para  um método ``EnableAscii``. O ``Ptr<Node>`` é implícito pois o dispositivo de rede deve pertencer a exatamente um ``Node``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3588
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3589
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3590
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3591
  Ptr<NetDevice> nd;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3592
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3593
  helper.EnableAscii ("prefix", nd);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3594
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3595
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3596
	The first four methods also include a default parameter called ``explicitFilename``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3597
	that operate similar to equivalent parameters in the pcap case.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3598
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3599
Os primeiros quatro métodos também incluem um parâmetro padrão ``explicitFilename`` que opera similar aos parâmetros no caso do pcap.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3600
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3601
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3602
	In this case, no trace contexts are written to the ascii trace file since they
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3603
	would be redundant.  The system will pick the file name to be created using
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3604
	the same rules as described in the pcap section, except that the file will
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3605
	have the suffix ".tr" instead of ".pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3606
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3607
Neste caso, nenhum contexto de rastreamento é escrito para o arquivo ASCII pois seriam redundantes. O sistema pegará o nome do arquivo para ser criado usando as mesmas regras como descritas na seção pcap, exceto que o arquivo terá o extensão ".tr" ao invés de ".pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3608
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3609
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3610
	If you want to enable ascii tracing on more than one net device and have all 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3611
	traces sent to a single file, you can do that as well by using an object to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3612
	refer to a single file.  We have already seen this in the "cwnd" example
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3613
	above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3614
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3615
Para habilitar o rastreamento ASCII em mais de um dispositivo de rede e ter todos os dados de rastreamento enviados para um único arquivo, pode-se usar um objeto para referenciar um único arquivo. Nós já verificamos isso no exemplo "cwnd":
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3616
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3617
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3618
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3619
  Ptr<NetDevice> nd1;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3620
  Ptr<NetDevice> nd2;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3621
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3622
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3623
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3624
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3625
  helper.EnableAscii (stream, nd1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3626
  helper.EnableAscii (stream, nd2);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3627
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3628
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3629
	In this case, trace contexts are written to the ascii trace file since they
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3630
	are required to disambiguate traces from the two devices.  Note that since the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3631
	user is completely specifying the file name, the string should include the ",tr"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3632
	for consistency.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3633
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3634
Neste caso, os contextos são escritos para o arquivo ASCII quando é necessário distinguir os dados de rastreamento de dois dispositivos. É interessante usar no nome do arquivo a extensão ".tr" por motivos de consistência.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3635
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3636
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3637
	You can enable ascii tracing on a particular node/net-device pair by providing a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3638
	``std::string`` representing an object name service string to an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3639
	``EnablePcap`` method.  The ``Ptr<NetDevice>`` is looked up from the name
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3640
	string.  Again, the ``<Node>`` is implicit since the named net device must 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3641
	belong to exactly one ``Node``.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3642
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3643
Podemos habilitar o rastreamento ASCII em um par nó/dispositivo-rede específico passando ao método ``EnableAscii`` uma ``std::string`` representando um nome no serviço de nomes de objetos. O ``Ptr<NetDevice>`` é obtido a partir do nome. Novamente, o ``<Node>`` é implícito pois o dispositivo de rede deve pertencer a exatamente um ``Node``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3644
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3645
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3646
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3647
  Names::Add ("client" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3648
  Names::Add ("client/eth0" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3649
  Names::Add ("server" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3650
  Names::Add ("server/eth0" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3651
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3652
  helper.EnableAscii ("prefix", "client/eth0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3653
  helper.EnableAscii ("prefix", "server/eth0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3654
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3655
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3656
	This would result in two files named "prefix-client-eth0.tr" and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3657
	"prefix-server-eth0.tr" with traces for each device in the respective trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3658
	file.  Since all of the EnableAscii functions are overloaded to take a stream wrapper,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3659
	you can use that form as well:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3660
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3661
Isto resultaria em dois nomes de arquivos - "prefix-client-eth0.tr" e "prefix-server-eth0.tr" - com os rastreamentos de cada dispositivo em  seu arquivo respectivo. Como todas as funções do ``EnableAscii`` são sobrecarregadas para suportar um *stream wrapper*, podemos usar da seguinte forma também:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3662
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3663
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3664
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3665
  Names::Add ("client" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3666
  Names::Add ("client/eth0" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3667
  Names::Add ("server" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3668
  Names::Add ("server/eth0" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3669
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3670
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3671
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3672
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3673
  helper.EnableAscii (stream, "client/eth0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3674
  helper.EnableAscii (stream, "server/eth0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3675
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3676
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3677
	This would result in a single trace file called "trace-file-name.tr" that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3678
	contains all of the trace events for both devices.  The events would be 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3679
	disambiguated by trace context strings.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3680
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3681
Isto resultaria em um único arquivo chamado "trace-file-name.tr" que contém todosos eventos rastreados para ambos os dispositivos. Os eventos seriam diferenciados por `strings` de contexto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3682
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3683
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3684
	You can enable ascii tracing on a collection of node/net-device pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3685
	providing a ``NetDeviceContainer``.  For each ``NetDevice`` in the container
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3686
	the type is checked.  For each device of the proper type (the same type as is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3687
	managed by the device helper), tracing is enabled.    Again, the ``<Node>`` is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3688
	implicit since the found net device must belong to exactly one ``Node``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3689
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3690
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3691
Podemos habilitar o rastreamento ASCII em um coleção de pares nó/dispositivo-rede fornecendo um ``NetDeviceContainer``. Para cada ``NetDevice`` no contêiner o tipo é verificado. Para cada dispositivo de um tipo adequado (o mesmo tipo que é gerenciado por uma classe assistente de dispositivo), o rastreamento é habilitado. Novamente, o ``<Node>`` é implícito pois o dispositivo de rede encontrado deve pertencer a exatamente um ``Node``. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3692
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3693
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3694
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3695
  NetDeviceContainer d = ...;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3696
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3697
  helper.EnableAscii ("prefix", d);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3698
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3699
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3700
	This would result in a number of ascii trace files being created, each of which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3701
	follows the <prefix>-<node id>-<device id>.tr convention.  Combining all of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3702
	traces into a single file is accomplished similarly to the examples above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3703
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3704
Isto resultaria em vários arquivos de rastreamento ASCII sendo criados, cada um seguindo a convenção ``<prefixo>-<id do nó>-<id do dispositivo>.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3705
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3706
Para obtermos um único arquivo teríamos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3707
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3708
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3709
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3710
  NetDeviceContainer d = ...;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3711
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3712
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3713
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3714
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3715
  helper.EnableAscii (stream, d);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3716
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3717
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3718
	You can enable ascii tracing on a collection of node/net-device pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3719
	providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3720
	its attached ``NetDevices`` are iterated.  For each ``NetDevice`` attached
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3721
	to each node in the container, the type of that device is checked.  For each 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3722
	device of the proper type (the same type as is managed by the device helper), 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3723
	tracing is enabled.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3724
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3725
Podemos habilitar o rastreamento ASCII em um coleção de pares nó/dispositivo-rede fornecendo um ``NodeContainer``. Para cada ``Node`` no ``NodeContainer``, os seus ``NetDevices`` são percorridos. Para cada ``NetDevice`` associado a cada nó no contêiner, o tipo do dispositivo é verificado. Para cada dispositivo do tipo adequado (o mesmo tipo que é gerenciado pelo assistente de dispositivo), o rastreamento é habilitado.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3726
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3727
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3728
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3729
  NodeContainer n;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3730
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3731
  helper.EnableAscii ("prefix", n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3732
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3733
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3734
	This would result in a number of ascii trace files being created, each of which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3735
	follows the <prefix>-<node id>-<device id>.tr convention.  Combining all of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3736
	traces into a single file is accomplished similarly to the examples above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3737
		
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3738
Isto resultaria em vários arquivos ASCII sendo criados, cada um seguindo a convenção ``<prefixo>-<id do nó>-<id do dispositivo>.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3739
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3740
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3741
	You can enable pcap tracing on the basis of node ID and device ID as well as
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3742
	with explicit ``Ptr``.  Each ``Node`` in the system has an integer node ID
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3743
	and each device connected to a node has an integer device ID.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3744
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3745
Podemos habilitar o rastreamento pcap na base da `ID` do nó e `ID` do dispositivo tão bem como com um ``Ptr``. Cada ``Node`` no sistema possui um número identificador inteiro associado ao nó e cada dispositivo conectado possui um número identificador inteiro associado ao dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3746
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3747
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3748
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3749
  helper.EnableAscii ("prefix", 21, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3750
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3751
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3752
	Of course, the traces can be combined into a single file as shown above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3753
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3754
Os rastreamentos podem ser combinados em um único arquivo como mostrado acima.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3755
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3756
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3757
	Finally, you can enable pcap tracing for all devices in the system, with the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3758
	same type as that managed by the device helper.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3759
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3760
Finalmente, podemos habilitar o rastreamento ASCII para todos os dispositivos no sistema.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3761
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3762
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3763
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3764
  helper.EnableAsciiAll ("prefix");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3765
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3766
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3767
	This would result in a number of ascii trace files being created, one for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3768
	every device in the system of the type managed by the helper.  All of these
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3769
	files will follow the <prefix>-<node id>-<device id>.tr convention.  Combining
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3770
	all of the traces into a single file is accomplished similarly to the examples
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3771
	above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3772
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3773
Isto resultaria em vários arquivos ASCII sendo criados, um para cada dispositivo no sistema do tipo gerenciado pelo assistente. Todos estes arquivos seguiriam a convenção ``<prefixo>-<id do nó>-<id do dispositivo>.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3774
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3775
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3776
	Ascii Tracing Device Helper Filename Selection
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3777
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3778
Selecionando Nome de Arquivo para as Saídas ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3779
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3780
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3781
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3782
	Implicit in the prefix-style method descriptions above is the construction of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3783
	complete filenames by the implementation method.  By convention, ascii traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3784
	in the |ns3| system are of the form "<prefix>-<node id>-<device id>.tr"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3785
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3786
Implícito nas descrições de métodos anteriores é a construção do nome de arquivo por meio do método da implementação. Por convenção, rastreamento ASCII no |ns3| usa a forma "``<prefixo>-<id do nó>-<id do dispositivo>.tr``".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3787
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3788
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3789
	As previously mentioned, every node in the system will have a system-assigned
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3790
	node id; and every device will have an interface index (also called a device id)
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3791
	relative to its node.  By default, then, an ascii trace file created as a result
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3792
	of enabling tracing on the first device of node 21, using the prefix "prefix",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3793
	would be "prefix-21-1.tr".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3794
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3795
Como mencionado, todo nó no sistema terá um `id` de nó associado; e todo dispositivo terá um índice de interface (também chamado de id do dispositivo) relativo ao seu nó. Por padrão, então, um arquivo ASCII criado como um resultado de ativar rastreamento no primeiro dispositivo do nó 21 usando o prefixo "prefix" seria "prefix-21-1.tr".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3796
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3797
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3798
	You can always use the |ns3| object name service to make this more clear.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3799
	For example, if you use the object name service to assign the name "server"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3800
	to node 21, the resulting ascii trace file name will automatically become,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3801
	"prefix-server-1.tr" and if you also assign the name "eth0" to the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3802
	device, your ascii trace file name will automatically pick this up and be called
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3803
	"prefix-server-eth0.tr".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3804
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3805
Sempre podemos usar o serviço de nome de objeto do |ns3| para tornar isso mais claro. Por exemplo, se usarmos o serviço para associar o nome ``server`` ao nó 21, o arquivo ASCII resultante automaticamente será, ``prefix-server-1.tr`` e se também associarmos o nome ``eth0`` ao dispositivo, o nome do arquivo ASCII automaticamente será denominado ``prefix-server-eth0.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3806
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3807
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3808
	Several of the methods have a default parameter called ``explicitFilename``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3809
	When set to true, this parameter disables the automatic filename completion 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3810
	mechanism and allows you to create an explicit filename.  This option is only
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3811
	available in the methods which take a prefix and enable tracing on a single device.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3812
	
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3813
Diversos métodos tem um parâmetro padrão ``explicitFilename``. Quando modificado para verdadeiro, este parâmetro desabilita o mecanismo automático de completar o nome do arquivo e permite criarmos um nome de arquivo abertamente. Esta opção está disponível nos métodos que possuam um prefixo e ativem o rastreamento em um único dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3814
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3815
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3816
	Pcap Tracing Protocol Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3817
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3818
Classes Assistentes de Protocolo para Rastreamento Pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3819
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3820
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3821
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3822
	The goal of these ``mixins`` is to make it easy to add a consistent pcap trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3823
	facility to protocols.  We want all of the various flavors of pcap tracing to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3824
	work the same across all protocols, so the methods of these helpers are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3825
	inherited by stack helpers.  Take a look at ``src/network/helper/trace-helper.h``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3826
	if you want to follow the discussion while looking at real code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3827
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3828
O objetivo destes ``mixins`` é facilitar a adição de um mecanismo consistente para da facilidade de rastreamento para protocolos. Queremos que todos os mecanismos de rastreamento para todos os protocolos operem de mesma forma, logo os métodos dessas classe assistentes são herdados por assistentes de pilha. Acesse ``src/network/helper/trace-helper.h`` para acompanhar o conteúdo discutido nesta seção.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3829
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3830
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3831
	In this section we will be illustrating the methods as applied to the protocol
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3832
	``Ipv4``.  To specify traces in similar protocols, just substitute the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3833
	appropriate type.  For example, use a ``Ptr<Ipv6>`` instead of a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3834
	``Ptr<Ipv4>`` and call ``EnablePcapIpv6`` instead of ``EnablePcapIpv4``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3835
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3836
Nesta seção ilustraremos os métodos aplicados ao protocolo ``Ipv4``. Para especificar rastreamentos em protocolos similares, basta substituir pelo tipo apropriado. Por exemplo, use um ``Ptr<Ipv6>`` ao invés de um ``Ptr<Ipv4>`` e chame um ``EnablePcapIpv6`` ao invés de ``EnablePcapIpv4``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3837
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3838
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3839
	The class ``PcapHelperForIpv4`` provides the high level functionality for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3840
	using pcap tracing in the ``Ipv4`` protocol.  Each protocol helper enabling these
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3841
	methods must implement a single virtual method inherited from this class.  There
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3842
	will be a separate implementation for ``Ipv6``, for example, but the only
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3843
	difference will be in the method names and signatures.  Different method names
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3844
	are required to disambiguate class ``Ipv4`` from ``Ipv6`` which are both 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3845
	derived from class ``Object``, and methods that share the same signature.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3846
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3847
A classe ``PcapHelperForIpv4`` provê funcionalidade de alto nível para usar rastreamento no protocolo ``Ipv4``. Cada classe assistente de protocolo devem implementar um método herdado desta. Haverá uma implementação separada para ``Ipv6``, por exemplo, mas a diferença será apenas nos nomes dos métodos e assinaturas. Nomes de métodos diferentes são necessário para distinguir a classe ``Ipv4`` da ``Ipv6``, pois ambas são derivadas da classe ``Object``, logo os métodos compartilham a mesma assinatura.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3848
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3849
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3850
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3851
  virtual void EnablePcapIpv4Internal (std::string prefix, Ptr<Ipv4> ipv4, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3852
  		uint32_t interface, bool explicitFilename) = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3853
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3854
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3855
	The signature of this method reflects the protocol and interface-centric view 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3856
	of the situation at this level.  All of the public methods inherited from class 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3857
	``PcapHelperForIpv4`` reduce to calling this single device-dependent
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3858
	implementation method.  For example, the lowest level pcap method,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3859
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3860
A assinatura desse método reflete a visão do protocolo e interface da situação neste nível. Todos os métodos herdados da classe ``PcapHelperForIpv4`` resumem-se a chamada deste único método dependente de dispositivo. Por exemplo, o método do pcap de mais baixo nível, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3861
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3862
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3863
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3864
  void EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3865
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3866
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3867
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3868
	will call the device implementation of ``EnablePcapIpv4Internal`` directly.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3869
	All other public pcap tracing methods build on this implementation to provide 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3870
	additional user-level functionality.  What this means to the user is that all 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3871
	protocol helpers in the system will have all of the pcap trace methods 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3872
	available; and these methods will all work in the same way across 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3873
	protocols if the helper implements ``EnablePcapIpv4Internal`` correctly.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3874
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3875
chamará a implementação de dispositivo de ``EnablePcapIpv4Internal`` diretamente. Todos os outros métodos públicos de rastreamento pcap  são construídos a partir desta implementação para prover funcionalidades adicionais em nível do usuário. Para o usuário, isto significa que todas as classes assistentes de dispositivo no sistema terão todos os métodos de rastreamento pcap disponíveis; e estes métodos trabalharão da mesma forma entre dispositivos se o dispositivo implementar corretamente ``EnablePcapIpv4Internal``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3876
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3877
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3878
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3879
	Pcap Tracing Protocol Helper Methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3880
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3881
Métodos da Classe Assistente de Protocolo para Rastreamento Pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3882
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3883
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3884
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3885
	These methods are designed to be in one-to-one correspondence with the ``Node``-
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3886
	and ``NetDevice``- centric versions of the device versions.  Instead of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3887
	``Node`` and ``NetDevice`` pair constraints, we use protocol and interface
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3888
	constraints.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3889
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3890
Estes métodos são projetados para terem correspondência de um-para-um com o ``Node`` e ``NetDevice``. Ao invés de restrições de pares ``Node`` e ``NetDevice``, usamos restrições de protocolo e interface.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3891
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3892
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3893
	Note that just like in the device version, there are six methods:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3894
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3895
Note que como na versão de dispositivo, há seis métodos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3896
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3897
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3898
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3899
  void EnablePcapIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3900
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3901
  void EnablePcapIpv4 (std::string prefix, std::string ipv4Name, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3902
  		uint32_t interface, bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3903
  void EnablePcapIpv4 (std::string prefix, Ipv4InterfaceContainer c);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3904
  void EnablePcapIpv4 (std::string prefix, NodeContainer n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3905
  void EnablePcapIpv4 (std::string prefix, uint32_t nodeid, uint32_t interface, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3906
  		bool explicitFilename);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3907
  void EnablePcapIpv4All (std::string prefix);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3908
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3909
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3910
	You are encouraged to peruse the Doxygen for class ``PcapHelperForIpv4``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3911
	to find the details of these methods; but to summarize ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3912
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3913
Para maiores detalhes sobre estes métodos é interessante consultar na documentação da classe ``PcapHelperForIpv4``, mas para resumir ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3914
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3915
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3916
	You can enable pcap tracing on a particular protocol/interface pair by providing a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3917
	``Ptr<Ipv4>`` and ``interface`` to an ``EnablePcap`` method.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3918
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3919
Podemos habilitar o rastreamento pcap em um par protocolo/interface  passando um ``Ptr<Ipv4>`` e ``interface`` para um método ``EnablePcap``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3920
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3921
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3922
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3923
  Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3924
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3925
  helper.EnablePcapIpv4 ("prefix", ipv4, 0);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3926
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3927
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3928
	You can enable pcap tracing on a particular node/net-device pair by providing a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3929
	``std::string`` representing an object name service string to an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3930
	``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the name
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3931
	string.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3932
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3933
Podemos ativar o rastreamento pcap em um par protocolo/interface passando uma ``std::string`` que representa um nome de serviço para um método ``EnablePcapIpv4``. O ``Ptr<Ipv4>`` é buscado a partir do nome da `string`.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3934
Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3935
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3936
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3937
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3938
  Names::Add ("serverIPv4" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3939
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3940
  helper.EnablePcapIpv4 ("prefix", "serverIpv4", 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3941
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3942
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3943
	You can enable pcap tracing on a collection of protocol/interface pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3944
	providing an ``Ipv4InterfaceContainer``.  For each ``Ipv4`` / interface
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3945
	pair in the container the protocol type is checked.  For each protocol of the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3946
	proper type (the same type as is managed by the device helper), tracing is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3947
	enabled for the corresponding interface.  For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3948
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3949
Podemos ativar o rastreamento pcap em uma coleção de pares protocolo/interface usando um ``Ipv4InterfaceContainer``. Para cada par``Ipv4``/interface no contêiner o tipo do protocolo é verificado. Para cada protocolo do tipo adequado, o rastreamento é ativado para a interface correspondente. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3950
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3951
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3952
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3953
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3954
  NodeContainer nodes;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3955
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3956
  NetDeviceContainer devices = deviceHelper.Install (nodes);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3957
  ... 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3958
  Ipv4AddressHelper ipv4;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3959
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3960
  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3961
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3962
  helper.EnablePcapIpv4 ("prefix", interfaces);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3963
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3964
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3965
	You can enable pcap tracing on a collection of protocol/interface pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3966
	providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3967
	the appropriate protocol is found.  For each protocol, its interfaces are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3968
	enumerated and tracing is enabled on the resulting pairs.  For example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3969
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3970
Podemos ativar o rastreamento em uma coleção de pares protocolo/interface usando um ``NodeContainer``. Para cada ``Node`` no ``NodeContainer`` o protocolo apropriado é encontrado. Para cada protocolo, suas interfaces são enumeradas e o rastreamento é ativado nos pares resultantes. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3971
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3972
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3973
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3974
  NodeContainer n;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3975
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3976
  helper.EnablePcapIpv4 ("prefix", n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3977
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3978
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3979
	You can enable pcap tracing on the basis of node ID and interface as well.  In
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3980
	this case, the node-id is translated to a ``Ptr<Node>`` and the appropriate
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3981
	protocol is looked up in the node.  The resulting protocol and interface are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3982
	used to specify the resulting trace source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3983
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3984
Pode ativar o rastreamento pcap usando o número identificador do nó e da interface. Neste caso, o `ID` do nó é traduzido para um ``Ptr<Node>`` e o protocolo apropriado é buscado no nó. O protocolo e interface resultante são usados para especificar a origem do rastreamento resultante.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3985
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3986
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3987
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3988
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3989
  helper.EnablePcapIpv4 ("prefix", 21, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3990
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3991
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3992
	Finally, you can enable pcap tracing for all interfaces in the system, with
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3993
	associated protocol being the same type as that managed by the device helper.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3994
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3995
Por fim, podemos ativar rastreamento pcap para todas as interfaces no sistema, desde que o protocolo seja do mesmo tipo gerenciado pela classe assistente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3996
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3997
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3998
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  3999
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4000
  helper.EnablePcapIpv4All ("prefix");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4001
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4002
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4003
	Pcap Tracing Protocol Helper Filename Selection
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4004
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4005
Seleção de um Nome de Arquivo para o Rastreamento Pcap da Classe Assistente de Protocolo
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4006
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4007
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4008
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4009
	Implicit in all of the method descriptions above is the construction of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4010
	complete filenames by the implementation method.  By convention, pcap traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4011
	taken for devices in the |ns3| system are of the form 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4012
	"<prefix>-<node id>-<device id>.pcap".  In the case of protocol traces,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4013
	there is a one-to-one correspondence between protocols and ``Nodes``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4014
	This is because protocol ``Objects`` are aggregated to ``Node Objects``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4015
	Since there is no global protocol id in the system, we use the corresponding
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4016
	node id in file naming.  Therefore there is a possibility for file name 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4017
	collisions in automatically chosen trace file names.  For this reason, the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4018
	file name convention is changed for protocol traces.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4019
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4020
Implícito nas descrições de métodos anterior é a construção do nome de arquivo por meio do método da implementação. Por convenção, rastreamento pcap no |ns3| usa a forma ``<prefixo>-<id do nó>-<id do dispositivo>.pcap``. No caso de rastreamento de protocolos, há uma correspondência de um-para-um entre protocolos e ``Nodes``. Isto porque ``Objects`` de protocolo são agregados a `Node Objects``. Como não há um `id` global de protocolo no sistema, usamos o `ID` do nó na nomeação do arquivo. Consequentemente há possibilidade de colisão de nomes quando usamos o sistema automático de nomes. Por esta razão, a convenção de nome de arquivo é modificada para rastreamentos de protocolos.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4021
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4022
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4023
	As previously mentioned, every node in the system will have a system-assigned
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4024
	node id.  Since there is a one-to-one correspondence between protocol instances
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4025
	and node instances we use the node id.  Each interface has an interface id 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4026
	relative to its protocol.  We use the convention 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4027
	"<prefix>-n<node id>-i<interface id>.pcap" for trace file naming in protocol
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4028
	helpers.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4029
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4030
Como mencionado, todo nó no sistema terá um `id` de nó associado. Como há uma correspondência de um-para-um entre instâncias de protocolo e instâncias de nó, usamos o `id` de nó. Cada interface tem um `id` de interface relativo ao seu protocolo. Usamos a convenção "<prefixo>-n<id do nó>-i<id da interface>.pcap" para especificar o nome do arquivo de rastreamento para as classes assistentes de protocolo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4031
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4032
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4033
	Therefore, by default, a pcap trace file created as a result of enabling tracing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4034
	on interface 1 of the Ipv4 protocol of node 21 using the prefix "prefix"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4035
	would be "prefix-n21-i1.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4036
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4037
Consequentemente, por padrão, uma arquivo pcap criado como um resultado da ativação de rastreamento na interface 1 do protocolo ipv4 do nó 21 usando o prefixo ``prefix`` seria ``prefix-n21-i1.pcap``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4038
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4039
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4040
	You can always use the |ns3| object name service to make this more clear.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4041
	For example, if you use the object name service to assign the name "serverIpv4"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4042
	to the Ptr<Ipv4> on node 21, the resulting pcap trace file name will 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4043
	automatically become, "prefix-nserverIpv4-i1.pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4044
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4045
Sempre podemos usar o serviço de nomes de objetos do |ns3| para tornar isso mais claro. Por exemplo, se usamos o serviço de nomes  para associar o nome "serverIpv4" ao Ptr<Ipv4> no nó 21, o nome de arquivo resultante seria ``prefix-nserverIpv4-i1.pcap``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4046
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4047
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4048
	Several of the methods have a default parameter called ``explicitFilename``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4049
	When set to true, this parameter disables the automatic filename completion 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4050
	mechanism and allows you to create an explicit filename.  This option is only
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4051
	available in the methods which take a prefix and enable tracing on a single device.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4052
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4053
Diversos métodos tem um parâmetro padrão ``explicitFilename``. Quando modificado para verdadeiro, este parâmetro desabilita o mecanismo automático de completar o nome do arquivo e permite criarmos um nome de arquivo abertamente. Esta opção está disponível nos métodos que  ativam o rastreamento pcap em um único dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4054
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4055
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4056
	Ascii Tracing Protocol Helpers
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4057
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4058
Classes Assistentes de Protocolo para Rastreamento ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4059
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4060
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4061
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4062
	The behavior of the ascii trace helpers is substantially similar to the pcap
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4063
	case.  Take a look at ``src/network/helper/trace-helper.h`` if you want to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4064
	follow the discussion while looking at real code.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4065
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4066
O comportamento dos assistentes de rastreamento ASCII é similar ao do pcap. Acesse o arquivo ``src/network/helper/trace-helper.h`` para compreender melhor o funcionamento dessa classe assistente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4067
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4068
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4069
	In this section we will be illustrating the methods as applied to the protocol
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4070
	``Ipv4``.  To specify traces in similar protocols, just substitute the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4071
	appropriate type.  For example, use a ``Ptr<Ipv6>`` instead of a
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4072
	``Ptr<Ipv4>`` and call ``EnableAsciiIpv6`` instead of ``EnableAsciiIpv4``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4073
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4074
Nesta seção apresentamos os métodos aplicados ao protocolo ``Ipv4``. Para protocolos similares apenas substitua para o tipo apropriado. Por exemplo, use um ``Ptr<Ipv6>`` ao invés de um  ``Ptr<Ipv4>`` e chame ``EnableAsciiIpv6`` ao invés de ``EnableAsciiIpv4``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4075
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4076
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4077
	The class ``AsciiTraceHelperForIpv4`` adds the high level functionality
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4078
	for using ascii tracing to a protocol helper.  Each protocol that enables these
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4079
	methods must implement a single virtual method inherited from this class.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4080
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4081
A classe ``AsciiTraceHelperForIpv4`` adiciona funcionalidade de alto nível para usar rastreamento ASCII para um assistente de protocolo. Todo protocolo que usa estes métodos deve implementar um método herdado desta classe. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4082
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4083
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4084
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4085
  virtual void EnableAsciiIpv4Internal (Ptr<OutputStreamWrapper> stream, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4086
                                        std::string prefix, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4087
                                        Ptr<Ipv4> ipv4, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4088
                                        uint32_t interface,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4089
                                        bool explicitFilename) = 0;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4090
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4091
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4092
	The signature of this method reflects the protocol- and interface-centric view 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4093
	of the situation at this level; and also the fact that the helper may be writing
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4094
	to a shared output stream.  All of the public methods inherited from class 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4095
	``PcapAndAsciiTraceHelperForIpv4`` reduce to calling this single device-
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4096
	dependent implementation method.  For example, the lowest level ascii trace
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4097
	methods,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4098
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4099
A assinatura deste método reflete a visão central do protocolo e interface da situação neste nível; e também o fato que o assistente pode ser escrito para um fluxo de saída compartilhado. Todos os métodos públicos herdados desta classe ``PcapAndAsciiTraceHelperForIpv4`` resumem-se a chamada deste único método dependente de implementação. Por exemplo, os métodos de rastreamento ASCII de mais baixo nível,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4100
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4101
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4102
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4103
  void EnableAsciiIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4104
  		bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4105
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, Ptr<Ipv4> ipv4, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4106
  		uint32_t interface);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4107
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4108
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4109
	will call the device implementation of ``EnableAsciiIpv4Internal`` directly,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4110
	providing either the prefix or the stream.  All other public ascii tracing 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4111
	methods will build on these low-level functions to provide additional user-level
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4112
	functionality.  What this means to the user is that all device helpers in the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4113
	system will have all of the ascii trace methods available; and these methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4114
	will all work in the same way across protocols if the protocols implement 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4115
	``EnablAsciiIpv4Internal`` correctly.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4116
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4117
chamarão uma implementação de ``EnableAsciiIpv4Internal`` diretamente, passando um prefixo ou fluxo válido. Todos os outros métodos públicos serão construídos a partir destas funções de baixo nível para fornecer funcionalidades adicionais em nível de usuário. Para o usuário, isso significa que todos os assistentes de protocolos no sistema terão todos os métodos de rastreamento ASCII disponíveis e estes métodos trabalharão do mesmo modo em todos os protocolos se estes implementarem ``EnableAsciiIpv4Internal``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4118
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4119
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4120
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4121
	Ascii Tracing Protocol Helper Methods
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4122
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4123
Métodos da Classe Assistente de Protocolo para Rastreamento ASCII
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4124
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4125
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4126
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4127
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4128
  void EnableAsciiIpv4 (std::string prefix, Ptr<Ipv4> ipv4, uint32_t interface, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4129
                        bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4130
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, Ptr<Ipv4> ipv4,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4131
                        uint32_t interface);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4132
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4133
  void EnableAsciiIpv4 (std::string prefix, std::string ipv4Name, uint32_t interface,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4134
                        bool explicitFilename = false);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4135
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, std::string ipv4Name,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4136
                        uint32_t interface);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4137
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4138
  void EnableAsciiIpv4 (std::string prefix, Ipv4InterfaceContainer c);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4139
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, Ipv4InterfaceContainer c);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4140
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4141
  void EnableAsciiIpv4 (std::string prefix, NodeContainer n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4142
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, NodeContainer n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4143
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4144
  void EnableAsciiIpv4All (std::string prefix);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4145
  void EnableAsciiIpv4All (Ptr<OutputStreamWrapper> stream);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4146
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4147
  void EnableAsciiIpv4 (std::string prefix, uint32_t nodeid, uint32_t deviceid,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4148
                        bool explicitFilename);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4149
  void EnableAsciiIpv4 (Ptr<OutputStreamWrapper> stream, uint32_t nodeid, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4150
                        uint32_t interface);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4151
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4152
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4153
	You are encouraged to peruse the Doxygen for class ``PcapAndAsciiHelperForIpv4``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4154
	to find the details of these methods; but to summarize ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4155
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4156
Para maiores detalhes sobre os métodos consulte na documentação a classe ``PcapAndAsciiHelperForIpv4``; mas para resumir ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4157
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4158
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4159
	There are twice as many methods available for ascii tracing as there were for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4160
	pcap tracing.  This is because, in addition to the pcap-style model where traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4161
	from each unique protocol/interface pair are written to a unique file, we 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4162
	support a model in which trace information for many protocol/interface pairs is 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4163
	written to a common file.  This means that the <prefix>-n<node id>-<interface>
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4164
	file name generation mechanism is replaced by a mechanism to refer to a common 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4165
	file; and the number of API methods is doubled to allow all combinations.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4166
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4167
Há duas vezes mais métodos disponíveis para rastreamento ASCII que para rastreamento pcap. Isto ocorre pois para o modelo pcap os rastreamentos de cada par protocolo/interface são escritos para um único arquivo, enquanto que no ASCII todo as as informações são escritas para um arquivo comum. Isto significa que o mecanismo de geração de nomes de arquivos "<prefixo>-n<id do nó>-i<interface>" é substituído por um mecanismo para referenciar um arquivo comum; e o número de métodos da API é duplicado para permitir todas as combinações.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4168
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4169
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4170
	Just as in pcap tracing, you can enable ascii tracing on a particular 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4171
	protocol/interface pair by providing a ``Ptr<Ipv4>`` and an ``interface``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4172
	to an ``EnableAscii`` method.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4173
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4174
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4175
Assim, como no rastreamento pcap, podemos ativar o rastreamento ASCII em um par protocolo/interface passando um ``Ptr<Ipv4>`` e uma ``interface`` para  um método ``EnableAsciiIpv4``. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4176
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4177
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4178
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4179
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4180
  Ptr<Ipv4> ipv4;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4181
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4182
  helper.EnableAsciiIpv4 ("prefix", ipv4, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4183
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4184
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4185
	In this case, no trace contexts are written to the ascii trace file since they
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4186
	would be redundant.  The system will pick the file name to be created using
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4187
	the same rules as described in the pcap section, except that the file will
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4188
	have the suffix ".tr" instead of ".pcap".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4189
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4190
Neste caso, nenhum contexto de rastreamento é escrito para o arquivo ASCII pois seriam redundantes. O sistema pegará o nome do arquivo para ser criado usando as mesmas regras como descritas na seção pcap, exceto que o arquivo terá o extensão ``.tr`` ao invés de ``.pcap``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4191
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4192
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4193
	If you want to enable ascii tracing on more than one interface and have all 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4194
	traces sent to a single file, you can do that as well by using an object to
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4195
	refer to a single file.  We have already something similar to this in the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4196
	"cwnd" example above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4197
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4198
Para habilitar o rastreamento ASCII em mais de uma interface e ter todos os dados de rastreamento enviados para um único arquivo, pode-se usar um objeto para referenciar um único arquivo. Nós já verificamos isso no exemplo "cwnd":
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4199
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4200
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4201
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4202
  Ptr<Ipv4> protocol1 = node1->GetObject<Ipv4> ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4203
  Ptr<Ipv4> protocol2 = node2->GetObject<Ipv4> ();
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4204
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4205
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4206
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4207
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4208
  helper.EnableAsciiIpv4 (stream, protocol1, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4209
  helper.EnableAsciiIpv4 (stream, protocol2, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4210
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4211
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4212
	In this case, trace contexts are written to the ascii trace file since they
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4213
	are required to disambiguate traces from the two interfaces.  Note that since 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4214
	the user is completely specifying the file name, the string should include the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4215
	",tr" for consistency.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4216
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4217
Neste caso, os contextos são escritos para o arquivo ASCII quando é necessário distinguir os dados de rastreamento de duas interfaces. É interessante usar no nome do arquivo a extensão ``.tr`` por motivos de consistência.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4218
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4219
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4220
	You can enable ascii tracing on a particular protocol by providing a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4221
	``std::string`` representing an object name service string to an 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4222
	``EnablePcap`` method.  The ``Ptr<Ipv4>`` is looked up from the name
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4223
	string.  The ``<Node>`` in the resulting filenames is implicit since there
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4224
	is a one-to-one correspondence between protocol instances and nodes,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4225
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4226
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4227
Pode habilitar o rastreamento ASCII em protocolo específico passando ao método ``EnableAsciiIpv4`` uma ``std::string`` representando um nome no serviço de nomes de objetos. O ``Ptr<Ipv4>`` é obtido a partir do nome. O ``<Node>`` é implícito, pois há uma correspondência de um-para-um entre instancias de protocolos e nós. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4228
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4229
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4230
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4231
  Names::Add ("node1Ipv4" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4232
  Names::Add ("node2Ipv4" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4233
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4234
  helper.EnableAsciiIpv4 ("prefix", "node1Ipv4", 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4235
  helper.EnableAsciiIpv4 ("prefix", "node2Ipv4", 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4236
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4237
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4238
	This would result in two files named "prefix-nnode1Ipv4-i1.tr" and 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4239
	"prefix-nnode2Ipv4-i1.tr" with traces for each interface in the respective 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4240
	trace file.  Since all of the EnableAscii functions are overloaded to take a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4241
	stream wrapper, you can use that form as well:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4242
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4243
Isto resultaria em dois nomes de arquivos ``prefix-nnode1Ipv4-i1.tr`` e ``prefix-nnode2Ipv4-i1.tr``, com os rastreamentos de cada interface em  seu arquivo respectivo. Como todas as funções do ``EnableAsciiIpv4`` são sobrecarregadas para suportar um *stream wrapper*, podemos usar da seguinte forma também:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4244
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4245
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4246
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4247
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4248
  Names::Add ("node1Ipv4" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4249
  Names::Add ("node2Ipv4" ...);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4250
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4251
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4252
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4253
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4254
  helper.EnableAsciiIpv4 (stream, "node1Ipv4", 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4255
  helper.EnableAsciiIpv4 (stream, "node2Ipv4", 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4256
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4257
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4258
	This would result in a single trace file called "trace-file-name.tr" that 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4259
	contains all of the trace events for both interfaces.  The events would be 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4260
	disambiguated by trace context strings.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4261
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4262
Isto resultaria em um único arquivo chamado ``trace-file-name.tr`` que contém todos os eventos rastreados para ambas as interfaces. Os eventos seriam diferenciados por `strings` de contexto.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4263
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4264
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4265
	You can enable ascii tracing on a collection of protocol/interface pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4266
	providing an ``Ipv4InterfaceContainer``.  For each protocol of the proper 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4267
	type (the same type as is managed by the device helper), tracing is enabled
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4268
	for the corresponding interface.  Again, the ``<Node>`` is implicit since 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4269
	there is a one-to-one correspondence between each protocol and its node.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4270
	For example, 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4271
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4272
Podemos habilitar o rastreamento ASCII em um coleção de pares protocolo/interface provendo um ``Ipv4InterfaceContainer``. Para cada protocolo no contêiner o tipo é verificado. Para cada protocolo do tipo adequado (o mesmo tipo que é gerenciado por uma classe assistente de protocolo), o rastreamento é habilitado para a interface correspondente. Novamente, o ``<Node>`` é implícito, pois há uma correspondência de um-para-um entre protocolo e seu nó. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4273
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4274
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4275
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4276
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4277
  NodeContainer nodes;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4278
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4279
  NetDeviceContainer devices = deviceHelper.Install (nodes);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4280
  ... 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4281
  Ipv4AddressHelper ipv4;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4282
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4283
  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4284
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4285
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4286
  helper.EnableAsciiIpv4 ("prefix", interfaces);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4287
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4288
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4289
	This would result in a number of ascii trace files being created, each of which
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4290
	follows the <prefix>-n<node id>-i<interface>.tr convention.  Combining all of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4291
	traces into a single file is accomplished similarly to the examples above:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4292
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4293
Isto resultaria em vários arquivos de rastreamento ASCII sendo criados, cada um seguindo a convenção ``<prefixo>-n<id do nó>-i<interface>.tr``. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4294
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4295
Para obtermos um único arquivo teríamos:
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4296
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4297
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4298
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4299
  NodeContainer nodes;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4300
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4301
  NetDeviceContainer devices = deviceHelper.Install (nodes);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4302
  ... 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4303
  Ipv4AddressHelper ipv4;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4304
  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4305
  Ipv4InterfaceContainer interfaces = ipv4.Assign (devices);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4306
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4307
  Ptr<OutputStreamWrapper> stream = asciiTraceHelper.CreateFileStream 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4308
  		("trace-file-name.tr");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4309
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4310
  helper.EnableAsciiIpv4 (stream, interfaces);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4311
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4312
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4313
	You can enable ascii tracing on a collection of protocol/interface pairs by 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4314
	providing a ``NodeContainer``.  For each ``Node`` in the ``NodeContainer``
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4315
	the appropriate protocol is found.  For each protocol, its interfaces are 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4316
	enumerated and tracing is enabled on the resulting pairs.  For example,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4317
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4318
Podemos habilitar o rastreamento ASCII em uma coleção de pares protocolo/interface provendo um `NodeContainer``. Para cada ``Node`` no ``NodeContainer`` os protocolos apropriados são encontrados. Para cada protocolo, sua interface é enumerada e o rastreamento é habilitado nos pares. Por exemplo,
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4319
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4320
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4321
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4322
  NodeContainer n;
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4323
  ...
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4324
  helper.EnableAsciiIpv4 ("prefix", n);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4325
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4326
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4327
	You can enable pcap tracing on the basis of node ID and device ID as well.  In
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4328
	this case, the node-id is translated to a ``Ptr<Node>`` and the appropriate
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4329
	protocol is looked up in the node.  The resulting protocol and interface are
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4330
	used to specify the resulting trace source.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4331
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4332
Podemos habilitar o rastreamento pcap usando o número identificador do nó e número identificador do dispositivo. Neste caso, o `ID` do nó é traduzido para um ``Ptr<Node>`` e o protocolo apropriado é procurado no nó de rede. O protocolo e interface resultantes são usados para especificar a origem do rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4333
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4334
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4335
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4336
  helper.EnableAsciiIpv4 ("prefix", 21, 1);
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4337
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4338
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4339
	Of course, the traces can be combined into a single file as shown above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4340
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4341
Os rastreamentos podem ser combinados em um único arquivo como mostrado anteriormente.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4342
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4343
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4344
	Finally, you can enable ascii tracing for all interfaces in the system, with
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4345
	associated protocol being the same type as that managed by the device helper.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4346
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4347
Finalmente, podemos habilitar o rastreamento ASCII para todas as interfaces no sistema.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4348
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4349
::
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4350
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4351
  helper.EnableAsciiIpv4All ("prefix");
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4352
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4353
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4354
	This would result in a number of ascii trace files being created, one for
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4355
	every interface in the system related to a protocol of the type managed by the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4356
	helper.  All of these files will follow the <prefix>-n<node id>-i<interface.tr
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4357
	convention.  Combining all of the traces into a single file is accomplished 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4358
	similarly to the examples above.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4359
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4360
Isto resultaria em vários arquivos ASCII sendo criados, um para cada interface no sistema relacionada ao protocolo do tipo gerenciado pela classe assistente.Todos estes arquivos seguiriam a convenção
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4361
``<prefix>-n<id do node>-i<interface>.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4362
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4363
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4364
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4365
	Ascii Tracing Protocol Helper Filename Selection
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4366
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4367
Seleção de Nome de Arquivo para Rastreamento ASCII da Classe Assistente de Protocolo 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4368
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4369
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4370
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4371
	Implicit in the prefix-style method descriptions above is the construction of the
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4372
	complete filenames by the implementation method.  By convention, ascii traces
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4373
	in the |ns3| system are of the form "<prefix>-<node id>-<device id>.tr"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4374
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4375
Implícito nas descrições de métodos anteriores é a construção do nome do arquivo por meio do método da implementação. Por convenção, rastreamento ASCII no sistema |ns3| são da forma ``<prefix>-<id node>-<id do dispositivo>.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4376
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4377
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4378
	As previously mentioned, every node in the system will have a system-assigned
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4379
	node id.  Since there is a one-to-one correspondence between protocols and nodes
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4380
	we use to node-id to identify the protocol identity.  Every interface on a 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4381
	given protocol will have an interface index (also called simply an interface) 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4382
	relative to its protocol.  By default, then, an ascii trace file created as a result
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4383
	of enabling tracing on the first device of node 21, using the prefix "prefix",
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4384
	would be "prefix-n21-i1.tr".  Use the prefix to disambiguate multiple protocols
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4385
	per node.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4386
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4387
Como mencionado, todo nó no sistema terá um número identificador de nó associado. Como há uma correspondência de um-para-um entre instâncias de protocolo e instâncias de nó, usamos o `ID` de nó. Cada interface em um protocolo terá um índice de interface (também chamando apenas de interface) relativo ao seu protocolo. Por padrão, então, um arquivo de rastreamento ASCII criado a partir do rastreamento no primeiro dispositivo do nó 21, usando o prefixo "prefix", seria ``prefix-n21-i1.tr``. O uso de prefixo distingue múltiplos protocolos por nó.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4388
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4389
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4390
	You can always use the |ns3| object name service to make this more clear.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4391
	For example, if you use the object name service to assign the name "serverIpv4"
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4392
	to the protocol on node 21, and also specify interface one, the resulting ascii 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4393
	trace file name will automatically become, "prefix-nserverIpv4-1.tr".
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4394
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4395
Sempre podemos usar o serviço de nomes de objetos do |ns3| para tornar isso mais claro. Por exemplo, se usarmos o serviço de nomes para associar o nome "serverIpv4" ao Ptr<Ipv4> no nó 21, o nome de arquivo resultante seria ``prefix-nserverIpv4-i1.tr``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4396
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4397
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4398
	Several of the methods have a default parameter called ``explicitFilename``.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4399
	When set to true, this parameter disables the automatic filename completion 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4400
	mechanism and allows you to create an explicit filename.  This option is only
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4401
	available in the methods which take a prefix and enable tracing on a single device.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4402
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4403
Diversos métodos tem um parâmetro padrão ``explicitFilename``. Quando modificado para verdadeiro, este parâmetro desabilita o mecanismo automático de completar o nome do arquivo e permite criarmos um nome de arquivo abertamente. Esta opção está disponível nos métodos que  ativam o rastreamento em um único dispositivo.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4404
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4405
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4406
.. 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4407
	Summary
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4408
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4409
Considerações Finais
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4410
********************
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4411
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4412
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4413
	|ns3| includes an extremely rich environment allowing users at several 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4414
	levels to customize the kinds of information that can be extracted from 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4415
	simulations.  
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4416
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4417
O |ns3| inclui um ambiente completo para permitir usuários de diversos níveis  personalizar os tipos de informação para serem extraídas de suas simulações.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4418
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4419
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4420
	There are high-level helper functions that allow users to simply control the 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4421
	collection of pre-defined outputs to a fine granularity.  There are mid-level
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4422
	helper functions to allow more sophisticated users to customize how information
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4423
	is extracted and saved; and there are low-level core functions to allow expert
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4424
	users to alter the system to present new and previously unexported information
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4425
	in a way that will be immediately accessible to users at higher levels.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4426
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4427
Existem funções assistentes de alto nível que permitem ao usuário o controle de um coleção de saídas predefinidas para uma granularidade mais fina. Existem funções assistentes de nível intermediário que permitem usuários mais sofisticados personalizar como as informações são extraídas e armazenadas; e existem funções de baixo nível que permitem usuários avançados alterarem o sistema para apresentar novas ou informações que não eram exportadas.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4428
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4429
..
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4430
	This is a very comprehensive system, and we realize that it is a lot to 
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4431
	digest, especially for new users or those not intimately familiar with C++
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4432
	and its idioms.  We do consider the tracing system a very important part of
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4433
	|ns3| and so recommend becoming as familiar as possible with it.  It is
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4434
	probably the case that understanding the rest of the |ns3| system will
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4435
	be quite simple once you have mastered the tracing system
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4436
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4437
Este é um sistema muito abrangente e percebemos que é muita informação para digerir, especialmente para novos usuários ou aqueles que não estão intimamente familiarizados com C++ e suas expressões idiomáticas. Consideramos o sistema de rastreamento uma parte muito importante do |ns3|, assim recomendamos que familiarizem-se o máximo possível com ele. Compreender o restante do sistema |ns3| é bem simples, uma vez que dominamos o sistema de rastreamento.
06b527a120fd Add Brazilian Portuguese translation (pt-br) of tutorial
Frank Helbert <frank@ime.usp.br>
parents:
diff changeset
  4438