routing-tracer.cc

00001 /*
00002  * Copyright (c) 2008 Regents of the SIGNET lab, University of Padova.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. Neither the name of the University of Padova (SIGNET lab) nor the 
00014  *    names of its contributors may be used to endorse or promote products 
00015  *    derived from this software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
00018  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
00019  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
00020  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
00021  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00022  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
00023  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 
00024  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
00025  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 
00026  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
00027  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 #include<packet.h>
00031 #include<node-core.h>
00032 
00033 
00034 #include"routing-tracer.h"
00035 #include "mrcl-address.h"
00036 
00037 extern packet_t PT_MRCL_ROUTING;
00038 
00039 MrclRoutingTracer::MrclRoutingTracer() :  Tracer(3) {}
00040 
00041 void MrclRoutingTracer::format(Packet *p, SAP *sap)
00042 {
00043 
00044         hdr_cmn* ch = hdr_cmn::access(p);
00045 //      if (ch->ptype()!=PT_MRCL_ROUTING)
00046 //              return;
00047 
00048         RoutingHdr* h = HDR_ROUTING(p);
00049         
00050         int saddrLen;
00051         memcpy(&saddrLen, h->saddr(), sizeof(int));
00052         if (saddrLen==0) return; // routing addresses not yet initialized
00053         char saddr[MRCL_ADDRESS_MAX_LEN] = "";
00054         char temp[10];
00055         for(int i=saddrLen-1; i>=0; i--)
00056         {
00057                 if (i==0)
00058                         sprintf(temp,"%d", h->saddr()[i+sizeof(int)]);
00059                 else
00060                         sprintf(temp,"%d.", h->saddr()[i+sizeof(int)]);
00061                 strcat(saddr,temp);
00062         }
00063         strcat(saddr,"\0");
00064         char daddr[MRCL_ADDRESS_MAX_LEN] = "";
00065         int daddrLen;
00066         if (daddrLen>0)
00067         {
00068                 memcpy(&daddrLen, h->daddr(), sizeof(int));
00069                 strcpy(temp,"");
00070                 for(int i=daddrLen-1; i>=0; i--)
00071                 {
00072                         if (i==0)
00073                                 sprintf(temp,"%d", h->daddr()[i+sizeof(int)]);
00074                         else
00075                                 sprintf(temp,"%d.", h->daddr()[i+sizeof(int)]);
00076                         strcat(daddr,temp);
00077                 }
00078         }
00079         strcat(daddr,"\0");
00080 
00081         char nexthop[MRCL_ADDRESS_MAX_LEN] = "";
00082         int nexthopLen;
00083         memcpy(&nexthopLen, h->nexthop(), sizeof(int));
00084         strcpy(temp,"");
00085         if (nexthopLen>0)
00086         {
00087                 for(int i=nexthopLen-1; i>=0; i--)
00088                 {
00089                         if (i==0)
00090                                 sprintf(temp,"%d", h->nexthop()[i+sizeof(int)]);
00091                         else
00092                                 sprintf(temp,"%d.", h->nexthop()[i+sizeof(int)]);
00093                         strcat(nexthop,temp);
00094                 }
00095         }
00096         strcat(nexthop,"\0");
00097 
00098         
00099         writeTrace(sap, " --mROUTING-- s%s d%s n%s", saddr, daddr, nexthop);
00100 
00101 }
00102 

Generated on Wed Nov 26 15:47:27 2008 for NS-MIRACLE library by  doxygen 1.5.2