📄 ramimo_pktgen1.pr.c
字号:
}
FSM_PROFILE_SECTION_OUT (state2_exit_exec)
/** state (ON) transition processing **/
FSM_PROFILE_SECTION_IN ("ramimo_pktgen [ON trans conditions]", state2_trans_conds)
FSM_INIT_COND (OFF_TIME)
FSM_TEST_COND (GEN_PKT)
FSM_TEST_LOGIC ("ON")
FSM_PROFILE_SECTION_OUT (state2_trans_conds)
FSM_TRANSIT_SWITCH
{
FSM_CASE_TRANSIT (0, 1, state1_enter_exec, ;, "OFF_TIME", "", "ON", "OFF")
FSM_CASE_TRANSIT (1, 3, state3_enter_exec, ;, "GEN_PKT", "", "ON", "PKT_GEN")
}
/*---------------------------------------------------------*/
/** state (PKT_GEN) enter executives **/
FSM_STATE_ENTER_FORCED (3, "PKT_GEN", state3_enter_exec, "ramimo_pktgen [PKT_GEN enter execs]")
FSM_PROFILE_SECTION_IN ("ramimo_pktgen [PKT_GEN enter execs]", state3_enter_exec)
{
/*Create a DATA packet*/
pktptr = op_pk_create_fmt("DATA_pkt");
/*Set the fields of the packet*/
op_pk_total_size_set(pktptr, datapktsize);
op_pk_nfd_set(pktptr, "SRC", srcuserid);
op_pk_nfd_set(pktptr, "DEST", destuserid);
op_pk_nfd_set(pktptr, "number", sequencenum);
op_pk_nfd_set(pktptr, "time", op_pk_creation_time_get(pktptr));
/*Increment the sequence number*/
sequencenum = sequencenum + 1.0;
/*Increment the variable counting the number of packets in this burst by one*/
burstpktcount++;
/*Calculate the time when the next packet should be generated based on the system load level*/
genpktevent = op_intrpt_schedule_self(op_sim_time() + timebetweenpkts, PKT);
/*Obtain an event handle to the next local event*/
thisevent = op_ev_current();
nextevent = op_ev_next_local(thisevent);
/*If this is the first packet in a burst then set the packet position to '1'*/
if(first == 1)
{
op_pk_nfd_set(pktptr, "position", 1);
first = 0;
}
else
{
op_pk_nfd_set(pktptr, "position", 0);
}
/*Determine whether the next event is an OFF event (as opposed to another packet generation interrupt) and if so set the packet position field to '2'*/
/*to indicate that this will be the last packet in the burst. Also write out the relevent burst statistics at the end of the burst*/
if( op_ev_equal(nextevent,offevent) == OPC_TRUE )
{
op_pk_nfd_set(pktptr, "position", 2);
/*Cancel the generation packet interrupt*/
op_ev_cancel(genpktevent);
/*Record the length of the burst in terms in the number of packets*/
op_stat_write(burstlength, burstpktcount);
/*Calculate the duration of the burst and record it*/
bursttime = op_sim_time() + (datapktsize / datarate) - bursttime;
op_stat_write(burstduration, bursttime);
}
#ifdef PKTGEN_PKT_GEN
printf("PKTGEN_PKT_GEN\n");
printf("Packet Size = %d\n", op_pk_total_size_get(pktptr) );
op_pk_nfd_get(pktptr, "SRC", &tempint);
printf("Packet Source Node User ID = %d\n", tempint);
op_pk_nfd_get(pktptr, "DEST", &tempint);
printf("Packet Destination Node User ID = %d\n", tempint);
op_pk_nfd_get(pktptr, "position", &tempint);
printf("Position Within Burst = %d\n", tempint);
op_pk_nfd_get(pktptr, "number", &tempdouble);
printf("Packet Sequence Number = %lf\n", tempdouble);
op_pk_nfd_get(pktptr, "time", &tempdouble);
printf("Packet Creation Time = %lf\n", tempdouble);
#endif
/*Send the packet onto the output stream*/
op_pk_send(pktptr, OUT_STRM);
op_prg_odb_bkpt("TEST");
op_prg_odb_bkpt("CREATE");
}
FSM_PROFILE_SECTION_OUT (state3_enter_exec)
/** state (PKT_GEN) exit executives **/
FSM_STATE_EXIT_FORCED (3, "PKT_GEN", "ramimo_pktgen [PKT_GEN exit execs]")
FSM_PROFILE_SECTION_IN ("ramimo_pktgen [PKT_GEN exit execs]", state3_exit_exec)
{
}
FSM_PROFILE_SECTION_OUT (state3_exit_exec)
/** state (PKT_GEN) transition processing **/
FSM_TRANSIT_FORCE (2, state2_enter_exec, ;, "default", "", "PKT_GEN", "ON")
/*---------------------------------------------------------*/
}
FSM_EXIT (0,"ramimo_pktgen")
}
}
void
ramimo_pktgen_diag (OP_SIM_CONTEXT_ARG_OPT)
{
/* No Diagnostic Block */
}
void
ramimo_pktgen_terminate (OP_SIM_CONTEXT_ARG_OPT)
{
#if !defined (VOSD_NO_FIN)
int _op_block_origin = __LINE__;
#endif
FIN_MT (ramimo_pktgen_terminate ())
Vos_Poolmem_Dealloc_MT (OP_SIM_CONTEXT_THREAD_INDEX_COMMA pr_state_ptr);
FOUT
}
/* Undefine shortcuts to state variables to avoid */
/* syntax error in direct access to fields of */
/* local variable prs_ptr in ramimo_pktgen_svar function. */
#undef channelload
#undef datarate
#undef proc_id
#undef node_id
#undef mean_off_time
#undef mean_on_time
#undef offevent
#undef genpktevent
#undef random_node
#undef thisevent
#undef nextevent
#undef first
#undef burstpktcount
#undef burstlength
#undef burstduration
#undef bursttime
#undef datapktsize
#undef packetformat
#undef srcuserid
#undef intnumnodes
#undef dblnumnodes
#undef destuserid
#undef mainprocid
#undef tx_id
#undef txcomp_id
#undef txch_id
#undef timebetweenpkts
#undef sequencenum
#undef FIN_PREAMBLE_DEC
#undef FIN_PREAMBLE_CODE
#define FIN_PREAMBLE_DEC
#define FIN_PREAMBLE_CODE
VosT_Obtype
ramimo_pktgen_init (int * init_block_ptr)
{
#if !defined (VOSD_NO_FIN)
int _op_block_origin = 0;
#endif
VosT_Obtype obtype = OPC_NIL;
FIN_MT (ramimo_pktgen_init (init_block_ptr))
Vos_Define_Object (&obtype, "proc state vars (ramimo_pktgen)",
sizeof (ramimo_pktgen_state), 0, 20);
*init_block_ptr = 0;
FRET (obtype)
}
VosT_Address
ramimo_pktgen_alloc (VOS_THREAD_INDEX_ARG_COMMA VosT_Obtype obtype, int init_block)
{
#if !defined (VOSD_NO_FIN)
int _op_block_origin = 0;
#endif
ramimo_pktgen_state * ptr;
FIN_MT (ramimo_pktgen_alloc (obtype))
ptr = (ramimo_pktgen_state *)Vos_Alloc_Object_MT (VOS_THREAD_INDEX_COMMA obtype);
if (ptr != OPC_NIL)
ptr->_op_current_block = init_block;
FRET ((VosT_Address)ptr)
}
void
ramimo_pktgen_svar (void * gen_ptr, const char * var_name, void ** var_p_ptr)
{
ramimo_pktgen_state *prs_ptr;
FIN_MT (ramimo_pktgen_svar (gen_ptr, var_name, var_p_ptr))
if (var_name == OPC_NIL)
{
*var_p_ptr = (void *)OPC_NIL;
FOUT
}
prs_ptr = (ramimo_pktgen_state *)gen_ptr;
if (strcmp ("channelload" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->channelload);
FOUT
}
if (strcmp ("datarate" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->datarate);
FOUT
}
if (strcmp ("proc_id" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->proc_id);
FOUT
}
if (strcmp ("node_id" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->node_id);
FOUT
}
if (strcmp ("mean_off_time" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->mean_off_time);
FOUT
}
if (strcmp ("mean_on_time" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->mean_on_time);
FOUT
}
if (strcmp ("offevent" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->offevent);
FOUT
}
if (strcmp ("genpktevent" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->genpktevent);
FOUT
}
if (strcmp ("random_node" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->random_node);
FOUT
}
if (strcmp ("thisevent" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->thisevent);
FOUT
}
if (strcmp ("nextevent" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->nextevent);
FOUT
}
if (strcmp ("first" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->first);
FOUT
}
if (strcmp ("burstpktcount" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->burstpktcount);
FOUT
}
if (strcmp ("burstlength" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->burstlength);
FOUT
}
if (strcmp ("burstduration" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->burstduration);
FOUT
}
if (strcmp ("bursttime" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->bursttime);
FOUT
}
if (strcmp ("datapktsize" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->datapktsize);
FOUT
}
if (strcmp ("packetformat" , var_name) == 0)
{
*var_p_ptr = (void *) (prs_ptr->packetformat);
FOUT
}
if (strcmp ("srcuserid" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->srcuserid);
FOUT
}
if (strcmp ("intnumnodes" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->intnumnodes);
FOUT
}
if (strcmp ("dblnumnodes" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->dblnumnodes);
FOUT
}
if (strcmp ("destuserid" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->destuserid);
FOUT
}
if (strcmp ("mainprocid" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->mainprocid);
FOUT
}
if (strcmp ("tx_id" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->tx_id);
FOUT
}
if (strcmp ("txcomp_id" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->txcomp_id);
FOUT
}
if (strcmp ("txch_id" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->txch_id);
FOUT
}
if (strcmp ("timebetweenpkts" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->timebetweenpkts);
FOUT
}
if (strcmp ("sequencenum" , var_name) == 0)
{
*var_p_ptr = (void *) (&prs_ptr->sequencenum);
FOUT
}
*var_p_ptr = (void *)OPC_NIL;
FOUT
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -