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

📄 obs_sink.em.c

📁 实验室前辈用OPNET做的光突发交换网络的仿真实验
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 [29];

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



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_ATTR_PROPS);
	obj [1] = Ema_Object_Create (model_id, OBJ_ATTR_PROPS);
	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_PR_ATTR_ASSGN);
	obj [9] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	obj [10] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_VALUE);
	obj [11] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_OBJ);
	obj [12] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
	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_TRANS);
	obj [22] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [23] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [24] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [25] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [26] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [27] = Ema_Object_Create (model_id, OBJ_PR_POS);
	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_POS);
	obj [46] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [47] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [48] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [49] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [50] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [51] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [52] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [53] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [54] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
	obj [55] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);


	/* assign attrs for object 'obj [0]' */
	/* create and init prg list 'prg_lptr [10]' */
	prg_lptr [10] = (Prg_List *)prg_list_create ();
	Ema_Object_Attr_Set (model_id, obj [0], 
		"units",                COMP_CONTENTS, "",
		"default value",        COMP_CONTENTS_TYPE, EMAC_STRING,
		"default value",        COMP_CONTENTS, "",
		"comments",             COMP_CONTENTS, prg_lptr [10],
		"high limit",           COMP_CONTENTS, (double) 0,
		"low limit",            COMP_CONTENTS, (double) 0,
		"symbol map list",      COMP_INTENDED, EMAC_DISABLED,
		"flags",                COMP_CONTENTS, 0,
		"data type",            COMP_CONTENTS, 3,
		"count properties",     COMP_INTENDED, EMAC_DISABLED,
		"list attribute definitions",COMP_INTENDED, EMAC_DISABLED,
		EMAC_EOL);


	/* assign attrs for object 'obj [1]' */
	/* create and init prg list 'prg_lptr [11]' */
	prg_lptr [11] = (Prg_List *)prg_list_create ();
	Ema_Object_Attr_Set (model_id, obj [1], 
		"units",                COMP_CONTENTS, "",
		"default value",        COMP_CONTENTS_TYPE, EMAC_DOUBLE,
		"default value",        COMP_CONTENTS, (double) 0,
		"comments",             COMP_CONTENTS, prg_lptr [11],
		"high limit",           COMP_CONTENTS, (double) 0,
		"low limit",            COMP_CONTENTS, (double) 0,
		"symbol map list",      COMP_INTENDED, EMAC_DISABLED,
		"flags",                COMP_CONTENTS, 0,
		"data type",            COMP_CONTENTS, 1,
		"count properties",     COMP_INTENDED, EMAC_DISABLED,
		"list attribute definitions",COMP_INTENDED, EMAC_DISABLED,
		EMAC_EOL);




	/* set the model level attributes */
	/* create and init prg list 'prg_lptr [0]' */
	prg_lptr [0] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [0], 
		"int	\\r_count;",
		"",
		"Stathandle	\\r_cnt_stathandle;",
		"",
		"Stathandle	\\ete_gsh;",
		"",
		"Stathandle	\\rev_pk_gen_gsh;",
		"",
		"Stathandle	\\burst_size_rev_stathandle;",
		"",
		"Stathandle	\\burst_count_rev_stathandle;",
		"",
		"double	\\burst_size_rev;",
		"",
		"int	\\burst_count_rev;",
		"",
		"Stathandle	\\burst_avg_size_rev_stathandle;",
		"",
		"double	\\burst_avg_size_rev;",
		"",
		"double	\\burst_size_total_rev;",
		"",
		"Stathandle	\\burst_count_total_rev_stathandle;",
		"",
		"int	\\node_address;",
		"",
		PRGC_NIL);

	/* create and init prg list 'prg_lptr [1]' */
	prg_lptr [1] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [1], 
		"double 	ete_delay, delay;",
		"packet* pktr;",
		"int 	i;",
		"int		j;",
		"int 	userid;",
		"Objid	self_objid;",
		"Objid	node_objid;",
		"Objid	subnet_objid;",
		"int		flag, hop, source_address,destination_address,route_flag;",
		"double	average_hop[15][15];",
		"double	b_average_hop[15][15];",
		"double	loss;",
		"int 	fis_loss;",
		"double	loss_rate[15][15];",
		"double	total_average_hop, b_total_average_hop;",
		"double	average_delay[15][15], b_average_delay[15][15];",
		"double	total_average_delay, b_total_average_delay;",
		"double	utilization;",
		"char	file_name[10];",
		"char	f_name[50];",
		"int		backup_count;",
		"FILE 		*fp;",
		"int		total_gen_bcp, total_all_succ;",
		"double	throughput;",
		"int		s_bcp, f_bcp;",
		"double	start_time;",
		"",
		"double	back_average_delay;",
		"double	back_average_hop;",
		"double	back_throughput;",
		"double	back_loss;",
		"double	back_utilization;",
		"double	sim_time;",
		"int		jj;",
		"int		pk_type;",
		"int		pk_id;",
		"double	temp_time;",
		"",
		"int  e_s;",
		"int  e_d;",
		"int  e_id;",
		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 \"route.h\"",
		"#define END_SIM	(op_intrpt_type () == OPC_INTRPT_ENDSIM)",
		"#define BEG_SIM	(op_intrpt_type () == OPC_INTRPT_BEGSIM)",
		"#define ARRIVAL (op_intrpt_type () == OPC_INTRPT_STRM)",
		"",
		"int rev_pk_gen;",
		"int burst_count_total_rev = 0;",
		"int node_count1=0;",
		"double total_successed_burst_length_related_hop = 0;",
		"int total_successed_burst_count = 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 ();
	prg_list_strings_append (prg_lptr [5], 
		"",
		PRGC_NIL);

	/* 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 ();
	prg_list_strings_append (prg_lptr [7], 
		"",
		PRGC_NIL);

	/* 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 ();
	prg_list_strings_append (prg_lptr [9], 
		"dr_ack",
		PRGC_NIL);

	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_ARRAY_CONTENTS (0), obj [47],
		"global stat descs",    COMP_ARRAY_CONTENTS (1), obj [48],
		"global stat descs",    COMP_ARRAY_CONTENTS (2), obj [49],
		"global stat descs",    COMP_ARRAY_CONTENTS (3), obj [50],
		"global stat descs",    COMP_ARRAY_CONTENTS (4), obj [51],
		"local stat descs",     COMP_ARRAY_CONTENTS (0), obj [52],
		"local stat descs",     COMP_ARRAY_CONTENTS (1), obj [53],
		"local stat descs",     COMP_ARRAY_CONTENTS (2), obj [54],
		"local stat descs",     COMP_ARRAY_CONTENTS (3), obj [55],
		"child processes",      COMP_CONTENTS, prg_lptr [6],
		EMAC_EOL);

	Ema_Model_Attr_Set (model_id,
		"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 [2],
		"attribute assignments",COMP_ARRAY_CONTENTS (1), obj [3],
		"attribute assignments",COMP_ARRAY_CONTENTS (2), obj [4],
		"attribute assignments",COMP_ARRAY_CONTENTS (3), obj [5],
		"attribute assignments",COMP_ARRAY_CONTENTS (4), obj [6],
		"attribute assignments",COMP_ARRAY_CONTENTS (5), obj [7],
		"attribute assignments",COMP_ARRAY_CONTENTS (6), obj [8],
		"attribute assignments",COMP_ARRAY_CONTENTS (7), obj [9],
		"attribute assignments",COMP_ARRAY_CONTENTS (8), obj [12],
		"simulation attributes",COMP_INTENDED, EMAC_DISABLED,
		EMAC_EOL);


	/* create model level attribute extensions */
	Ema_Model_Attr_Add (model_id, "file name", obj [0]);
	Ema_Model_Attr_Add (model_id, "sim_time", obj [1]);


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


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

	/* assign attrs for object 'obj [13]' */
	/* create and init prg list 'prg_lptr [12]' */
	prg_lptr [12] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [12], 
		"self_objid = op_id_self ();",
		"node_objid = op_topo_parent(self_objid);",
		"op_ima_obj_attr_get(node_objid, \"user id\", &userid);",
		"",
		"",
		"node_count1++;",
		"node_address = node_count1;",
		"op_ima_obj_attr_set (node_objid, \"user id\", node_address);",
		"burst_size_rev = 0;",
		"burst_avg_size_rev = 0;",
		"burst_count_rev = 0;",
		"burst_size_total_rev = 0;",
		"burst_size_rev_stathandle = op_stat_reg(\"BURST_SIZE_REV\",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);",
		"burst_avg_size_rev_stathandle = op_stat_reg(\"BURST_AVG_SIZE_REV\",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);",
		"burst_count_rev_stathandle = op_stat_reg(\"BURST_CONUT_REV\",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);",
		"",
		"burst_count_total_rev_stathandle = op_stat_reg(\"BURST_CONUT_TOTAL_REV\",OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);",
		PRGC_NIL);

	Ema_Object_Attr_Set (model_id, obj [13], 
		"name",                 COMP_CONTENTS, "init",
		"Enter Execs",          COMP_CONTENTS, prg_lptr [12],
		"status",               COMP_TOGGLE,   EMAC_ENABLED,
		"position",             COMP_CONTENTS, obj [14],
		"initial",              COMP_TOGGLE,   EMAC_ENABLED,
		EMAC_EOL);


	/* assign attrs for object 'obj [15]' */
	Ema_Object_Attr_Set (model_id, obj [15], 
		"name",                 COMP_CONTENTS, "idle",
		"name",                 COMP_INTENDED, EMAC_DISABLED,
		"position",             COMP_CONTENTS, obj [16],
		"initial",              COMP_TOGGLE,   EMAC_DISABLED,
		EMAC_EOL);


	/* assign attrs for object 'obj [17]' */
	/* create and init prg list 'prg_lptr [16]' */
	prg_lptr [16] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [16], 
		"self_objid = op_id_self ();",
		"node_objid = op_topo_parent(self_objid);",
		"op_ima_obj_attr_get(node_objid, \"user id\", &userid);",
		"",
		"printf(\"sink:userid=%d, test_state=%d\\n\",userid, test_state++);",
		"getchar();",
		"",
		"pktr = op_pk_get (op_intrpt_strm());",
		"op_pk_nfd_get(pktr, \"source address\", &source_address);",
		"op_pk_nfd_get(pktr, \"destination address\", &destination_address);",
		"op_pk_nfd_get(pktr, \"start\", &start_time);",
		"op_pk_nfd_get(pktr, \"type\", &pk_type);",
		"op_pk_nfd_get(pktr, \"id\", &pk_id);",
		"",
		"//printf(\"burst arrive to sink,type=%d,sim=%f\\n\",pk_type,op_sim_time());",
		"if(pk_type == 0)",
		"{",
		"//printf(\"sink:arrival:,sink bcp,s=%d,d=%d,u=%d,sim=%f\\n\",source_address,destination_address,userid,op_sim_time());",
		"}",
		"else if(pk_type == 1)",
		"{",
		"//printf(\"sink:arrival:,sink burst,s=%d,d=%d,u=%d,sim=%f\\n\",source_address,destination_address,userid,op_sim_time());	",
		"	burst_count_rev++;",
		"	burst_size_rev = op_pk_total_size_get(pktr);",
		"	total_successed_burst_count++;",
		"	total_successed_burst_length_related_hop = total_successed_burst_length_related_hop + burst_size_rev * (op_rte_route_num_nodes (min_rptr[source_address][destination_address])-1);//num_routes[source_address][destination_address];",
		"	burst_size_total_rev = burst_size_total_rev + burst_size_rev;",
		"	burst_avg_size_rev = (double)(burst_size_total_rev/(double)burst_count_rev);",
		"	op_stat_write(burst_count_rev_stathandle,burst_count_rev);",
		"	op_stat_write(burst_size_rev_stathandle,burst_size_rev);",
		"	op_stat_write(burst_avg_size_rev_stathandle,burst_avg_size_rev);",
		"	burst_count_total_rev++;",
		"	op_stat_write(burst_count_total_rev_stathandle,burst_count_total_rev);",
		"	//op_pk_nfd_get (pktr, \"destination address\", &e_d);",
		"	//op_pk_nfd_get (pktr, \"source address\", &e_s);",
		"	//op_pk_nfd_get (pktr, \"id\", &e_id);",
		"	//printf(\"burst_rev= %d,s=%d,d=%d,id=%d\\n\",burst_count_total_rev,e_s,e_d,e_id);",
		"	//getchar();",
		"	",
		"}",

⌨️ 快捷键说明

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