Friday, 24 May 2019

Good habits








Plotting X graph in NS2

Description:

     X, Y coordinates points for more than one graph is generated randomly and put it in the trace files. All the trace files are given as input file to xgraph to plot all the graphs in the same plot.
File name: “graph2.tcl”
#-------Event scheduler object creation--------#
set ns [new Simulator]
#Creating nam file:
set nf [open Tcpred.nam w]
$ns namtrace-all $nf
#Open the trace file
set nt [open Tcpred.tr w]
$ns trace-all $nt

# graph procedure..
$ns at 1.0 "Graph"
set g [open graph.tr w]
set g1 [open graph1.tr w]
proc Graph {} {
global ns g g1
set time 1.0
set now [$ns now]
puts $g "[expr rand()*8] [expr rand()*6]"
puts $g1 "[expr rand()*8] [expr rand()*6]"
$ns at [expr $now+$time] "Graph"
}
           
                 
#Finish Procedure..
proc finish {} {
      global ns nf nt
      exec xgraph -brb -geometry 600X500 graph.tr graph1.tr &
      exit 0
      }
#Calling finish procedure
$ns at 5.0 "finish"
$ns run
# How to run
$ns filename.tcl

Plot a graph of node energy from NS2 trace file

use the below awk script to find the energy of node
#!/usr/bin/awk -f
BEGIN{
#print "energy of node 1"
data=0
}

{
if ($1=="N" && $5==0)
{
    print $3,$7
}
}
END{
#print "Completed"
}
save this file as energy.awk
in terminal type
$gawk -f energy.awk "yourtracefile.tr" > node0.dat
on executing this command you'll get a file node0.dat
in terminal
$xgraph -P node0.dat
you'll get a graph

Thursday, 23 May 2019

Energy Model for Mobile Nodes ns2

set val(chan)           Channel/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)         5                          ;# max packet in ifq
set val(nn)             6                           ;# number of mobilenodes
set val(rp)             DSR                        ;# routing protocol
set val(x)              750                        ;# X dimension of topography
set val(y)              550                        ;# Y dimension of topography 
set val(stop)         18.0                       ;# time of simulation end
## Create a simulator object(nothing but, a scheduler's object)..
      set ns [new Simulator]
## Create a trace file and nam file..
      set tracefd [open wireless1.tr w]
      set namtrace [open wireless1.nam w]   
## Trace the nam and trace details from the main simulation..
      $ns trace-all $tracefd
      $ns namtrace-all-wireless $namtrace $val(x) $val(y)
## set up topography object..
      set topo [new Topography]
      $topo load_flatgrid $val(x) $val(y)
      set god_ [create-god $val(nn)]
## Color Descriptions..
      $ns color 1 dodgerblue
      $ns color 2 blue
      $ns color 3 cyan
      $ns color 4 green
      $ns color 5 yellow
      $ns color 6 black
      $ns color 7 magenta
      $ns color 8 gold
      $ns color 9 red
     
# Setting The Distance Variables..
# For model 'TwoRayGround'
      set dist(5m)  7.69113e-06
      set dist(9m)  2.37381e-06
      set dist(10m) 1.92278e-06
      set dist(11m) 1.58908e-06
      set dist(12m) 1.33527e-06
      set dist(13m) 1.13774e-06
      set dist(14m) 9.81011e-07
      set dist(15m) 8.54570e-07
      set dist(16m) 7.51087e-07
      set dist(20m) 4.80696e-07
      set dist(25m) 3.07645e-07
      set dist(30m) 2.13643e-07
      set dist(35m) 1.56962e-07
      set dist(40m) 1.56962e-10
      set dist(45m) 1.56962e-11
      set dist(50m) 1.20174e-13
      #Phy/WirelessPhy set CSThresh_ $dist(50m)
      #Phy/WirelessPhy set RXThresh_ $dist(50m)
## Setting node config event with set of inputs..
      puts "Node Configuration Started here...\n \
                   -channel $val(chan) \n \
                   -adhocRouting $val(rp) \n \
                   -llType $val(ll) \n \
                   -macType $val(mac) \n \
                   -ifqType $val(ifq) \n \
                   -ifqLen $val(ifqlen) \n \
                   -antType $val(ant) \n \
                   -propType $val(prop) \n \
                   -phyType $val(netif) \n"
                     
        $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) \
                   -channelType $val(chan) \
                   -topoInstance $topo \
                   -agentTrace ON \
                   -routerTrace ON \
                   -macTrace OFF \
                   -movementTrace ON
# Energy model
      $ns node-config  -energyModel EnergyModel \
                        -initialEnergy 20 \
                        -txPower 0.9 \
                        -rxPower 0.8 \
                        -idlePower 0.0 \
                        -sensePower 0.0175
## Creating node objects..               
      for {set i 0} {$i < $val(nn) } { incr i } {
            set node_($i) [$ns node]     
      }
for {set i 0} {$i < $val(nn)} {incr i} {
      $node_($i) color darkgreen
      $ns at 0.0 "$node_($i) color darkgreen"
      }
## Provide initial location of mobilenodes..
           
      if {$val(nn) >0} {
            for {set i 1} {$i < $val(nn) } { incr i } {
                  set xx [expr rand()*600]                 
                  set yy [expr rand()*500];
                  $node_($i) set X_ $xx
                  $node_($i) set Y_ $yy
            }
      }
## set god distance..
      $god_ set-dist 0 1 2
      $god_ set-dist 0 2 2
      $god_ set-dist 0 3 2
      $god_ set-dist 0 4 1
      $god_ set-dist 0 5 2
      $god_ set-dist 1 2 3
      $god_ set-dist 1 3 3
     
## Define node initial position in nam..
      for {set i 0} {$i < $val(nn)} { incr i } {
      # 30 defines the node size for nam..
            $ns initial_node_pos $node_($i) 30
      }
## Telling nodes when the simulation ends..
for {set i 0} {$i < $val(nn) } { incr i } {
    $ns at $val(stop) "$node_($i) reset";
}
## Ending nam and the simulation..
$ns at $val(stop) "$ns nam-end-wireless $val(stop)"
$ns at $val(stop) "stop"
$ns at 16.01 "puts \"end simulation\" " ;# $ns halt

## Stop procedure..
proc stop {} {
    global ns tracefd namtrace
    $ns flush-trace
    close $tracefd
    close $namtrace
    exec nam wireless1.nam &
    exit 0
}
$ns run

ns2 program for calculating bandwidth using xgraph

#Create a simulator object

set ns [new Simulator]



#Open the output files

set f0 [open out0.tr w]

set f1 [open out1.tr w]

set f2 [open out2.tr w]



#Create 5 nodes

set n0 [$ns node]

set n1 [$ns node]

set n2 [$ns node]

set n3 [$ns node]

set n4 [$ns node]



#Connect the nodes

$ns duplex-link $n0 $n3 1Mb 100ms DropTail

$ns duplex-link $n1 $n3 1Mb 100ms DropTail

$ns duplex-link $n2 $n3 1Mb 100ms DropTail

$ns duplex-link $n3 $n4 1Mb 100ms DropTail



#Define a 'finish' procedure

proc finish {} {

    global f0 f1 f2

    #Close the output files

    close $f0

    close $f1

    close $f2

    #Call xgraph to display the results

    exec xgraph out0.tr out1.tr out2.tr -geometry 800x400 &

        exit 0

}





#Define a procedure that attaches a UDP agent to a previously created node

#'node' and attaches an Expoo traffic generator to the agent with the

#characteristic values 'size' for packet size 'burst' for burst time,

#'idle' for idle time and 'rate' for burst peak rate. The procedure connects

#the source with the previously defined traffic sink 'sink' and returns the

#source object.

proc attach-expoo-traffic { node sink size burst idle rate } {

    #Get an instance of the simulator

    set ns [Simulator instance]



    #Create a UDP agent and attach it to the node

    set source [new Agent/UDP]

    $ns attach-agent $node $source



    #Create an Expoo traffic agent and set its configuration parameters

    set traffic [new Application/Traffic/Exponential]

    $traffic set packetSize_ $size

    $traffic set burst_time_ $burst

    $traffic set idle_time_ $idle

    $traffic set rate_ $rate

        

        # Attach traffic source to the traffic generator

        $traffic attach-agent $source

    #Connect the source and the sink

    $ns connect $source $sink

    return $traffic

}





#Define a procedure which periodically records the bandwidth received by the

#three traffic sinks sink0/1/2 and writes it to the three files f0/1/2.

proc record {} {

        global sink0 sink1 sink2 f0 f1 f2

    #Get an instance of the simulator

    set ns [Simulator instance]

    #Set the time after which the procedure should be called again

        set time 0.5

    #How many bytes have been received by the traffic sinks?

        set bw0 [$sink0 set bytes_]

        set bw1 [$sink1 set bytes_]

        set bw2 [$sink2 set bytes_]

    #Get the current time

        set now [$ns now]

    #Calculate the bandwidth (in MBit/s) and write it to the files

        puts $f0 "$now [expr $bw0/$time*8/1000000]"

        puts $f1 "$now [expr $bw1/$time*8/1000000]"

        puts $f2 "$now [expr $bw2/$time*8/1000000]"

    #Reset the bytes_ values on the traffic sinks

        $sink0 set bytes_ 0

        $sink1 set bytes_ 0

        $sink2 set bytes_ 0

    #Re-schedule the procedure

        $ns at [expr $now+$time] "record"

}





#Create three traffic sinks and attach them to the node n4

set sink0 [new Agent/LossMonitor]

set sink1 [new Agent/LossMonitor]

set sink2 [new Agent/LossMonitor]

$ns attach-agent $n4 $sink0

$ns attach-agent $n4 $sink1

$ns attach-agent $n4 $sink2



#Create three traffic sources

set source0 [attach-expoo-traffic $n0 $sink0 200 2s 1s 100k]

set source1 [attach-expoo-traffic $n1 $sink1 200 2s 1s 200k]

set source2 [attach-expoo-traffic $n2 $sink2 200 2s 1s 300k]



#Start logging the received bandwidth

$ns at 0.0 "record"

#Start the traffic sources

$ns at 10.0 "$source0 start"

$ns at 10.0 "$source1 start"

$ns at 10.0 "$source2 start"

#Stop the traffic sources

$ns at 50.0 "$source0 stop"

$ns at 50.0 "$source1 stop"

$ns at 50.0 "$source2 stop"

#Call the finish procedure after 60 seconds simulation time

$ns at 60.0 "finish"



#Run the simulation

$ns run

Tuesday, 14 May 2019

Node color in ns2


Node color can be set as follows



$ns at 0.0 "$node_(0) color black"





Available colors



Black, Blue, dodgerblue, violet, darkviolet, Red, pink, Yellow, Orange, green, darkgreen, magenta, dark magenta, brown




C programs



C programs with output illustrate various programming concepts - operators, loops, functions, single and double dimensional arrays, performing operations on strings, files, pointers, etc. Download executable files and execute them without compiling the source file. Code::Blocks IDE is used to write programs, most of these will work with GCC and Dev C++ compilers. The first program prints "Hello World" on output device.

C programming examples with output

Example 1 - C hello world program
/** My first C program */

#include <stdio.h>





 





int main()





{





  printf("Hello World\n");





  return 0;





}



Output of program:
"Hello World"

Example 2 - C program to get input from a user using scanf

#include <stdio.h>





 





int main()





{





  int x;





 





  printf("Input an integer\n");





  scanf("%d", &x); // %d is used for an integer





 





  printf("The integer is: %d\n", x);





 





  return 0;





}



Output:
Input an integer
7897
The integer is: 7897

Example 3 - using if else control instructions

#include <stdio.h>





 





int main()





{





   int x = 1;





 





   if (x == 1)





      printf("x is equal to one.\n");





   else





      printf("For comparison use '==' as '=' is the assignment operator.\n");





 





   return 0;





}



Output:
x is equal to one.
Example 4 - while loop example

#include <stdio.h>





 





int main()





{





  int c = 1;  // Initializing variable





 





  while (c <= 10)  // While loop will execute till the condition is true





  {





    printf("%d ", c);  // Note the space after %d for gap in the numbers we want in output





    c++;





  }





 





  return 0;





}



Output:
1 2 3 4 5 6 7 8 9 10

Example 5 - C program check if an integer is prime or not

#include <stdio.h>





 





int main()





{





  int n, c;





 





  printf("Enter a number\n");





  scanf("%d", &n);





 





  if (n == 2)





    printf("Prime number.\n");





  else





  {





    for (c = 2; c <= n - 1; c++)





    {





      if (n % c == 0)





        break;





    }





    if (c != n)





      printf("Not prime.\n");





     else





       printf("Prime number.\n");





  }





  return 0;





}



Example 6 - command line arguments

#include <stdio.h>





 





int main(int argc, char *argv[])





{





  int c;





 





  printf("Number of command line arguments passed: %d\n", argc);





 





  for (c = 0; c < argc; c++)





    printf("%d argument is %s\n", c + 1, argv[c]);





 





  return 0;





}



This program prints the number of arguments passed, and the arguments which are passed to it.
Example 7 - Array program

#include <stdio.h>





 





int main()





{





    int array[100], n, c;





   





    printf("Enter number of elements in array\n");





    scanf("%d", &n);





   





    printf("Enter %d elements\n", n);





   





    for (c = 0; c < n; c++)





        scanf("%d", &array[c]);





   





    printf("The array elements are:\n");





   





    for (c = 0; c < n; c++)





        printf("%d\n", array[c]);





   





    return 0;





}



Example 8 - function program

#include <stdio.h>





 





void my_function();  // Declaring a function





 





int main()





{





  printf("Main function.\n");





 





  my_function();  // Calling the function





 





  printf("Back in function main.\n");





 





  return 0;





}





 





// Defining the function





void my_function()





{





  printf("Welcome to my function. Feel at home.\n");





}



Example 9 - Using comments in a program

#include <stdio.h>





 





int main()





{





   // Single line comment in a C program





 





   printf("Writing comments is very useful.\n");





 





   /*





    * Multi-line comment syntax





    * Comments help us to understand program later easily.





    * Will you write comments while writing programs?





    */





 





   printf("Good luck C programmer.\n");





 





   return 0;





}



Example 10 - using structures in C programming

#include <stdio.h>





#include <string.h>





 





struct game





{





  char game_name[50];





  int number_of_players;





};  // Note the semicolon





 





int main()





{





  struct game g;





 





  strcpy(g.game_name, "Cricket");





  g.number_of_players = 11;





 





  printf("Name of game: %s\n", g.game_name);





  printf("Number of players: %d\n",g.number_of_players);





 





  return 0;





}



Example 11 - C program for Fibonacci series

#include <stdio.h>





 





int main()





{





  int n, first = 0, second = 1, next, c;





 





  printf("Enter the number of terms\n");





  scanf("%d", &n);





 





  printf("First %d terms of Fibonacci series are:\n", n);





 





  for (c = 0; c < n; c++)





  {





    if (c <= 1)





      next = c;





    else





    {





      next = first + second;





      first = second;





      second = next;





    }





    printf("%d\n", next);





  }





 





  return 0;





}



Example 12 - C graphics programming

#include <graphics.h>





#include <conio.h>





 





int main()





{





    int gd = DETECT, gm;





   





    initgraph(&gd, &gm,"C:\\TC\\BGI");





   





    outtextxy(10, 20, "Graphics programming is fun!");





   





    circle(200, 200, 50);





   





    setcolor(BLUE);





   





    line(350, 250, 450, 50);





   





    getch();





    closegraph( );





    return 0;





}



How to compile C programs with GCC compiler?
If you are using GCC on Linux operating system, then you may need to modify the programs. For example, consider the following program which prints first ten natural numbers

#include <stdio.h>





#include <conio.h>





 





int main()





{





    int c;





 





    for (c = 1; c <= 10; c++)





        printf("%d\n", c);





   





    getch();





    return 0;





}



Above program includes a header file <conio.h>and uses function getch, but this file is Borland specific, so it works in Turbo C compiler but not in GCC. The program for GCC should be like:

#include <stdio.h>





 





int main()





{





    int c;





 





    /* for loop */





 





    for (c = 1; c <= 10; c++)





        printf("%d\n", c);





   





    return 0;





}



If using GCC then save the program in a file say “numbers.c” to compile the program open the terminal and enter the command “gcc numbers.c” this will compile the program and to execute the program enter the command “./a.out” do not use quotes while executing commands. You can specify the output file name as: gcc numbers.c -o numbers.out, to run execute ./numbers.out in the terminal.

C programming tutorial
A C program consists of functions and declarations or instructions given to the computer to perform a particular task. The process of writing a program involves designing the algorithm, a flowchart can be drawn, and then writing the source code, after developing the program you need to test it and debug it if it does not meet the requirement.

To make a program, you need a text editor and a compiler. You can use any text editor of your choice and a compiler. C compiler converts source code into machine code that consists of zero's, and one's only, and execution is done on a machine.
An IDE (Integrated Development Environment) provides a text editor, compiler, debugger, etc. for developing programs and managing projects. Code::Blocks IDE provides an ideal environment for development. It can import Microsoft Visual C++ projects, extendable as it uses plug-ins, open source, and cross-platform.

How to write a C program?
A C program must have at least one function which must be main. A function consists of declarations and statements, a statement is an expression followed by a semicolon, for example, a + b, printf("C program examples") are expressions and a + b; and printf("C is an easy to learn computer programming language."); are statements.
To use a variable, we must indicate its type whether it is an integer, float, character, etc. C language has many built-in data types, and we can make our own using structures and unions. Every data type has its size that may depend on the machine; for example, an integer may be of 2 or 4 Bytes. Data is stored in a binary form, i.e., group of bits where each bit may be '0' or '1'.
Keywords such as "switch," "case," "default," "register," etc. are special words with predefined meaning and can't be used for other purposes such as a variable name. Memory can be allocated at compile time or run-time using malloc and calloc functions. C language has many features such as recursion, preprocessor, conditional compilation, portability, pointers, multi-threading by using external libraries, dynamic memory allocation due to which it is used for making portable software programs and applications. Networking API's are available using which computer users can communicate and interact with each other, share files, etc.
C standard library contains functions for mathematical operations, character, input/output and time. The process of making a program which is known as coding requires knowledge of programming language and logic to achieve desired output. So you should learn C programming basics and start making programs.
Learning data structures such as stacks, queues, linked lists, etc. using C programming provides you a greater understanding as you learn everything in detail. A general belief is to go for other high-level languages, but it's a good idea to learn C before learning C++ or Java. C++ programming language is object-oriented, and it contains all the features of C language so learning C first will help you to learn C++ easily and then you can go for Java.

C programming PDF

Dev C++ compiler





Essential C



C programming books

If you are a beginner, then buy anyone of first two books mentioned below, and if you have previous programming experience or you know basics of C language, then you can buy the third one.

Let Us C By Yashavant Kanetkar





PROGRAMMING WITH C By Byron Gottfried, Jitender Chhabra