ier.em.c

来自「实验室前辈用OPNET做的光突发交换网络的仿真实验」· C语言 代码 · 共 1,341 行 · 第 1/4 页

C
1,341
字号
		"for (i = 0; i < num_fixed_nodes; i++)",
		"	{",
		"	node_objid_ptr = (Objid *) op_prg_mem_alloc (sizeof (Objid));",
		"	/* get the node's name and condition */",
		"	*node_objid_ptr = op_topo_object (OPC_OBJTYPE_NDFIX, i);",
		"	op_ima_obj_attr_get (*node_objid_ptr, \"name\", node_name);",
		"	op_ima_obj_attr_get (*node_objid_ptr, \"condition\", &node_condition);",
		PRGC_NIL);

	prg_list_strings_append (prg_lptr [10], 
		"	op_ima_obj_attr_get (*node_objid_ptr, \"user id\", &userid);",
		"	",
		"//	printf(\"name = %s   condition = %d   user id = %d\\n\",node_name,node_condition,userid);",
		"	",
		"	/* end nodes */",
		"	if (toupper(node_name[0]) == 'N')",
		"		{",
		"		*node_objid_ptr = op_id_from_name (*node_objid_ptr, OPC_OBJTYPE_PROC, \"rte\");",
		"		/* insert objid of \"rte\" module to call_router_list */",
		"		op_prg_list_insert (call_router_lptr, node_objid_ptr, OPC_LISTPOS_TAIL);",
		"		}",
		"",
		"	/* mesh nodes */",
		"	else if (	(toupper(node_name[0]) == 'M') && (node_condition == OPC_TRUE)	)",
		"		{",
		"		op_prg_list_insert (mesh_nd_enabled_lptr, node_objid_ptr,OPC_LISTPOS_TAIL);",
		"	    }",
		"",
		"	/* if not controller node, this node is disabled */",
		"	else if (toupper(node_name[0]) != 'C')",
		"		{",
		"		/* disable this node in the topology and insert it to the disabled nodes' list */",
		"		op_rte_topo_node_disable (topo_ptr, subnet_objid, *node_objid_ptr);",
		"		op_prg_list_insert (mesh_nd_disabled_lptr, node_objid_ptr,OPC_LISTPOS_TAIL);",
		"        }",
		"	}",
		"",
		"//************************ set link cost and delay *********************************",
		"/* get total number of duplex links */",
		"num_dup_links = op_topo_object_count (OPC_OBJTYPE_LKDUP);",
		"",
		"/* insert links to different lists */",
		"for (i = 0; i < num_dup_links; i++)",
		"	{",
		"	/* allocate memory of each link objid */",
		"	link_objid_ptr = (Objid *) op_prg_mem_alloc (sizeof (Objid));",
		"    *link_objid_ptr = op_topo_object (OPC_OBJTYPE_LKDUP, i);",
		"",
		"	/* get the link's condition */",
		"	op_ima_obj_attr_get (*link_objid_ptr, \"condition\", &link_condition);",
		"",
		"	/* get name of the two nodes connected to this link */",
		"	node0_objid = op_topo_assoc (*link_objid_ptr, OPC_TOPO_ASSOC_OUT,OPC_OBJTYPE_NDFIX, 0);",
		"	node1_objid = op_topo_assoc (*link_objid_ptr, OPC_TOPO_ASSOC_OUT,OPC_OBJTYPE_NDFIX, 1);",
		"	op_ima_obj_attr_get (node0_objid, \"name\", node0_name);",
		"	op_ima_obj_attr_get (node1_objid, \"name\", node1_name);",
		"	",
		"	op_ima_obj_attr_get (node0_objid, \"user id\", &userid0);",
		"	op_ima_obj_attr_get (node1_objid, \"user id\", &userid1);",
		"	userid0 = userid0-1;",
		"	userid1 = userid1-1;",
		"",
		"	link_ptr = op_rte_topo_link_find (topo_ptr, subnet_objid, node0_objid, subnet_objid, node1_objid, 0); ",
		"//	op_rte_topo_link_cost_set (link_ptr, Net_top[userid0][userid1]);",
		"	op_rte_topo_link_cost_set (link_ptr, 1);",
		"//	op_ima_obj_attr_set (*link_objid_ptr, \"delay\", Net_delay[userid0][userid1]);",
		"	op_ima_obj_attr_set (*link_objid_ptr, \"delay\", LINK_DELAY);",
		"	",
		"	link_ptr = op_rte_topo_link_find (topo_ptr, subnet_objid, node1_objid, subnet_objid, node0_objid, 0); ",
		"//	op_rte_topo_link_cost_set (link_ptr, Net_top[userid1][userid0]);",
		"	op_rte_topo_link_cost_set (link_ptr, 1);",
		"//	op_ima_obj_attr_set (*link_objid_ptr, \"delay\", Net_delay[userid1][userid0]);",
		"	op_ima_obj_attr_set (*link_objid_ptr, \"delay\", LINK_DELAY);",
		"",
		"	/* if one of the two nodes is end nodes, insert to nonmesh node list */",
		"	if (	(toupper(node0_name[0]) == 'N') || (toupper(node1_name[0]) == 'N')	)",
		"		op_prg_list_insert (link_non_mesh_lptr, link_objid_ptr,	OPC_LISTPOS_TAIL);",
		"",
		"	/* this link is not connected to an end node */",
		"    /* if this link is enabled */",
		"	else if (link_condition)",
		"		op_prg_list_insert (link_enabled_lptr, link_objid_ptr,OPC_LISTPOS_TAIL);",
		"",
		"	/* if this link is disabled */",
		"	else",
		"		op_prg_list_insert (link_disabled_lptr, link_objid_ptr,OPC_LISTPOS_TAIL);",
		"	}",
		"",
		"/* total number of end nodes */",
		"num_call_routers = op_prg_list_size (call_router_lptr);",
		"",
		"",
		"for(i = 1;i < num_fixed_nodes;i++) ",
		"	{",
		"	for(j = 1;j < num_fixed_nodes;j++) ",
		"		{",
		"		src_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX, i);",
		"		dest_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX, j);",
		"		rset_ptr[i][j] = op_rte_routeset_create (topo_ptr, subnet_objid, src_objid, subnet_objid, dest_objid, MAX_HOPS);",
		"		",
		"		if(i == j) ",
		"			{",
		"			min_rptr[i][j] = OPC_NIL;",
		"			p_min_rptr[i][j] = OPC_NIL;",
		"			primary_num_nodes[i][j] = 0;",
		"			num_routes[i][j] = 0;",
		"			}",
		"		else ",
		"			{",
		"			num_routes[i][j] = op_rte_routeset_num_routes (rset_ptr[i][j]);",
		PRGC_NIL);

	prg_list_strings_append (prg_lptr [10], 
		"			min_rptr[i][j] = op_rte_routeset_mincost (rset_ptr[i][j]);",
		"			p_min_rptr[i][j] = op_rte_route_copy(min_rptr[i][j]);",
		"			",
		"			op_rte_route_dump (min_rptr[i][j], subnet_ids, node_ids);",
		"			primary_num_nodes[i][j] = op_rte_route_num_nodes (min_rptr[i][j]);",
		"			",
		"//			printf(\"Primary_path[%d][%d] = \\n\",i,j);		",
		"",
		"			for(k=0; k<primary_num_nodes[i][j]; k++)",
		"				{",
		"				Primary_path[i][j][k] = node_ids[k];",
		"//				printf(\"%d\\t\",Primary_path[i][j][k]);",
		"				}",
		"//			printf(\"\\n\");",
		"//			getchar();",
		"			}",
		"		} // for j",
		"	}// for i",
		"",
		"	",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"self_objid = op_id_self();				 //precess id",
		"node_id = op_topo_parent (self_objid);	 //node id",
		"subnet_id = op_topo_parent(node_id);     //subnet_id 牢单 咯扁辑绰 subnet_id 客 network_id啊 鞍促 ",
		"",
		"/* determine the total number of end nodes connceted to the network */",
		"nodes_total = op_topo_object_count (OPC_OBJTYPE_NDFIX);	//Node Difine IndeX",
		"",
		"/* set up the address distribution */",
		"address_dist = op_dist_load (\"uniform_int\", 1, NODE_NUM);",
		"",
		"/* register global stats and write an init point in each */",
		"//num_pk_gen_gsh = op_stat_reg (\"Global application packets generated (pks)\", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);",
		"//op_stat_write (num_pk_gen_gsh, num_pk_gen);",
		"op_intrpt_schedule_self(op_sim_time()+ 0.000001,0);",
		"",
		"pk_size = 0;",
		"pk_size_no1_stathandle = op_stat_reg(\"PK_SIZE_NODE1\",OPC_STAT_INDEX_NONE,OPC_STAT_LOCAL);",
		"",
		"pk_count = 0;",
		"pk_cnt_no1_stathandle = op_stat_reg(\"PK_COUNT_NODE1\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"//pk_size_total_send = 0;",
		"pk_size_total_send_stathandle = op_stat_reg(\"PK_SIZE_TOTAL_SEND\",OPC_STAT_INDEX_NONE,OPC_STAT_GLOBAL);",
		"",
		"//pk_count_total_send = 0;",
		"pk_cnt_total_send_stathandle = op_stat_reg(\"PK_COUNT_TOTAL_SEND\", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);",
		"",
		"",
		"//pk_avg_total_size_send = 0;",
		"pk_avg_total_size_send_stathandle = op_stat_reg(\"PK_AVG_TOTAL_SIZE_SEND\", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);",
		"",
		"",
		"gen_count_total_send_stathandle = op_stat_reg(\"GEN_COUNT_TOTAL_SEND\", OPC_STAT_INDEX_NONE, OPC_STAT_GLOBAL);",
		"",
		"pk_avg_size_send = 0;",
		"pk_avg_size_send_stathandle = op_stat_reg(\"PK_AVG_SIZE_SEND\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"printf(\"proc:init:,userid=%d\\n\",node_address);",
		"subq_index = 0;",
		"",
		"burst_count_to_node1 = 0;",
		"burst_count_to_node1_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE1\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node1 = 0;",
		"burst_size_to_node1_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE1\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"burst_count_to_node2 = 0;",
		"burst_count_to_node2_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE2\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node2 = 0;",
		"burst_size_to_node2_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE2\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"burst_count_to_node3 = 0;",
		"burst_count_to_node3_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE3\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node3 = 0;",
		"burst_size_to_node3_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE3\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"burst_count_to_node4 = 0;",
		"burst_count_to_node4_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE4\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node4 = 0;",
		"burst_size_to_node4_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE4\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"burst_count_to_node5 = 0;",
		"burst_count_to_node5_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE5\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node5 = 0;",
		"burst_size_to_node5_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE5\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"burst_count_to_node6 = 0;",
		"burst_count_to_node6_stathandle = op_stat_reg(\"BURST_COUNT_TO_NODE6\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"burst_size_to_node6 = 0;",
		"burst_size_to_node6_stathandle = op_stat_reg(\"BURST_SIZE_TO_NODE6\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"",
		"",
		"",
		PRGC_NIL);

	prg_list_strings_append (prg_lptr [10], 
		"pk_count_send_channel0 = 0;",
		"pk_count_send_channel0_stathandle = op_stat_reg(\"PK_COUNT_SEND_CHANNEL0\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"pk_size_send_channel0 = 0;",
		"pk_size_send_channel0_stathandle = op_stat_reg(\"PK_SIZE_SEND_CHANNEL0\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"pk_count_send_channel1 = 0;",
		"pk_count_send_channel1_stathandle = op_stat_reg(\"PK_COUNT_SEND_CHANNEL1\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		"",
		"pk_size_send_channel1 = 0;",
		"pk_size_send_channel1_stathandle = op_stat_reg(\"PK_SIZE_SEND_CHANNEL1\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
		PRGC_NIL);

	Ema_Object_Attr_Set (model_id, obj [11], 
		"name",                 COMP_CONTENTS, "init",
		"name",                 COMP_INTENDED, EMAC_DISABLED,
		"Enter Execs",          COMP_CONTENTS, prg_lptr [10],
		"status",               COMP_TOGGLE,   EMAC_ENABLED,
		"status",               COMP_INTENDED, EMAC_DISABLED,
		"position",             COMP_CONTENTS, obj [12],
		"initial",              COMP_TOGGLE,   EMAC_ENABLED,
		EMAC_EOL);


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


	/* assign attrs for object 'obj [15]' */
	/* create and init prg list 'prg_lptr [14]' */
	prg_lptr [14] = (Prg_List *)prg_list_create ();
	prg_list_strings_append (prg_lptr [14], 
		"op_ima_obj_attr_get(node_objid, \"user id\", &userid);",
		"if (op_subq_empty (subq_index) == OPC_FALSE)",
		"{",
		"	pkptr_burst = op_subq_pk_access (subq_index, OPC_QPOS_HEAD);",
		"	// bcp积己 ",
		"	pkptr =op_pk_create_fmt (\"BCP\");",
		"	op_pk_nfd_get (pkptr_burst, \"source address\", &source_address);",
		"	op_pk_nfd_get (pkptr_burst, \"destination address\", &destination_address);",
		"	op_pk_nfd_get (pkptr_burst, \"id\", &id_number_temp);",
		"	if (min_rptr[source_address][destination_address] == OPC_NIL)   //扼快泼 抛捞喉俊 粮犁窍瘤 臼栏搁",
		"	{",
		"		p_min_rptr_copy = OPC_NIL;",
		"	}",
		"	else",
		"	{",
		"		p_min_rptr_copy = op_rte_route_copy (min_rptr[source_address][destination_address]);",
		"	}",
		"	current_rptr = p_min_rptr_copy;",
		"	if (current_rptr == OPC_NIL) ",
		"	{",
		"		pkptr_burst = op_subq_pk_remove (subq_index, OPC_QPOS_HEAD);",
		"		op_pk_destroy (pkptr_burst);",
		"		op_pk_destroy (pkptr);",
		"	}",
		"	else ",
		"	{",
		"		/* insert the route into the packet */",
		"		pk_rptr = op_rte_route_copy (current_rptr);",
		"		op_rte_pk_route_insert (pkptr, pk_rptr);",
		"	//	printf(\"proc:proc:,s=%d,d=%d,userid=%d,sim=%f\\n\",source_address,destination_address,userid,op_sim_time());",
		"	//	getchar();",
		"		pk_size = op_pk_total_size_get (pkptr_burst);",
		"		num_nodes = op_rte_route_num_nodes (min_rptr[source_address][destination_address]);",
		"		dtime_time = (double) pk_size/RATE;				",
		"		op_ima_obj_attr_get(self_objid, \"EXTRA_TIME\", &EXTRA_TIME);   ",
		"		start_time = (double) PROC_TIME*num_nodes;",
		"		op_pk_nfd_set (pkptr, \"source address\", source_address);",
		"		op_pk_nfd_set (pkptr, \"destination address\", destination_address);",
		"		op_pk_nfd_set (pkptr, \"start\", start_time);",
		"		op_pk_nfd_set (pkptr, \"dtime\", dtime_time);",
		"		op_pk_nfd_set (pkptr, \"type\", 0);",
		"		op_pk_nfd_set (pkptr, \"id\", id_number_temp);",
		"		",
		"		pk_count_total_send++;",
		"		pk_size_total_send = pk_size_total_send + dtime_time * RATE;",
		"		pk_avg_total_size_send = ( (double)pk_size_total_send / (double)pk_count_total_send);",
		"		op_stat_write(pk_cnt_total_send_stathandle,pk_count_total_send);",
		"		op_stat_write(pk_size_total_send_stathandle,pk_size_total_send);",
		"		op_stat_write(pk_avg_total_size_send_stathandle,pk_avg_total_size_send);",
		"		",
		"		op_pk_send (pkptr, PK_OUT_STRM);",
		"		op_pk_nfd_set (pkptr_burst,\"start\", start_time);",
		"	//	printf(\"proc:proc,bcp send after:,userid=%d,sim=%f\\n\",userid,op_sim_time());",
		"	}",
		"	",
		"}",
		"else",
		"{",
		"	//printf(\"subq access fail,userid=%d,subq_index=%d\\n\",userid,subq_index);",
		"	//op_subq_print (subq_index);",
		"}",
		"subq_index++;",
		"if(subq_count <= subq_index)",
		"	subq_index = 0;",
		"",
		"op_intrpt_schedule_self(op_sim_time()+0.000031875,0);",
		"",
		PRGC_NIL);

	Ema_Object_Attr_Set (model_id, obj [15], 
		"name",                 COMP_CONTENTS, "control_access",
		"name",                 COMP_INTENDED, EMAC_DISABLED,
		"Enter Execs",          COMP_CONTENTS, prg_lptr [14],
		"status",               COMP_TOGGLE,   EMAC_ENABLED,
		"status",               COMP_INTENDED, EMAC_DISABLED,
		"position",             COMP_CONTENTS, obj [16],
		"initial",              COMP_TOGGLE,   EMAC_DISABLED,
		EMAC_EOL);


	/* assign attrs for object 'obj [17]' */
	Ema_Object_Attr_Set (model_id, obj [17], 
		"name",                 COMP_CONTENTS, "control_recieve",

⌨️ 快捷键说明

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