src/common/error-model.cc
changeset 2983 e3a416fe9dd5
parent 2602 d9262bff6df2
child 2989 b7eb3929096c
equal deleted inserted replaced
2982:a7e3e54c7e94 2983:e3a416fe9dd5
    50 }
    50 }
    51 
    51 
    52 ErrorModel::ErrorModel () :
    52 ErrorModel::ErrorModel () :
    53   m_enable (true) 
    53   m_enable (true) 
    54 {
    54 {
    55   NS_LOG_FUNCTION;  
    55   NS_LOG_FUNCTION_NOARGS ();
    56 }
    56 }
    57 
    57 
    58 ErrorModel::~ErrorModel ()
    58 ErrorModel::~ErrorModel ()
    59 {
    59 {
    60   NS_LOG_FUNCTION;  
    60   NS_LOG_FUNCTION_NOARGS ();
    61 }
    61 }
    62 
    62 
    63 bool
    63 bool
    64 ErrorModel::IsCorrupt (Ptr<Packet> p)
    64 ErrorModel::IsCorrupt (Ptr<Packet> p)
    65 {
    65 {
    66   NS_LOG_FUNCTION;
    66   NS_LOG_FUNCTION_NOARGS ();
    67   bool result;
    67   bool result;
    68   // Insert any pre-conditions here
    68   // Insert any pre-conditions here
    69   result = DoCorrupt (p);
    69   result = DoCorrupt (p);
    70   // Insert any post-conditions here
    70   // Insert any post-conditions here
    71   return result;
    71   return result;
    72 }
    72 }
    73 
    73 
    74 void
    74 void
    75 ErrorModel::Reset (void)
    75 ErrorModel::Reset (void)
    76 {
    76 {
    77   NS_LOG_FUNCTION;  
    77   NS_LOG_FUNCTION_NOARGS ();
    78   DoReset ();
    78   DoReset ();
    79 }
    79 }
    80 
    80 
    81 void
    81 void
    82 ErrorModel::Enable (void)
    82 ErrorModel::Enable (void)
    83 {
    83 {
    84   NS_LOG_FUNCTION;  
    84   NS_LOG_FUNCTION_NOARGS ();
    85   m_enable = true;
    85   m_enable = true;
    86 }
    86 }
    87 
    87 
    88 void
    88 void
    89 ErrorModel::Disable (void)
    89 ErrorModel::Disable (void)
    90 {
    90 {
    91   NS_LOG_FUNCTION;  
    91   NS_LOG_FUNCTION_NOARGS ();
    92   m_enable = false;
    92   m_enable = false;
    93 }
    93 }
    94 
    94 
    95 bool
    95 bool
    96 ErrorModel::IsEnabled (void) const
    96 ErrorModel::IsEnabled (void) const
    97 {
    97 {
    98   NS_LOG_FUNCTION;  
    98   NS_LOG_FUNCTION_NOARGS ();
    99   return m_enable;
    99   return m_enable;
   100 }
   100 }
   101 
   101 
   102 //
   102 //
   103 // RateErrorModel
   103 // RateErrorModel
   129 }
   129 }
   130 
   130 
   131 
   131 
   132 RateErrorModel::RateErrorModel ()
   132 RateErrorModel::RateErrorModel ()
   133 {
   133 {
   134   NS_LOG_FUNCTION;
   134   NS_LOG_FUNCTION_NOARGS ();
   135 }
   135 }
   136 
   136 
   137 RateErrorModel::~RateErrorModel () 
   137 RateErrorModel::~RateErrorModel () 
   138 {
   138 {
   139   NS_LOG_FUNCTION;
   139   NS_LOG_FUNCTION_NOARGS ();
   140 }
   140 }
   141 
   141 
   142 enum ErrorUnit 
   142 enum ErrorUnit 
   143 RateErrorModel::GetUnit (void) const 
   143 RateErrorModel::GetUnit (void) const 
   144 { 
   144 { 
   145   NS_LOG_FUNCTION;
   145   NS_LOG_FUNCTION_NOARGS ();
   146   return m_unit; 
   146   return m_unit; 
   147 }
   147 }
   148 
   148 
   149 void 
   149 void 
   150 RateErrorModel::SetUnit (enum ErrorUnit error_unit) 
   150 RateErrorModel::SetUnit (enum ErrorUnit error_unit) 
   151 { 
   151 { 
   152   NS_LOG_FUNCTION;
   152   NS_LOG_FUNCTION_NOARGS ();
   153   m_unit = error_unit; 
   153   m_unit = error_unit; 
   154 }
   154 }
   155 
   155 
   156 double
   156 double
   157 RateErrorModel::GetRate (void) const 
   157 RateErrorModel::GetRate (void) const 
   158 { 
   158 { 
   159   NS_LOG_FUNCTION;
   159   NS_LOG_FUNCTION_NOARGS ();
   160   return m_rate; 
   160   return m_rate; 
   161 }
   161 }
   162 
   162 
   163 void 
   163 void 
   164 RateErrorModel::SetRate (double rate)
   164 RateErrorModel::SetRate (double rate)
   165 { 
   165 { 
   166   NS_LOG_FUNCTION;
   166   NS_LOG_FUNCTION_NOARGS ();
   167   m_rate = rate;
   167   m_rate = rate;
   168 }
   168 }
   169 
   169 
   170 void 
   170 void 
   171 RateErrorModel::SetRandomVariable (const RandomVariable &ranvar)
   171 RateErrorModel::SetRandomVariable (const RandomVariable &ranvar)
   172 {
   172 {
   173   NS_LOG_FUNCTION;
   173   NS_LOG_FUNCTION_NOARGS ();
   174   m_ranvar = ranvar;
   174   m_ranvar = ranvar;
   175 }
   175 }
   176 
   176 
   177 bool 
   177 bool 
   178 RateErrorModel::DoCorrupt (Ptr<Packet> p) 
   178 RateErrorModel::DoCorrupt (Ptr<Packet> p) 
   179 { 
   179 { 
   180   NS_LOG_FUNCTION;
   180   NS_LOG_FUNCTION_NOARGS ();
   181   if (!m_enable)
   181   if (!m_enable)
   182     {
   182     {
   183       return false;  
   183       return false;  
   184     }
   184     }
   185   switch (m_unit) 
   185   switch (m_unit) 
   198 }
   198 }
   199 
   199 
   200 bool
   200 bool
   201 RateErrorModel::DoCorruptPkt (Ptr<Packet> p)
   201 RateErrorModel::DoCorruptPkt (Ptr<Packet> p)
   202 {
   202 {
   203   NS_LOG_FUNCTION;
   203   NS_LOG_FUNCTION_NOARGS ();
   204   return (m_ranvar.GetValue () < m_rate);
   204   return (m_ranvar.GetValue () < m_rate);
   205 }
   205 }
   206 
   206 
   207 bool
   207 bool
   208 RateErrorModel::DoCorruptByte (Ptr<Packet> p)
   208 RateErrorModel::DoCorruptByte (Ptr<Packet> p)
   209 {
   209 {
   210   NS_LOG_FUNCTION;
   210   NS_LOG_FUNCTION_NOARGS ();
   211   // compute pkt error rate, assume uniformly distributed byte error
   211   // compute pkt error rate, assume uniformly distributed byte error
   212   double per = 1 - pow (1.0 - m_rate, p->GetSize ());
   212   double per = 1 - pow (1.0 - m_rate, p->GetSize ());
   213   return (m_ranvar.GetValue () < per);
   213   return (m_ranvar.GetValue () < per);
   214 }
   214 }
   215 
   215 
   216 bool
   216 bool
   217 RateErrorModel::DoCorruptBit(Ptr<Packet> p)
   217 RateErrorModel::DoCorruptBit(Ptr<Packet> p)
   218 {
   218 {
   219   NS_LOG_FUNCTION;
   219   NS_LOG_FUNCTION_NOARGS ();
   220   // compute pkt error rate, assume uniformly distributed bit error
   220   // compute pkt error rate, assume uniformly distributed bit error
   221   double per = 1 - pow (1.0 - m_rate, (8 * p->GetSize ()) );
   221   double per = 1 - pow (1.0 - m_rate, (8 * p->GetSize ()) );
   222   return (m_ranvar.GetValue () < per);
   222   return (m_ranvar.GetValue () < per);
   223 }
   223 }
   224 
   224 
   225 void 
   225 void 
   226 RateErrorModel::DoReset (void) 
   226 RateErrorModel::DoReset (void) 
   227 { 
   227 { 
   228   NS_LOG_FUNCTION;
   228   NS_LOG_FUNCTION_NOARGS ();
   229   /* re-initialize any state; no-op for now */ 
   229   /* re-initialize any state; no-op for now */ 
   230 }
   230 }
   231 
   231 
   232 //
   232 //
   233 // ListErrorModel
   233 // ListErrorModel
   244   return tid;
   244   return tid;
   245 }
   245 }
   246 
   246 
   247 ListErrorModel::ListErrorModel ()  
   247 ListErrorModel::ListErrorModel ()  
   248 {
   248 {
   249   NS_LOG_FUNCTION;
   249   NS_LOG_FUNCTION_NOARGS ();
   250 }
   250 }
   251 
   251 
   252 ListErrorModel::~ListErrorModel () 
   252 ListErrorModel::~ListErrorModel () 
   253 {
   253 {
   254   NS_LOG_FUNCTION;
   254   NS_LOG_FUNCTION_NOARGS ();
   255 }
   255 }
   256 
   256 
   257 std::list<uint32_t> 
   257 std::list<uint32_t> 
   258 ListErrorModel::GetList (void) const 
   258 ListErrorModel::GetList (void) const 
   259 { 
   259 { 
   260   NS_LOG_FUNCTION;
   260   NS_LOG_FUNCTION_NOARGS ();
   261   return m_packetList; 
   261   return m_packetList; 
   262 }
   262 }
   263 
   263 
   264 void 
   264 void 
   265 ListErrorModel::SetList (const std::list<uint32_t> &packetlist)
   265 ListErrorModel::SetList (const std::list<uint32_t> &packetlist)
   266 { 
   266 { 
   267   NS_LOG_FUNCTION;
   267   NS_LOG_FUNCTION_NOARGS ();
   268   m_packetList = packetlist;
   268   m_packetList = packetlist;
   269 }
   269 }
   270 
   270 
   271 // When performance becomes a concern, the list provided could be 
   271 // When performance becomes a concern, the list provided could be 
   272 // converted to a dynamically-sized array of uint32_t to avoid 
   272 // converted to a dynamically-sized array of uint32_t to avoid 
   273 // list iteration below.
   273 // list iteration below.
   274 bool 
   274 bool 
   275 ListErrorModel::DoCorrupt (Ptr<Packet> p) 
   275 ListErrorModel::DoCorrupt (Ptr<Packet> p) 
   276 { 
   276 { 
   277   NS_LOG_FUNCTION;
   277   NS_LOG_FUNCTION_NOARGS ();
   278   if (!m_enable)
   278   if (!m_enable)
   279     {
   279     {
   280       return false;  
   280       return false;  
   281     }
   281     }
   282   uint32_t uid = p->GetUid ();
   282   uint32_t uid = p->GetUid ();
   292 }
   292 }
   293 
   293 
   294 void 
   294 void 
   295 ListErrorModel::DoReset (void) 
   295 ListErrorModel::DoReset (void) 
   296 { 
   296 { 
   297   NS_LOG_FUNCTION;
   297   NS_LOG_FUNCTION_NOARGS ();
   298   m_packetList.clear();
   298   m_packetList.clear();
   299 }
   299 }
   300 
   300 
   301 
   301 
   302 } //namespace ns3
   302 } //namespace ns3