'Network'에 해당되는 글 204건

  1. 2009.01.17 awk script- delay 계산
  2. 2009.01.17 awk script- delay 계산 및 IP 주소 C 상에서 얻어오기
  3. 2009.01.17 멈춰!! 움직이지마!! 움직여!! 빨리 달려!! 달리라고!!!!
  4. 2009.01.17 Analysis of 802.11 MAC code in NS-2
  5. 2009.01.17 [ns] Dropping Packets with RTR CBK
  6. 2009.01.17 Network Simulator - hierarchical address를 사용할 때 segmentation fault
  7. 2009.01.17 짜증나는 세그먼트 에러 ns2
  8. 2009.01.12 [NS2] Network Component 생성 기초 : OTCL Linkage(1)
  9. 2009.01.12 Tcl and OTcl for ns
  10. 2009.01.12 네트워크 시뮬레이터 NS-2

awk script- delay 계산

|
if(addr() == 0)
    {
          struct hdr_cmn *ch = HDR_CMN(p);
         struct hdr_mac802_11* dh = HDR_MAC802_11(p);
         u_int16_t *t = (u_int16_t*) &dh->dh_fc;
         //PacketClassifier *tcph = PacketClassifier::classify(p);
        //printf("\naddr : %d, offset : %d \n",addr(),tcph->ackno());
        printf("\t[ %2x %2x %2x %2x ] %x %s %d\n",*t, dh->dh_duration,ETHER_ADDR(dh->dh_ra), ETHER_ADDR(dh->dh_ta), index_, packet_info.name(ch->ptype()), ch->size());
    }

And

awk script- delay 계산 및 IP 주소 C 상에서 얻어오기

|

awk script- delay 계산

참고 : http://www.winlab.rutgers.edu/~zhibinwu/html/ns_trace.html
작성 : 2006.12.17 by 임헌정
http://www.4ellene.net

CMU use a special fomat. Basically, you could 

$ns use-newtrace

to generate the new trace and the detailed explanation could be found
in Ns Manual.By default, old trace format is used. We need to analyze
the source code ./trace/cmu-trace.cc to understand it completely.
For instance, the function format_ip will explain the trace of IP part.


void
CMUTrace::format_ip(Packet *p, int offset)
{
struct hdr_cmn *ch = HDR_CMN(p);
struct hdr_ip *ih = HDR_IP(p);

// hack the IP address to convert pkt format to hostid format
// for now until port ids are removed from IP address. -Padma.
int src = Address::instance().get_nodeaddr(ih->saddr());
int dst = Address::instance().get_nodeaddr(ih->daddr());

............

}

void
CMUTrace::format_mac(Packet *p, int offset)
{

else {
sprintf(pt_->buffer() + offset,
" [%x %x %x %x] ",
//*((u_int16_t*) &mh->dh_fc),
mh->dh_duration,

ETHER_ADDR(mh->dh_ra),
ETHER_ADDR(mh->dh_ta),


GET_ETHER_TYPE(mh->dh_body));
}
......

}


A typical trace for a CBR traffic is:

s 20.000000000 _0_ AGT  --- 6 cbr 512 [0 0 0 0] ------- [0:0 1:0 32 0]
[0] 0 0
r 20.000000000 _0_ RTR --- 6 cbr 512 [0 0 0 0] ------- [0:0 1:0 32 0]
[0] 0 0
s 20.000000000 _0_ RTR --- 6 cbr 532 [0 0 0 0] ------- [0:0 1:0 32 1]
[0] 0 0
s 20.000275000 _0_ MAC --- 6 cbr 584 [13a 1 0 800] -------
[0:0 1:0 32 1] [0] 0 0
r 20.004947063 _1_ MAC --- 6 cbr 532 [13a 1 0 800] -------
[0:0 1:0 32 1] [0] 1 0
s 20.004957063 _1_ MAC --- 0 ACK 38 [0 0 0 0]
r 20.004972063 _1_ AGT --- 6 cbr 532 [13a 1 0 800] -------
[0:0 1:0 32 1] [0] 1 0
r 20.005261125 _0_ MAC --- 0 ACK 38 [0 0 0 0]

A typical awk code for analyzing traces is:

For a topology involve 4 flows with distinguishing source and
destination nodes,
this awkcode gets throughout data and put in wu.dat file

[예제]

BEGIN {counter1 = 0;}
$1~/r/ && $2>50 && $2< 100 && /_2_/ && /AGT/ { counter1 +=
($8- 20)
size = $8 - 20 }
END {
print (size , counter1*8/(50) ) >> "wu.dat"}

로 delay_throughout.awk 파일 생성

$ awk -f delay_though.awk aodv_3nodes_tcp.tr 실행
# 50~100ms 사이에, 2노드로 수신한 패킷들


BEGIN {counter1 = 0; counter2 = 0; counter3 = 0; counter4 = 0;}
$1~/r/ && $2>50 && $2< 100  && /_12_/ && /AGT/  {   counter1 += ($8- 20)
                       size = $8 - 20 }
$1~/r/ && $2>50 && $2 <100 && /_13_/ && /AGT/  {   counter2 += ($8- 20)
                       size = $8 - 20 }
$1~/r/ && $2>50 && $2<100 && /_14_/ && /AGT/  {   counter3 += ($8- 20)
                       size = $8 - 20 }
$1~/r/ && $2>50 && $2<100 && /_15_/ && /AGT/  {   counter4 += ($8- 20)
                       size = $8 - 20 }

END {
     print (size , counter1*8/(50), counter2*8/50, counter3*8/(50), counter4*8/50,
                 (counter1+counter2+counter3+counter4)*8/50 )  >> "wu.dat"}

To analyze throughout or delay in a finite time duration,

we need extract send and receive time from the trace file

[예제]
$ awk '$2>100 && $2 < 150 && (/_0_/ || /_2_/) && /AGT/ { print
$1, $2, $6 > "dst2.tr" }' aodv_3nodes_tcp.tr

$2>100 && $2 < 150 && (/_6_/ || /_2_/)  &&  /AGT/    {  print $1, $2, $6  > "dst2.tr" }
$2>100 && $2 <150 && (/_0_/ || /_9_/)  &&  /AGT/    {   print $1, $2, $6  > "dst9.tr" }
$2>100 && $2 <150 && (/_12_/ || /_3_/)  &&  /AGT/    {   print $1, $2, $6  > "dst3.tr" }
$2>100 && $2 <150 && (/_10_/ || /_4_/)  &&  /AGT/    {   print $1, $2, $6  > "dst4.tr" }
$2>100 && $2 <150 && (/_11_/ || /_8_/)  &&  /AGT/    {   print $1, $2, $6  > "dst8.tr" }

The respective new trace files such as "dst2.tr" will keep time, "s'"
or "r" and, "index",
From that we could use a program to calculate the mean of delay.
The files is here:
 

And to use this C code:
$ gcc delay.c -o delaycal
$ ./delaycal dst2.tr wu0.dat wu1.dat

And

멈춰!! 움직이지마!! 움직여!! 빨리 달려!! 달리라고!!!!

|
AGT: transport layer, agent protocol (e.g. TCP)
RTR: network > layer, routing protocol (e.g. IP)
MAC: MAC layer, medium access > protocol (e.g. 802.11)
And

Analysis of 802.11 MAC code in NS-2

|

Analysis of 802.11 MAC code in NS-2

[ Back to Network Simulator 2 for Wireless ]

0. MAC in ns-2

LAN is within Berkeley Architecture, WLAN cannot create with “newLan” command
Ethernet could be created as a LAN with common bandwidth and delay.
 

1. The general structure of MAC

related sourcecode:  mac.cc,  mac.h

MAC class is derived from Bi-Connector class.

Local Variables:
  • pktTx_ 
  • pktRx_
  • Macstate_ :
  • index_  : mac address

Basic functions of General MAC class.
  • recv (packet, handler)
    • This is the entry from upper target (a callback handler is given as a parameter) to send a packet to MAC. After the MAC transmit this packet successfully, it will use this callback handler to inform the upper target that MAC is idle and  give another packet if there are packets buffered.
  • SendUp
    • entry for receiving a packet. Sendup is function is directly called by the lower target of MAC, might be "netif" or "phy". And this function directly calls the upper_target. Because the uplink  to upper_target does not involve any phsical transmission delay, it does not need any timer and state change here. The question is that when the MAC is in MAC_RECV state? The answer is: The MAC here is supposed to be full-duplex and receive can be happened simultaneously. it does not care about collisions etc. This is a general MAC class
  • SendDown
    • used to sending packet down. Called by recv().init a timer for tx, and the timer handler is defined to call resume().
  • Handler* callback_;
    • when MAC is idle, the upper target has to be callback.
  • Resume()
    • When tx timer out, reset MAC as idle state and callback.
  • Discard
    • When a packet has to be drop, the drop_ (NsObject*) of bi-connector class has to be called to handle this, usually drop (p, why) is used. Why is a string of drop reason, in cmu-trace.h. three-character string is defined to describe those reasons in the trace file, such as "BSY", "CBK"....
mac_state

2. The 802.11 MAC

it is implemented by CMU. It is a subclass of MAC.

related sourcecode : mac-802_11.cc, mac-802_11.h, mac-timer.cc, mac-timer.h

State Machine:


The tx_state and rx_state are two member variables. Although, actually mac cannot transmit and receive at the same time. we still hold two variables for them. The possible state is MAC_SEND, MAC_IDLE, MAC_RECV, MAC_COLL, MAC_RTS, MAC_CTS, MAC_ACK.

Local Variables:
  • pktTx_ (inherited from Mac class): 
  • pktRx_(inherited from Mac class):
  • pktCtrl_
  • pktRTS_

Basic functions:

  • recv(): the recv() function of MAC class has been overridden. Here, recv() means an incoming packet from both physical layer and upper layer.
  • send(): this function is called by recv() when it get a packet supposed to sending down.  Similarly, a callback handler is given as a parameter. Immediately, the sendDATA(p) function is called to generate an appropriate mac_header for this packet, and set this to pktTx_. Then,  follew the CSMA/CA procedures to get this packet sent.
  • sendDATA(). to compose a DATA MAC frame and set it as pktTx_
  • recvDATA(). When heard a DATA MAC frame, hand it to upper layer.

Callback to IFQ in MAC 802.11

The callback is set when a packet comes from upper layer and be handled by send(p,h). The callback is used and reset to zero in tx_resume() function of mac-802_11.cc:

void
Mac802_11::tx_resume()
{
 .....
else if(callback_) {
        Handler *h = callback_;
        callback_ = 0;
        h->handle((Event*) 0);
    }
    // change wrt Mike's code
    //SET_TX_STATE(MAC_IDLE);
   setTxState(MAC_IDLE);
}
The callback will reactivate the interface queue between mac_ and ll_ objects, see queue/queue.cc
void QueueHandler::handle(Event*)
{
queue_.resume();
}

void Queue::resume()
{
Packet* p = deque();
if (p != 0) {
target_->recv(p, &qh_);
} else {
if (unblock_on_resume_)
blocked_ = 0;
else
blocked_ = 1;
}
}

See that the queue is blocked if not "callback", thus, callback is essential to make queue work properly.

Backoff

The backoff implementation in mac-802_11.cc does not comply with the standard. Basically, this is due to the introduction of a defer timer. The defertimer is set in send() and after a packet transmission finishes. The deferred time value is usually (DIFS+rTime) where rTime is as same as the selection of backoff timeslots from CW (Contention Window). However, the defertimer is never paused or resumed.

So, after a packet transmission, according to the IEEE 802.11 standard, the node should do backoff immediately. here in ns-code, the defertime is first set. And after timer out, in check_pktTx() function. if the channel is not idle, a backoff timer is set. Therefore, here exists a double backoff problem. Also, according to IEEE 802.11 standard, a node should access channel directly if it sense the channel idle and still idle after at least DIFS time. Here, ns-code also deviates from the standard and add an additional rTime before sending DATA or RTS.
 
Determine the transmission time

 
txtime is calculated from the "size" variable in common header. Because all headers are present in the packet no matter what layer it is. Thus, the only way to know the packet size is to add or subtract some bytes in hdr_cmn->size(); In 802.11 MAC code, in recvDATA(), the 802.11 header size will be subtracted. And in SendDATA(), a 80211_hdr_length will be added.

Transmission Failure:

In both RetransmitRTS and RetransmitDATA functions, it is necessary to deal a packet drop :

if(ssrc_ >= macmib_.getShortRetryLimit()) {
discard(pktRTS_, DROP_MAC_RETRY_COUNT_EXCEEDED); pktRTS_ = 0;
/* tell the callback the send operation failed
before discarding the packet */
hdr_cmn *ch = HDR_CMN(pktTx_);
if (ch->xmit_failure_) {
/*
* Need to remove the MAC header so that
* re-cycled packets don't keep getting
* bigger.
*/
// change wrt Mike's code
//ch->size() -= ETHER_HDR_LEN11;
ch->size() -= phymib_.getHdrLen11();
ch->xmit_reason_ = XMIT_REASON_RTS;
ch->xmit_failure_(pktTx_->copy(),
ch->xmit_failure_data_);
//callback by upperlayer } //printf("(%d)....discarding RTS:%x\n",index_,pktRTS_); discard(pktTx_, DROP_MAC_RETRY_COUNT_EXCEEDED); pktTx_ = 0; ssrc_ = 0; rst_cw(); }

So, it is a way to let upper layer , such as DSR routing to know there is a route-error and need to send a route-error message.

Frame Formats in ns-2

The 802.11 header in ns-2 is not conform to the 802.11 standard. It is a different one. Thus, this overhead cannot be regarded as authentic as that of
the experiment. And the throughput measurements also seems different.

Other IEEE 802.11 features

1. Carrier Sense

This is normally done by the physical layer source code. The state of 802.11 MAC is  controlled by some timers. Such as the  Backoff_timer. By checking if those timers are still busy, the MAC will arrange its operations correspondingly.

2. Virtual Carrier Sense

RTS/CTS is an important part of code. There are functions like sendRTS ( is to form a RTS ctrl packrt) , retransmitRTS...... Basically it has to compare with RTSThreshold first, if the size is small than the threshold, there is no" virtual carrier sense" scheme used.


And

[ns] Dropping Packets with RTR CBK

|

[ns] Dropping Packets with RTR CBK

Francisco J. Ros fjrm at dif.um.es
Tue Sep 19 03:06:58 PDT 2006


Hi,

It means that the MAC layer couldn't successfully deliver the packet. You can 
find the reasons for this at the bottom of this page: 
http://masimum.inf.um.es/nsrt-howto/html/node23.html

Regards,
fran

P.S: answers to frequent questions like this can be easily found with 
http://www.isi.edu/nsnam/htdig/search.html

On Tuesday 19 September 2006 11:48, michelenuti at alice.it wrote:
> Hi ns users,
> does anybody know what does it mean when a TCP packet is dropped and in the
> trace file is indicated as RTR CBK?
>
> Thanks a lot,
> Michele Nuti



More information about the Ns-users mailing list
And

Network Simulator - hierarchical address를 사용할 때 segmentation fault

|
hierarchical address를 사용할 때 특수한 상황에서 segmentation fault가 발생하였습니다.
정확한 이유는 시간관계상 분석하지 못했지만 해결방법을 찾아서 여기에 소개합니다.
 
환경
mobile IP, 이동 노드들은 계층 주소를 가지면 하나의 home agent에 50개의 노드가 붙는 상황
BS에서 encap-route 나 clear-reg를 호출할 때 segmentation fault 발생
 
원인
계층주소의 마지막 자리를 총 50개 사용 (예, 1.0.50)
 
해결방법
classifier.cc의 Classifier::alloc 함수에서 "nslot_=32"로 되어 있는 부분을 "nslot_=64"로 수정


자료출처: http://blog.empas.com/blhole/23462211

And

짜증나는 세그먼트 에러 ns2

|

Re: segmentation fault (core dumped) using ZRP in ns-2.27

Click to flag this post

by Mubashir Rehmani Oct 04, 2008; 05:14pm :: Rate this Message: - Use ratings to moderate (?)

Reply | Reply | Reply to Author | Print | View Threaded | Show Only this Message


HI Batbold Toiruul,

here is no "the" solution to *segmentation* *fault*s. From what I've seen on
this list and
in practice, there can be several causes:
1. you deleted a resource from within TCL, causing pointers in C++ to point
to
    memory regions no longer in use. Fix: be careful what you delete in TCL.
2. you added or modified the ns2 source code:
    a. there is a dependency problem and parts of your source have not been
        recompiled. fix: type "make clean" and "make" to make ultimately
sure
        that all code is within sync with each other
    b. your additions are the cause of the memory violation. fix: fix!

how to find the location of your error?
a. first you have to convince your shell to produce a coredump when a
    *segmentation* *fault* occurs. Usually this is done with the command
    "ulimit -c 100000" which sets the limit of coredumps to really huge
    so that they are allways produced.
b. add "-g" to the CFLAGS in the Makefile (and Makefile.in to make sure
    your change is not removed when you ./configure ns2). This flag says
that
    debugging code is compiled into the executable.
c. make clean & make to have the debugging code properly compiled in.

When a *segmentation* *fault* occurs, type: "gdb -c core", then in gdb tell
it that you want to load symbols from the ns executable with "file ns",
and then you can inspect the stack ("bt"), select a stack frame ("select 0")
and inspect the values of variables in that stack frame. Use the online
help of gdb to get familiar with it.

This link may be useful to you.

http://article.gmane.org/gmane.network. ··· entation
+fault


Good luck debugging!

3. May be you are accessing the wrong memory location while declaring your
data structures like linked list, arrays etc

Regards

Mubashir Husain Rehmani

2008/10/4 Batbold Toiruul <tulaanaa1@...>

>
> Dear ns-users,
> I installed Zone Routing Protocol (ZRP) on ns-2.27. However, when i use ZRP
> to run below example, I got the segmentation fault (Core Dumped).
> I don't know why this kind of error is occured. if anyone knows, please
> help
> me.
>
> thank you very much in advance
> sincerely,
>   Batbold
>
>
> set val(chan)           Ch.annel/WirelessChannel    ;#Channel Type
> set val(prop)           Propagation/TwoRayGround   ;# radio-propagation
> model
> set val(netif)          Phy/WirelessPhy            ;# network interface
> type
> set val(mac)            Mac/802_11                 ;# MAC type
> set val(ifq)            Queue/DropTail/PriQueue    ;# interface queue type
> set val(ll)             LL                         ;# link layer type
> set val(ant)            Antenna/OmniAntenna        ;# antenna model
> set val(ifqlen)         500                         ;# max packet in ifq
> set val(nn)             22                         ;# number of mobilenodes
> set val(rp)             ZRP                        ;# routing protocol
> set val(x)        1000
> set val(y)        [expr ($val(nn)+1)*250]
>
> # Initialize Global Variables
> set ns_        [new Simulator]
> set tracefd     [open mo4.tr w]
> $ns_ trace-all $tracefd
>
> set namtrace [open mo4.nam w]
> $ns_ namtrace-all-wireless $namtrace $val(x) $val(y)
>
> # set up topography object
> set topo       [new Topography]
>
> $topo load_flatgrid $val(x) $val(y)
>
> # Create God
> create-god $val(nn)
>
> # New API to config node:
> # 1. Create channel (or multiple-channels);
> # 2. Specify channel in node-config (instead of channelType);
> # 3. Create nodes for simulations.
>
> # Create channel #1 and #2
> set chan_1_ [new $val(chan)]
> set chan_2_ [new $val(chan)]
>
> # Create node(0) "attached" to channel #1
>
> # configure node, please note the change below.
> $ns_ node-config -adhocRouting $val(rp) \
>        -llType $val(ll) \
>       -macType $val(mac) \
>        -ifqType $val(ifq) \
>        -ifqLen $val(ifqlen) \
>       -antType $val(ant) \
>        -propType $val(prop) \
>        -phyType $val(netif) \
>       -topoInstance $topo \
>        -agentTrace ON \
>        -routerTrace ON \
>       -macTrace ON \
>        -movementTrace ON \
>        -channel $chan_1_
>
>
> # node_(1) can also be created with the same configuration, or with a
> different
> # channel specified.
> # Uncomment below two lines will create node_(1) with a different channel.
> #  $ns_ node-config \
> #         -channel $chan_2_
> #set node_(0) [$ns_ node]
> #set node_(8) [$ns_ node]
>
> #$node_(0) random-motion 0
> #$node_(8) random-motion 0
>
> for {set i 0} {$i < $val(nn)} {incr i} {
>    set node_($i) [$ns_ node]
>    $node_($i) random-motion 0
>    $ns_ initial_node_pos $node_($i) 20
> }
>
> #
> # Provide initial (X,Y, for now Z=0) co-ordinates for mobilenodes
> #
> #$node_(0) set X_  500.0
> #$node_(0) set Y_  250.0
> #$node_(0) set Z_ 0.0
> #...
> #$node_(8) set X_  500.0
> #$node_(8) set Y_ 2250.0
> #$node_(8) set Z_ 0.0
>
> for {set i 0} {$i < 10 } {incr i} {
>   $node_($i) set X_  750.0
>   $node_($i) set Y_ [expr $i*250+5]
>   $node_($i) set Z_ 0.0
> }
> for {set i 10} {$i < 20 } {incr i} {
>   $node_($i) set X_ 250.0
>   $node_($i) set Y_ [expr ($i-10)*250+5]
>   $node_($i) set Z_ 0.0
> }
>
> $node_(20) set X_ 500.0
> $node_(20) set Y_ 5.0
> $node_(20) set Z_ 0.0
>
> $node_(21) set X_ 500.0
> $node_(21) set Y_ 505.0
> $node_(21) set Z_ 0.0
>
> #for {set i 0} {$i < 3} {incr i} {
>  #for {set j 0} {$j < 3} {incr j} {
>    #$node_([expr $i+$j*3]) set X_ [expr $i*250]
>    #$node_([expr $i+$j*3]) set Y_ [expr $j*250]
>    #$node_([expr $i+$j*3]) set Z_ 0.0
>  #}
> #}
>
>
> # Now produce some simple node movements
> # Node_(1) starts to move towards node_(0)
> #
> #$ns_ at 3.0 "$node_(5) setdest 100.0 500.0 05.0"
> #$ns_ at 100.0 "$node_(5) setdest 100.0 500.0 00.0"
> #$ns_ at 200.0 "$node_(5) setdest 005.0 700.0 05.0"
> #$ns_ at 3.0 "$node_(0) setdest 48.0 38.0 5.0"
>
> # Node_(1) then starts to move away from node_(0)
> #$ns_ at 20.0 "$node_(1) setdest 490.0 480.0 30.0"
>
> # Setup traffic flow between nodes
> #TCP connections between node_(0) and node_(1)
>
> set udp [new Agent/UDP]
> $udp set fid_ 2
> set sink [new Agent/Null]
> $ns_ attach-agent $node_(10) $udp
> $ns_ attach-agent $node_(9) $sink
> $ns_ connect $udp $sink
>
> set cbr [new Application/Traffic/CBR]
> $cbr attach-agent $udp
> $cbr set type_ CBR
> $cbr set packet_size_ 100
> $cbr set rate_ 10kb
> $cbr set random_ false
> $ns_ at 10.0 "$cbr start"
> $ns_ at 100.0 "$cbr stop"
>
> #set tcp [new Agent/TCP]
> #$tcp set class_ 1
> #$tcp set fid_ 2
> #set sink [new Agent/TCPSink]
> #$ns_ attach-agent $node_(2) $tcp
> #$ns_ attach-agent $node_(5) $sink
> #$ns_ connect $tcp $sink
>
> #set ftp [new Application/FTP]
> #$ftp attach-agent $tcp
> #$ftp set type_ FTP
> #$ns_ at 23.0 "$ftp start"
> #$ns_ at 173.0 "$ftp stop"
>
> Mac/802_11 set dataRate_ 1Mb
>
> for {set i 0} {$i < $val(nn) } {incr i} {
>     set r_($i) [$node_($i) set ragent_]
>      $ns_ at 0.0 "$r_($i) radius 2.0"
>     # @@@ $ns_ at 0.4 "$r_($i) beacon_period 12.0"
>     # @@@ $ns_ at 0.0 "$r_($i) radius 1.0"
>  }
>
> #
> # Tell nodes when the simulation ends
> #
> for {set i 0} {$i < $val(nn) } {incr i} {
>    $ns_ at 100.0 "$node_($i) reset";
> }
> $ns_ at 100.0 "stop"
> $ns_ at 100.01 "puts \"NS EXITING...\" ; $ns_ halt"
> proc stop {} {
>    global ns_ tracefd
>    $ns_ flush-trace
>    close $tracefd
> }
>
> puts "Starting Simulation..."
> $ns_ run
>



--
Mubashir Husain Rehmani

And

[NS2] Network Component 생성 기초 : OTCL Linkage(1)

| 2009. 1. 12. 00:41
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Tcl and OTcl for ns

| 2009. 1. 12. 00:40
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

네트워크 시뮬레이터 NS-2

| 2009. 1. 12. 00:37
보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.
prev | 1 | ··· | 17 | 18 | 19 | 20 | 21 | next