📄 obs_sink.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 [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 + -