[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] Propagtion fault



try using gdb. Recompile with option -g. Then "gdb ns core" and "bt" for 
backtrace, will show you the stack at sigsev time.
 
>X-Authentication-Warning: condor.eng.warwick.ac.uk: esrub owned process doing 
-bs
>Date: Mon, 30 Oct 2000 16:56:53 +0000 (GMT)
>From: Z Sun <[email protected]>
>To: [email protected]
>Subject: [ns] Propagtion fault
>MIME-Version: 1.0
>
>Hello,
>
>I am trying to add a new propagation model. the source code as following:
>**************
>diffuse.cc
>*************
>#include <math.h>
> 
>#include <delay.h>
>#include <packet.h>
> 
>#include <packet-stamp.h>
>#include <antenna.h>
>#include <mobilenode.h>
>#include <propagation.h>
>#include <wireless-phy.h>
>#include <diffuse.h>
> 
>static class DiffuseClass: public TclClass {
>public:
>        DiffuseClass() : TclClass("Propagation/Diffuse") {}
>        TclObject* create(int, const char*const*) {
>                return (new Diffuse);
>        }
>} class_diffuse;
> 
> 
>Diffuse::Diffuse()
>{
>        H=1.5;        //Height of Tx & Rx
>        s=0;                //d/TR
>        double Length=3.00;        //Length of the room
>}
> 
> 
>static double
>diffuse(double Pt, double A, double q, double s, double H)
>{
>        /*
>         * Unshadow diffuse free space equation for n=1.00:
>         *
>         *        0.18+1.00s      q*A*Pt
> 
>         *   P =10           *(-------------)
>         *                      3*PI*H*H
> double M=pow(10, 0.18+1.00*s);
>return M* Pt * A * q  /(3*PI*H(*) ;
>                        //return (pow(10, 0.18+1.00*s)) * Pt * A * q
>/(3*PI*H*H) ;
>printf("M %e\n", M);
>}
>double
>Diffuse::Pr(PacketStamp *t, PacketStamp *r,  double Length)
>     {
>  double rX, rY, rZ;            // loc of receiver
>  double tX, tY, tZ;            // loc of xmitter
>  double s;                     // dist/TR
>  double Pr;
>  double A=1.00;
>  double q=0.8;
>  r->getNode()->getLoc(&rX, &rY, &rZ);
>  t->getNode()->getLoc(&tX, &tY, &tZ);
> 
>   rX += r->getAntenna()->getX();
>  rY += r->getAntenna()->getY();
>  tX += t->getAntenna()->getX();
>  tY += t->getAntenna()->getY();
> 
>  s=sqrt((rY-tY)*(rY-tY))/3.00;      //L is the length of the room
>  printf("diffuse %e\n", s);
>  /*#if DEBUG > 3
>  printf("TRG %.9f %d(%d,%d)@%d(%d,%d) xo=%f :",
>         Scheduler::instance().clock(),
>         t->getNode()->index(), (int)tX, (int)tY,
>         r->getNode()->index(), (int)rX, (int)rY,
>          s);
>#endif*/
> printf("diffuse %e\n", s);
>    Pr = diffuse(t->getTxPr(), A , q, s, H);
>    //#if DEBUG > 3
>    printf("diffuse %e\n",Pr);
>    //#endif
>    return Pr;
>  }
>
>**************************************
>diffuse.h
>*************************************************
>#ifndef __diffuse_h__
>#define __diffuse_h__
>#include <packet-stamp.h>
>#include <wireless-phy.h>
>#include <propagation.h>
> 
>class Diffuse : public Propagation {
>public:
>  Diffuse();
>        virtual double Pr(PacketStamp *tx, PacketStamp *rx, WirelessPhy
>*ifp)
>    {return Pr(tx, rx, ifp->getL());}
> 
>protected:
>  virtual double Pr(PacketStamp *tx, PacketStamp *rx, double Length);
> 
>  double H;
>  double s;
> 
> 
>};
> 
> 
>#endif /* __diffuse_h__ */
>
>******************************************
>I didn't change any value set in wireless-phy.cc.
>
>After make successfully, I change the command in simple-wireles.tcl
>set val(prop)           Propagation/TwoRayGround      ;
>
>to set val(prop)        Propagation/Diffuse      ;
>
>Then I did : ns simple-wireless.tcl
>
>The information shown are:
>Starting Simulation...
>Propagation model Segmentation fault
>
>I think that I might change some parametres, but just can't finger
>out what I shall do.
>
>Any information would be very helpful.
>
>Z Sun

Tarik