00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 #include<packettracer.h>
00034 #include<sap.h>
00035 #include<packet.h>
00036 #include"umts-phy.h"
00037 #include"umts-headers.h"
00038 #include"umts-packet.h"
00039 #include<string>
00040 
00041 
00042 class UmtsTracer : public Tracer
00043 {
00044  public:
00045   UmtsTracer();
00046  protected:
00047   void format(Packet *p, SAP* sap);
00048 };
00049 
00050 
00051 
00052 UmtsTracer::UmtsTracer() : Tracer(1) {}
00053 
00054 
00055 void UmtsTracer::format(Packet *p, SAP *sap)
00056 {
00057 
00058 
00059   hdr_cmn* ch = HDR_CMN(p);
00060   hdr_umtsphy* uh = HDR_UMTSPHY(p);
00061   hdr_MPhy*    ph = HDR_MPHY(p); 
00062   hdr_rlc*   rlch = hdr_rlc::access(p);
00063 
00064   packet_t  t = ch->ptype();
00065 
00066   
00067   if (t == PT_AM) 
00068     {
00069       
00070     }
00071   else if (t == PT_UMTSCTRL) 
00072     {
00073       
00074     }
00075   else 
00076     {
00077       
00078       return;
00079     }
00080 
00081 
00082 
00083   char tstr[10];
00084   
00085   if (uh->me_code_id > 0)
00086     {
00087 
00088 
00089 
00090         snprintf(tstr,9,"%02d",uh->me_code_id);
00091     }
00092   else
00093     strncpy(tstr, "   ", 9);    
00094   tstr[9] = '\0';  
00095 
00096 
00097 
00098   string descr;
00099 
00100   if (ch->ptype() == PT_AM) 
00101     {
00102       descr.append("AM");
00103       descr.append((rlch->lltype() & RLC_DATA) ? "DATA" : "STATUS");
00104       if (rlch->lltype() & RLC_BITMAP) descr.append(" BITMAP");
00105       if (rlch->lltype() & RLC_MRW) 
00106         {
00107           descr.append(" MRW");
00108           char fsn[10];
00109           snprintf(fsn,10," %d",rlch->SN_MRW);
00110           descr.append(fsn);
00111         }
00112       if (rlch->lltype() & RLC_MRWACK) 
00113         {
00114           descr.append(" MRWACK");
00115           char fsn[10];
00116           snprintf(fsn,10," %d",rlch->SN_MRW_ACK);
00117           descr.append(fsn);
00118         }
00119 
00120       if (rlch->lltype() & RLC_ACK) descr.append(" ACK");
00121       if (rlch->poll()) descr.append(" POLL");
00122     }
00123   else if (ch->ptype() == PT_UMTSCTRL)
00124     {
00125       descr.append("CTRL");
00126     }
00127   else if (ch->ptype() == PT_UM)
00128     {
00129       descr.append("UM");
00130     }
00131   else 
00132     {
00133       descr.append("UNKOWN");
00134     }
00135   
00136 
00137 
00138 
00139   writeTrace(sap, " UMTS %s %s %s %s %02d %02d %03d %s %s",
00140              (uh->direction == DIRECTION_DOWNLINK) ? "DL" : "UL",
00141              (uh->data == true) ? "D" : "C",
00142              (uh->powerUp == true) ? "PU" : "PD",
00143              tstr,
00144              rlch->src_rlc_id_, 
00145              rlch->dst_rlc_id_,
00146              rlch->seqno(),
00147              (rlch->eopno() == rlch->seqno()) ? "eop" : "---",
00148              descr.c_str());
00149              
00150 }
00151 
00152 extern "C" int Umtstracer_Init()
00153 {  
00154   SAP::addTracer(new UmtsTracer);
00155   return 0;
00156 }
00157 extern "C" int  Cygumtstracer_Init()
00158 {
00159   Umtstracer_Init();
00160 }
00161 
00162