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

📄 aodv_app_manager.pr.c

📁 opnet ad hoc adov routing
💻 C
📖 第 1 页 / 共 2 页
字号:
			/** state (rx) exit executives **/			FSM_STATE_EXIT_FORCED (2, "rx", "aodv_app_manager () [rx exit execs]")				{				}			/** state (rx) transition processing **/			FSM_TRANSIT_FORCE (1, state1_enter_exec, ;, "default", "", "rx", "idle")				/*---------------------------------------------------------*/			/** state (tx) enter executives **/			FSM_STATE_ENTER_FORCED (3, state3_enter_exec, "tx", "aodv_app_manager () [tx enter execs]")				{				// Extract packet from incoming stream				pkptr = op_pk_get (UPP_INPUT_STRM);				// Proceed only if node is active (DEST variable is				// set to other value than NONE)				if(dest != NONE) 					{					// Trace					if(DEBUG > 2)						{						printf("\n<node %d @ app manager>: a new data packet has been generated.\n", node_addr);						printf("                         - Current time = %f\n", op_sim_time());						printf("                         - Packet size  = %d\n", op_pk_total_size_get(pkptr));						}										if(DEBUG> 4) printf("	Destination is %d\n", dest);					// All communications are bi-directional					g_flag =1;						// Request a service from the routing layer					ici_ptr = op_ici_create("service_req_routing");					op_ici_attr_set(ici_ptr,"Dest", dest);					op_ici_attr_set(ici_ptr,"G", g_flag);					op_ici_install(ici_ptr);					// Send packet to lower layer					op_pk_send (pkptr,LOW_OUTPUT_STRM);					}				else					op_pk_destroy(pkptr);				}			/** state (tx) exit executives **/			FSM_STATE_EXIT_FORCED (3, "tx", "aodv_app_manager () [tx exit execs]")				{				}			/** state (tx) transition processing **/			FSM_TRANSIT_FORCE (1, state1_enter_exec, ;, "default", "", "tx", "idle")				/*---------------------------------------------------------*/			/** state (pre-init) enter executives **/			FSM_STATE_ENTER_UNFORCED (4, state4_enter_exec, "pre-init", "aodv_app_manager () [pre-init enter execs]")				{				// Load network parameters				node_id = op_topo_parent (op_id_self());				op_ima_obj_attr_get(node_id,"wlan_mac.station_address",&node_addr);				op_ima_obj_attr_get(node_id,"DEBUG",&DEBUG);				// Set DEBUG to 1				DEBUG = 1;				// Load distibutions				num_nodes = op_topo_object_count (OPC_OBJTYPE_NDMOB); 				// Read max_flows				op_ima_sim_attr_get(OPC_IMA_INTEGER, "MAX_NB_FLOWS",&NB_FLOWS_AVAIL);				// Record max flows into NB_FLOWS				NB_FLOWS = NB_FLOWS_AVAIL;				// Read node attr				// Get source parameters				op_ima_obj_attr_get (op_id_self(), "Source Parameters", &params_comp_attr_objid);				params_attr_objid = op_topo_child (params_comp_attr_objid, OPC_OBJTYPE_GENERIC, 0);				op_ima_obj_attr_get(params_attr_objid,"Destination",      &INTERLOCUTOR);				op_ima_obj_attr_get(params_attr_objid,"Gratuitous Ratio", &GRAT_RATIO);				if(INTERLOCUTOR >= num_nodes || INTERLOCUTOR < -2)					{					printf("Warning @ node %d: Destination Address is invalid. Swithching to \"Random\" value.\n",node_addr);					INTERLOCUTOR = RANDOM;					}				// If Interlocutor != Random, then go immediately to the INIT				// state and reserve a Flow.				// Else, pick a random wait time before going to init				if(INTERLOCUTOR != RANDOM)					wait_time = 0.0;				else					wait_time = op_dist_uniform(0.1);				// Schedule intrpt				op_intrpt_schedule_self(op_sim_time()+wait_time,INIT_CODE);				}			/** blocking after enter executives of unforced state. **/			FSM_EXIT (9,aodv_app_manager)			/** state (pre-init) exit executives **/			FSM_STATE_EXIT_UNFORCED (4, "pre-init", "aodv_app_manager () [pre-init exit execs]")				{				}			/** state (pre-init) transition processing **/			FSM_INIT_COND (INIT)			FSM_DFLT_COND			FSM_TEST_LOGIC ("pre-init")			FSM_TRANSIT_SWITCH				{				FSM_CASE_TRANSIT (0, 0, state0_enter_exec, ;, "INIT", "", "pre-init", "init")				FSM_CASE_TRANSIT (1, 4, state4_enter_exec, ;, "default", "", "pre-init", "pre-init")				}				/*---------------------------------------------------------*/			}		FSM_EXIT (4,aodv_app_manager)		}	}#if defined (__cplusplus)	extern "C" { #endif	extern VosT_Fun_Status Vos_Catmem_Register (const char * , int , VosT_Void_Null_Proc, VosT_Address *);	extern VosT_Address Vos_Catmem_Alloc (VosT_Address, size_t);	extern VosT_Fun_Status Vos_Catmem_Dealloc (VosT_Address);#if defined (__cplusplus)	}#endifCompcodeaodv_app_manager_init (void ** gen_state_pptr)	{	int _block_origin = 0;	static VosT_Address	obtype = OPC_NIL;	FIN (aodv_app_manager_init (gen_state_pptr))	if (obtype == OPC_NIL)		{		/* Initialize memory management */		if (Vos_Catmem_Register ("proc state vars (aodv_app_manager)",			sizeof (aodv_app_manager_state), Vos_Vnop, &obtype) == VOSC_FAILURE)			{			FRET (OPC_COMPCODE_FAILURE)			}		}	*gen_state_pptr = Vos_Catmem_Alloc (obtype, 1);	if (*gen_state_pptr == OPC_NIL)		{		FRET (OPC_COMPCODE_FAILURE)		}	else		{		/* Initialize FSM handling */		((aodv_app_manager_state *)(*gen_state_pptr))->current_block = 8;		FRET (OPC_COMPCODE_SUCCESS)		}	}voidaodv_app_manager_diag (void)	{	/* No Diagnostic Block */	}voidaodv_app_manager_terminate (void)	{	int _block_origin = __LINE__;	FIN (aodv_app_manager_terminate (void))	if (1)		{		Objid	     			 params_comp_attr_objid;		Objid                    params_attr_objid;		/* Packet reception */		int pk_type,dest_ip_addr;		/* Packet Transmission */		Packet *pkptr, *rx_pk_ptr;		int   grat_outcome, g_flag;		/* Service request to routing layer */		Ici * ici_ptr, *rx_ici_ptr;		int   segment_count;		int   i;		int   a_requested;		double wait_time;		/* No Termination Block */		}	Vos_Catmem_Dealloc (pr_state_ptr);	FOUT;	}/* Undefine shortcuts to state variables to avoid *//* syntax error in direct access to fields of *//* local variable prs_ptr in aodv_app_manager_svar function. */#undef DEBUG#undef node_addr#undef node_id#undef INTERLOCUTOR#undef GRAT_RATIO#undef grat_dist#undef address_dist#undef dest#undef SRC_ACTIVEvoidaodv_app_manager_svar (void * gen_ptr, const char * var_name, char ** var_p_ptr)	{	aodv_app_manager_state		*prs_ptr;	FIN (aodv_app_manager_svar (gen_ptr, var_name, var_p_ptr))	if (var_name == OPC_NIL)		{		*var_p_ptr = (char *)OPC_NIL;		FOUT;		}	prs_ptr = (aodv_app_manager_state *)gen_ptr;	if (strcmp ("DEBUG" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->DEBUG);		FOUT;		}	if (strcmp ("node_addr" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->node_addr);		FOUT;		}	if (strcmp ("node_id" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->node_id);		FOUT;		}	if (strcmp ("INTERLOCUTOR" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->INTERLOCUTOR);		FOUT;		}	if (strcmp ("GRAT_RATIO" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->GRAT_RATIO);		FOUT;		}	if (strcmp ("grat_dist" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->grat_dist);		FOUT;		}	if (strcmp ("address_dist" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->address_dist);		FOUT;		}	if (strcmp ("dest" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->dest);		FOUT;		}	if (strcmp ("SRC_ACTIVE" , var_name) == 0)		{		*var_p_ptr = (char *) (&prs_ptr->SRC_ACTIVE);		FOUT;		}	*var_p_ptr = (char *)OPC_NIL;	FOUT;	}

⌨️ 快捷键说明

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