📄 scu.pr.c
字号:
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,self_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_0"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,self_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_1"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,self_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_2"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,self_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_3"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n\n",userid,self_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_4"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,topo_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_0"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,topo_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_1"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,topo_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_2"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n",userid,topo_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_3"));
printf("scu;userid=%d,node_objid=%d,pt_objid=%d\n\n",userid,topo_objid, op_id_from_name(node_objid,OPC_OBJTYPE_PTTX,"pt_4"));
*/
}
/** state (init) exit executives **/
FSM_STATE_EXIT_FORCED (0, "init", "scu () [init exit execs]")
{
}
/** state (init) transition processing **/
FSM_TRANSIT_ONLY ((BEG_SIM), 1, state1_enter_exec, ;, "init", "BEG_SIM", "", "init", "wait")
/*---------------------------------------------------------*/
/** state (wait) enter executives **/
FSM_STATE_ENTER_UNFORCED (1, state1_enter_exec, "wait", "scu () [wait enter execs]")
{
//printf("Core->wait, userid=%d\n",userid);
//getchar();
}
/** blocking after enter executives of unforced state. **/
FSM_EXIT (3,scu)
/** state (wait) exit executives **/
FSM_STATE_EXIT_UNFORCED (1, "wait", "scu () [wait exit execs]")
{
}
/** state (wait) transition processing **/
FSM_INIT_COND (CONTROL_ACCESS)
FSM_TEST_COND (END_SIM)
FSM_TEST_COND (R_T_INIT)
FSM_TEST_COND (R_T_UPDATE)
FSM_TEST_COND (SCHUDING_INIT)
FSM_TEST_LOGIC ("wait")
FSM_TRANSIT_SWITCH
{
FSM_CASE_TRANSIT (0, 2, state2_enter_exec, ;, "CONTROL_ACCESS", "", "wait", "Ctrl_Forwarding&Schuding")
FSM_CASE_TRANSIT (1, 3, state3_enter_exec, ;, "END_SIM", "", "wait", "end")
FSM_CASE_TRANSIT (2, 4, state4_enter_exec, ;, "R_T_INIT", "", "wait", "R_T_init")
FSM_CASE_TRANSIT (3, 5, state5_enter_exec, ;, "R_T_UPDATE", "", "wait", "R_T_Update")
FSM_CASE_TRANSIT (4, 6, state6_enter_exec, ;, "SCHUDING_INIT", "", "wait", "Schuding_init")
}
/*---------------------------------------------------------*/
/** state (Ctrl_Forwarding&Schuding) enter executives **/
FSM_STATE_ENTER_FORCED (2, state2_enter_exec, "Ctrl_Forwarding&Schuding", "scu () [Ctrl_Forwarding&Schuding enter execs]")
{
self_objid = op_id_self ();
node_objid = op_topo_parent (self_objid);
subnet_objid = op_topo_parent (node_objid);
//topo_objid = op_rte_topo_from_objids();
bcp_intrup_strum = op_intrpt_strm();
pkptr = op_pk_get(bcp_intrup_strum);
op_ima_obj_attr_get(node_objid, "user id", &userid);
//printf("SCU->control_access 1, userid=%d\n",userid);
op_pk_nfd_get (pkptr, "source address", &source_address);
op_pk_nfd_get (pkptr, "destination address", &destination_address);
op_pk_nfd_get (pkptr, "offset_time", &offset_time);
op_pk_nfd_get (pkptr, "burst size", &pk_size);
//start_time = (double)( PROC_TIME* ((double)routing_table[destination_address].hop_count-1) + op_sim_time() );
//cur_offset_time = offset_time - PROC_TIME;
//start_time = cur_offset_time + op_sim_time();
temp_tx_objid = routing_table[destination_address].output_tx;
//printf("SCU->control_access 3, userid=%d\n",userid);
for(i=0; i<link_num; i++)
{
if(node_for_schedule.port[i].tx_objid == temp_tx_objid)
{
cur_port = i;
}
}
start_time = (double)( PROC_TIME* ((double)routing_table[destination_address].hop_count) + op_sim_time() );
dtime_time = (double)pk_size/(double)node_for_schedule.port[cur_port].data_rate ;
//printf("SCU->control_access 4, userid=%d\n",userid);
//difference_time = 9999;
//reservation_flag = 0;
//for(i=1; i<channel_count; i++)
//{
/*
if(node_for_schedule.port[cur_port].channel[i].horizon > start_time)
{
//failed reservation
//total_bcp_drop_count++;
}
else
{
//succcessed reservation
temp_difference_time = start_time - node_for_schedule.port[cur_port].channel[i].horizon ;
if(difference_time > temp_difference_time)
{
difference_time = temp_difference_time;
cur_channel = i;
reservation_flag = 1;
}
}
}
*/
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////START of LAUC_VF////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
finsh_time = start_time + dtime_time;
//channel_infor = (CHANNEL_INFOR *)op_prg_mem_alloc(sizeof(CHANNEL_INFOR));
//channel_infor2 = (CHANNEL_INFOR *)op_prg_mem_alloc(sizeof(CHANNEL_INFOR));
//channel_infor4 = (CHANNEL_INFOR *)op_prg_mem_alloc(sizeof(CHANNEL_INFOR));
selected_channel = -1;
difference_time = (double)-1; // -1 : list 狼 夸家啊 0老锭 , -2 : list 狼 盖第俊 嘿老版快 difference_time捞 公茄洒努锭
temp_difference_time = (double)-1; // -1 : list 狼 夸家啊 0老锭 , -2 : list 狼 盖第俊 嘿老版快 difference_time捞 公茄洒努锭
for(i = 1; i < channel_count; i++)
{
list_element_num = op_prg_list_size(node_for_schedule.port[cur_port].channel[i].occupy_list);
// printf("scu;d_t=%d,t_d_t=%d,s_ch=%d,cur_ch=%d\n",difference_time,temp_difference_time,selected_channel,i);
if(list_element_num == 0)
{
temp_difference_time = (double)-1;
difference_fuction(&difference_time,&temp_difference_time,&selected_channel,&i);
// printf("list_num=0;selected_ch=%d\n",selected_channel);
// getchar();
}
else if(list_element_num >= 2)
{
for(j=0;j<list_element_num-1;j++)
{
channel_infor = (CHANNEL_INFOR *)op_prg_list_access(node_for_schedule.port[cur_port].channel[i].occupy_list,j);
channel_infor2 = (CHANNEL_INFOR *)op_prg_list_access(node_for_schedule.port[cur_port].channel[i].occupy_list,j+1);
// printf("list_num >=2;s_time=%e,f_time=%e,ch1->s_time=%e,ch1->d_time=%e,ch2->s_time=%e,ch2->d_time=%e\n",
// start_time,finsh_time,channel_infor->start_time,channel_infor->duration_time,
// channel_infor2->start_time,channel_infor2->duration_time);
// getchar();
if(channel_infor->duration_time <= start_time && finsh_time <= channel_infor2->start_time)
{
temp_difference_time = channel_infor2->start_time - finsh_time;
difference_fuction(&difference_time,&temp_difference_time,&selected_channel,&i);
}
}
}
if(list_element_num >= 1)
{
// printf("list_num >=1\n");
// getchar();
channel_infor = (CHANNEL_INFOR *)op_prg_list_access(node_for_schedule.port[cur_port].channel[i].occupy_list,list_element_num-1);
if(channel_infor->duration_time <= start_time)
{
temp_difference_time = (double)-2;
difference_fuction(&difference_time,&temp_difference_time,&selected_channel,&i);
}
channel_infor = (CHANNEL_INFOR *)op_prg_list_access(node_for_schedule.port[cur_port].channel[i].occupy_list,0);
if(channel_infor->start_time > start_time && channel_infor->start_time >= finsh_time)
{
temp_difference_time = channel_infor->start_time - finsh_time;
difference_fuction(&difference_time,&temp_difference_time,&selected_channel,&i);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////END of LAUC_VF//////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
// printf("SCU;1\n");
if(selected_channel > -1)//reservation_flag == 1)
{
op_pk_nfd_get (pkptr, "wave_num", &temp_prev_wave_num);
op_pk_nfd_get (pkptr, "prev userid", &temp_prev_userid);
//op_pk_nfd_set (pkptr, "wave_num", cur_channel);
op_pk_nfd_set (pkptr, "wave_num", selected_channel);
op_pk_nfd_set (pkptr, "prev userid", userid);
op_pk_nfd_set (pkptr, "offset_time",cur_offset_time);
// printf("SCU;2\n");getchar();
//node_for_schedule.port[cur_port].channel[cur_channel].horizon = start_time + dtime_time;
node_for_schedule.port[cur_port].channel[selected_channel].horizon = start_time + dtime_time;
temp_channel_infor = (CHANNEL_INFOR *)op_prg_mem_alloc(sizeof(CHANNEL_INFOR));
// printf("SCU;2\n");getchar();
temp_channel_infor->start_time = start_time;
temp_channel_infor->duration_time = finsh_time;
temp_channel_infor->source = source_address;
temp_channel_infor->destination = destination_address;
//temp_channel_infor->instrm_num = -1; // becasue of ER node
// printf("SCU;2,selec_ch=%d\n",selected_channel);getchar();
//strm_objid = op_topo_assoc(node_for_schedule.port[cur_port].tx_objid,OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_STRM,cur_channel);
strm_objid = op_topo_assoc(node_for_schedule.port[cur_port].tx_objid,OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_STRM,selected_channel);
// printf("SCU;2\n");getchar();
op_ima_obj_attr_get(strm_objid,"src stream", &temp_outstrm_num);
// printf("SCU;2\n");getchar();
temp_channel_infor->outstrm_num = temp_outstrm_num;
// printf("SCU;2\n");getchar();
op_prg_list_insert(node_for_schedule.port[cur_port].channel[selected_channel].occupy_list,temp_channel_infor,OPC_LISTPOS_TAIL);
op_prg_list_sort (node_for_schedule.port[cur_port].channel[selected_channel].occupy_list, list_compare);
//strm_objid = op_topo_assoc(node_for_schedule.port[cur_port].tx_objid,OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_STRM,cur_channel);
strm_objid = op_topo_assoc(node_for_schedule.port[cur_port].tx_objid,OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_STRM,selected_channel);
op_ima_obj_attr_get(strm_objid,"src stream", &temp_output_strm_num);
temp_src_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX,temp_prev_userid);
temp_dest_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX, userid);
link_objid = op_topo_connect (temp_src_objid, temp_dest_objid,OPC_OBJTYPE_LKDUP, 0);
// printf("SCU;3\n");getchar();
op_ima_obj_attr_get(node_objid,"name",temp_char);
op_ima_obj_attr_get(link_objid,"receiver a",temp_char1);
op_ima_obj_attr_get(link_objid,"receiver b",temp_char2);
if(temp_char[0] == temp_char1[0] && temp_char[5] == temp_char1[5])
{
rx_objid = op_topo_assoc ( link_objid, OPC_TOPO_ASSOC_OUT, OPC_OBJTYPE_PTRX, 0);
}
else if(temp_char[0] == temp_char2[0] && temp_char[5] == temp_char2[5])
{
rx_objid = op_topo_assoc (link_objid, OPC_TOPO_ASSOC_OUT,OPC_OBJTYPE_PTRX, 1);
}
else
{
// printf("not find the tx_objid\n");
}
// printf("SCU;4\n");getchar();
output_strm_objid = op_topo_assoc (rx_objid, OPC_TOPO_ASSOC_OUT,OPC_OBJTYPE_STRM, temp_prev_wave_num);
op_ima_obj_attr_get (output_strm_objid, "dest stream", &temp_input_strm_num);
// printf("SCU;5\n");getchar();
/*
iciptr = op_ici_create("S_METRIX");
op_ici_attr_set(iciptr,"s_time",start_time);
op_ici_attr_set(iciptr,"d_time",dtime_time);
op_ici_attr_set(iciptr,"input_strum",temp_input_strm_num);
op_ici_attr_set(iciptr,"output_strum",temp_output_strm_num);
op_ici_install(iciptr);
*/
s_metrix_pkptr = op_pk_create_fmt("S_METRIX");
op_pk_nfd_set (s_metrix_pkptr, "s_time", start_time);
op_pk_nfd_set (s_metrix_pkptr, "d_time",dtime_time);
op_pk_nfd_set (s_metrix_pkptr, "input_strum",temp_input_strm_num);
op_pk_nfd_set (s_metrix_pkptr, "output_strum",temp_output_strm_num);
op_pk_send(s_metrix_pkptr,0);
// printf("SCU;6\n");getchar();
op_pk_send_delayed(pkptr,routing_table[destination_address].strm_control,PROC_TIME);
// printf("SCU;7\n");getchar();
//op_pk_send(pkptr,routing_table[destination_address].strm_control);
//printf("link_id=%e,rx=%e,tx=%e\n",link_objid,op_topo_connect (temp_src_objid, temp_dest_objid,OPC_OBJTYPE_LKDUP, 0),op_topo_connect (temp_dest_objid, temp_src_objid,OPC_OBJTYPE_LKDUP, 0));
//printf("SCU-->Ctrl;in_strm=%d,out_strm=%d,userid=%d,prev_userid=%d\n",temp_input_strm_num,temp_output_strm_num,userid,temp_prev_userid);
//getchar();
/*
temp_occupy_count = op_prg_list_size(node_for_schedule.port[cur_port].channel[cur_channel].occupy_list);
j=0;
//printf("SCU->Ctrl_forwarding;userid=%d,occupy_count=%d\n",userid,temp_occupy_count);
while(j<temp_occupy_count)// & temp_flag_loop == 1)
{
temp_channel_infor = op_prg_list_access(node_for_schedule.port[cur_port].channel[cur_channel].occupy_list, j);
if(op_sim_time() > temp_channel_infor->start_time + temp_channel_infor->duration_time)
{
temp_channel_infor = op_prg_list_remove(node_for_schedule.port[cur_port].channel[cur_channel].occupy_list, j);
op_prg_mem_free(temp_channel_infor);
//temp_flag_loop = 0;
temp_occupy_count = op_prg_list_size(node_for_schedule.port[cur_port].channel[cur_channel].occupy_list);
}
else
j++;
}
*/
for(i=1;i<channel_count;i++)
{
j=0;
list_element_num = op_prg_list_size(node_for_schedule.port[cur_port].channel[i].occupy_list);
while( list_element_num > 0 && j < list_element_num)
{
channel_infor4 = (CHANNEL_INFOR *)op_prg_list_access(node_for_schedule.port[cur_port].channel[i].occupy_list,j);
if(cur_time > channel_infor4->duration_time)
{
channel_infor4 = op_prg_list_remove(node_for_schedule.port[cur_port].channel[i].occupy_list,j);
op_prg_mem_free(channel_infor4);
op_prg_list_sort(node_for_schedule.port[cur_port].channel[i].occupy_list,list_compare);
list_element_num = op_prg_list_size(node_for_schedule.port[cur_port].channel[i].occupy_list);
j = 0;
}
else
j++;
}
}
// printf("SCU-->control_access\n");
// getchar();
}
else if(selected_channel == -1)//(reservation_flag == 0)
{
// printf("SCU-->control_access2; failed reservation\n");
total_bcp_drop_count++;
op_pk_destroy(pkptr);
// getchar();
}
else
{}
//printf("SCU->control_access 2, userid=%d,d_ad=%d,s_time=%e,d_time=%e,op_time=%e,input_strum=%d,link_ojb=%d,rx=%d\n",userid,destination_address,start_time,dtime_time,op_sim_time(),temp_input_strm_num,link_objid,rx_objid);
//getchar();
}
/** state (Ctrl_Forwarding&Schuding) exit executives **/
FSM_STATE_EXIT_FORCED (2, "Ctrl_Forwarding&Schuding", "scu () [Ctrl_Forwarding&Schuding exit execs]")
{
}
/** state (Ctrl_Forwarding&Schuding) transition processing **/
FSM_TRANSIT_FORCE (1, state1_enter_exec, ;, "default", "", "Ctrl_Forwarding&Schuding", "wait")
/*---------------------------------------------------------*/
/** state (end) enter executives **/
FSM_STATE_ENTER_UNFORCED (3, state3_enter_exec, "end", "scu () [end enter execs]")
{
self_objid = op_id_self ();
node_objid = op_topo_parent (self_objid);
op_ima_obj_attr_get(self_objid, "filename", &filename);
if(userid == 0)
{
printf("total_bcp_drop_count=%d,userid=%d\n",total_bcp_drop_count,userid);
strcpy(temp_file_name,"D:/result/");
strcat(temp_file_name,filename);
in = fopen(temp_file_name,"a");
fprintf(in,"total_bcp_drop_count = %d \n",total_bcp_drop_count);
fclose(in);
}
}
/** blocking after enter executives of unforced state. **/
FSM_EXIT (7,scu)
/** state (end) exit executives **/
FSM_STATE_EXIT_UNFORCED (3, "end", "scu () [end exit execs]")
{
}
/** state (end) transition processing **/
FSM_TRANSIT_MISSING ("end")
/*---------------------------------------------------------*/
/** state (R_T_init) enter executives **/
FSM_STATE_ENTER_FORCED (4, state4_enter_exec, "R_T_init", "scu () [R_T_init enter execs]")
{
self_objid = op_id_self ();
node_objid = op_topo_parent (self_objid);
subnet_objid = op_topo_parent (node_objid);
topo_objid = op_rte_topo_from_objids();
//start of initilize the routing table
routing_table = (ROUTING_TABLE *)malloc(sizeof(ROUTING_TABLE)*node_num);
for (i = 0; i < node_num; i++)
{
routing_table[i].source = userid;
routing_table[i].destination = i;
if(userid == i)
{
routing_table[i].hop_count = 0;
routing_table[i].output_link = OPC_NIL;
routing_table[i].strm_control =-1;
}
else
{
temp_src_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX,userid);
temp_dest_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX, i);
temp_routeset = op_rte_routeset_create (topo_objid, subnet_objid, temp_src_objid, subnet_objid, temp_dest_objid, 15);
temp_min_route = op_rte_routeset_mincost(temp_routeset);
routing_table[i].hop_count = op_rte_route_num_nodes(temp_min_route);
if(op_rte_route_node_n(temp_min_route,1,&subnet_id_ptr,&node_id_ptr)== OPC_COMPCODE_FAILURE)
{}
else
{
op_ima_obj_attr_get(node_id_ptr, "user id",&temp_userid);
}
temp_flag_tx=0;
temp_src_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX,userid);
temp_dest_objid = op_id_from_userid (subnet_objid, OPC_OBJTYPE_NDFIX, temp_userid);
if(op_topo_connect_count (temp_src_objid, temp_dest_objid,OPC_OBJMTYPE_LINK)==1)
{
link_objid = op_topo_connect (temp_src_objid, temp_dest_objid,OPC_OBJTYPE_LKDUP, 0);
op_ima_obj_attr_get(node_objid,"name",temp_char);
op_ima_obj_attr_get(link_objid,"transmitter a",temp_char1);
op_ima_obj_attr_get(link_objid,"transmitter b",temp_char2);
if(temp_char[0] == temp_char1[0] && temp_char[5] == temp_char1[5])
{
tx_objid = op_topo_assoc ( link_objid, OPC_TOPO_ASSOC_IN, OPC_OBJTYPE_PTTX, 0);
}
else if(temp_char[0] == temp_char2[0] && temp_char[5] == temp_char2[5])
{
tx_objid = op_topo_assoc (link_objid, OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_PTTX, 1);
}
else
{
printf("not find the tx_objid\n");
}
/* get the stream id connecting to the transmitter for control channel*/
strm_objid = op_topo_assoc (tx_objid, OPC_TOPO_ASSOC_IN,OPC_OBJTYPE_STRM, 0);
/* get the stream number */
op_ima_obj_attr_get (strm_objid, "src stream", &strm_num);
temp_flag_tx=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -