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

📄 ier.em.c

📁 实验室前辈用OPNET做的光突发交换网络的仿真实验
💻 C
📖 第 1 页 / 共 4 页
字号:
#include <opnet.h>
#include <ema.h>
#include <opnet_emadefs.h>
#include <opnet_constants.h>



/* array for all textlist attributes in model */
Prg_List*		prg_lptr [28];

/* array for all objects in model */
EmaT_Object_Id		obj [61];



int
main (int argc, char* argv [])
	{
	EmaT_Model_Id			model_id;
	int					i;

	/* initialize EMA package */
	Ema_Init (EMAC_MODE_ERR_PRINT, argc, argv);

	/* create an empty model */
	model_id = Ema_Model_Create (MOD_PROCESS);



	/* create all objects */
	obj [0] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [1] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [2] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [3] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [4] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [5] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [6] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [7] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [8] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_VALUE);
	obj [9] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_OBJ);
	obj [10] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [11] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [12] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [13] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [14] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [15] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [16] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [17] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [18] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [19] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [20] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [21] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [22] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [23] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [24] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [25] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [26] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [27] = Ema_Object_Create (model_id, OBJ_PR_STATE);
	obj [28] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [29] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [30] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [31] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [32] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [33] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [34] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [35] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [36] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [37] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [38] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [39] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [40] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [41] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [42] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [43] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [44] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [45] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [46] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [47] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [48] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [49] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [50] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [51] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [52] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [53] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [54] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [55] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [56] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [57] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [58] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [59] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [60] = Ema_Object_Create (model_id, OBJ_PR_POS);




	/* set the model level attributes */
	/* create and init prg list 'prg_lptr [0]' */
	prg_lptr [0] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [1]' */
	prg_lptr [1] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [1], 
		"Packet*		pkptr_burst;",
		"Packet*		pkptr;",
		"",
		"int			sequence_number_ack;",
		"int			sequence_number_rcv;",
		"int			source_address;",
		"int			destination_address;",
		"",
		"",
		"int 		i,j,k;",
		"Route*		pk_rptr;",
		"Route*		p_min_rptr_copy;",
		"double		start_time;",
		"double		dtime_time;",
		"double		cur_time;",
		"int			subnet_ids[10];",
		"int			node_ids[20];",
		"int			num_nodes;",
		"int			userid;",
		"",
		"double 		EXTRA_TIME;",
		"int			ok_flag;",
		"int			wavelength_number;",
		"int 		u_id;",
		"Objid		strm_objid;",
		"int 		jj;",
		"int 		channel_num;",
		"double		temp_time;",
		"double      temp_size;",
		"int			temp_flag_suc;",
		"int			id_number_temp;",
		"int			temp_code;",
		"",
		"",
		"",
		PRGC_NIL);

	/* create and init prg list 'prg_lptr [2]' */
	prg_lptr [2] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [2], 
		"#include <string.h>",
		"#include <stdlib.h>",
		"#include <header.h>",
		"",
		"",
		"",
		"",
		"#define PK_IN_STRM 			0",
		"#define PK_IN_STRM_RETURN   1",
		"#define PK_OUT_STRM			1",
		"#define PK_OUT_STRM_STORE	0",
		"#define MAX_NODES			15",
		"",
		"",
		"#define END_SIM	(op_intrpt_type () == OPC_INTRPT_ENDSIM)",
		"#define BEG_SIM (op_intrpt_type () == OPC_INTRPT_BEGSIM)",
		"#define BURST_ARRIVAL (op_intrpt_type () == OPC_INTRPT_STRM && op_intrpt_strm () == PK_IN_STRM)",
		"#define BCP_ARRIVAL (op_intrpt_type () == OPC_INTRPT_STRM && op_intrpt_strm () == PK_IN_STRM_RETURN)",
		"#define INTRPT_SELF (op_intrpt_type() == OPC_INTRPT_SELF) ",
		"#define INTRPT_REMOTE (op_intrpt_type() == OPC_INTRPT_REMOTE)",
		"",
		"",
		"",
		"typedef struct {",
		"int source;",
		"int destination;",
		"int hop_count;",
		"int output_link;",
		"} ROUTING_TABLE;",
		"",
		"",
		"",
		"",
		"",
		"",
		"int node_count = 0;   ",
		"",
		"double pk_size_total_send = 0;",
		"int pk_count_total_send	= 0;",
		"double pk_avg_total_size_send = 0;",
		"int subq_count = 6;",
		"int gen_count_total_send = 0;",
		PRGC_NIL);

	/* create and init prg list 'prg_lptr [3]' */
	prg_lptr [3] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [4]' */
	prg_lptr [4] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [5]' */
	prg_lptr [5] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [6]' */
	prg_lptr [6] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [7]' */
	prg_lptr [7] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [8]' */
	prg_lptr [8] = (Prg_List *)prg_list_create ();
	/* create and init prg list 'prg_lptr [9]' */
	prg_lptr [9] = (Prg_List *)prg_list_create ();
	Ema_Model_Attr_Set (model_id,
		"state vars",           COMP_CONTENTS, prg_lptr [0],
		"temp vars",            COMP_CONTENTS, prg_lptr [1],
		"header block",         COMP_CONTENTS, prg_lptr [2],
		"function block",       COMP_CONTENTS, prg_lptr [3],
		"diag block",           COMP_CONTENTS, prg_lptr [4],
		"termination block",    COMP_CONTENTS, prg_lptr [5],
		"global stat descs",    COMP_INTENDED, EMAC_DISABLED,
		"local stat descs",     COMP_INTENDED, EMAC_DISABLED,
		"child processes",      COMP_CONTENTS, prg_lptr [6],
		"model comments",       COMP_CONTENTS, prg_lptr [7],
		"ext fileset",          COMP_CONTENTS, prg_lptr [8],
		"packet formats",       COMP_CONTENTS, prg_lptr [9],
		"interface descriptions",COMP_INTENDED, EMAC_DISABLED,
		"attribute assignments",COMP_ARRAY_CONTENTS (0), obj [0],
		"attribute assignments",COMP_ARRAY_CONTENTS (1), obj [1],
		"attribute assignments",COMP_ARRAY_CONTENTS (2), obj [2],
		EMAC_EOL);

	Ema_Model_Attr_Set (model_id,
		"attribute assignments",COMP_ARRAY_CONTENTS (3), obj [3],
		"attribute assignments",COMP_ARRAY_CONTENTS (4), obj [4],
		"attribute assignments",COMP_ARRAY_CONTENTS (5), obj [5],
		"attribute assignments",COMP_ARRAY_CONTENTS (6), obj [6],
		"attribute assignments",COMP_ARRAY_CONTENTS (7), obj [7],
		"attribute assignments",COMP_ARRAY_CONTENTS (8), obj [10],
		"simulation attributes",COMP_INTENDED, EMAC_DISABLED,
		EMAC_EOL);



	/* assign attrs for object 'obj [8]' */
	Ema_Object_Attr_Set (model_id, obj [8], 
		"count",                COMP_CONTENTS, 1,
		"list",                 COMP_ARRAY_CONTENTS (0), obj [9],
		EMAC_EOL);


	/* assign attrs for object 'obj [9]' */

	/* assign attrs for object 'obj [11]' */
	/* create and init prg list 'prg_lptr [10]' */
	prg_lptr [10] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [10], 
		"//扼快泼阑  困茄 霖厚累诀",
		"",
		"",
		"//",
		"",
		"",
		"",
		"",
		"///////////////////////////////////////////////////////////////////////////////////////",
		"///////////////////////////胶纳临傅阑 困茄 霖厚累诀/////////////////////////////",
		"///////////////////////////////////////////////////////////////////////////////////////",
		"",
		"link_num = 0;",
		"channel_count1 = 0;",
		"for(i = 1; i <= NODE_NUM; i++)",
		"{",
		"	if(i != userid)",
		"	{",
		"    //	printf(\"userid = %d, i = %d, connect_count = %d\\n\",userid,i,op_topo_connect_count (userid, i,OPC_OBJMTYPE_LINK));",
		"		if(op_topo_connect_count (userid, i,OPC_OBJMTYPE_LINK)==1)",
		"		{",
		"			link_num++;",
		"			op_ima_obj_attr_get (op_topo_connect (userid, i, OPC_OBJTYPE_LKDUP, 0), \"channel count\", &channel_count1);",
		"//			printf(\"userid = %d, i = %d, channel_count = %d\\n\",userid,i,channel_count1);",
		"		}",
		"	 }",
		"}",
		"",
		"//printf(\"%d\\n\",link_num);",
		"",
		"node_for_schedule.port = (PORT *)malloc(sizeof(PORT )*link_num);",
		"",
		"for(i = 0; i < link_num; i++)",
		"{",
		"//	printf(\"userid=%d, i=%d, link_num=%d, channel_count=%d\\n\",userid,i,link_num,channel_count1);",
		"	node_for_schedule.port[i].channel = (CHANNEL *)malloc(sizeof(CHANNEL )*channel_count1);",
		"	for(j = 0; j < channel_count1; j++)",
		"	{",
		"	//	printf(\"userid=%d, i=%d, j=%d, link_num=%d, channel_count=%d\\n\",userid,i,j,link_num,channel_count1);",
		"		node_for_schedule.port[i].channel[j].horizon = 0;",
		"		node_for_schedule.port[i].channel[j].gab_list = (List *)op_prg_mem_alloc(sizeof(List));",
		"		node_for_schedule.port[i].channel[j].occupy_list = (List *)op_prg_mem_alloc(sizeof(List));",
		"		op_prg_list_init(node_for_schedule.port[i].channel[j].gab_list);",
		"		op_prg_list_init(node_for_schedule.port[i].channel[j].occupy_list);",
		"	}",
		"}",
		"",
		"",
		"j=0;",
		"for(i = 1; i <= NODE_NUM; i++)",
		"{",
		"	if(i != userid)",
		"	{",
		"    	if(op_topo_connect_count (userid, i,OPC_OBJMTYPE_LINK)==1)",
		"		{",
		"			node_for_schedule.port[j].next_nodeid = i;",
		"			j++;	",
		"		}",
		"	 }",
		"}",
		"link_count = j;",
		"//printf(\"init_rte\\n\");",
		"///////////////////////////////////////////////////////////////////////////////////////",
		"///////////////////////////胶纳临傅阑 困茄 霖厚累诀 场   /////////////////////////////",
		"//////////////////////////////////////////////////////////////////////////////////////",
		"",
		"//routing table 檬扁拳",
		"",
		"",
		"",
		"",
		"",
		"self_objid = op_id_self();",
		"node_objid = op_topo_parent (self_objid);",
		"op_ima_obj_attr_get(node_objid, \"user id\", &userid);",
		"",
		"subnet_objid = op_topo_parent (node_objid);",
		"topo_ptr = op_rte_topo_from_objids ();",
		"",
		"/* create 6 lists for enabled, disabled, links, and nodes */",
		"link_enabled_lptr = op_prg_list_create (); ",
		"link_disabled_lptr = op_prg_list_create (); ",
		"link_non_mesh_lptr = op_prg_list_create (); ",
		"call_router_lptr = op_prg_list_create (); ",
		"mesh_nd_enabled_lptr = op_prg_list_create (); ",
		"mesh_nd_disabled_lptr = op_prg_list_create (); ",
		"",
		"/* get total number of fixed nodes */",
		"num_fixed_nodes = op_topo_object_count (OPC_OBJTYPE_NDFIX);",
		"",
		"printf(\"num_nodes = %d\\n\",num_fixed_nodes);",
		"getchar();",
		"/* insert node objid's to different lists */",

⌨️ 快捷键说明

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