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

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

?? neighbor.c

?? zigbee 2004協議棧
?? C
字號:
/*
 *2006/08/16 WXL 2.0
 */

/*
V0.2 added PC-based binding         21/July/2006

*/


/*
Neighbor Table Support and Address assignment support


*/

#include "compiler.h"
#include "lrwpan_config.h"         //user configurations
#include "lrwpan_common_types.h"   //types common acrosss most files
#include "ieee_lrwpan_defs.h"
#include "console.h"
#include "debug.h"
#include "memalloc.h"
#include "hal.h"
#include "halStack.h"
#include "phy.h"
#include "mac.h"


#include "neighbor.h"

//holds pairs of long/short addresses


#ifdef LRWPAN_FFD
NAYBORENTRY mac_nbr_tbl[NTENTRIES];
#endif


//initializes the Address map
//called in halInit()
//also called anytime the Coord forms a network
//or a router joins a network.
//the first entry in the address map is always our own
//that maps long address to short address
void ntInitAddressMap(void){
  BYTE j;
  for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		mac_addr_tbl[j].saddr = LRWPAN_BCAST_SADDR;
	}
}
	

//address map functions
//finds a match in the address map table using a LADDR
BOOL ntFindAddressByLADDR(LADDR *ptr, BYTE *index){
   BYTE j,i;
   BYTE *src,*dst;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		src = &ptr->bytes[0];
		dst = &mac_addr_tbl[j].laddr[0];
		for (i=0;i<8;i++, src++, dst++) {
			if (*src != *dst) break;
		}
		if (i== 8) {
			//have a match
		    *index = j;
		    break;
		}		
   }

   if (j != LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(TRUE);
	else return(FALSE);	

}

void ntAddOurselvesToAddressTable(SADDR saddr){
	BYTE laddr[8];

	halGetProcessorIEEEAddress(&laddr[0]);
	ntNewAddressMapEntry(&laddr[0], saddr);
}


//finds a match in the address map table using a SADDR
BOOL ntFindAddressBySADDR(SADDR saddr, BYTE *index)
{
   BYTE j;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		if (mac_addr_tbl[j].saddr != saddr) continue;
		*index = j;
		break;
		
	}

   if (j != LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(TRUE);
	else return(FALSE);

}

//checks if  laddr, saddr is already in the address map table
//if it is, return map index in 'index'
BOOL ntCheckAddressMapEntry(BYTE *laddr, SADDR saddr, BYTE *index) {
   BYTE j,i;
   BYTE *src,*dst;

   for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) continue;
		if (mac_addr_tbl[j].saddr != saddr) continue;
		src = laddr;
		dst = &mac_addr_tbl[j].laddr[0];
		for (i=0;i<8;i++) {
			if (*src != *dst) break;
			src++; dst++;
		}
		if (i == 8) {
			// we have a match
			*index = j;
			return(TRUE);
		}
	}

	return(FALSE);
}

//enters new laddr, saddr into address map entry
SADDR ntNewAddressMapEntry(BYTE *laddr, SADDR saddr) {
    BYTE j;

	if (ntCheckAddressMapEntry(laddr, saddr, &j)) {
		//entry is already in the table.
		return(mac_addr_tbl[j].saddr);
	}
	//now find free entry in address map table
	for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) break;
	}
	if (j== LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room
    halUtilMemCopy(&mac_addr_tbl[j].laddr[0], laddr, 8);
	mac_addr_tbl[j].saddr = saddr;
	return(0);
}





UINT16 ntGetCskip(BYTE depth) {
	switch(depth){
		case 1: return(LRWPAN_CSKIP_1);
		case 2: return(LRWPAN_CSKIP_2);
		case 3: return(LRWPAN_CSKIP_3);
		case 4: return(LRWPAN_CSKIP_4);
		case 5: return(LRWPAN_CSKIP_5);
		case 6: return(LRWPAN_CSKIP_6);
		case 7: return(LRWPAN_CSKIP_7);
		case 8: return(LRWPAN_CSKIP_8);
		case 9: return(LRWPAN_CSKIP_9);
		case 10: return(LRWPAN_CSKIP_10);
	}
return(0);
}

SADDR ntGetMaxSADDR(SADDR router_saddr,BYTE depth){
	//compute the maximum SADDR given the router_saddr and depth

   return(router_saddr + (ntGetCskip(depth)*(LRWPAN_MAX_ROUTERS_PER_PARENT))
	      + LRWPAN_MAX_NON_ROUTER_CHILDREN);
}


//rest of this are neighbor table functions, only needed by FFDs

#ifdef LRWPAN_FFD


NAYBORENTRY *ntFindBySADDR (UINT16 saddr){

	NAYBORENTRY *nt_ptr;
	BYTE j;

	nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if ( nt_ptr->flags.bits.used &&
			mac_addr_tbl[nt_ptr->map_index].saddr == saddr) return(nt_ptr);
		nt_ptr++;
    }
	return(NULL);
}

NAYBORENTRY *ntFindByLADDR (LADDR *ptr){
	NAYBORENTRY *nt_ptr;
	BYTE j,i;

    nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) continue;
		for (i=0;i<8;i++) {
			if (mac_addr_tbl[nt_ptr->map_index].laddr[i] != ptr->bytes[i]) break;
		}
		if (i == 8)	return(nt_ptr);
	}
	return(NULL);
}



//Init neighbor table. Called when Network is formed by
//coordinator or when a Router successfully joins a network.
//this also initializes the address table map
void ntInitTable(void) {
	NAYBORENTRY *nt_ptr;
	BYTE j;
	
	nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		nt_ptr->flags.val = 0;
	}
	ntInitAddressMap();	
}

void ntInitAddressAssignment(void){
    //also initialize ADDRESS assignment
	mac_pib.ChildRFDs = 0;
	mac_pib.ChildRouters = 0;
	mac_pib.nextChildRFD = macGetShortAddr() + 1+ ntGetCskip(mac_pib.depth+1)*(LRWPAN_MAX_ROUTERS_PER_PARENT);
	mac_pib.nextChildRouter = macGetShortAddr() + 1;
}



//adds a neighbor, and assigns a new SADDR
SADDR ntAddNeighbor(BYTE *ptr, BYTE capinfo) {
	NAYBORENTRY *nt_ptr;
	BYTE j;
	BYTE *tmpptr;

	//First, find free entry in neighbor table
    nt_ptr = &mac_nbr_tbl[0];
	for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) break;
	}
	if (j== NTENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room

	//now find free entry in address map table
	for (j=0;j<LRWPAN_MAX_ADDRESS_MAP_ENTRIES;j++) {
		if (mac_addr_tbl[j].saddr == LRWPAN_BCAST_SADDR) break;
	}
	if (j== LRWPAN_MAX_ADDRESS_MAP_ENTRIES) return(LRWPAN_BCAST_SADDR);//error, no room
    nt_ptr->map_index = j;
	nt_ptr->flags.bits.used = 1;
	nt_ptr->flags.bits.lqi = 0;
	nt_ptr->capinfo = capinfo;

	//now new saddr
	if (LRWPAN_GET_CAPINFO_DEVTYPE(capinfo)) {
		mac_addr_tbl[nt_ptr->map_index].saddr = mac_pib.nextChildRouter;
		mac_pib.nextChildRouter += ntGetCskip(mac_pib.depth+1);
		mac_pib.ChildRouters++;
	}else {
		mac_addr_tbl[nt_ptr->map_index].saddr = mac_pib.nextChildRFD;
        mac_pib.nextChildRFD++;
		mac_pib.ChildRFDs++;
	}
	//now copy long addr
	tmpptr = &mac_addr_tbl[nt_ptr->map_index].laddr[0];
	for(j=0;j<8;j++) {
		*tmpptr = *ptr;
		tmpptr++; ptr++;
	}
	return(mac_addr_tbl[nt_ptr->map_index].saddr);
}




//determine where this packet is going based on its short address
SADDR ntFindNewDst(SADDR dstSADDR){
	SADDR tmpSADDR;
	NAYBORENTRY *nt_ptr;
	BYTE j;

  if (dstSADDR == macGetShortAddr()) {
	  //trying to send to myself, this is an error
	  return(0xFFFF);
	}
  //if destination is coordinator, has to go to our parent
  if (dstSADDR == 0) return(mac_pib.macCoordShortAddress);
  // See if this destination is within my routing range
  // if not, then have to send it to my parent
#ifndef LRWPAN_COORDINATOR
  //do not check this for coordinator, as all nodes in range of coordinator.
  tmpSADDR = ntGetMaxSADDR(macGetShortAddr(),mac_pib.depth+1);
  if (!((dstSADDR > macGetShortAddr()) &&
	  (dstSADDR <= tmpSADDR))) {
		  //not in my range, must go to parent.
		  return(mac_pib.macCoordShortAddress);
	  }
#endif

  //goes to one of my children, check out each one.	  	
  nt_ptr = &mac_nbr_tbl[0];

  for (j=0;j<NTENTRIES;j++,nt_ptr++) {
		if (!nt_ptr->flags.bits.used) continue;
		if (LRWPAN_GET_CAPINFO_DEVTYPE(nt_ptr->capinfo)) {
			//router. check its range, the range is mac_pib.depth+2 because we need
			//the depth of the my child's child (grandchild).
			tmpSADDR = ntGetMaxSADDR(mac_addr_tbl[nt_ptr->map_index].saddr,mac_pib.depth+2);
			if ((dstSADDR >= mac_addr_tbl[nt_ptr->map_index].saddr) && (dstSADDR <= tmpSADDR)) {
				//either for my child router or one of its children.
				return(mac_addr_tbl[nt_ptr->map_index].saddr);
			}
		}else {
			//if for a non-router child, return
			if (dstSADDR == mac_addr_tbl[nt_ptr->map_index].saddr) return(mac_addr_tbl[nt_ptr->map_index].saddr);
		}
  }
  //if get here, then packet is undeliverable
  return(0xFFFF);
}


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
婷婷开心久久网| 亚洲码国产岛国毛片在线| 国产真实精品久久二三区| 精品久久一区二区| 国产一区二区三区四| 日本一区二区成人在线| 成人a区在线观看| 一区二区三区视频在线看| 欧美影视一区在线| 奇米综合一区二区三区精品视频 | 老司机精品视频一区二区三区| 日韩一区二区三区在线| 国内精品不卡在线| 中文字幕国产一区| 欧美亚洲一区二区在线| 免费人成网站在线观看欧美高清| 欧美精品一区二区三区高清aⅴ | 国产精品国产精品国产专区不蜜 | 欧美综合亚洲图片综合区| 午夜精品福利视频网站| 2017欧美狠狠色| 91在线国产观看| 蜜臀av一区二区| 一区在线观看视频| 欧美一区二区视频在线观看2022| 国产一区二区三区日韩| 亚洲乱码中文字幕| 精品免费日韩av| 色哟哟国产精品| 黑人精品欧美一区二区蜜桃| 亚洲美女一区二区三区| 欧美v日韩v国产v| 欧洲av在线精品| 国产一区欧美日韩| 亚洲一区二区综合| 亚洲国产精华液网站w| 欧美一区二区三区四区久久| 99久久综合精品| 久久91精品国产91久久小草| 怡红院av一区二区三区| 国产色婷婷亚洲99精品小说| 欧美久久婷婷综合色| 成人性视频免费网站| 奇米四色…亚洲| 亚洲一级二级在线| 国产精品久线在线观看| 精品国产91洋老外米糕| 欧美日韩国产精品成人| 97se亚洲国产综合自在线| 久久99国产精品尤物| 午夜电影一区二区三区| 亚洲女人的天堂| 国产精品久久久久久户外露出| 精品精品欲导航| 91精品一区二区三区在线观看| 色综合久久久久网| www.亚洲在线| 成人深夜福利app| 国产一区二区三区久久久 | 久久久91精品国产一区二区精品 | 国内一区二区在线| 免费成人在线影院| 日韩高清在线电影| 亚洲va韩国va欧美va精品| 亚洲欧美日韩国产成人精品影院| 国产女主播视频一区二区| 欧美不卡在线视频| 精品国产乱码久久久久久1区2区| 日韩一区二区在线观看| 日韩一区二区三区电影在线观看| 欧美人与z0zoxxxx视频| 欧美另类久久久品| 777久久久精品| 91麻豆精品91久久久久同性| 欧美一区二区三区男人的天堂| 欧美日韩二区三区| 欧美一区在线视频| 欧美成人午夜电影| 久久久美女艺术照精彩视频福利播放| 欧美成人官网二区| 国产亚洲欧美激情| 国产精品久久久久久久久晋中 | 久久精品一区二区三区不卡牛牛 | 精品少妇一区二区三区在线视频 | 欧美精品123区| 91精品麻豆日日躁夜夜躁| 91精品国产欧美一区二区18| 日韩欧美中文一区| 久久精品综合网| 亚洲嫩草精品久久| 午夜不卡av免费| 久久99国产精品久久99果冻传媒| 国产精品主播直播| 9久草视频在线视频精品| 欧美天天综合网| 日韩免费电影一区| 欧美国产亚洲另类动漫| 亚洲码国产岛国毛片在线| 五月婷婷久久综合| 国产老肥熟一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 成人av资源站| 欧美日韩国产美| 久久精品视频在线看| 亚洲乱码中文字幕| 久久国产尿小便嘘嘘尿| 成人国产在线观看| 在线精品视频一区二区三四 | 粉嫩绯色av一区二区在线观看| 97精品超碰一区二区三区| 91精品国产福利在线观看| 久久久久久久性| 亚洲午夜久久久久久久久久久| 久久69国产一区二区蜜臀| 色婷婷激情综合| 久久免费精品国产久精品久久久久| 亚洲免费高清视频在线| 久草中文综合在线| 在线免费av一区| 久久久久99精品国产片| 亚洲成人手机在线| 成人免费观看视频| 日韩美女视频在线| 伊人色综合久久天天| 国产成人精品亚洲日本在线桃色| 在线视频一区二区三| 欧美激情在线免费观看| 视频在线观看一区二区三区| av在线播放一区二区三区| 欧美sm美女调教| 亚洲成a人v欧美综合天堂| 成人av在线网站| 欧美大片一区二区三区| 亚洲影院理伦片| 99综合影院在线| 国产亚洲制服色| 麻豆成人在线观看| 欧美浪妇xxxx高跟鞋交| 亚洲麻豆国产自偷在线| 成人性生交大片免费看视频在线 | 亚洲图片欧美综合| 成人av午夜影院| 26uuuu精品一区二区| 免费高清成人在线| 7777精品伊人久久久大香线蕉| 亚洲精品中文在线| 99视频有精品| 国产精品久久久久毛片软件| 黑人巨大精品欧美一区| 欧美电视剧免费全集观看| 日本亚洲视频在线| 欧美日韩成人激情| 亚洲国产美国国产综合一区二区| 99久久久无码国产精品| 中文字幕一区在线| 成人中文字幕合集| 日本一区二区三区电影| 国产精品99久| 久久精品男人天堂av| 国产成人一级电影| 国产欧美精品日韩区二区麻豆天美| 国产中文字幕精品| 久久综合色8888| 国产成人免费在线观看| 国产日韩欧美高清| av在线播放一区二区三区| 国产精品久久国产精麻豆99网站| 成+人+亚洲+综合天堂| 日韩一区在线看| 一本大道久久a久久综合| 日韩理论电影院| 91碰在线视频| 亚洲国产成人高清精品| 欧美一区二区视频网站| 麻豆精品一区二区综合av| 欧美变态口味重另类| 国产成人一级电影| 亚洲欧洲制服丝袜| 欧美日韩一区精品| 秋霞国产午夜精品免费视频| 日韩欧美一区在线| 国产精品香蕉一区二区三区| 中文字幕欧美日本乱码一线二线 | 成人久久久精品乱码一区二区三区| 国产亚洲成av人在线观看导航| 国产福利一区二区三区视频在线 | 成人免费看视频| 亚洲激情第一区| 777久久久精品| 高清成人在线观看| 一区二区三区免费在线观看| 精品视频一区二区不卡| 久久99精品久久久久| 国产精品久久久久9999吃药| 欧美日韩精品免费| 国产精品一色哟哟哟| 玉米视频成人免费看| 欧美mv日韩mv亚洲| 色综合色狠狠天天综合色| 日本三级韩国三级欧美三级|