📄 restoration_proc.em.c
字号:
#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 [23];
/* array for all objects in model */
EmaT_Object_Id obj [42];
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_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_PR_ATTR_ASSGN);
obj [9] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_VALUE);
obj [10] = Ema_Object_Create (model_id, OBJ_ATTR_COMP_OBJ);
obj [11] = Ema_Object_Create (model_id, OBJ_PR_ATTR_ASSGN);
obj [12] = Ema_Object_Create (model_id, OBJ_PR_STATE);
obj [13] = Ema_Object_Create (model_id, OBJ_PR_POS);
obj [14] = Ema_Object_Create (model_id, OBJ_PR_STATE);
obj [15] = Ema_Object_Create (model_id, OBJ_PR_POS);
obj [16] = Ema_Object_Create (model_id, OBJ_PR_STATE);
obj [17] = Ema_Object_Create (model_id, OBJ_PR_POS);
obj [18] = Ema_Object_Create (model_id, OBJ_PR_STATE);
obj [19] = Ema_Object_Create (model_id, OBJ_PR_POS);
obj [20] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
obj [21] = Ema_Object_Create (model_id, OBJ_PR_POS);
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_TRANS);
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_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_POS);
obj [34] = Ema_Object_Create (model_id, OBJ_PR_TRANS);
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_POS);
obj [38] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
obj [39] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
obj [40] = Ema_Object_Create (model_id, OBJ_PR_STAT_DESC);
obj [41] = 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_DOUBLE,
"default value", COMP_CONTENTS, (double) 0,
"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, 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 \\sequence_number_wait;",
"",
"int \\sequence_number_current;",
"",
"int \\node_address;",
"",
"int \\nodes_total;",
"",
"int \\queue_size;",
"",
"int \\pk_rcvd[MAX_NODES];",
"",
"Distribution* \\address_dist;",
"",
"Objid \\sar_mod_objid;",
"",
"Objid \\node_id;",
"",
"Objid \\subnet_id;",
"",
"Objid \\next_node_id;",
"",
"Stathandle \\num_pk_gen_gsh;",
"",
"Stathandle \\dup_pk_gsh;",
"",
"Route* \\current_rptr;",
"",
"int \\pk_count;",
"",
"Stathandle \\pk_cnt_stathandle;",
"",
"Distribution * \\start_dist;",
"",
"Distribution * \\dtime_dist;",
"",
"Objid \\dest_node_objid;",
"",
"Objid \\node_objid;",
"",
"Objid \\self_objid;",
"",
"Distribution* \\wave_dist;",
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],
"Packet* pkptr_burst;",
"Packet* pkptr;",
"",
"int sequence_number_ack;",
"int sequence_number_rcv;",
"int source_address;",
"int destination_address;",
"double pk_size;",
"",
"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;",
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 <route.h>",
"#define PK_IN_STRM 0",
"#define PK_OUT_STRM 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)",
"",
"",
"int node_count = 0; ",
"//int num_pk_gen = 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 [38],
"global stat descs", COMP_ARRAY_CONTENTS (1), obj [39],
"local stat descs", COMP_ARRAY_CONTENTS (0), obj [40],
"local stat descs", COMP_ARRAY_CONTENTS (1), obj [41],
"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 [1],
EMAC_EOL);
Ema_Model_Attr_Set (model_id,
"attribute assignments",COMP_ARRAY_CONTENTS (1), obj [2],
"attribute assignments",COMP_ARRAY_CONTENTS (2), obj [3],
"attribute assignments",COMP_ARRAY_CONTENTS (3), obj [4],
"attribute assignments",COMP_ARRAY_CONTENTS (4), obj [5],
"attribute assignments",COMP_ARRAY_CONTENTS (5), obj [6],
"attribute assignments",COMP_ARRAY_CONTENTS (6), obj [7],
"attribute assignments",COMP_ARRAY_CONTENTS (7), obj [8],
"attribute assignments",COMP_ARRAY_CONTENTS (8), obj [11],
"simulation attributes",COMP_INTENDED, EMAC_DISABLED,
EMAC_EOL);
/* create model level attribute extensions */
Ema_Model_Attr_Add (model_id, "EXTRA_TIME", obj [0]);
/* assign attrs for object 'obj [9]' */
Ema_Object_Attr_Set (model_id, obj [9],
"count", COMP_CONTENTS, 1,
"list", COMP_ARRAY_CONTENTS (0), obj [10],
EMAC_EOL);
/* assign attrs for object 'obj [10]' */
/* assign attrs for object 'obj [12]' */
/* create and init prg list 'prg_lptr [11]' */
prg_lptr [11] = (Prg_List *)prg_list_create ();
prg_list_strings_append (prg_lptr [11],
"//pk_count = 0;",
"//pk_cnt_stathandle = op_stat_reg(\"packet count\", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);",
"",
"self_objid = op_id_self(); ",
"node_id = op_topo_parent (self_objid);",
"subnet_id = op_topo_parent(node_id);",
"node_count++;",
"node_address = node_count;",
"op_ima_obj_attr_set (node_id, \"user id\", node_address);",
"//printf(\"userid = %d\\n\",node_address);",
"//getchar();",
"",
"gen_bcp[node_address] = 0;",
"",
"/* initialize the current sequence number to be zero */",
"sequence_number_current = 0;",
"",
"/* initialize the waiting sequence number to be -1 */",
"sequence_number_wait = -1;",
"",
"/* determine the total number of end nodes connceted to the network */",
"nodes_total = op_topo_object_count (OPC_OBJTYPE_NDFIX);",
"",
"/* set up the address distribution */",
"address_dist = op_dist_load (\"uniform_int\", 11, 14);",
"",
"/* initialize the counter of packets received from each source ",
"for (i=0;i<MAX_NODES;i++)",
" {",
" pk_rcvd[i] = -1;",
" }",
"*/",
"/* 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);",
"",
"for(j=1;j<15;j++)",
" {",
" use_backup_path[node_address][j] = 0;",
" }",
PRGC_NIL);
/* create and init prg list 'prg_lptr [12]' */
prg_lptr [12] = (Prg_List *)prg_list_create ();
Ema_Object_Attr_Set (model_id, obj [12],
"name", COMP_CONTENTS, "init",
"Enter Execs", COMP_CONTENTS, prg_lptr [11],
"Exit Execs", COMP_CONTENTS, prg_lptr [12],
"status", COMP_TOGGLE, EMAC_ENABLED,
"position", COMP_CONTENTS, obj [13],
"initial", COMP_TOGGLE, EMAC_ENABLED,
EMAC_EOL);
/* assign attrs for object 'obj [14]' */
/* create and init prg list 'prg_lptr [13]' */
prg_lptr [13] = (Prg_List *)prg_list_create ();
/* create and init prg list 'prg_lptr [14]' */
prg_lptr [14] = (Prg_List *)prg_list_create ();
Ema_Object_Attr_Set (model_id, obj [14],
"name", COMP_CONTENTS, "wait",
"Enter Execs", COMP_CONTENTS, prg_lptr [13],
"Exit Execs", COMP_CONTENTS, prg_lptr [14],
"status", COMP_TOGGLE, EMAC_DISABLED,
"position", COMP_CONTENTS, obj [15],
"initial", COMP_TOGGLE, EMAC_DISABLED,
EMAC_EOL);
/* assign attrs for object 'obj [16]' */
/* create and init prg list 'prg_lptr [15]' */
prg_lptr [15] = (Prg_List *)prg_list_create ();
prg_list_strings_append (prg_lptr [15],
"self_objid = op_id_self ();",
"node_objid = op_topo_parent(self_objid);",
"op_ima_obj_attr_get(node_objid, \"user id\", &userid);",
"",
"/* obtain the app packet*/",
"pkptr_burst = op_pk_get (op_intrpt_strm());",
"pk_size = op_pk_total_size_get (pkptr_burst);",
"pk_size = (double)(pk_size / SCM);",
"",
"op_pk_destroy(pkptr_burst);",
"",
"if(userid == 6 || userid == 7 || userid == 8 || userid == 9)",
"{",
"",
"pkptr = op_pk_create_fmt (\"restration_bcp\");",
" ",
"//num_pk_gen++;",
"//op_stat_write (num_pk_gen_gsh, num_pk_gen);",
"",
"/* set the sequence number field for this packet */",
"op_pk_nfd_set (pkptr, \"sequence number\", sequence_number_current);",
"",
"/* increment the current sequence number counter */",
"sequence_number_current++;",
"",
"op_pk_nfd_set (pkptr, \"source address\", node_address);",
"source_address = node_address;",
"destination_address = op_dist_outcome (address_dist);",
"",
"",
"op_pk_nfd_set (pkptr, \"destination address\", destination_address);",
"",
"",
"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) ",
" {",
" 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);",
" ",
" 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+EXTRA_TIME;",
"",
" op_pk_nfd_set (pkptr, \"start\", start_time);",
" op_pk_nfd_set (pkptr, \"dtime\", dtime_time);",
" op_pk_nfd_set (pkptr, \"hop\", 0);",
" op_pk_nfd_set (pkptr, \"flag\", use_backup_path[source_address][destination_address]);",
" op_pk_nfd_set (pkptr, \"route_flag\", 0); //primary path",
" op_pk_nfd_set (pkptr, \"restoration_flag\", NORMAL);",
" ",
" ",
" wave_dist = op_dist_load (\"uniform_int\", 0, WAVE_NUM-1);",
" wavelength_number = op_dist_outcome (wave_dist);",
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -