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

📄 ramimo_pktgen1.pr.c

📁 用OPNET实现802.11MAC协议DCF协议
💻 C
📖 第 1 页 / 共 2 页
字号:
				}
				FSM_PROFILE_SECTION_OUT (state2_exit_exec)


			/** state (ON) transition processing **/
			FSM_PROFILE_SECTION_IN ("ramimo_pktgen [ON trans conditions]", state2_trans_conds)
			FSM_INIT_COND (OFF_TIME)
			FSM_TEST_COND (GEN_PKT)
			FSM_TEST_LOGIC ("ON")
			FSM_PROFILE_SECTION_OUT (state2_trans_conds)

			FSM_TRANSIT_SWITCH
				{
				FSM_CASE_TRANSIT (0, 1, state1_enter_exec, ;, "OFF_TIME", "", "ON", "OFF")
				FSM_CASE_TRANSIT (1, 3, state3_enter_exec, ;, "GEN_PKT", "", "ON", "PKT_GEN")
				}
				/*---------------------------------------------------------*/



			/** state (PKT_GEN) enter executives **/
			FSM_STATE_ENTER_FORCED (3, "PKT_GEN", state3_enter_exec, "ramimo_pktgen [PKT_GEN enter execs]")
				FSM_PROFILE_SECTION_IN ("ramimo_pktgen [PKT_GEN enter execs]", state3_enter_exec)
				{
				/*Create a DATA packet*/
				pktptr = op_pk_create_fmt("DATA_pkt");
				
				/*Set the fields of the packet*/
				op_pk_total_size_set(pktptr, datapktsize);
				op_pk_nfd_set(pktptr, "SRC", srcuserid);
				op_pk_nfd_set(pktptr, "DEST", destuserid);
				op_pk_nfd_set(pktptr, "number", sequencenum);
				op_pk_nfd_set(pktptr, "time", op_pk_creation_time_get(pktptr));
				
				/*Increment the sequence number*/
				sequencenum = sequencenum + 1.0;
				
				/*Increment the variable counting the number of packets in this burst by one*/
				burstpktcount++;
				
				/*Calculate the time when the next packet should be generated based on the system load level*/
				genpktevent = op_intrpt_schedule_self(op_sim_time() + timebetweenpkts, PKT);
				
				/*Obtain an event handle to the next local event*/
				thisevent = op_ev_current();
				nextevent = op_ev_next_local(thisevent);
				
				/*If this is the first packet in a burst then set the packet position to '1'*/
				if(first == 1)
				{
				    op_pk_nfd_set(pktptr, "position", 1);
				    first = 0;
				}
				else
				{
				    op_pk_nfd_set(pktptr, "position", 0);
				}
				
				/*Determine whether the next event is an OFF event (as opposed to another packet generation interrupt) and if so set the packet position field to '2'*/
				/*to indicate that this will be the last packet in the burst. Also write out the relevent burst statistics at the end of the burst*/
				if( op_ev_equal(nextevent,offevent) == OPC_TRUE )
				{
				    op_pk_nfd_set(pktptr, "position", 2);
				   
					/*Cancel the generation packet interrupt*/
					op_ev_cancel(genpktevent);
				
				    /*Record the length of the burst in terms in the number of packets*/
				    op_stat_write(burstlength, burstpktcount);
				
					/*Calculate the duration of the burst and record it*/
				    bursttime = op_sim_time() + (datapktsize / datarate) - bursttime; 
				    op_stat_write(burstduration, bursttime); 
				}
				
#ifdef PKTGEN_PKT_GEN
				    printf("PKTGEN_PKT_GEN\n");
				    printf("Packet Size = %d\n", op_pk_total_size_get(pktptr) );
				    op_pk_nfd_get(pktptr, "SRC", &tempint);    
				    printf("Packet Source Node User ID = %d\n", tempint);
				    op_pk_nfd_get(pktptr, "DEST", &tempint);
				    printf("Packet Destination Node User ID = %d\n", tempint);
				    op_pk_nfd_get(pktptr, "position", &tempint);
				    printf("Position Within Burst = %d\n", tempint);
					op_pk_nfd_get(pktptr, "number", &tempdouble);
					printf("Packet Sequence Number = %lf\n", tempdouble);
					op_pk_nfd_get(pktptr, "time", &tempdouble);
					printf("Packet Creation Time = %lf\n", tempdouble);
#endif
				
				/*Send the packet onto the output stream*/
				op_pk_send(pktptr, OUT_STRM);
				
				op_prg_odb_bkpt("TEST");
				op_prg_odb_bkpt("CREATE");
				}
				FSM_PROFILE_SECTION_OUT (state3_enter_exec)

			/** state (PKT_GEN) exit executives **/
			FSM_STATE_EXIT_FORCED (3, "PKT_GEN", "ramimo_pktgen [PKT_GEN exit execs]")
				FSM_PROFILE_SECTION_IN ("ramimo_pktgen [PKT_GEN exit execs]", state3_exit_exec)
				{
				}
				FSM_PROFILE_SECTION_OUT (state3_exit_exec)


			/** state (PKT_GEN) transition processing **/
			FSM_TRANSIT_FORCE (2, state2_enter_exec, ;, "default", "", "PKT_GEN", "ON")
				/*---------------------------------------------------------*/



			}


		FSM_EXIT (0,"ramimo_pktgen")
		}
	}




void
ramimo_pktgen_diag (OP_SIM_CONTEXT_ARG_OPT)
	{
	/* No Diagnostic Block */
	}




void
ramimo_pktgen_terminate (OP_SIM_CONTEXT_ARG_OPT)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = __LINE__;
#endif

	FIN_MT (ramimo_pktgen_terminate ())

	Vos_Poolmem_Dealloc_MT (OP_SIM_CONTEXT_THREAD_INDEX_COMMA pr_state_ptr);

	FOUT
	}


/* Undefine shortcuts to state variables to avoid */
/* syntax error in direct access to fields of */
/* local variable prs_ptr in ramimo_pktgen_svar function. */
#undef channelload
#undef datarate
#undef proc_id
#undef node_id
#undef mean_off_time
#undef mean_on_time
#undef offevent
#undef genpktevent
#undef random_node
#undef thisevent
#undef nextevent
#undef first
#undef burstpktcount
#undef burstlength
#undef burstduration
#undef bursttime
#undef datapktsize
#undef packetformat
#undef srcuserid
#undef intnumnodes
#undef dblnumnodes
#undef destuserid
#undef mainprocid
#undef tx_id
#undef txcomp_id
#undef txch_id
#undef timebetweenpkts
#undef sequencenum

#undef FIN_PREAMBLE_DEC
#undef FIN_PREAMBLE_CODE

#define FIN_PREAMBLE_DEC
#define FIN_PREAMBLE_CODE

VosT_Obtype
ramimo_pktgen_init (int * init_block_ptr)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = 0;
#endif
	VosT_Obtype obtype = OPC_NIL;
	FIN_MT (ramimo_pktgen_init (init_block_ptr))

	Vos_Define_Object (&obtype, "proc state vars (ramimo_pktgen)",
		sizeof (ramimo_pktgen_state), 0, 20);
	*init_block_ptr = 0;

	FRET (obtype)
	}

VosT_Address
ramimo_pktgen_alloc (VOS_THREAD_INDEX_ARG_COMMA VosT_Obtype obtype, int init_block)
	{

#if !defined (VOSD_NO_FIN)
	int _op_block_origin = 0;
#endif
	ramimo_pktgen_state * ptr;
	FIN_MT (ramimo_pktgen_alloc (obtype))

	ptr = (ramimo_pktgen_state *)Vos_Alloc_Object_MT (VOS_THREAD_INDEX_COMMA obtype);
	if (ptr != OPC_NIL)
		ptr->_op_current_block = init_block;
	FRET ((VosT_Address)ptr)
	}



void
ramimo_pktgen_svar (void * gen_ptr, const char * var_name, void ** var_p_ptr)
	{
	ramimo_pktgen_state		*prs_ptr;

	FIN_MT (ramimo_pktgen_svar (gen_ptr, var_name, var_p_ptr))

	if (var_name == OPC_NIL)
		{
		*var_p_ptr = (void *)OPC_NIL;
		FOUT
		}
	prs_ptr = (ramimo_pktgen_state *)gen_ptr;

	if (strcmp ("channelload" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->channelload);
		FOUT
		}
	if (strcmp ("datarate" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->datarate);
		FOUT
		}
	if (strcmp ("proc_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->proc_id);
		FOUT
		}
	if (strcmp ("node_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->node_id);
		FOUT
		}
	if (strcmp ("mean_off_time" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->mean_off_time);
		FOUT
		}
	if (strcmp ("mean_on_time" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->mean_on_time);
		FOUT
		}
	if (strcmp ("offevent" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->offevent);
		FOUT
		}
	if (strcmp ("genpktevent" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->genpktevent);
		FOUT
		}
	if (strcmp ("random_node" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->random_node);
		FOUT
		}
	if (strcmp ("thisevent" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->thisevent);
		FOUT
		}
	if (strcmp ("nextevent" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->nextevent);
		FOUT
		}
	if (strcmp ("first" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->first);
		FOUT
		}
	if (strcmp ("burstpktcount" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->burstpktcount);
		FOUT
		}
	if (strcmp ("burstlength" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->burstlength);
		FOUT
		}
	if (strcmp ("burstduration" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->burstduration);
		FOUT
		}
	if (strcmp ("bursttime" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->bursttime);
		FOUT
		}
	if (strcmp ("datapktsize" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->datapktsize);
		FOUT
		}
	if (strcmp ("packetformat" , var_name) == 0)
		{
		*var_p_ptr = (void *) (prs_ptr->packetformat);
		FOUT
		}
	if (strcmp ("srcuserid" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->srcuserid);
		FOUT
		}
	if (strcmp ("intnumnodes" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->intnumnodes);
		FOUT
		}
	if (strcmp ("dblnumnodes" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->dblnumnodes);
		FOUT
		}
	if (strcmp ("destuserid" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->destuserid);
		FOUT
		}
	if (strcmp ("mainprocid" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->mainprocid);
		FOUT
		}
	if (strcmp ("tx_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->tx_id);
		FOUT
		}
	if (strcmp ("txcomp_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->txcomp_id);
		FOUT
		}
	if (strcmp ("txch_id" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->txch_id);
		FOUT
		}
	if (strcmp ("timebetweenpkts" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->timebetweenpkts);
		FOUT
		}
	if (strcmp ("sequencenum" , var_name) == 0)
		{
		*var_p_ptr = (void *) (&prs_ptr->sequencenum);
		FOUT
		}
	*var_p_ptr = (void *)OPC_NIL;

	FOUT
	}

⌨️ 快捷键说明

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