亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ctpforwardingenginep.nc

?? tinyos-2.x.rar
?? NC
?? 第 1 頁 / 共 3 頁
字號:
        call CollectionDebug.logEvent(NET_C_FE_GET_MSGPOOL_ERR);
        return m;
      }

      newMsg = call MessagePool.get();
      if (newMsg == NULL) {
        call CollectionDebug.logEvent(NET_C_FE_GET_QEPOOL_ERR);
        return m;
      }

      memset(newMsg, 0, sizeof(message_t));
      memset(m->metadata, 0, sizeof(message_metadata_t));
      
      qe->msg = m;
      qe->client = 0xff;
      qe->retries = MAX_RETRIES;

      
      if (call SendQueue.enqueue(qe) == SUCCESS) {
        dbg("Forwarder,Route", "%s forwarding packet %p with queue size %hhu\n", __FUNCTION__, m, call SendQueue.size());
        // Loop-detection code:
        if (call CtpInfo.getEtx(&gradient) == SUCCESS) {
          // We only check for loops if we know our own metric
          if (call CtpPacket.getEtx(m) <= gradient) {
            // If our etx metric is less than or equal to the etx value
	    // on the packet (etx of the previous hop node), then we believe
	    // we are in a loop.
	    // Trigger a route update and backoff.
            call CtpInfo.triggerImmediateRouteUpdate();
            startRetxmitTimer(LOOPY_WINDOW, LOOPY_OFFSET);
            call CollectionDebug.logEventMsg(NET_C_FE_LOOP_DETECTED,
					 call CollectionPacket.getSequenceNumber(m), 
					 call CollectionPacket.getOrigin(m), 
                                         call AMPacket.destination(m));
          }
        }

        if (!call RetxmitTimer.isRunning()) {
          // sendTask is only immediately posted if we don't detect a
          // loop.
	  dbg("FHangBug", "%s: posted sendTask.\n", __FUNCTION__);
          post sendTask();
        }
        
        // Successful function exit point:
        return newMsg;
      } else {
        // There was a problem enqueuing to the send queue.
        if (call MessagePool.put(newMsg) != SUCCESS)
          call CollectionDebug.logEvent(NET_C_FE_PUT_MSGPOOL_ERR);
        if (call QEntryPool.put(qe) != SUCCESS)
          call CollectionDebug.logEvent(NET_C_FE_PUT_QEPOOL_ERR);
      }
    }

    // NB: at this point, we have a resource acquistion problem.
    // Log the event, and drop the
    // packet on the floor.

    call CollectionDebug.logEvent(NET_C_FE_SEND_QUEUE_FULL);
    return m;
  }
 
  /*
   * Received a message to forward. Check whether it is a duplicate by
   * checking the packets currently in the queue as well as the 
   * send history cache (in case we recently forwarded this packet).
   * The cache is important as nodes immediately forward packets
   * but wait a period before retransmitting after an ack failure.
   * If this node is a root, signal receive.
   */ 
  event message_t* 
  SubReceive.receive(message_t* msg, void* payload, uint8_t len) {
    collection_id_t collectid;
    bool duplicate = FALSE;
    fe_queue_entry_t* qe;
    uint8_t i, thl;


    collectid = call CtpPacket.getType(msg);

    // Update the THL here, since it has lived another hop, and so
    // that the root sees the correct THL.
    thl = call CtpPacket.getThl(msg);
    thl++;
    call CtpPacket.setThl(msg, thl);

    call CollectionDebug.logEventMsg(NET_C_FE_RCV_MSG,
					 call CollectionPacket.getSequenceNumber(msg), 
					 call CollectionPacket.getOrigin(msg), 
				     thl--);
    if (len > call SubSend.maxPayloadLength()) {
      return msg;
    }

    //See if we remember having seen this packet
    //We look in the sent cache ...
    if (call SentCache.lookup(msg)) {
        call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_CACHE);
        return msg;
    }
    //... and in the queue for duplicates
    if (call SendQueue.size() > 0) {
      for (i = call SendQueue.size(); --i;) {
	qe = call SendQueue.element(i);
	if (call CtpPacket.matchInstance(qe->msg, msg)) {
	  duplicate = TRUE;
	  break;
	}
      }
    }
    
    if (duplicate) {
        call CollectionDebug.logEvent(NET_C_FE_DUPLICATE_QUEUE);
        return msg;
    }

    // If I'm the root, signal receive. 
    else if (call RootControl.isRoot())
      return signal Receive.receive[collectid](msg, 
					       call Packet.getPayload(msg, call Packet.payloadLength(msg)), 
					       call Packet.payloadLength(msg));
    // I'm on the routing path and Intercept indicates that I
    // should not forward the packet.
    else if (!signal Intercept.forward[collectid](msg, 
						  call Packet.getPayload(msg, call Packet.payloadLength(msg)), 
						  call Packet.payloadLength(msg)))
      return msg;
    else {
      dbg("Route", "Forwarding packet from %hu.\n", getHeader(msg)->origin);
      return forward(msg);
    }
  }

  event message_t* 
  SubSnoop.receive(message_t* msg, void *payload, uint8_t len) {
    //am_addr_t parent = call UnicastNameFreeRouting.nextHop();
    am_addr_t proximalSrc = call AMPacket.source(msg);

    // Check for the pull bit (P) [TEP123] and act accordingly.  This
    // check is made for all packets, not just ones addressed to us.
    if (call CtpPacket.option(msg, CTP_OPT_PULL)) {
      call CtpInfo.triggerRouteUpdate();
    }

    call CtpInfo.setNeighborCongested(proximalSrc, call CtpPacket.option(msg, CTP_OPT_ECN));
    return signal Snoop.receive[call CtpPacket.getType(msg)] 
      (msg, payload + sizeof(ctp_data_header_t), 
       len - sizeof(ctp_data_header_t));
  }
  
  event void RetxmitTimer.fired() {
    clearState(SENDING);
    dbg("FHangBug", "%s posted sendTask.\n", __FUNCTION__);
    post sendTask();
  }

  command bool CtpCongestion.isCongested() {
    return FALSE;
  }

  command void CtpCongestion.setClientCongested(bool congested) {
    // Do not respond to congestion.
  }
  
  /* signalled when this neighbor is evicted from the neighbor table */
  event void LinkEstimator.evicted(am_addr_t neighbor) {}

  
  // Packet ADT commands
  command void Packet.clear(message_t* msg) {
    call SubPacket.clear(msg);
  }

  command uint8_t Packet.payloadLength(message_t* msg) {
    return call SubPacket.payloadLength(msg) - sizeof(ctp_data_header_t);
  }

  command void Packet.setPayloadLength(message_t* msg, uint8_t len) {
    call SubPacket.setPayloadLength(msg, len + sizeof(ctp_data_header_t));
  }
  
  command uint8_t Packet.maxPayloadLength() {
    return call SubPacket.maxPayloadLength() - sizeof(ctp_data_header_t);
  }

  command void* Packet.getPayload(message_t* msg, uint8_t len) {
    uint8_t* payload = call SubPacket.getPayload(msg, len + sizeof(ctp_data_header_t));
    if (payload != NULL) {
      payload += sizeof(ctp_data_header_t);
    }
    return payload;
  }

  // CollectionPacket ADT commands
  command am_addr_t       CollectionPacket.getOrigin(message_t* msg) {return getHeader(msg)->origin;}
  command collection_id_t CollectionPacket.getType(message_t* msg) {return getHeader(msg)->type;}
  command uint8_t         CollectionPacket.getSequenceNumber(message_t* msg) {return getHeader(msg)->originSeqNo;}
  command void CollectionPacket.setOrigin(message_t* msg, am_addr_t addr) {getHeader(msg)->origin = addr;}
  command void CollectionPacket.setType(message_t* msg, collection_id_t id) {getHeader(msg)->type = id;}
  command void CollectionPacket.setSequenceNumber(message_t* msg, uint8_t _seqno) {getHeader(msg)->originSeqNo = _seqno;}

  // CtpPacket ADT commands
  command uint8_t       CtpPacket.getType(message_t* msg) {return getHeader(msg)->type;}
  command am_addr_t     CtpPacket.getOrigin(message_t* msg) {return getHeader(msg)->origin;}
  command uint16_t      CtpPacket.getEtx(message_t* msg) {return getHeader(msg)->etx;}
  command uint8_t       CtpPacket.getSequenceNumber(message_t* msg) {return getHeader(msg)->originSeqNo;}
  command uint8_t       CtpPacket.getThl(message_t* msg) {return getHeader(msg)->thl;}
  command void CtpPacket.setThl(message_t* msg, uint8_t thl) {getHeader(msg)->thl = thl;}
  command void CtpPacket.setOrigin(message_t* msg, am_addr_t addr) {getHeader(msg)->origin = addr;}
  command void CtpPacket.setType(message_t* msg, uint8_t id) {getHeader(msg)->type = id;}
  command void CtpPacket.setEtx(message_t* msg, uint16_t e) {getHeader(msg)->etx = e;}
  command void CtpPacket.setSequenceNumber(message_t* msg, uint8_t _seqno) {getHeader(msg)->originSeqNo = _seqno;}
  command bool CtpPacket.option(message_t* msg, ctp_options_t opt) {
    return ((getHeader(msg)->options & opt) == opt) ? TRUE : FALSE;
  }
  command void CtpPacket.setOption(message_t* msg, ctp_options_t opt) {
    getHeader(msg)->options |= opt;
  }
  command void CtpPacket.clearOption(message_t* msg, ctp_options_t opt) {
    getHeader(msg)->options &= ~opt;
  }


  // A CTP packet ID is based on the origin and the THL field, to
  // implement duplicate suppression as described in TEP 123.
  command bool CtpPacket.matchInstance(message_t* m1, message_t* m2) {
    return (call CtpPacket.getOrigin(m1) == call CtpPacket.getOrigin(m2) &&
	    call CtpPacket.getSequenceNumber(m1) == call CtpPacket.getSequenceNumber(m2) &&
	    call CtpPacket.getThl(m1) == call CtpPacket.getThl(m2) &&
	    call CtpPacket.getType(m1) == call CtpPacket.getType(m2));
  }

  command bool CtpPacket.matchPacket(message_t* m1, message_t* m2) {
    return (call CtpPacket.getOrigin(m1) == call CtpPacket.getOrigin(m2) &&
	    call CtpPacket.getSequenceNumber(m1) == call CtpPacket.getSequenceNumber(m2) &&
	    call CtpPacket.getType(m1) == call CtpPacket.getType(m2));
  }


  void clearState(uint8_t state) {
    forwardingState = forwardingState & ~state;
  }
  bool hasState(uint8_t state) {
    return forwardingState & state;
  }
  void setState(uint8_t state) {
    forwardingState = forwardingState | state;
  }
  
  /******** Defaults. **************/
   
  default event void
  Send.sendDone[uint8_t client](message_t *msg, error_t error) {
  }

  default event bool
  Intercept.forward[collection_id_t collectid](message_t* msg, void* payload, 
                                               uint8_t len) {
    return TRUE;
  }

  default event message_t *
  Receive.receive[collection_id_t collectid](message_t *msg, void *payload,
                                             uint8_t len) {
    return msg;
  }

  default event message_t *
  Snoop.receive[collection_id_t collectid](message_t *msg, void *payload,
                                           uint8_t len) {
    return msg;
  }

  default command collection_id_t CollectionId.fetch[uint8_t client]() {
    return 0;
  }
  
  /* Default implementations for CollectionDebug calls.
   * These allow CollectionDebug not to be wired to anything if debugging
   * is not desired. */
  
  default command error_t CollectionDebug.logEvent(uint8_t type) {
    return SUCCESS;
  }
  default command error_t CollectionDebug.logEventSimple(uint8_t type, uint16_t arg) {
    return SUCCESS;
  }
  default command error_t CollectionDebug.logEventDbg(uint8_t type, uint16_t arg1, uint16_t arg2, uint16_t arg3) {
    return SUCCESS;
  }
  default command error_t CollectionDebug.logEventMsg(uint8_t type, uint16_t msg, am_addr_t origin, am_addr_t node) {
    return SUCCESS;
  }
  default command error_t CollectionDebug.logEventRoute(uint8_t type, am_addr_t parent, uint8_t hopcount, uint16_t metric) {
    return SUCCESS;
  }
   
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美天天综合网| 亚洲同性同志一二三专区| 99久久精品国产观看| 久久99蜜桃精品| 久草这里只有精品视频| 日本成人在线不卡视频| 日本亚洲电影天堂| 秋霞午夜鲁丝一区二区老狼| 日韩高清不卡一区| 美腿丝袜一区二区三区| 日韩电影免费在线| 国产色婷婷亚洲99精品小说| 久久女同精品一区二区| 久久综合视频网| 国产精品久久免费看| 国产精品另类一区| 一区二区三区美女| 日韩国产精品久久久久久亚洲| 亚洲一二三区视频在线观看| 五月婷婷综合在线| 久草这里只有精品视频| 风间由美性色一区二区三区| 91啪九色porn原创视频在线观看| 在线一区二区三区四区五区 | 免费高清在线一区| 国产一区二区免费看| 欧美日韩综合不卡| 欧美三级午夜理伦三级中视频| 欧美理论片在线| 精品黑人一区二区三区久久| 国产精品私人影院| 亚洲成人自拍一区| 国产91在线|亚洲| 欧美三片在线视频观看| 精品成人一区二区三区四区| 国产精品久久久久天堂| 日韩黄色免费电影| 风间由美一区二区三区在线观看| 欧美午夜不卡在线观看免费| 精品免费国产二区三区| 亚洲免费色视频| 国产乱对白刺激视频不卡| 日本久久一区二区| 精品成人一区二区| 亚洲aaa精品| 国产91丝袜在线18| 日韩欧美国产综合一区| 综合中文字幕亚洲| 国产成人午夜电影网| 在线不卡的av| 一二三区精品视频| 成人sese在线| 亚洲女人****多毛耸耸8| 日韩va欧美va亚洲va久久| www.av亚洲| 久久久久亚洲综合| 久久精品国产精品亚洲红杏| 欧美私人免费视频| 亚洲人成在线播放网站岛国| 国产一二精品视频| 欧美电视剧在线观看完整版| 午夜久久久久久电影| 色久优优欧美色久优优| 综合欧美一区二区三区| 国产成人精品www牛牛影视| 欧美大尺度电影在线| 亚洲成人福利片| 91久久线看在观草草青青| 国产精品久线在线观看| 亚洲大片免费看| 国产黄色成人av| 国产欧美在线观看一区| 国产精品一区二区三区乱码| 2020国产精品久久精品美国| 麻豆91免费看| 精品久久久久久久久久久院品网| 日韩 欧美一区二区三区| 欧美精品丝袜中出| 日韩成人一区二区| 欧美视频在线一区| 亚洲成在人线在线播放| 欧美日韩另类国产亚洲欧美一级| 一级女性全黄久久生活片免费| 91麻豆国产精品久久| 亚洲精品中文字幕乱码三区| 日本黄色一区二区| 亚洲国产精品一区二区久久| 欧美精选一区二区| 精品在线播放免费| 国产调教视频一区| 91小宝寻花一区二区三区| 亚洲黄色片在线观看| 91搞黄在线观看| 欧美aaaaa成人免费观看视频| 日韩欧美在线网站| 国产经典欧美精品| 亚洲男人天堂av| 制服.丝袜.亚洲.中文.综合 | 国产精品伦一区| 欧美综合一区二区| 欧美aaaaa成人免费观看视频| 久久综合精品国产一区二区三区| 成人性色生活片| 亚洲国产欧美在线| 日韩视频在线一区二区| 国产成人免费在线视频| 国产精品国产三级国产普通话99| 91福利国产成人精品照片| 麻豆精品精品国产自在97香蕉| 久久女同互慰一区二区三区| av激情成人网| 欧美aⅴ一区二区三区视频| 中文一区二区在线观看| 欧美揉bbbbb揉bbbbb| 国产精品香蕉一区二区三区| 亚洲午夜久久久久中文字幕久| 精品粉嫩aⅴ一区二区三区四区| 99视频精品全部免费在线| 日韩一区二区精品葵司在线| 久久夜色精品国产欧美乱极品| 成人免费高清视频| 青青草原综合久久大伊人精品优势| 国产日韩精品视频一区| 欧美日韩不卡在线| 91欧美一区二区| 国产精品正在播放| 日本欧美久久久久免费播放网| 国产精品久久久久久久裸模| 日韩女优电影在线观看| 欧美性色黄大片手机版| 国产白丝网站精品污在线入口| 亚洲mv在线观看| 最新欧美精品一区二区三区| 69精品人人人人| 一本大道久久a久久综合| 国产超碰在线一区| 极品尤物av久久免费看| 日韩av高清在线观看| 亚洲一区二区高清| 欧美成人女星排行榜| 欧美日韩视频一区二区| 一本色道久久综合精品竹菊| 国产黄色精品网站| 国产一区二区三区在线观看免费| 丝袜亚洲精品中文字幕一区| 亚洲精品欧美激情| 国产精品久久久久久久蜜臀| 久久精品亚洲一区二区三区浴池| 91精品免费在线| 884aa四虎影成人精品一区| 欧美在线三级电影| 色妹子一区二区| 在线欧美日韩精品| 成人黄色在线看| 丁香天五香天堂综合| 国模娜娜一区二区三区| 免费黄网站欧美| 亚洲.国产.中文慕字在线| 亚洲一区二区三区在线播放| 亚洲综合激情小说| 夜夜嗨av一区二区三区中文字幕| 日本一区二区三区高清不卡 | 99久久精品国产导航| 不卡的av电影| 色婷婷久久综合| 欧美日韩精品久久久| 欧美三级电影在线看| 欧美一区国产二区| 日韩欧美一区二区久久婷婷| 日韩精品一区二区三区蜜臀 | 国产精品123区| eeuss影院一区二区三区| 91麻豆蜜桃一区二区三区| 欧美色综合影院| 精品成人一区二区| 国产精品热久久久久夜色精品三区 | 婷婷久久综合九色综合绿巨人| 日日夜夜免费精品| 国产麻豆精品在线观看| youjizz国产精品| 欧美三级电影在线观看| 久久综合给合久久狠狠狠97色69| 中文字幕不卡在线观看| 一区二区三区精品视频| 蜜臀久久99精品久久久久宅男| 国产一区视频导航| 欧美性高清videossexo| 91精品久久久久久久91蜜桃| 国产精品美日韩| 五月综合激情网| 国内一区二区在线| 91麻豆高清视频| 欧美电影免费观看高清完整版在线观看| 久久久久国产免费免费 | 国产一区二区精品在线观看| 成人美女视频在线看| 欧美一区二区三区四区五区| 欧美韩国日本不卡| 婷婷开心激情综合| 色一情一乱一乱一91av|