⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bt-host.cc

📁 NS2网络仿真软件是目前最为流行的网络仿真模拟软件
💻 CC
📖 第 1 页 / 共 2 页
字号:
			lm_ = (Baseband*)TclObject::lookup(argv[2]);			if (lm_ == 0) {				tcl.resultf("no such object %s", argv[2]);				return (TCL_ERROR);			}			return (TCL_OK);		}	}		if (argc == 4) {		if (strcmp(argv[1], "connect-app") == 0) {			int slot = atoi(argv[2]);			trafgen_[slot] = (NsObject*)TclObject::lookup(argv[3]);			numApps_++;			return (TCL_OK);		}		if (strcmp(argv[1], "linkq") == 0) {			int slot = atoi(argv[2]);			linkq_[slot] = (LMP*)TclObject::lookup(argv[3]);			return (TCL_OK);		}	}	return (Connector::command(argc, argv));}/* master operation */voidBTHost::HCI_Inquiry_Result (vector<FHS_payload*>& addr_vec){	vec_addr_ = addr_vec;	if (numInqResp_ = vec_addr_.size()) {		sendHCICreateConnection();	}}/* called only for master side */voidBTHost::HCI_Connection_Complete_Event (char ch){	/* master operation */	if (ch > -1) {		active_addr_[ch] = currPaged_;		ch = (master_) ? ch : 0;		//linkq_[ch]->HCI_change_connection_packet_type(15);		linkq_[ch]->HCI_QoS_Setup(appFlowSpec_[currPaged_-1]);	}	else {		sendHCICreateConnection();	}}/* QoS complete Event */voidBTHost::HCI_QoS_Setup_Complete_Event(char ch, bt_packet_type type){	if (ch != -1) {		type_[ch] = type;		numConnections_++;	}	else 		printf("QoS not satisfied CH %d BD_ADDR %d\n", ch, currPaged_);	sendHCICreateConnection();}voidBTHost::sendHCICreateConnection(){	if (numPaged_ == numInqResp_) {		// if all devices have been paged initiate L2CAP connection establishment		for (int i=0; i<numConnections_; i++)			l2cap_->L2CA_ConnectReq(0, i, type_[i]);		// send L2CAP connection requests	}		else if (numPaged_ < numInqResp_) {		// otherwise try paging next device		FHS_payload* info = vec_addr_[numPaged_];		currPaged_ = info->addr;		lm_->HCI_Create_Connection (info->addr, info->clock);		}	numPaged_++;}// L2CAP connection establishment completevoidBTHost::L2CA_ConnectCfm (int scid, uchar ch, uchar psm){	Tcl& tcl = Tcl::instance();	uchar ip_addr; 	int bd_addr = active_addr_[ch];	BD2IP_ADDR(ip_addr,bd_addr);	if (psm == proto1_.value) {		proto1_.arp_table_[ip_addr] = scid;		//TrafficGenerator* trafgen = (TrafficGenerator*)trafgen_[ch];		//trafgen->start();		tcl.evalf("%s start", trafgen_[ip_addr-1]->name()); 	}	else 		proto2_.arp_table_[ip_addr] = scid;		/*** TESTING DATA TRANSFER OVER L2CAP ***		Packet* p = Packet::alloc();		hdr_cmn* hdr = HDR_CMN(p); 		hdr->size() = 1000;		l2cap_->dataWrite(p,ch+2);		************* END TEST *****************/}/* slave operation */void BTHost::L2CA_ConnectInd (CID_attr* cid_attr, uchar psm){	if (psm == proto1_.value) {		//cid_attr->proto = proto1_;		proto1_.cid = cid_attr->lcid;	}	else {		//cid_attr->proto = proto2_;		proto2_.cid = cid_attr->lcid;	}	// add logic for accepting/rejecting here, accept for now	l2cap_->L2CA_ConnectRsp(cid_attr, 1);}voidBTHost::HCI_ConnectionRequestEvent(uchar ch){	// put logic for accepting/rejecting the request here, accept for now		// am_addr_ =ch+1;	ch = (master_) ? ch : 0;	linkq_[ch]->HCI_accept_connection_request();}		/* if a packet is received from upper layer call the dataWrite primitive of L2CAP */voidBTHost::recv(Packet* p, Handler* h) {	Scheduler& s = Scheduler::instance();	hdr_cmn* ch = HDR_CMN(p);	ch->direction() = hdr_cmn::DOWN;	//ch->size() += TcpIpHdrSize;	if (master_) {			hdr_ip* iph = HDR_IP(p);		uchar cid = proto1_.arp_table_[iph->daddr()];		printf("L2CA_DATA_WRITE\t\tSIZE: %-10d  CID: %d\tDEST_IP %d clock %e\n", ch->size(), cid, iph->daddr(), s.clock());		ch->timestamp() = s.clock();		l2cap_->dataWrite(p, cid);	}	else 		l2cap_->dataWrite(p, proto1_.cid);	}// using only one higher layer protocol presently voidBTHost::dataRead (Packet* p, CID_attr* cid){		Scheduler& s = Scheduler::instance();	hdr_cmn* ch = HDR_CMN(p);	uchar psm = cid->psm;	if (psm == proto1_.value) {		//proto1_.uptarget_->recv(p,this);		double delay = s.clock() - ch->timestamp();		printf("BD_ADDR %d DELAY %e SIZE %d clock %e\n", bd_addr_, delay,ch->size(), s.clock());		target_->recv(p,this);	}			else 		proto2_.uptarget_->recv(p,this);}// find application names and fill flowSpecs for well known applicationsvoidBTHost::findAppNames(){	Tcl& tcl = Tcl::instance();	for (int i=0; i<numApps_; i++) {		tcl.evalf("%s info class", trafgen_[i]->name()); 		appNames_[i] = tcl.result();		const char* p = appNames_[i].c_str();		if (strcmp(p,"Application/Traffic/Exponential")==0) {			tcl.evalf("%s set packetSize_", trafgen_[i]->name()); 			int mtu = atoi(tcl.result());			appFlowSpec_[i]->mtu = mtu;			appFlowSpec_[i]->token_rate = 64;			appFlowSpec_[i]->token_bucket = 30000;			appFlowSpec_[i]->input_qlen = 30;			appFlowSpec_[i]->peak_bw = 100000;			appFlowSpec_[i]->latency = 100;			appFlowSpec_[i]->loss_sensitivity = 1;		}		if (strcmp(p,"Application/Telnet") == 0) {			appFlowSpec_[i]->mtu = 100;  		// Don't care			appFlowSpec_[i]->token_rate = 0; 	// Don't care			appFlowSpec_[i]->token_bucket = 0; 	// Don't care			appFlowSpec_[i]->input_qlen = 0; 	// Don't care			appFlowSpec_[i]->peak_bw = 0; 		// Don't care			appFlowSpec_[i]->latency = -1; 		// Minimize			appFlowSpec_[i]->loss_sensitivity = 1;		}		if (strcmp(p,"Application/FTP") == 0) {			appFlowSpec_[i]->mtu = 1000; 		// large			appFlowSpec_[i]->token_rate = -1; 	// MAX			appFlowSpec_[i]->token_bucket = -1; 	// MAX			appFlowSpec_[i]->input_qlen = -1; 	// MAX			appFlowSpec_[i]->peak_bw = -1; 		// MAX			appFlowSpec_[i]->latency = 0; 		// Don't care 			appFlowSpec_[i]->loss_sensitivity = 0;		}		//const char* p = appNames_[i].c_str();		//printf("appname[%d] = %s, MTU = %d\n", i, p, mtu);		printf("appname[%d] = %s\n", i, p);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -