dsr_source.pr.c
来自「afit的ad hoc路由协议源码」· C语言 代码 · 共 620 行 · 第 1/2 页
C
620 行
{
op_intrpt_schedule_self (stop_time, SSC_STOP);
}
}
/* Register the statistics that will be maintained by this model. */
bits_sent_hndl = op_stat_reg ("Generator.Traffic Sent (bits/sec)", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
packets_sent_hndl = op_stat_reg ("Generator.Traffic Sent (packets/sec)", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
packet_size_hndl = op_stat_reg ("Generator.Packet Size (bits)", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
interarrivals_hndl = op_stat_reg ("Generator.Packet Interarrival Time (secs)", OPC_STAT_INDEX_NONE, OPC_STAT_LOCAL);
}
/** blocking after enter executives of unforced state. **/
FSM_EXIT (1,dsr_source)
/** state (init) exit executives **/
FSM_STATE_EXIT_UNFORCED (0, "init", "dsr_source () [init exit execs]")
{
/* Determine the code of the interrupt, which is used in evaluating */
/* state transition conditions. */
intrpt_code = op_intrpt_code ();
}
/** state (init) transition processing **/
FSM_INIT_COND (START)
FSM_TEST_COND (DISABLED)
FSM_TEST_LOGIC ("init")
FSM_TRANSIT_SWITCH
{
FSM_CASE_TRANSIT (0, 1, state1_enter_exec, ;, "START", "", "init", "generate")
FSM_CASE_TRANSIT (1, 2, state2_enter_exec, ;, "DISABLED", "", "init", "stop")
}
/*---------------------------------------------------------*/
/** state (generate) enter executives **/
FSM_STATE_ENTER_UNFORCED (1, state1_enter_exec, "generate", "dsr_source () [generate enter execs]")
{
/* At the enter execs of the "generate" state we schedule the */
/* arrival of the next packet. */
next_intarr_time = oms_dist_outcome (interarrival_dist_ptr);
next_pk_evh = op_intrpt_schedule_self (op_sim_time () + next_intarr_time, SSC_GENERATE);
}
/** blocking after enter executives of unforced state. **/
FSM_EXIT (3,dsr_source)
/** state (generate) exit executives **/
FSM_STATE_EXIT_UNFORCED (1, "generate", "dsr_source () [generate exit execs]")
{
/* Determine the code of the interrupt, which is used in evaluating */
/* state transition conditions. */
intrpt_code = op_intrpt_code ();
}
/** state (generate) transition processing **/
FSM_INIT_COND (STOP)
FSM_TEST_COND (PACKET_GENERATE)
FSM_TEST_LOGIC ("generate")
FSM_TRANSIT_SWITCH
{
FSM_CASE_TRANSIT (0, 2, state2_enter_exec, ;, "STOP", "", "generate", "stop")
FSM_CASE_TRANSIT (1, 1, state1_enter_exec, ss_packet_generate();;, "PACKET_GENERATE", "ss_packet_generate();", "generate", "generate")
}
/*---------------------------------------------------------*/
/** state (stop) enter executives **/
FSM_STATE_ENTER_UNFORCED (2, state2_enter_exec, "stop", "dsr_source () [stop enter execs]")
{
/* When we enter into the "stop" state, it is the time for us to */
/* stop generating traffic. We simply cancel the generation of the */
/* next packet and go into a silent mode by not scheduling anything */
/* else. */
if (op_ev_valid (next_pk_evh) == OPC_TRUE)
{
op_ev_cancel (next_pk_evh);
}
}
/** blocking after enter executives of unforced state. **/
FSM_EXIT (5,dsr_source)
/** state (stop) exit executives **/
FSM_STATE_EXIT_UNFORCED (2, "stop", "dsr_source () [stop exit execs]")
{
}
/** state (stop) transition processing **/
FSM_TRANSIT_MISSING ("stop")
/*---------------------------------------------------------*/
}
FSM_EXIT (0,dsr_source)
}
}
#if defined (__cplusplus)
extern "C" {
#endif
extern VosT_Fun_Status Vos_Catmem_Register (const char * , int , VosT_Void_Null_Proc, VosT_Address *);
extern VosT_Address Vos_Catmem_Alloc (VosT_Address, size_t);
extern VosT_Fun_Status Vos_Catmem_Dealloc (VosT_Address);
#if defined (__cplusplus)
}
#endif
Compcode
dsr_source_init (void ** gen_state_pptr)
{
int _block_origin = 0;
static VosT_Address obtype = OPC_NIL;
FIN (dsr_source_init (gen_state_pptr))
if (obtype == OPC_NIL)
{
/* Initialize memory management */
if (Vos_Catmem_Register ("proc state vars (dsr_source)",
sizeof (dsr_source_state), Vos_Vnop, &obtype) == VOSC_FAILURE)
{
FRET (OPC_COMPCODE_FAILURE)
}
}
*gen_state_pptr = Vos_Catmem_Alloc (obtype, 1);
if (*gen_state_pptr == OPC_NIL)
{
FRET (OPC_COMPCODE_FAILURE)
}
else
{
/* Initialize FSM handling */
((dsr_source_state *)(*gen_state_pptr))->current_block = 0;
FRET (OPC_COMPCODE_SUCCESS)
}
}
void
dsr_source_diag (void)
{
/* No Diagnostic Block */
}
void
dsr_source_terminate (void)
{
int _block_origin = __LINE__;
FIN (dsr_source_terminate (void))
if (1)
{
/* Variables used in the "init" state. */
char interarrival_str [128];
char size_str [128];
Prg_List* pk_format_names_lptr;
char* found_format_str;
int low, high;
Boolean format_found;
int i;
/* Variables used in state transitions. */
int intrpt_code;
/* No Termination Block */
}
Vos_Catmem_Dealloc (pr_state_ptr);
FOUT;
}
/* Undefine shortcuts to state variables to avoid */
/* syntax error in direct access to fields of */
/* local variable prs_ptr in dsr_source_svar function. */
#undef own_id
#undef format_str
#undef start_time
#undef stop_time
#undef interarrival_dist_ptr
#undef pksize_dist_ptr
#undef generate_unformatted
#undef next_pk_evh
#undef next_intarr_time
#undef bits_sent_hndl
#undef packets_sent_hndl
#undef packet_size_hndl
#undef interarrivals_hndl
#undef start_dist
void
dsr_source_svar (void * gen_ptr, const char * var_name, char ** var_p_ptr)
{
dsr_source_state *prs_ptr;
FIN (dsr_source_svar (gen_ptr, var_name, var_p_ptr))
if (var_name == OPC_NIL)
{
*var_p_ptr = (char *)OPC_NIL;
FOUT;
}
prs_ptr = (dsr_source_state *)gen_ptr;
if (strcmp ("own_id" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->own_id);
FOUT;
}
if (strcmp ("format_str" , var_name) == 0)
{
*var_p_ptr = (char *) (prs_ptr->format_str);
FOUT;
}
if (strcmp ("start_time" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->start_time);
FOUT;
}
if (strcmp ("stop_time" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->stop_time);
FOUT;
}
if (strcmp ("interarrival_dist_ptr" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->interarrival_dist_ptr);
FOUT;
}
if (strcmp ("pksize_dist_ptr" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->pksize_dist_ptr);
FOUT;
}
if (strcmp ("generate_unformatted" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->generate_unformatted);
FOUT;
}
if (strcmp ("next_pk_evh" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->next_pk_evh);
FOUT;
}
if (strcmp ("next_intarr_time" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->next_intarr_time);
FOUT;
}
if (strcmp ("bits_sent_hndl" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->bits_sent_hndl);
FOUT;
}
if (strcmp ("packets_sent_hndl" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->packets_sent_hndl);
FOUT;
}
if (strcmp ("packet_size_hndl" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->packet_size_hndl);
FOUT;
}
if (strcmp ("interarrivals_hndl" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->interarrivals_hndl);
FOUT;
}
if (strcmp ("start_dist" , var_name) == 0)
{
*var_p_ptr = (char *) (&prs_ptr->start_dist);
FOUT;
}
*var_p_ptr = (char *)OPC_NIL;
FOUT;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?