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 + -
显示快捷键?