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

📄 core.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 [22];

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



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_TRANS);
	obj [24] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [25] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [26] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [27] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [28] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [29] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [30] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [31] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [32] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [33] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [34] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [35] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [36] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [37] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [38] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [39] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [40] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [41] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [42] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [43] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	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_TRANS);
	obj [48] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [49] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [50] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [51] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
	obj [52] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [53] = Ema_Object_Create (model_id, OBJ_PR_POS);
	obj [54] = 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 ();
	prg_list_strings_append (prg_lptr [0], 
		"Objid	\\self_objid;",
		"",
		"Objid	\\node_objid;",
		"",
		"Objid	\\subnet_objid;",
		"",
		"int	\\userid;",
		"",
		"ROUTING_TABLE *	\\routing_table;",
		"",
		"NODE	\\node_for_schedule;",
		"",
		"int	\\link_num;",
		"",
		"int	\\channel_count;",
		"",
		"int	\\pk_type;",
		"",
		"Packet *	\\pkptr_state;",
		"",
		"int	\\node_num;",
		"",
		"int	\\node_count;",
		"",
		"Topology*	\\topo_objid;",
		"",
		"int	\\temp_strm_num;",
		"",
		"List *	\\s_metrix_list;",
		"",
		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], 
		"int total_node_num = 0;",
		"//int node_num = 0;",
		"//int link_num = 0;",
		"char node_name[20];",
		"int i,j,k;",
		"Objid node_objid_ptr, link_objid,tx_objid;",
		"Route* min_route;",
		"int subnet_id_ptr, node_id_ptr;",
		"int strm_num, channel_count1, link_count;",
		"double pk_size;",
		"Objid temp_tx_objid;",
		"int cur_port, difference_time, reservation_flag, cur_channel;",
		"double d_time, temp_difference_time; ",
		"CHANNEL_INFOR * temp_channel_infor;",
		"int temp_outstrm_num,cur_por,temp_occupy_count;",
		"int output_strm;",
		"int pkptr_type;",
		"Objid temp_src_objid, temp_dest_objid;",
		"Route_Set* temp_routeset;",
		"Route* temp_min_route;",
		"int temp_userid, temp_flag_tx;",
		"double next_stime;",
		"Ici* temp_ici;",
		"S_METRIX *temp_s_metrix;",
		"int intrupt_strum,temp_flag_success,temp_flag_loop;",
		"Packet* s_metrix_pkptr;",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"Packet*		pkptr_burst;",
		"Packet*		pkptr;",
		"",
		"int			source_address;",
		"int			destination_address;",
		"",
		"",
		"",
		"Route*		pk_rptr;",
		"double		start_time;",
		"double		dtime_time;",
		"double		cur_time;",
		"int			subnet_ids[10];",
		"int			node_ids[20];",
		"int			num_nodes;",
		"",
		"",
		"double 		EXTRA_TIME;",
		"Objid		strm_objid;",
		"int 		jj;",
		"int 		channel_num;",
		"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 CONTORL_ACCESS		0",
		"#define SUBQ_INDEX_0		0",
		"#define SUBQ_INDEX_1		1",
		"#define SUBQ_INDEX_2		2",
		"#define SUBQ_INDEX_3		3",
		"#define SUBQ_INDEX_4		4",
		"#define SUBQ_INDEX_5		5",
		"",
		"",
		"#define END_SIM	(op_intrpt_type () == OPC_INTRPT_ENDSIM)",
		"#define BEG_SIM (op_intrpt_type () == OPC_INTRPT_BEGSIM)",
		"#define DATA_RECIEVE (op_intrpt_type() == OPC_INTRPT_STRM && op_intrpt_strm() != 0) ",
		"#define S_M_INIT (op_intrpt_type() == OPC_INTRPT_SELF && op_intrpt_code()== 0)",
		"//#define S_M_UPDATE (op_intrpt_type() == OPC_INTRPT_STAT)",
		"#define S_M_UPDATE (op_intrpt_type() == OPC_INTRPT_STRM && op_intrpt_strm() == 0)",
		"",
		"//start of sturct for routing table",
		"typedef struct {",
		"int source;",
		"int destination;",
		"int hop_count;",
		"Objid output_link;",
		"int strm_control;",
		"//int strm_data;",
		"} ROUTING_TABLE;",
		"//end of sturct for routing table",
		"",
		"typedef struct {",
		"double s_time;",
		"double d_time;",
		"int input_strum;",
		"int output_strum;",
		"} S_METRIX;",
		"",
		"",
		"",
		"typedef struct {",
		"	double start_time;     //offset time",
		"	double duration_time;  // duration time of burst",
		"	int source;",
		"	int destination;",
		"	int outstrm_num;",
		"	int instrm_num;",
		"} CHANNEL_INFOR;",
		"",
		"typedef struct ",
		"{",
		"	double horizon;",
		"	List * gab_list;",
		"	List * occupy_list;",
		"} CHANNEL;",
		"",
		"typedef struct ",
		"{",
		"	CHANNEL * channel;",
		"	int next_nodeid;",
		"	Objid tx_objid;",
		"} PORT;",
		"",
		"typedef struct ",
		"{",
		"	PORT * port;",
		"} NODE;",
		"",
		"",
		"//int node_num = 0;",
		"//int node_count = 0;   ",
		"",
		"//double PDTime_CC = 0.001;",
		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], 
		" //start of conform the node id",
		"self_objid = op_id_self ();",
		"node_objid = op_topo_parent (self_objid);",
		"subnet_objid = op_topo_parent (node_objid);",
		"topo_objid = op_rte_topo_from_objids();",
		"",
		"",
		"//op_ima_obj_attr_set (node_objid, \"user id\", h_node_count++);	 ",

⌨️ 快捷键说明

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