tora_logs.cc
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.   $Id: tora_logs.cc,v 1.3 2001/05/21 19:27:34 haldar Exp $
  3.   */
  4. #include <agent.h>
  5. #include <random.h>
  6. #include <trace.h>
  7. #include <ll.h>
  8. #include <priqueue.h>
  9. #include <tora/tora_packet.h>
  10. #include <tora/tora.h>
  11. #define CURRENT_TIME    Scheduler::instance().clock()
  12. static const int verbose = 0;
  13. /* ======================================================================
  14.    Logging Functions
  15.    ====================================================================== */
  16. void
  17. toraAgent::log_route_loop(nsaddr_t prev, nsaddr_t next)
  18. {
  19.         if(! logtarget || ! verbose ) return;
  20.         sprintf(logtarget->pt_->buffer(),
  21.                 "T %.9f _%d_ routing loop (%d --> %d --> %d)",
  22.                 CURRENT_TIME, ipaddr(), prev, ipaddr(), next);
  23.         logtarget->pt_->dump();
  24. }
  25. void
  26. toraAgent::log_link_layer_feedback(Packet *p)
  27. {
  28.         static int link_layer_feedback = 0;
  29.         struct hdr_cmn *ch = HDR_CMN(p);
  30.         if(! logtarget || ! verbose) return;
  31.         sprintf(logtarget->pt_->buffer(),
  32.                 "T %.9f _%d_ LL unable to deliver packet %d to %d (%d) (reason = %d, ifqlen = %d)",
  33.                 CURRENT_TIME,
  34.                 ipaddr(),
  35.                 ch->uid_,
  36.                 ch->next_hop_,
  37.                 ++link_layer_feedback,
  38.                 ch->xmit_reason_,
  39.                 ifqueue->length());
  40. logtarget->pt_->dump();
  41. }
  42. void
  43. toraAgent::log_link_layer_recycle(Packet *p)
  44. {
  45.         struct hdr_cmn *ch = HDR_CMN(p);
  46.         struct hdr_ip *ih = HDR_IP(p);
  47.         if(! logtarget || ! verbose) return;
  48.         sprintf(logtarget->pt_->buffer(),
  49.                 "T %.9f _%d_ recycling packet %d (src = %d, dst = %d, prev = %d, next = %d)",
  50.                 CURRENT_TIME,
  51.                 ipaddr(),
  52.                 ch->uid_,
  53. //                ih->src_, ih->dst_,
  54. ih->saddr(),ih->daddr(),
  55.                 ch->prev_hop_, ch->next_hop_);
  56.         logtarget->pt_->dump();
  57. }
  58.         
  59. void
  60. toraAgent::log_lnk_del(nsaddr_t dst)
  61. {
  62.         static int link_del = 0;
  63.         if(! logtarget || ! verbose) return;
  64.         /*
  65.          *  If "god" thinks that these two nodes are still
  66.          *  reachable then this is an erroneous deletion.
  67.          */
  68.         sprintf(logtarget->pt_->buffer(),
  69.                 "T %.9f _%d_ deleting LL hop to %d (delete %d is %s)",
  70.                 CURRENT_TIME,
  71.                 ipaddr(),
  72.                 dst,
  73.                 ++link_del,
  74.                 God::instance()->hops(ipaddr(), dst) != 1 ? "VALID" : "INVALID");
  75.         logtarget->pt_->dump();
  76. }
  77. void
  78. toraAgent::log_lnk_kept(nsaddr_t dst)
  79. {
  80.         static int link_kept = 0;
  81.         if(! logtarget || ! verbose) return;
  82.         /*
  83.          *  If "god" thinks that these two nodes are now
  84.          *  unreachable, then we are erroneously keeping
  85.          *  a bad route.
  86.          */
  87.         sprintf(logtarget->pt_->buffer(),
  88.                 "T %.9f _%d_ keeping LL hop to %d (keep %d is %s)",
  89.                 CURRENT_TIME,
  90.                 ipaddr(),
  91.                 dst,
  92.                 ++link_kept,
  93.                 God::instance()->hops(ipaddr(), dst) == 1 ? "VALID" : "INVALID");
  94.         logtarget->pt_->dump();
  95. }
  96. void
  97. toraAgent::log_nb_del(nsaddr_t dst, nsaddr_t id)
  98. {
  99.         if(! logtarget || ! verbose) return;
  100.         sprintf(logtarget->pt_->buffer(),
  101.                 "T %.9f _%d_ destination %d removing neighbor %d",
  102.                 CURRENT_TIME,
  103.                 ipaddr(),
  104.                 dst, id);
  105.         logtarget->pt_->dump();
  106. }
  107. void
  108. toraAgent::log_recv_qry(Packet *p)
  109. {
  110. struct hdr_ip *ih = HDR_IP(p);
  111. struct hdr_tora_qry *qh = HDR_TORA_QRY(p);
  112. if(! logtarget || ! verbose) return;
  113. sprintf(logtarget->pt_->buffer(),
  114. "T %.9f %d received `QRY` from %d --- %d",
  115. CURRENT_TIME, ipaddr(), ih->saddr(), qh->tq_dst);
  116. logtarget->pt_->dump();
  117. }
  118. void
  119. toraAgent::log_recv_upd(Packet *p)
  120. {
  121. struct hdr_ip *ih = HDR_IP(p);
  122. struct hdr_tora_upd *uh = HDR_TORA_UPD(p);
  123. if(! logtarget || ! verbose) return;
  124. sprintf(logtarget->pt_->buffer(),
  125. "T %.9f _%d_ received `UPD` from %d --- %d (%f %d %d %d %d)",
  126. CURRENT_TIME,
  127.                 ipaddr(),
  128. // ih->src_, uh->tu_dst,
  129. ih->saddr(), uh->tu_dst,
  130. uh->tu_tau, uh->tu_oid, uh->tu_r, uh->tu_delta, uh->tu_id);
  131. logtarget->pt_->dump();
  132. }
  133. void
  134. toraAgent::log_recv_clr(Packet *p)
  135. {
  136. struct hdr_ip *ih = HDR_IP(p);
  137. struct hdr_tora_clr *ch = HDR_TORA_CLR(p);
  138. if(! logtarget || ! verbose) return;
  139. sprintf(logtarget->pt_->buffer(),
  140. "T %.9f _%d_ received `CLR` from %d --- %d (%f %d)",
  141. CURRENT_TIME,
  142.                 ipaddr(),
  143.                 // ih->src_,
  144. ih->saddr(),
  145. ch->tc_dst, ch->tc_tau, ch->tc_oid);
  146. logtarget->pt_->dump();
  147. }
  148. void 
  149. toraAgent::log_route_table()
  150. {
  151. TORADest *td;
  152. TORANeighbor *tn;
  153.         if (!logtarget || ! verbose) return;
  154. for(td = dstlist.lh_first; td; td = td->link.le_next) {
  155. tn = td->nb_find_next_hop();
  156. sprintf(logtarget->pt_->buffer(),
  157. "T %.9f _%d_ %2d (%9f %2d %2d %2d %2d) ---> %2d (%9f %2d %2d %2d %2d) %d %.9f --- (%2d a, %2d d, %2d u) %d %9f",
  158. CURRENT_TIME,
  159.                         ipaddr(),
  160. td->index,
  161. td->height.tau, td->height.oid, td->height.r,
  162. td->height.delta, td->height.id,
  163. tn ? tn->index : -1,
  164. tn ? tn->height.tau : -1.0,
  165. tn ? tn->height.oid : -1,
  166. tn ? tn->height.r : -1,
  167. tn ? tn->height.delta : -1,
  168. tn ? tn->height.id: -1,
  169.                         tn ? tn->lnk_stat : -1,
  170.                         tn ? tn->time_act : -1.0,
  171. td->num_active, td->num_down, td->num_up,
  172. td->rt_req, td->time_upd);
  173. logtarget->pt_->dump();
  174. }
  175. sprintf(logtarget->pt_->buffer(),
  176. "T --------------------------------------------------");
  177. logtarget->pt_->dump();
  178. }
  179. //////////////////////////////////////////////////////////////////////
  180. //////////////////////////////////////////////////////////////////////
  181. void
  182. toraAgent::logToraDest(TORADest *td)
  183. {
  184. if(! verbose) return;
  185. assert(td);
  186. sprintf(logtarget->pt_->buffer(),
  187. "T %.9f _%d_ TD %2d (%9f %2d %2d %2d %2d) --- (%2d a, %2d d, %2d u) %d %9f",
  188. CURRENT_TIME,
  189.                         ipaddr(),
  190. td->index,
  191. td->height.tau, td->height.oid, td->height.r,
  192. td->height.delta, td->height.id,
  193. td->num_active, td->num_down, td->num_up,
  194. td->rt_req, td->time_upd);
  195. logtarget->pt_->dump();
  196. }
  197. void
  198. toraAgent::logToraNeighbor(TORANeighbor *tn)
  199. {
  200. if(! verbose) return;
  201. assert(tn);
  202. sprintf(logtarget->pt_->buffer(),
  203. "T %.9f _%d_ TN %2d (%.9f %2d %2d %2d %2d) %d %.9f",
  204. CURRENT_TIME,
  205. ipaddr(),
  206. tn->index,
  207. tn->height.tau,
  208. tn->height.oid,
  209. tn->height.r,
  210. tn->height.delta,
  211. tn->height.id,
  212. tn->lnk_stat,
  213. tn->time_act);
  214. logtarget->pt_->dump();
  215. }
  216. void
  217. toraAgent::logNextHopChange(TORADest *td)
  218. {
  219. if(! verbose) return;
  220. TORANeighbor *n;
  221. assert(td);
  222. logToraDest(td);
  223. for(n = td->nblist.lh_first; n; n = n->link.le_next)
  224. logToraNeighbor(n);
  225. n = td->nb_find_next_hop();
  226. if(n) {
  227. sprintf(logtarget->pt_->buffer(), "T %.9f _%d_ nexthop for %d is %d", 
  228. CURRENT_TIME, ipaddr(), td->index, n->index);
  229. logtarget->pt_->dump();
  230. }
  231. sprintf(logtarget->pt_->buffer(),
  232. "T %.9f _%d_ --------------------------------------------------",
  233. CURRENT_TIME,
  234. ipaddr());
  235. logtarget->pt_->dump();
  236. }
  237. void
  238. toraAgent::logNbDeletedLastDN(TORADest *td)
  239. {
  240. if(! verbose) return;
  241. sprintf(logtarget->pt_->buffer(), "T %.9f _%d_ lost last downstream link for destination %d",
  242. CURRENT_TIME,
  243. ipaddr(),
  244. td->index);
  245. logtarget->pt_->dump();
  246. logNextHopChange(td);
  247. }