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 #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
00046
00047
00048 RoutingHdr* h = HDR_ROUTING(p);
00049
00050 int saddrLen;
00051 memcpy(&saddrLen, h->saddr(), sizeof(int));
00052 if (saddrLen==0) return;
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