2 * @brief Replication structure program
12 #include <sys/types.h>
13 #include <sys/socket.h>
15 #include <sys/ioctl.h>
19 #include "logger_wrapper.h"
20 #include "parameter_wrapper.h"
21 #include "l7vs_replication.h"
23 #include "l7vs_iomuxlist.h"
26 #include <netinet/in.h>
27 #include <arpa/inet.h>
31 //---------- Initial set value
33 //! Initial value of Essential information set to SG file.
36 static struct l7vs_replication_info replication_info;
38 //! Initial value of Replication status
39 static struct l7vs_replication_state replication_state = {
51 static struct l7vs_iomux *l7vs_replication_iomux = NULL;
55 struct sockaddr_in addr_in;
56 struct sockaddr_in6 addr_in6;
59 struct addressinfo addr;
61 //! Internal value structure
62 struct replication_internal_val
64 int socket; //!< Opened socket file descriptor
65 struct addrinfo *address_info; //!< Socket property internal_val
66 struct addressinfo addr;
70 static struct replication_internal_val internal_val = {
76 //! emun States Type string
77 static char replication_mode[6][24] = {
82 "REPLICATION_MASTER_STOP",
83 "REPLICATION_SLAVE_STOP"
86 // Initialize network socket
87 static int l7vs_replication_send_sock_init();
88 // Initialize network socket
89 static int l7vs_replication_recv_sock_init();
90 // Finalize network socket
91 static void l7vs_replication_sock_fini();
92 // Set master mode to iomux
93 static int l7vs_replication_set_master();
94 // Set slave mode to iomux
95 static int l7vs_replication_set_slave();
96 // Obtain the memory the replication is done
97 static void *l7vs_replication_get_replication_address();
98 // Release replication memory
99 static void l7vs_replication_release_replication_address();
100 // The memory the component uses
101 static void *l7vs_replication_get_component_address();
102 // Release component memory
103 static void l7vs_replication_release_components_address();
104 // The memory with information on respect switch
105 static uint64_t *l7vs_replication_get_surface_info_address();
106 // Release memory of information on respect switch
107 static void l7vs_replication_release_surface_info_address();
109 static int l7vs_replication_check_parameter();
111 static unsigned long long l7vs_replication_make_serial();
113 static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data);
115 static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data);
117 static int getNICAddressInfo( const char* nicname, struct addressinfo* info );
120 //---------- Debug Function declaration
121 static void l7vs_replication_data_c_str(char *ret, struct l7vs_replication_data *replication_data);
122 static void l7vs_replication_component_c_str(char *ret, struct l7vs_replication_component *component_info, int i);
123 static void l7vs_replication_state_c_str(char *ret, struct l7vs_replication_state *replication_state);
124 static void l7vs_replication_info_c_str(char *ret, struct l7vs_replication_info *replication_info);
125 static void sockaddr_in_c_str(char *ret, struct sockaddr_in *addr_in);
127 /*! Initialize Replication
135 int l7vs_replication_init()
137 int component_num = 0;
139 int ip_addr_ret = -1;
140 int service_name_ret = -1;
142 int interval_ret = -1;
144 // Check by continuous initialize.
145 if ( REPLICATION_OUT != replication_state.service_status )
147 // Initialization has already been done.
148 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,1, "Initialization is a failure, because nitialization has already been done. mode : %s",
149 replication_mode[(int)replication_state.service_status]);
154 memset(&replication_info, 0, sizeof(struct l7vs_replication_info));
157 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
158 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,1, "in_function : int l7vs_replication_init(void)");
163 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
165 char replication_state_str[DEBUG_STR_LEN] = {0};
166 l7vs_replication_state_c_str(replication_state_str,&replication_state);
167 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,2,
168 "set_l7vs_replication_state_struct : %s",
169 replication_state_str);
171 char replication_info_str[DEBUG_STR_LEN] = {0};
172 l7vs_replication_info_c_str(replication_info_str,&replication_info);
173 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,3,
174 "set_l7vs_replication_info_struct : %s",
175 replication_info_str);
177 for ( int i=0; i<replication_info.component_num; i++)
179 char replication_component_str[DEBUG_STR_LEN] = {0};
180 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
181 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,4,
182 "set_l7vs_replication_component_struct : %s",
183 replication_component_str);
188 // Check the Parameter exists
189 ip_addr_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION,"ip_addr");
190 service_name_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION, "service_name" );
191 nic_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION, "nic");
192 interval_ret = parameter_is_int_exist( PARAM_COMP_REPLICATION, "interval" );
195 if ( (0 == ip_addr_ret) && (0 == service_name_ret) && (0 == nic_ret) && (0 == interval_ret))
198 replication_state.service_status = REPLICATION_SINGLE;
199 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,1, "Required item is not set in l7vs. ");
204 if ( 0 == ip_addr_ret )
207 replication_state.service_status = REPLICATION_SINGLE;
208 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,2, "IP Address is not set." );
213 else if ( 0 == service_name_ret )
216 replication_state.service_status = REPLICATION_SINGLE;
217 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,3, "Port is not set." );
222 else if ( 0 == nic_ret )
225 replication_state.service_status = REPLICATION_SINGLE;
226 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,4, "NIC is not set." );
231 else if ( 0 == interval_ret )
234 replication_state.service_status = REPLICATION_SINGLE;
235 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,5, "Interval is not set." );
241 strncpy(replication_info.ip_addr, parameter_get_char_value( PARAM_COMP_REPLICATION, "ip_addr" ),NI_MAXHOST);
242 // Failed in the acquisition of IP
243 if ( strcmp(replication_info.ip_addr,"") == 0)
245 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,6, "Could not get IP Address." );
246 replication_state.service_status = REPLICATION_SINGLE;
251 // Get service_name (port)
252 strncpy(replication_info.service_name,
253 parameter_get_char_value( PARAM_COMP_REPLICATION,
254 "service_name"), NI_MAXSERV);
255 // Failed in the acquisition of Port
256 if ( strcmp(replication_info.service_name,"") == 0)
258 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,7, "Could not get Port." );
259 replication_state.service_status = REPLICATION_SINGLE;
265 strncpy(replication_info.nic, parameter_get_char_value( PARAM_COMP_REPLICATION, "nic" ),NIC_LENGTH);
266 // Failed in the acquisition of NIC
267 if ( strcmp(replication_info.nic,"") == 0)
269 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,8, "Could not get NIC." );
270 replication_state.service_status = REPLICATION_SINGLE;
276 replication_info.interval = parameter_get_int_value( PARAM_COMP_REPLICATION, "interval" );
278 // Set a starting component block number
279 replication_info.component_num = 0;
280 // Variable that sets ID
281 char key_id[ID_LENGTH];
282 char key_size[CMP_SIZE_LENGTH];
285 // Get Component infomation
286 for ( int i=0; i<CMP_MAX; i++)
288 memset( &key_id, 0, ID_LENGTH );
289 memset( &key_size, 0, CMP_SIZE_LENGTH);
291 sprintf( key_id, "cmponent_id_%02d",i);
292 sprintf( key_size, "cmponent_size_%02d",i);
294 // ID and the Size exist
295 if ( 0 == parameter_is_char_exist( PARAM_COMP_REPLICATION, key_id ) &&
296 0 == parameter_is_int_exist( PARAM_COMP_REPLICATION, key_size ) )
301 strcpy( replication_info.component_info[i].id,
302 parameter_get_char_value(PARAM_COMP_REPLICATION,
304 if ( 0 == strcmp(replication_info.component_info[i].id,""))
306 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,9,
307 "Could not get %s.",key_id );
308 replication_state.service_status = REPLICATION_SINGLE;
313 // Get Block size of Component
314 replication_info.component_info[i].block_size=parameter_get_int_value(PARAM_COMP_REPLICATION,
317 // Count block head number
320 replication_info.component_info[i].block_head = 0;
321 replication_state.total_block += replication_info.component_info[i].block_size;
323 replication_info.component_info[i].block_head = replication_info.component_info[i-1].block_head
324 + replication_info.component_info[i-1].block_size;
325 replication_state.total_block += replication_info.component_info[i].block_size;
327 // Number of Component
330 replication_info.component_num = component_num;
334 // Check the Parameters value
335 if ( 0 != l7vs_replication_check_parameter() )
338 replication_state.service_status = REPLICATION_SINGLE;
339 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,10, "Failed in parameter check." );
344 // The memory is 0 or less.
345 if ( 0 >= replication_state.total_block)
348 replication_state.service_status = REPLICATION_SINGLE;
353 // The memory is larger than int.
354 if ( 100000 < replication_state.total_block)
357 replication_state.service_status = REPLICATION_SINGLE;
358 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,57, "Set number of blocks exceeds %d.",CMP_BLOCK_MAX );
363 // Get the Replication memory
364 replication_state.replication_memory = l7vs_replication_get_replication_address();
365 // Confirmation of Replication memory
366 if ( NULL == replication_state.replication_memory )
368 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,30, "Replication memory is NULL.");
370 replication_state.service_status = REPLICATION_SINGLE;
375 // Get the Components memory
376 replication_state.component_memory = l7vs_replication_get_component_address();
377 // Confirmation of Components memory
378 if ( NULL == replication_state.component_memory )
380 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,31, "Components memory is NULL.");
382 l7vs_replication_release_replication_address();
384 replication_state.service_status = REPLICATION_SINGLE;
389 // Memory for Switch Sarface Number
390 replication_state.sarface_block_array_ptr = l7vs_replication_get_surface_info_address();
391 if ( NULL == replication_state.sarface_block_array_ptr )
394 l7vs_replication_release_replication_address();
395 l7vs_replication_release_components_address();
396 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,32, "Surface infomation memory is NULL.");
398 replication_state.service_status = REPLICATION_SINGLE;
404 l7vs_replication_iomux = l7vs_iomux_get_from_avail_list();
405 if ( NULL == l7vs_replication_iomux )
407 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,2, "Can not get replication_iomux.");
412 // Status Set to Slave
413 ret = l7vs_replication_set_slave();
417 replication_state.service_status = REPLICATION_SLAVE;
424 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,2, "Initialized in %s mode.",
425 replication_mode[(int)replication_state.service_status]);
427 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
429 char replication_state_str[DEBUG_STR_LEN] = {0};
430 l7vs_replication_state_c_str(replication_state_str,&replication_state);
431 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,5,
432 "set_l7vs_replication_state_struct : %s",
433 replication_state_str);
435 char replication_info_str[DEBUG_STR_LEN] = {0};
436 l7vs_replication_info_c_str(replication_info_str,&replication_info);
437 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,6,
438 "set_l7vs_replication_info_struct : %s",
439 replication_info_str);
441 for ( int i=0; i<replication_info.component_num; i++)
443 char replication_component_str[DEBUG_STR_LEN] = {0};
444 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
445 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,7,
446 "set_l7vs_replication_component_struct : %s",
447 replication_component_str);
452 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
453 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,8,
454 "out_function : int l7vs_replication_initialize(void)"
461 if ( -1 != internal_val.socket)
463 close(internal_val.socket);
464 internal_val.socket = -1;
467 if ( NULL != internal_val.address_info)
469 freeaddrinfo(internal_val.address_info);
470 internal_val.address_info = NULL;
473 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,3, "Initialized in %s mode.",
474 replication_mode[(int)replication_state.service_status]);
477 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
479 char replication_state_str[DEBUG_STR_LEN] = {0};
480 l7vs_replication_state_c_str(replication_state_str,&replication_state);
481 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,9,
482 "set_l7vs_replication_state_struct : %s",
483 replication_state_str);
485 char replication_info_str[DEBUG_STR_LEN] = {0};
486 l7vs_replication_info_c_str(replication_info_str,&replication_info);
487 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,10,
488 "set_l7vs_replication_info_struct : %s",
489 replication_info_str);
491 for ( int i=0; i<replication_info.component_num; i++)
493 char replication_component_str[DEBUG_STR_LEN] = {0};
494 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
495 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,11,
496 "set_l7vs_replication_component_struct : %s",
497 replication_component_str);
503 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
504 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,12,
505 "out_function : int l7vs_replication_initialize(void)"
514 /*! Finalize Replication
516 void l7vs_replication_fini()
520 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
521 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,13,
522 "in_function : void l7vs_replication_fini(void)");
527 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
529 char replication_state_str[DEBUG_STR_LEN] = {0};
530 l7vs_replication_state_c_str(replication_state_str,&replication_state);
531 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,14,
532 "set_l7vs_replication_state_struct : %s",
533 replication_state_str);
535 char replication_info_str[DEBUG_STR_LEN] = {0};
536 l7vs_replication_info_c_str(replication_info_str,&replication_info);
537 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,15,
538 "set_l7vs_replication_info_struct : %s",
539 replication_info_str);
541 for ( int i=0; i<replication_info.component_num; i++)
543 char replication_component_str[DEBUG_STR_LEN] = {0};
544 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
545 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,16,
546 "set_l7vs_replication_component_struct : %s",
547 replication_component_str);
552 l7vs_replication_sock_fini();
553 // Release replication memory
554 l7vs_replication_release_replication_address();
555 // Release component memory
556 l7vs_replication_release_components_address();
557 // Release sarface block memory
558 l7vs_replication_release_surface_info_address();
560 // reset of replication_state
561 replication_state.send_time = 0;
562 replication_state.last_send_block = 0;
563 replication_state.last_recv_block = 0;
564 replication_state.total_block = 0;
565 replication_state.sarface_block_no = 0;
567 // reset of replication_info
568 memset(&replication_info, 0, sizeof(struct l7vs_replication_info));
571 if ( NULL != l7vs_replication_iomux )
573 l7vs_iomux_put_to_avail_list(l7vs_replication_iomux);
574 l7vs_replication_iomux = NULL;
578 replication_state.service_status = REPLICATION_OUT;
581 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
583 char replication_state_str[DEBUG_STR_LEN] = {0};
584 l7vs_replication_state_c_str(replication_state_str,&replication_state);
585 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,17,
586 "set_l7vs_replication_state_struct : %s",
587 replication_state_str);
589 char replication_info_str[DEBUG_STR_LEN] = {0};
590 l7vs_replication_info_c_str(replication_info_str,&replication_info);
591 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,18,
592 "set_l7vs_replication_info_struct : %s",
593 replication_info_str);
595 for ( int i=0; i<replication_info.component_num; i++)
597 char replication_component_str[DEBUG_STR_LEN] = {0};
598 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
599 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,19,
600 "set_l7vs_replication_component_struct : %s",
601 replication_component_str);
607 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
608 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,20, "out_function : l7vs_replication_fini(void)");
614 /*! Switch Slave to Master
616 extern void l7vs_replication_switch_to_master()
621 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
622 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,21,
623 "extern void l7vs_replication_switch_to_master(void)");
627 switch (replication_state.service_status){
628 case REPLICATION_SLAVE:
630 ret = l7vs_replication_set_master();
633 replication_state.service_status = REPLICATION_SINGLE;
635 if ( -1 != internal_val.socket)
637 close(internal_val.socket);
638 internal_val.socket = -1;
640 if ( NULL != internal_val.address_info)
642 freeaddrinfo(internal_val.address_info);
643 internal_val.address_info = NULL;
645 l7vs_replication_release_replication_address();
646 l7vs_replication_release_components_address();
647 l7vs_replication_release_surface_info_address();
649 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,54, "Switch to master NG. mode : %s",
650 replication_mode[(int)replication_state.service_status]);
651 // change iomux status
652 l7vs_replication_iomux->status = iomux_replication_error;
658 // Copy from component area to replication area.
659 memcpy(replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE);
662 replication_state.service_status = REPLICATION_MASTER;
664 // change iomux status
665 l7vs_replication_iomux->status = iomux_replication_send_wait;
667 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
668 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,22,
669 "l7vs_replication_iomux->status :"
670 "befor : iomux_replication_recv_wait"
671 "after : iomux_replication_send_wait");
676 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
678 char replication_state_str[DEBUG_STR_LEN] = {0};
679 l7vs_replication_state_c_str(replication_state_str,&replication_state);
680 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,23,
681 "set_l7vs_replication_state_struct : %s",
682 replication_state_str);
684 char replication_info_str[DEBUG_STR_LEN] = {0};
685 l7vs_replication_info_c_str(replication_info_str,&replication_info);
686 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,24,
687 "set_l7vs_replication_info_struct : %s",
688 replication_info_str);
690 for ( int i=0; i<replication_info.component_num; i++)
692 char replication_component_str[DEBUG_STR_LEN] = {0};
693 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
694 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,25,
695 "set_l7vs_replication_component_struct : %s",
696 replication_component_str);
701 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,5, "Switch to master OK. mode : %s",
702 replication_mode[(int)replication_state.service_status]);
705 case REPLICATION_SLAVE_STOP:
707 ret = l7vs_replication_set_master();
710 replication_state.service_status = REPLICATION_SINGLE;
712 if ( -1 != internal_val.socket)
714 close(internal_val.socket);
715 internal_val.socket = -1;
717 if ( NULL != internal_val.address_info)
719 freeaddrinfo(internal_val.address_info);
720 internal_val.address_info = NULL;
722 l7vs_replication_release_replication_address();
723 l7vs_replication_release_components_address();
724 l7vs_replication_release_surface_info_address();
726 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,53, "Switch to master NG. mode : %s",
727 replication_mode[(int)replication_state.service_status]);
728 // change iomux status
729 l7vs_replication_iomux->status = iomux_replication_error;
734 // Copy from component area to replication area.
735 memcpy(replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE);
738 replication_state.service_status = REPLICATION_MASTER_STOP;
740 // change iomux status
741 l7vs_replication_iomux->status = iomux_replication_send_stop;
743 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
744 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,26,
745 "l7vs_replication_iomux->status :"
746 "befor : iomux_replication_recv_stop)"
747 "after : iomux_replication_send_stop");
752 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
754 char replication_state_str[DEBUG_STR_LEN] = {0};
755 l7vs_replication_state_c_str(replication_state_str,&replication_state);
756 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,27,
757 "set_l7vs_replication_state_struct : %s",
758 replication_state_str);
760 char replication_info_str[DEBUG_STR_LEN] = {0};
761 l7vs_replication_info_c_str(replication_info_str,&replication_info);
762 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,28,
763 "set_l7vs_replication_info_struct : %s",
764 replication_info_str);
766 for ( int i=0; i<replication_info.component_num; i++)
768 char replication_component_str[DEBUG_STR_LEN] = {0};
769 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
770 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,29,
771 "set_l7vs_replication_component_struct : %s",
772 replication_component_str);
777 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,7, "Switch to master OK. mode : %s",
778 replication_mode[(int)replication_state.service_status]);
781 case REPLICATION_SINGLE:
782 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,42,"Starting by %s, doesn't shift to MASTER. ",
783 replication_mode[(int)replication_state.service_status]);
786 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,2, "Can not switch to master. mode : %s",
787 replication_mode[(int)replication_state.service_status]);
791 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
792 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,30, "extern void l7vs_replication_switch_to_master(void)");
798 static int l7vs_replication_set_master()
803 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
804 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,31, "in_function : static int l7vs_replication_set_master(void)");
808 if ( REPLICATION_SLAVE != replication_state.service_status &&
809 REPLICATION_SLAVE_STOP != replication_state.service_status )
812 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,3, "Can not set to master. mode : %s",
813 replication_mode[(int)replication_state.service_status]);
815 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
816 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,32,
817 "out_function : static int l7vs_replication_set_master(void)"
824 // close socket and delete l7vs_iomux
825 l7vs_replication_sock_fini();
828 sock_ret = l7vs_replication_send_sock_init();
829 if ( -1 == sock_ret )
832 replication_state.service_status = REPLICATION_SINGLE;
833 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,11, "Failed in the initialization of the send socket.");
835 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
836 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,33,
837 "out_function : static int l7vs_replication_set_master(void)"
844 // set of send socket : struct l7vs_iomux l7vs_replication_iomux
846 l7vs_replication_iomux->fd = internal_val.socket;
848 l7vs_replication_iomux->callback = l7vs_replication_send_callback;
850 l7vs_replication_iomux->status = iomux_replication_out;
853 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
854 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,34,
855 "l7vs_replication_iomux->status :"
856 "befor : Any execution mode"
857 "after : iomux_replication_out");
861 // add : struct l7vs_iomux l7vs_replication_iomux
862 l7vs_iomux_add(l7vs_replication_iomux, iom_write);
864 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,8,"Initialization of send socket is success.");
866 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
867 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,35,
868 "out_function : static int l7vs_replication_set_master(void)"
877 /*! Switch Master to Slave
879 extern void l7vs_replication_switch_to_slave()
884 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
885 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,36,
886 "in_function : extern void l7vs_replication_switch_to_slave(void)");
890 switch (replication_state.service_status){
891 case REPLICATION_MASTER:
893 ret = l7vs_replication_set_slave();
896 replication_state.service_status = REPLICATION_SINGLE;
898 if ( -1 != internal_val.socket)
900 close(internal_val.socket);
901 internal_val.socket = -1;
903 if ( NULL != internal_val.address_info)
905 freeaddrinfo(internal_val.address_info);
906 internal_val.address_info = NULL;
908 l7vs_replication_release_replication_address();
909 l7vs_replication_release_components_address();
910 l7vs_replication_release_surface_info_address();
912 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,55, "Switch to slave NG. mode : %s",
913 replication_mode[(int)replication_state.service_status]);
914 // change iomux status
915 l7vs_replication_iomux->status = iomux_replication_error;
920 // initialize to replication area.
921 memset(replication_state.replication_memory, 0, replication_state.total_block*DATA_SIZE);
924 replication_state.service_status = REPLICATION_SLAVE;
926 // change iomux status
927 l7vs_replication_iomux->status = iomux_replication_recv_wait;
929 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
930 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,37,
931 "l7vs_replication_iomux->status :"
932 "befor : iomux_replication_send_wait"
933 "after : iomux_replication_recv_wait");
938 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
940 char replication_state_str[DEBUG_STR_LEN] = {0};
941 l7vs_replication_state_c_str(replication_state_str,&replication_state);
942 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,38,
943 "set_l7vs_replication_state_struct : %s",
944 replication_state_str);
946 char replication_info_str[DEBUG_STR_LEN] = {0};
947 l7vs_replication_info_c_str(replication_info_str,&replication_info);
948 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,39,
949 "set_l7vs_replication_info_struct : %s",
950 replication_info_str);
952 for ( int i=0; i<replication_info.component_num; i++)
954 char replication_component_str[DEBUG_STR_LEN] = {0};
955 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
956 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,40,
957 "set_l7vs_replication_component_struct : %s",
958 replication_component_str);
963 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,10, "Switch to slave OK. mode : %s",
964 replication_mode[(int)replication_state.service_status]);
967 case REPLICATION_MASTER_STOP:
969 ret = l7vs_replication_set_slave();
972 replication_state.service_status = REPLICATION_SINGLE;
974 if ( -1 != internal_val.socket)
976 close(internal_val.socket);
977 internal_val.socket = -1;
979 if ( NULL != internal_val.address_info)
981 freeaddrinfo(internal_val.address_info);
982 internal_val.address_info = NULL;
984 l7vs_replication_release_replication_address();
985 l7vs_replication_release_components_address();
986 l7vs_replication_release_surface_info_address();
988 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,56, "Switch to slave NG. mode : %s",
989 replication_mode[(int)replication_state.service_status]);
990 // change iomux status
991 l7vs_replication_iomux->status = iomux_replication_error;
996 // initialize to replication area.
997 memset(replication_state.replication_memory, 0, replication_state.total_block*DATA_SIZE);
1000 replication_state.service_status = REPLICATION_SLAVE_STOP;
1002 // change iomux status
1003 l7vs_replication_iomux->status = iomux_replication_recv_stop;
1005 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1006 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,41,
1007 "l7vs_replication_iomux->status :"
1008 "befor : iomux_replication_send_stop"
1009 "after : iomux_replication_recv_stop");
1014 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
1016 char replication_state_str[DEBUG_STR_LEN] = {0};
1017 l7vs_replication_state_c_str(replication_state_str,&replication_state);
1018 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,42,
1019 "set_l7vs_replication_state_struct : %s",
1020 replication_state_str);
1022 char replication_info_str[DEBUG_STR_LEN] = {0};
1023 l7vs_replication_info_c_str(replication_info_str,&replication_info);
1024 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,43,
1025 "set_l7vs_replication_info_struct : %s",
1026 replication_info_str);
1028 for ( int i=0; i<replication_info.component_num; i++)
1030 char replication_component_str[DEBUG_STR_LEN] = {0};
1031 l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
1032 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,44,
1033 "set_l7vs_replication_component_struct : %s",
1034 replication_component_str);
1039 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,12, "Switch to slave OK. mode : %s",
1040 replication_mode[(int)replication_state.service_status]);
1043 case REPLICATION_SINGLE:
1044 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,13, "Starting by %s , doesn't shift to SLAVE .",
1045 replication_mode[(int)replication_state.service_status]);
1048 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,4, "Can not switch to slave. mode : %s",
1049 replication_mode[(int)replication_state.service_status]);
1053 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1054 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,45, "out_function : extern void l7vs_replication_switch_to_slave(void)");
1061 static int l7vs_replication_set_slave()
1066 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1067 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,46, "int_function : static int l7vs_replication_set_slave(void)");
1072 if ( REPLICATION_MASTER != replication_state.service_status &&
1073 REPLICATION_MASTER_STOP != replication_state.service_status &&
1074 REPLICATION_OUT != replication_state.service_status )
1077 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,5, "Can not set to slave. mode : %s",
1078 replication_mode[(int)replication_state.service_status]);
1080 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1081 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,47,
1082 "out_function : static int l7vs_replication_set_slave(void)"
1090 // close socket and delete l7vs_iomux
1091 l7vs_replication_sock_fini();
1093 sock_ret = l7vs_replication_recv_sock_init();
1094 if ( -1 == sock_ret )
1097 replication_state.service_status = REPLICATION_SINGLE;
1098 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,12, "Failed in the initialization of the recv socket.");
1100 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1101 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,48,
1102 "out_function : static int l7vs_replication_set_slave(void)"
1109 // set of send socket : struct l7vs_iomux l7vs_replication_iomux
1111 l7vs_replication_iomux->fd = internal_val.socket;
1113 l7vs_replication_iomux->callback = l7vs_replication_recv_callback;
1115 l7vs_replication_iomux->status = iomux_replication_out;
1117 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1118 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,49,
1119 "l7vs_replication_iomux->status : iomux_replication_out");
1122 // add : struct l7vs_iomux l7vs_replication_iomux
1123 l7vs_iomux_add(l7vs_replication_iomux, iom_read);
1125 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,14,"Initialization of receive socket is success.");
1127 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1128 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,50,
1129 "out_function : static int l7vs_replication_set_slave(void)"
1137 /*! Pay replication memory
1139 * @param component_id is the one to identify the component.
1140 * @param size of component use blocks
1142 * @return Replication memory address
1143 * @retval nonnull Replication memory address
1144 * @retval NULL Error
1146 extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size )
1148 char demand_id[ID_LENGTH];
1153 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1154 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,51,
1155 "extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1164 // argument is illegal
1165 if ( NULL == component_id || NULL == size)
1167 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,13, "Argument illegal. Component id or component size is NULL. ");
1169 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1170 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,52,
1171 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1178 // Check replication mode.
1179 if ( REPLICATION_OUT == replication_state.service_status ||
1180 REPLICATION_SINGLE == replication_state.service_status)
1182 // Check mode that can use the replication.
1183 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,15,
1184 "Improper mode for Replication. mode : %s",
1185 replication_mode[(int)replication_state.service_status]);
1187 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1188 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,53,
1189 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1196 if ( NULL == replication_state.component_memory )
1198 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,33,
1199 "You can't get memory. Component memory is NULL. ");
1201 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1202 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,54,
1203 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1210 // memory initialize
1211 memset( demand_id, 0, ID_LENGTH );
1214 strncpy( demand_id, component_id, ID_LENGTH );
1216 // search Component ID
1217 for ( int i = 0; i < replication_info.component_num; i++ )
1219 // Demand ID is compared with Component ID
1220 cmp_ret = strncmp(demand_id, replication_info.component_info[i].id, ID_LENGTH);
1225 if ( 0 == replication_info.component_info[i].block_size )
1227 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,16, "Component block size is 0.");
1229 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1230 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,191,
1231 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1239 if ( replication_info.component_info[i].block_head < 0 ||
1240 replication_info.component_info[i].block_head > replication_state.total_block)
1242 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,14,
1243 "Too many component block. Max is %d . ",replication_state.total_block);
1245 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1246 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,55,
1247 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1253 // Pay memory address
1254 ret = (char *)replication_state.component_memory
1255 + replication_info.component_info[i].block_head * DATA_SIZE;
1256 // Nnumber of blocks of ID was returned.
1257 *size = replication_info.component_info[i].block_size;
1260 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1261 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,56,
1262 "size data : %u",replication_info.component_info[i].block_size);
1267 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,16,
1268 "Component Info ID : \"%s\". Block size : %d . Head Block No : %d/ Pay memory : %p ",
1269 replication_info.component_info[i].id,
1270 replication_info.component_info[i].block_size,
1271 replication_info.component_info[i].block_head,
1274 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1275 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,57,
1276 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1284 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,15,
1285 "Unknown component ID. Component ID : %s",demand_id);
1287 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1288 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,58,
1289 "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
1298 /*! Replication Callback
1300 * @param sturuct l7vs_iomux *iom
1305 extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )
1307 struct l7vs_replication_data replication_data;
1311 // if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1312 // LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,59,
1313 // "in_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1314 // "iomux = %p",iom);
1318 // change to iom_write
1319 l7vs_iomux_mod(iom, iom_write);
1321 // Check by continuous initialize.
1322 if ( REPLICATION_MASTER != replication_state.service_status &&
1323 REPLICATION_MASTER_STOP != replication_state.service_status )
1325 // Initialization has already been done.
1326 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,16,
1327 "Can not send_callback. Mode is difficult. mode : %s",
1328 replication_mode[(int)replication_state.service_status]);
1330 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1331 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,60,
1332 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1337 }else if ( REPLICATION_MASTER_STOP == replication_state.service_status ) {
1339 // if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1340 // LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,61,
1341 // "Can not send Replication data, because mode is MASTER_STOP..");
1342 // LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,62,
1343 // "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1352 if ( (void *)NULL ==iom )
1354 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,34, "Send Argument(struct iomux) is NULL." );
1356 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1357 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,63,
1358 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1365 // Replication memory is NULL
1366 if ( NULL == replication_state.replication_memory )
1368 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,35, "Replication memory is NULL." );
1370 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1371 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,64,
1372 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1379 // Component memory is NULL
1380 if ( NULL == replication_state.component_memory )
1382 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,36, "Component memory is NULL." );
1384 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1385 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,65,
1386 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1394 if ( 0 != l7vs_replication_checkinterval() )
1397 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1398 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_MEMORY,1, "Send data wait ...." );
1405 // Temporary preservation sturuct initialize
1406 memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
1407 send_ret = l7vs_replication_send_data(&replication_data);
1409 // change iomux status
1410 l7vs_replication_iomux->status = iomux_replication_send_wait;
1412 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1413 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,66,
1414 "l7vs_replication_iomux->status :"
1415 "befor : iomux_replication_sending"
1416 "after : iomux_replication_send_wait");
1420 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1421 char replication_data_str[DEBUG_STR_LEN] = {0};
1422 l7vs_replication_data_c_str(replication_data_str,&replication_data);
1423 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,67,
1424 "replication_data_struct : %s",
1425 replication_data_str);
1429 if ( 0 != send_ret )
1431 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,3,
1432 "Send data is Failed." );
1434 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1435 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,68,
1436 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1443 // set last send block number
1444 if ( replication_state.last_send_block < replication_state.total_block-1 )
1446 replication_state.last_send_block += 1;
1447 }else if(replication_state.last_send_block == replication_state.total_block-1){
1448 replication_state.last_send_block = 0;
1450 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,17,
1451 "Last send block number is illegal.");
1453 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1454 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,69,
1455 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1462 // sarface block number is change
1463 if(replication_state.total_block == replication_state.last_send_block + 1 )
1465 // Synchronization is executed.
1466 memcpy(replication_state.replication_memory,
1467 replication_state.component_memory,
1468 replication_state.total_block*DATA_SIZE );
1470 // serial initialize
1471 replication_state.sarface_block_no = 0;
1474 replication_state.sarface_block_no = (uint64_t)l7vs_replication_make_serial();
1475 if ( 0 == replication_state.sarface_block_no )
1477 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,18,
1478 "Could not get serial number .");
1480 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1481 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,70,
1482 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1488 // if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1489 // LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION, 0,
1490 // "Copy Success from component memory to replication memory." );
1494 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1495 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,71,
1496 "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
1504 /*! Replication Callback
1506 * @param sturuct l7vs_iomux *iom
1511 extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )
1513 struct l7vs_replication_data replication_data;
1516 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1517 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,72,
1518 "in_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1523 // change to iom_read
1524 l7vs_iomux_mod(iom, iom_read);
1526 // Check by continuous initialize.
1527 if ( REPLICATION_SLAVE != replication_state.service_status &&
1528 REPLICATION_SLAVE_STOP != replication_state.service_status )
1530 // Initialization has already been done.
1531 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,19,
1532 "Can not recv_callback. Mode is difficult. mode : %s",
1533 replication_mode[(int)replication_state.service_status]);
1535 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1536 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,73,
1537 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1542 }else if ( REPLICATION_SLAVE_STOP == replication_state.service_status ) {
1543 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,17,
1544 "Can not receive Replication data, because mode is SLAVE_STOP.");
1546 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1547 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,74,
1548 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1556 if ( (void *)NULL ==iom )
1558 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,37, "Recv Argument(struct iomux) is NULL." );
1560 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1561 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,75,
1562 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1569 // Replication memory is NULL
1570 if ( NULL == replication_state.replication_memory )
1572 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,38, "Replication memory is NULL." );
1574 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1575 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,76,
1576 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1583 // Component memory is NULL
1584 if ( NULL == replication_state.component_memory )
1586 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,39, "Component memory is NULL." );
1588 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1589 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,77,
1590 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1597 // Sarface block array memory is NULL
1598 if ( NULL == replication_state.sarface_block_array_ptr)
1600 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,20, "sarface block array pointer is NULL.");
1602 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1603 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,78,
1604 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1611 // Temporary preservation sturuct initialize
1612 memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
1613 recv_ret = l7vs_replication_recv_data(&replication_data);
1615 // change iomux status
1616 l7vs_replication_iomux->status = iomux_replication_recv_wait;
1618 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1619 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,79,
1620 "l7vs_replication_iomux->status :"
1621 "befor : iomux_replication_receving"
1622 "after : iomux_replication_recv_wait");
1627 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1628 char replication_data_str[DEBUG_STR_LEN] = {0};
1629 l7vs_replication_data_c_str(replication_data_str,&replication_data);
1630 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,80,
1631 "replication_data_struct : %s",
1632 replication_data_str);
1636 if ( 0 != recv_ret )
1638 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,3,
1639 "Failed in the reception processing of data because of illegal receive data." );
1641 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1642 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,81,
1643 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1650 // set sarface block
1651 replication_state.sarface_block_array_ptr[replication_data.block_num] = replication_data.serial;
1653 // set last send block number
1654 if ( replication_state.last_recv_block < replication_state.total_block-1 )
1656 replication_state.last_recv_block += 1;
1657 }else if(replication_state.last_recv_block == replication_state.total_block-1){
1658 replication_state.last_recv_block = 0;
1660 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,21,
1661 "Last send block number is illegal.");
1663 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1664 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,83,
1665 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1673 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1674 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,84,
1675 "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
1684 /*! Replication Dump
1687 extern void l7vs_replication_dump_memory()
1696 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1697 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,85, "in_function : extern void l7vs_replication_dump_memory(void)");
1701 if ( ( REPLICATION_SINGLE == replication_state.service_status ) ||
1702 ( REPLICATION_OUT == replication_state.service_status ) )
1704 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,6,
1705 "Replication memory dump failure. mode : %s",
1706 replication_mode[(int)replication_state.service_status]);
1708 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1709 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,86, "out_function : extern void l7vs_replication_dump_memory(void)");
1715 // Replication memory is NULL.
1716 if ( NULL == replication_state.replication_memory)
1718 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,1,
1719 "Replication memory is NULL.");
1721 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1722 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,87, "out_function : extern void l7vs_replication_dump_memory(void)");
1729 size = 480 * replication_state.total_block;
1733 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,7,
1734 "Can not get Replication memory");
1736 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1737 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,88, "out_function : extern void l7vs_replication_dump_memory(void)");
1745 p = (char *)replication_state.replication_memory;
1748 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,18,"Replication Dump Start ----------------------------");
1749 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,19,"Mode is [ %s ].",
1750 replication_mode[(int)replication_state.service_status]);
1751 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,20,"Total Block is [ %u ]",
1752 replication_state.total_block);
1754 // Converts into the binary, and writes it to the file.
1755 for ( h = 0; h < size / DATA_SIZE ; h++ )
1757 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,21,"Block Number [ %d ]",h);
1759 for ( i = 0; i < DATA_SIZE / LOG_DATA_WIDTH ; i++ )
1761 head = p + h*DATA_SIZE + i*LOG_DATA_WIDTH;
1762 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,22,
1763 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX "
1764 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX"
1765 , *head, *(head+1), *(head+2), *(head+3)
1766 , *(head+4), *(head+5), *(head+6), *(head+7)
1767 , *(head+8), *(head+9), *(head+10), *(head+11)
1768 , *(head+12), *(head+13), *(head+14), *(head+15));
1772 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,23,"Replication Dump End ------------------------------");
1776 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1783 // Component Memory Dump
1784 q = (char *)replication_state.component_memory;
1787 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,89,"Component Dump Satrt ----------------------------");
1788 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,90,"Mode is [ %s ].",
1789 replication_mode[(int)replication_state.service_status]);
1790 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,91,"Total Block is [ %u ]",
1791 replication_state.total_block);
1793 // Converts into the binary, and writes it to the file.
1794 for ( j = 0; j < size / DATA_SIZE ; j++ )
1796 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,92,"Block Number [ %d ]",j);
1798 for ( k = 0; k < DATA_SIZE / LOG_DATA_WIDTH ; k++ )
1800 head_debug = q + j*DATA_SIZE + k*LOG_DATA_WIDTH;
1801 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,93,
1802 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX "
1803 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX"
1804 , *head_debug, *(head_debug+1), *(head_debug+2), *(head_debug+3)
1805 , *(head_debug+4), *(head_debug+5), *(head_debug+6), *(head_debug+7)
1806 , *(head_debug+8), *(head_debug+9), *(head_debug+10), *(head_debug+11)
1807 , *(head_debug+12), *(head_debug+13), *(head_debug+14), *(head_debug+15));
1811 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,94,"Component Dump End ------------------------------");
1812 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,95, "out_function : extern void l7vs_replication_dump_memory(void)");
1819 /*! Chenge Status isActive
1821 extern void l7vs_replication_start()
1825 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1826 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,96, "in_function : extern void l7vs_replication_start(void)");
1830 switch (replication_state.service_status){
1831 case REPLICATION_MASTER_STOP:
1832 replication_state.service_status = REPLICATION_MASTER;
1833 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,24, "Replication start. mode : %s",
1834 replication_mode[(int)replication_state.service_status]);
1836 case REPLICATION_SLAVE_STOP:
1837 replication_state.service_status = REPLICATION_SLAVE;
1838 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,25, "Replication start. mode : %s",
1839 replication_mode[(int)replication_state.service_status]);
1841 case REPLICATION_MASTER:
1842 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,8, "Could not MASTER start, because already start. mode : %s",
1843 replication_mode[(int)replication_state.service_status]);
1845 case REPLICATION_SLAVE:
1846 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,9, "Could not SALVE start, because already start. mode : %s",
1847 replication_mode[(int)replication_state.service_status]);
1850 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,10, "Could not start, because mode is %s.",
1851 replication_mode[(int)replication_state.service_status]);
1855 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1856 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,97, "out_function : extern void l7vs_replication_start(void)");
1862 /*! Chenge Status isStop
1864 extern void l7vs_replication_stop()
1867 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1868 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,98, "in_function : extern void l7vs_replication_start(void)");
1871 switch (replication_state.service_status){
1872 case REPLICATION_MASTER:
1873 replication_state.service_status = REPLICATION_MASTER_STOP;
1874 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,26, "Replication stop. mode : %s",
1875 replication_mode[(int)replication_state.service_status]);
1877 case REPLICATION_SLAVE:
1878 replication_state.service_status = REPLICATION_SLAVE_STOP;
1879 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,27, "Replication stop. mode : %s",
1880 replication_mode[(int)replication_state.service_status]);
1882 case REPLICATION_MASTER_STOP:
1883 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,11, "Could not MASTER stop, because already stop. mode : %s",
1884 replication_mode[(int)replication_state.service_status]);
1886 case REPLICATION_SLAVE_STOP:
1887 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,12, "Could not SLAVE stop, because already stop. mode : %s",
1888 replication_mode[(int)replication_state.service_status]);
1891 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,17, "Could not stop, because mode is %s",
1892 replication_mode[(int)replication_state.service_status]);
1897 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1898 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,99, "out_function : extern void l7vs_replication_start(void)");
1903 /*! Compulsion reproduction execution
1905 extern void l7vs_replication_compulsorily()
1907 struct l7vs_replication_data replication_data;
1909 int interval_ret = -1;
1911 struct timespec time;
1914 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1915 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,100, "in_function : extern void l7vs_replication_compulsorily(void)");
1919 // Check by continuous initialize.
1920 if ( REPLICATION_MASTER != replication_state.service_status &&
1921 REPLICATION_MASTER_STOP != replication_state.service_status )
1923 // Initialization has already been done.
1924 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,23,
1925 "Could not compulsion replication. Mode is different. mode : %s",
1926 replication_mode[(int)replication_state.service_status]);
1928 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1929 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,101, "out_function : extern void l7vs_replication_compulsorily(void)");
1933 }else if ( REPLICATION_MASTER_STOP == replication_state.service_status ) {
1934 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,28,
1935 "Can not replication compulsorily, because mode is %s .",
1936 replication_mode[(int)replication_state.service_status]);
1938 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1939 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,102, "out_function : extern void l7vs_replication_compulsorily(void)");
1945 // Replication memory is NULL
1946 if ( NULL == replication_state.replication_memory )
1948 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,40, "Replication memory is NULL." );
1950 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1951 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,103, "out_function : extern void l7vs_replication_compulsorily(void)");
1957 // Component memory is NULL
1958 if ( NULL == replication_state.component_memory )
1960 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,41, "Component memory is NULL." );
1962 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
1963 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,104, "out_function : extern void l7vs_replication_compulsorily(void)");
1969 // set send interval
1972 interval_ret = parameter_is_int_exist( PARAM_COMP_REPLICATION, "compulsorily_interval" );
1974 if ( 0 == interval_ret )
1976 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION, 51, "Could not get interval value for replication compulsorily.");
1980 ms_time = parameter_get_int_value( PARAM_COMP_REPLICATION, "compulsorily_interval" );
1982 if ( ms_time < MIN_COMPULSORILRY_INTERVAL || MAX_COMPULSORILRY_INTERVAL < ms_time )
1984 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION, 52, "Invalid compulsorily interval.");
1988 time.tv_nsec = (long)( ms_time * 1000000 );
1990 // set last send block is c maximum block
1991 replication_state.last_send_block = replication_state.total_block-1;
1993 for(unsigned int i = 0; i < replication_state.total_block; i++)
1995 // set compulsorily interval.
1996 nanosleep( &time, NULL);
1998 // Temporary preservation sturuct initialize
1999 memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
2000 send_ret = l7vs_replication_send_data(&replication_data);
2002 // change iomux status
2003 l7vs_replication_iomux->status = iomux_replication_send_wait;
2005 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2006 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,105,
2007 "l7vs_replication_iomux->status :"
2008 "befor : iomux_replication_sending"
2009 "after : iomux_replication_send_wait");
2013 if ( 0 != send_ret )
2015 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,5,
2016 "Send data is Failed." );
2018 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2019 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,106, "out_function : extern void l7vs_replication_compulsorily(void)");
2025 // set last send block number
2026 if ( replication_state.last_send_block < replication_state.total_block-1 )
2028 replication_state.last_send_block += 1;
2029 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,29,
2030 "Data sending succeeded. Send block number : %u Version : %llu"
2031 ,replication_state.last_send_block
2032 ,(unsigned long long)replication_state.sarface_block_no );
2033 }else if(replication_state.last_send_block == replication_state.total_block-1){
2034 replication_state.last_send_block = 0;
2035 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,30,
2036 "Data sending succeeded. Send block number : %u Version : %llu"
2037 ,replication_state.last_send_block
2038 ,(unsigned long long)replication_state.sarface_block_no );
2040 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,24,
2041 "Last send block number is illegal.");
2043 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2044 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,107, "out_function : extern void l7vs_replication_compulsorily(void)");
2050 // sarface block number is change
2051 if(replication_state.total_block == replication_state.last_send_block + 1 )
2053 // Synchronization is executed.
2054 memcpy(replication_state.replication_memory,
2055 replication_state.component_memory,
2056 replication_state.total_block*DATA_SIZE );
2058 // serial initialize
2059 replication_state.sarface_block_no = 0;
2062 replication_state.sarface_block_no = (uint64_t)l7vs_replication_make_serial();
2063 if ( 0 == replication_state.sarface_block_no )
2065 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,25,
2066 "Could not get serial number.");
2068 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2069 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,108, "out_function : extern void l7vs_replication_compulsorily(void)");
2074 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2075 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,109,
2076 "Copy Success from component memory to replication memory." );
2080 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,31, "Replication compulsorily is success." );
2082 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2083 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,110, "out_function : extern void l7vs_replication_compulsorily(void)");
2090 /*! Interval Re-setting
2092 extern void l7vs_replication_reset()
2095 unsigned short value = 0;
2098 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2099 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,111, "in_function : extern void l7vs_replication_reset(void)");
2103 // Check Parameter exists
2104 ret = parameter_is_int_exist(PARAM_COMP_REPLICATION,"interval");
2107 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,13, "Not chage re-setting value.");
2109 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2110 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,112, "out_function : extern void l7vs_replication_reset(void)");
2117 value = parameter_get_int_value( PARAM_COMP_REPLICATION, "interval" );
2120 if ( value < MIN_INTERVAL || MAX_INTERVAL < value ){
2121 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,14, "Invalid Interval value. value : %d",(int)value);
2123 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2124 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,113, "out_function : extern void l7vs_replication_reset(void)");
2130 replication_info.interval = value;
2135 * @return REPLICATION_MODE_TAG enumration
2138 extern enum REPLICATION_MODE_TAG l7vs_replication_get_status()
2142 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2143 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,114, "function : extern enum REPLICATION_MODE_TAG l7vs_replication_get_status(void)");
2146 return replication_state.service_status;
2150 /*! Send Interval Check
2153 * @retval 0 Send data
2154 * @retval -1 Not send data
2156 extern int l7vs_replication_checkinterval()
2160 unsigned long long sending_time = 0;
2161 unsigned long long last_send_time = 0;
2162 unsigned long long diff_time = 0;
2165 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2166 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,115, "in_function : extern int l7vs_replication_checkinterval(void)");
2171 last_send_time = replication_state.send_time;
2174 gettimeofday(&tv,&tz);
2175 sending_time = (unsigned long long)(tv.tv_sec*1000000+tv.tv_usec);
2178 // Last send time is 0.
2179 if ( 0 == last_send_time )
2181 replication_state.send_time = sending_time;
2182 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,32,
2183 " Last send time is 0. ");
2185 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2186 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,116,
2187 "out_function : extern int l7vs_replication_checkinterval(void)"
2193 //Last send time is illegal.
2194 if ( last_send_time > sending_time)
2196 replication_state.send_time = sending_time;
2197 LOGGER_PUT_LOG_ERROR (LOG_CAT_L7VSD_REPLICATION,26,
2198 " Last send time illegal. ");
2200 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2201 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,117,
2202 "out_function : extern int l7vs_replication_checkinterval(void)"
2209 diff_time = sending_time - last_send_time;
2212 if ( diff_time >= replication_info.interval)
2214 replication_state.send_time = sending_time;
2216 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2217 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,118," Send time is arrived ");
2218 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,119,
2219 "out_function : extern int l7vs_replication_checkinterval(void)"
2227 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2228 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,120," Send time is not arrived. ");
2229 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,121,
2230 "out_function : extern int l7vs_replication_checkinterval(void)"
2244 static int l7vs_replication_check_parameter()
2249 struct addrinfo hints;
2253 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2254 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,122,
2255 "in_function : static int l7vs_replication_check_parameter(void)");
2259 // initialize structure
2260 memset(&hints, 0, sizeof(struct addrinfo));
2263 // set address hints
2264 hints.ai_family = AF_UNSPEC; // permit any protocol (IPv4, IPv6, etc.)
2265 hints.ai_socktype = SOCK_DGRAM; // UDP
2267 if ( 0 == strcmp(replication_info.ip_addr, "") )
2269 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,27,"IP is unsetting.");
2274 if ( 0 == strcmp(replication_info.service_name,"") )
2276 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,28,"Port is unsetting.");
2280 // Whether IP and the port are effective is confirmed.
2281 info_ret = getaddrinfo(replication_info.ip_addr,replication_info.service_name,&hints,&internal_val.address_info);
2282 if ( 0 != info_ret )
2284 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,27, "Failed to get IP or Service Name.(%d)",ret);
2288 struct sockaddr_in *sin;
2289 sin = (sockaddr_in *)internal_val.address_info->ai_addr;
2292 if ( sin->sin_port == htons(0))
2294 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,15, "You can't specify port number 0.")
2299 if ( 0 == strcmp( replication_info.nic, "") )
2301 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,29,"NIC is unsetting.");
2306 if ((MIN_INTERVAL>replication_info.interval) || (MAX_INTERVAL<replication_info.interval))
2308 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,30,"Invalid Interval value");
2312 // Components ID check
2313 // Components Size check
2314 if (0 == replication_info.component_num)
2316 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,33,"Can not get component, because component is 0.");
2320 for ( int i=0; i < replication_info.component_num; i++ )
2322 sum += replication_info.component_info[i].block_size ;
2323 for ( int j=i+1; j<replication_info.component_num; j++)
2325 cmp_ret = strcmp(replication_info.component_info[j].id,replication_info.component_info[i].id);
2328 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,31,
2329 "Too many component block. Max is %d . ",replication_state.total_block);
2335 if ( sum > CMP_BLOCK_MAX )
2337 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,32,"Total component size is too large.");
2343 if ( NULL != internal_val.address_info )
2345 freeaddrinfo(internal_val.address_info);
2346 internal_val.address_info = NULL;
2351 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,34,"Parameter Check OK.");
2353 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,35,"Parameter Check NG.");
2356 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2357 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,123,
2358 "out_function : static int l7vs_replication_check_parameter(void)"
2366 /*! Get Replication Memory
2368 * @param total_block The entire block that the component uses.
2370 * @return memory Replication memory
2371 * @retval memory memory get Success
2372 * @retval NULL Error
2375 static void *l7vs_replication_get_replication_address()
2377 unsigned int total_block = replication_state.total_block;
2378 void *memory = NULL;
2382 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2383 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,124,
2384 "in_function : static void *l7vs_replication_get_replication_address(void)");
2388 // Check by continuous initialize.
2389 if ( REPLICATION_OUT != replication_state.service_status )
2391 // Initialization has already been done.
2392 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,33, "Already got replication memory.");
2394 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2395 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,125,
2396 "out_function : static void *l7vs_replication_get_replication_address(void)"
2403 // Check Total Block
2404 if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
2406 // Check Total Block
2407 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,34, "Invalid total component blocks.");
2409 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2410 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,126,
2411 "out_function : static void *l7vs_replication_get_replication_address(void)"
2417 // Get replication memory
2418 memory = malloc( total_block*DATA_SIZE );
2421 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
2422 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,40, "malloc : memory=%p: size=%d",memory,total_block*DATA_SIZE);
2427 if ( (void *)NULL == memory )
2429 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,1,"Replication memory is Malloc Error.");
2431 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2432 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,127,
2433 "out_function : static void *l7vs_replication_get_replication_address(void)"
2439 memset(memory,0,total_block*DATA_SIZE);
2442 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2443 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,128,
2444 "out_function : static void *l7vs_replication_get_replication_address(void)"
2445 "return = %p",memory);
2452 /*! Get Component Memory
2454 * @return memory Component memory
2455 * @retval memory memory get Success
2456 * @retval NULL Error
2459 static void *l7vs_replication_get_component_address()
2461 unsigned int total_block ;
2462 void *memory = NULL ;
2465 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2466 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,129, "in_function : static void *l7vs_replication_get_component_address(void)");
2470 total_block = replication_state.total_block;
2471 // Check by continuous initialize.
2472 if ( REPLICATION_OUT != replication_state.service_status )
2474 // Initialization has already been done.
2475 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,35, "Already got component memory.");
2477 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2478 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,130,
2479 "out_function : static void *l7vs_replication_get_component_address(void)"
2485 // Check Total Block
2486 if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
2488 // Check Total Block
2489 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,36, "Invalid total component blocks.");
2491 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2492 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,131,
2493 "out_function : static void *l7vs_replication_get_component_address(void)"
2499 // Get component memory
2500 memory = malloc( total_block*DATA_SIZE );
2503 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
2504 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,41, "malloc : memory=%p: size=%d",memory,total_block*DATA_SIZE);
2509 if ( (void *)NULL == memory )
2511 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,2,"Component memory is Malloc Error.");
2513 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2514 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,132,
2515 "out_function : static void *l7vs_replication_get_component_address(void)"
2521 memset(memory,0,total_block*DATA_SIZE);
2524 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2525 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,133,
2526 "out_function : static void *l7vs_replication_get_component_address(void)"
2527 "return = %p",memory);
2534 /*! Get Sarface Number Memory
2536 * @return memory Component memory
2537 * @retval memory memory get Success
2538 * @retval NULL Error
2541 static uint64_t *l7vs_replication_get_surface_info_address()
2543 unsigned int total_block;
2544 uint64_t *memory = NULL;
2547 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2548 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,134,
2549 "in_function : static uint64_t *l7vs_replication_get_surface_info_address(void)");
2552 total_block = replication_state.total_block;
2553 // Check by continuous initialize.
2554 if ( REPLICATION_OUT != replication_state.service_status )
2556 // Initialization has already been done.
2557 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,37, "Already got surface info memory.");
2559 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2560 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,135,
2561 "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
2567 // Check Total Block
2568 if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
2570 // Check Total Block
2571 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,38, "Invalid total component blocks.");
2573 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2574 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,136,
2575 "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
2582 memory = (uint64_t*)malloc( total_block*sizeof(uint64_t) );
2585 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
2586 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,42, "malloc : memory=%p: size=%lu",memory,total_block*sizeof(uint64_t));
2591 if ( (uint64_t *)NULL == memory )
2593 LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,3,"Surface info address is Malloc Error.");
2595 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2596 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,137,
2597 "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
2603 memset(memory,0,total_block*sizeof(uint64_t));
2605 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2606 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,138,
2607 "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
2608 "return = %p",memory);
2614 /*! Initialize send network socket
2616 * @param *fd file descriptor
2622 static int l7vs_replication_send_sock_init( )
2628 struct addrinfo hints;
2631 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2632 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,139,
2633 "in_function : static int l7vs_replication_send_sock_init(void)");
2637 // Check by continuous initialize.
2638 if ( REPLICATION_SINGLE == replication_state.service_status ||
2639 REPLICATION_MASTER == replication_state.service_status ||
2640 REPLICATION_MASTER_STOP == replication_state.service_status )
2642 // Initialization has already been done.
2643 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,39,
2644 "send-socket initialization has already been done. mode : %s",
2645 replication_mode[(int)replication_state.service_status]);
2649 // initialize structure
2650 memset(&hints, 0, sizeof(struct addrinfo));
2652 // set address hints
2653 hints.ai_family = AF_UNSPEC; // permit any protocol (IPv4, IPv6, etc.)
2654 hints.ai_socktype = SOCK_DGRAM; // UDP
2655 hints.ai_flags = AI_ALL;
2657 //------ Make send socket -------//
2658 // Whether IP and the port are effective is confirmed.
2659 info_ret = getaddrinfo(replication_info.ip_addr,
2660 replication_info.service_name,
2662 &internal_val.address_info);
2663 if ( 0 != info_ret )
2665 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,40, "Failed to get IP or Port.");
2670 internal_val.socket = socket( internal_val.address_info->ai_family,
2671 internal_val.address_info->ai_socktype,
2672 internal_val.address_info->ai_protocol );
2673 // if cannot make a socket
2674 if ( internal_val.socket < 3 )
2677 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,28,
2678 "Make send socket error : %s ai_family:%d ai_socktype:%d ai_protocol:%d",
2679 strerror(errsv),internal_val.address_info->ai_family,
2680 internal_val.address_info->ai_socktype,
2681 internal_val.address_info->ai_protocol);
2686 sockopt_ret = setsockopt(internal_val.socket, SOL_SOCKET, SO_BINDTODEVICE,
2687 replication_info.nic, strlen(replication_info.nic) + 1);
2688 if ( -1 == sockopt_ret )
2692 // cannot set a NIC. Close a Socket.
2693 close(internal_val.socket);
2694 internal_val.socket = -1;
2695 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,29,
2696 "Fails in the option operation of send socket : %s File descriptor : %d NIC : %s",
2697 strerror(errsv),internal_val.socket,replication_info.nic);
2701 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_SOCKET,1,"send-socket is make success.");
2707 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,36,"send-soket initialization is succeess.");
2709 if ( -1 != internal_val.socket )
2711 close(internal_val.socket);
2712 internal_val.socket = -1;
2714 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,37,"send-soket initialization is failure.");
2717 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2718 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,140,
2719 "out_function : static int l7vs_replication_send_sock_init(void)"
2727 /*! Initialize recv network socket
2729 * @param *fd file descriptor
2735 static int l7vs_replication_recv_sock_init( )
2741 struct servent *servent_info;
2745 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2746 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,141,
2747 "in_function : static int l7vs_replication_recv_sock_init(void)");
2751 // Check by continuous initialize.
2752 if ( REPLICATION_SINGLE == replication_state.service_status ||
2753 REPLICATION_SLAVE == replication_state.service_status ||
2754 REPLICATION_SLAVE_STOP == replication_state.service_status )
2756 // Initialization has already been done.
2757 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,41,
2758 "recv-socket initialization has already been done. mode : %s",
2759 replication_mode[(int)replication_state.service_status]);
2764 // get Name for NetworkDeviceName ( IPv4 or IPv6 )
2765 // address info structs initialize
2766 memset( &internal_val.addr, 0, sizeof(struct addressinfo) );
2768 // get ip address from nic
2769 getip_ret = getNICAddressInfo(replication_info.nic, &addr);
2770 if ( 0 == getip_ret )
2772 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,31,"You can not get IP address from nic.");
2778 servent_info = getservbyname(replication_info.service_name,"udp");
2781 internal_val.addr.addr_in.sin_port = htons( atoi(replication_info.service_name ) );
2784 internal_val.addr.addr_in.sin_port = servent_info->s_port ;
2787 if ( 0 == internal_val.addr.addr_in.sin_port )
2789 LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_SYSTEM_SOCKET,32,"You can not get port address from %s.",replication_info.service_name );
2796 internal_val.socket = socket( PF_INET,
2800 // if cannot make a socket
2801 if ( internal_val.socket < 3 )
2804 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,34,
2805 "Make recv socket error : %s ai_family:%d ai_socktype:%d ai_protocol:%d",
2814 bind_ret = bind(internal_val.socket,(sockaddr *)&internal_val.addr.addr_in, sizeof(internal_val.addr.addr_in));
2819 if ( bind_ret != 0 )
2821 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,33,
2822 "Bind error : %s File descriptor : %d ai_addrlen : %d",
2824 internal_val.socket,
2825 (int)sizeof(struct sockaddr));
2830 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_SOCKET,2,"recv-socket is make success.");
2836 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,38,"recv-socket initialization is succeess.");
2838 if ( -1 != internal_val.socket )
2840 close(internal_val.socket);
2841 internal_val.socket = -1;
2843 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,39,"recv-socket initialization is failure..");
2846 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2847 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,142,
2848 "out_function : static int l7vs_replication_recv_sock_init(void)"
2855 /*! Finalize network socket
2857 static void l7vs_replication_sock_fini()
2860 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2861 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,143,
2862 "in_function : static void l7vs_replication_sock_fini(void)");
2866 // close a send socket.
2867 if ( -1 != internal_val.socket )
2869 close(internal_val.socket);
2870 internal_val.socket = -1;
2872 // free address info
2873 if ( NULL != internal_val.address_info)
2875 freeaddrinfo(internal_val.address_info);
2876 internal_val.address_info = NULL;
2879 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,40, "Socket(send-socket,recv-socket) is finalize.");
2881 if ( NULL != l7vs_replication_iomux)
2884 l7vs_replication_iomux->status = iomux_replication_destroy;
2886 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2887 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,144,
2888 "l7vs_replication_iomux->status : iomux_replication_destroy");
2892 // delete l7vs_iomux
2893 if ( -1 != l7vs_replication_iomux->fd ) {
2894 l7vs_iomux_remove(l7vs_replication_iomux);
2895 l7vs_replication_iomux->fd = -1;
2899 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2900 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,145,
2901 "out_function : static void l7vs_replication_sock_fini(void)");
2907 /*! Make serial number
2909 * @return Serial number
2910 * @retval nonzero Serial number
2913 static unsigned long long l7vs_replication_make_serial()
2915 unsigned long long int serial_num;
2916 struct timespec current_time;
2919 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2920 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,146,
2921 "in_function : static void l7vs_replication_sock_fini(void)");
2925 // get time by clock_gettime
2926 if ( clock_gettime(CLOCK_REALTIME, ¤t_time) == -1 )
2929 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,6, "You failed to get of time.");
2932 // make a serial succeeds.
2933 serial_num = (unsigned long long int) current_time.tv_sec * 1000000 +
2934 (unsigned long long int) current_time.tv_nsec / 1000;
2937 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2938 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,147,
2939 "in_function : static void l7vs_replication_sock_fini(void)"
2940 "return = %llu",serial_num);
2947 /*! Send transfer data to standby server
2949 * @param data Points to input data from external program. This will be send to standby server.
2955 static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)
2960 struct l7vs_replication_data send_data;
2963 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2964 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,148,
2965 "in_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
2966 "replication_data = %p",replication_data);
2971 // Check Argument is NULL.
2972 if ( NULL == replication_data )
2974 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,42, "Argument is NULL.");
2976 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2977 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,149,
2978 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
2986 if ( REPLICATION_MASTER != replication_state.service_status)
2988 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,43, "Can not send replication data. Mode is difficult. mode : %s",
2989 replication_mode[(int)replication_state.service_status]);
2991 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
2992 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,150,
2993 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
2999 // Check to replication memory is not NULL
3000 if ( NULL == replication_state.replication_memory )
3002 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,42, "Replication memory is NULL.");
3004 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3005 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,151,
3006 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3013 // Check to iomux memory is not NULL
3014 if ( NULL == l7vs_replication_iomux)
3016 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,43, "Initialize is not yet. Iomux is NULL.");
3018 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3019 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,152,
3020 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3027 // internal_val.address_info is NULL
3028 if ( NULL == internal_val.address_info)
3030 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,44, "Initialize is not yet. address info is NULL.");
3032 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3033 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,153,
3034 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3042 // make replication data struct
3044 memset(replication_data, 0, sizeof(struct l7vs_replication_data));
3045 // Set replication id
3046 replication_data->id = REPLICATION_ID;
3047 // set block_num (replication_state.last_send_block + 1) and Range check of memory
3048 if ( replication_state.last_send_block < replication_state.total_block -1)
3050 replication_data->block_num = replication_state.last_send_block + 1;
3051 } else if ( replication_state.last_send_block == replication_state.total_block -1){
3052 replication_data->block_num = 0;
3054 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,44, "Recv block number is too large.");
3056 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3057 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,154,
3058 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3066 replication_data->serial = replication_state.sarface_block_no;
3067 if ( 0 == replication_data->serial && 0 == replication_data->block_num)
3069 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,41, "Serial number is 0, first send processing. ");
3072 // set data size (sizeof(replication_data))
3073 replication_data->size = sizeof(struct l7vs_replication_data);
3075 if ( replication_data->size > SEND_DATA_SIZE)
3077 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,45, "Recv block data size is too large.");
3079 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3080 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,155,
3081 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3088 // change iomux status
3089 l7vs_replication_iomux->status = iomux_replication_sending;
3091 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3092 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,156,
3093 "l7vs_replication_iomux->status :"
3094 "befor : iomux_replication_send_wait"
3095 "after : iomux_replication_sending");
3100 memset(&send_data,0,sizeof(struct l7vs_replication_data));
3101 // change to network byteorder
3102 send_data.id = htons(replication_data->id);
3103 send_data.serial = replication_data->serial;
3104 send_data.block_num = htonl(replication_data->block_num);
3105 send_data.size = (uint64_t)replication_data->size;
3107 // set replication data (1 block)
3108 send_memory = (char *)replication_state.replication_memory + DATA_SIZE*replication_data->block_num;
3109 memcpy( &send_data.data, send_memory, DATA_SIZE );
3112 send_byte = sendto(internal_val.socket, &send_data, (int)replication_data->size, 0,
3113 internal_val.address_info->ai_addr, internal_val.address_info->ai_addrlen);
3117 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3118 char replication_data_str[DEBUG_STR_LEN] = {0};
3119 l7vs_replication_data_c_str(replication_data_str,replication_data);
3120 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,157,
3121 "replication_data_struct : %s",
3122 replication_data_str);
3127 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
3132 for ( h = 0; h < (DATA_SIZE / LOG_DATA_WIDTH) ; h++ )
3134 head = (char *)&send_data.data + h*LOG_DATA_WIDTH;
3135 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,158,
3136 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX "
3137 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX"
3138 , *head, *(head+1), *(head+2), *(head+3)
3139 , *(head+4), *(head+5), *(head+6), *(head+7)
3140 , *(head+8), *(head+9), *(head+10), *(head+11)
3141 , *(head+12), *(head+13), *(head+14), *(head+15));
3145 if (-1 == send_byte)
3147 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,7,
3148 "Data send error : %s fd : %d size : %d ai_addr : %p addrlen : %d",
3150 internal_val.socket,
3151 (int)replication_data->size,
3152 internal_val.address_info->ai_addr,
3153 internal_val.address_info->ai_addrlen);
3155 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3156 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,159,
3157 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3163 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3164 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,160,"Sent data is success. %d", send_byte);
3165 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,161,
3166 "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
3172 /*! Receive transfer data from active server
3174 * @param recv_data Points to output data from external program.
3180 static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)
3186 struct l7vs_replication_data recv_data;
3189 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3190 if ( NULL == replication_data )
3192 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,162,
3193 "in_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3194 "replication_data = NULL");
3197 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,163,
3198 "in_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3199 "replication_data = %p",replication_data);
3204 // Check Argument is NULL.
3205 if ( NULL == replication_data )
3207 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,46, "Argument is NULL.");
3209 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3210 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,164,
3211 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3219 if ( REPLICATION_SLAVE != replication_state.service_status)
3221 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,47, "Can not receive replication data. Mode is difficult. mode : %s",
3222 replication_mode[(int)replication_state.service_status]);
3224 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3225 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,165,
3226 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3233 // Check to replication memory is not NULL
3234 if ( NULL == replication_state.replication_memory )
3236 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,45, "Replication memory is NULL.");
3238 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3239 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,166,
3240 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3247 // Check to iomux memory is not NULL
3248 if ( NULL == l7vs_replication_iomux)
3250 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,46, "Initialize is not yet. Iomux is NULL.");
3252 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3253 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,167,
3254 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3261 fromlen = sizeof(struct sockaddr);
3263 // change iomux status
3264 l7vs_replication_iomux->status = iomux_replication_receving;
3266 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3267 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,168,
3268 "l7vs_replication_iomux->status :"
3269 "before : iomux_replication_recv_wait :"
3270 "after : iomux_replication_receving");
3275 memset(&recv_data, 0, sizeof(struct l7vs_replication_data));
3276 memset(replication_data, 0, sizeof(struct l7vs_replication_data));
3279 recv_byte = recvfrom( internal_val.socket, &recv_data,
3280 sizeof(struct l7vs_replication_data),
3282 (sockaddr *)&internal_val.addr.addr_in,
3286 // change to host byteorder
3287 replication_data->id = ntohs(recv_data.id);
3288 replication_data->serial = recv_data.serial;
3289 replication_data->block_num = ntohl(recv_data.block_num);
3290 replication_data->size = (uint64_t) recv_data.size;
3292 memcpy(&replication_data->data, &recv_data.data, DATA_SIZE);
3295 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
3300 for ( h = 0; h < (DATA_SIZE / LOG_DATA_WIDTH) ; h++ )
3302 head = (char *)&recv_data.data + h*LOG_DATA_WIDTH;
3303 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,169,
3304 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX "
3305 "%02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX %02hhX"
3306 , *head, *(head+1), *(head+2), *(head+3)
3307 , *(head+4), *(head+5), *(head+6), *(head+7)
3308 , *(head+8), *(head+9), *(head+10), *(head+11)
3309 , *(head+12), *(head+13), *(head+14), *(head+15));
3313 if (-1 == recv_byte)
3315 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,2,
3316 "Reception processing is error : %s fd : %d data : %p size : %d ai_addr : %p addrlen : %d",
3318 internal_val.socket,
3320 (int)recv_data.size,
3321 &internal_val.addr.addr_in,
3324 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3325 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,170,
3326 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3332 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3333 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,171,"Recv data is success. %u", recv_byte);
3335 // Check replication ID
3336 if (replication_data->id != REPLICATION_ID)
3338 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,48, "Get invalid data.");
3340 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3341 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,172,
3342 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3349 // block number is over
3351 if (replication_data->block_num > replication_state.total_block)
3353 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,49, "Recv block number is too large.");
3355 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3356 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,173,
3357 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3364 // Comparison of serial numbers
3365 if ( replication_data->serial < replication_state.sarface_block_array_ptr[replication_data->block_num])
3367 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,50, "Recv replication data is too old.");
3369 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3370 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,174,
3371 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3377 // Substitution of version
3378 replication_state.sarface_block_array_ptr[replication_data->block_num] = replication_data->serial;
3382 recv_memory = (char *)replication_state.replication_memory + DATA_SIZE*replication_data->block_num;
3385 memcpy(recv_memory, &replication_data->data, DATA_SIZE);
3387 // set sarface block
3388 replication_state.sarface_block_array_ptr[replication_data->block_num] = replication_data->serial;
3390 // Sarface numbers are compared.
3391 for ( unsigned int i = 0; i < replication_state.total_block-1; i++ )
3393 if ( replication_state.sarface_block_array_ptr[i] != replication_state.sarface_block_array_ptr[i+1])
3397 if ( i == replication_state.total_block-2)
3399 // Synchronization is executed.
3400 memcpy(replication_state.component_memory,
3401 replication_state.replication_memory,
3402 replication_state.total_block*DATA_SIZE );
3403 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3404 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,82, "Copy Success from replication memory to component memory.");
3410 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3411 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,175,
3412 "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
3419 /*! Release Replication Memory
3421 static void l7vs_replication_release_replication_address()
3424 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3425 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,176,
3426 "in_function : static void l7vs_replication_release_replication_address(void)");
3431 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
3432 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,43,
3433 "free : replication_state.replication_memory=%p",
3434 replication_state.replication_memory);
3437 if (NULL != replication_state.replication_memory )
3439 free(replication_state.replication_memory);
3441 replication_state.replication_memory=NULL;
3444 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3445 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,177,
3446 "out_function : static void l7vs_replication_release_replication_address(void)");
3452 * Release Components Memory
3454 static void l7vs_replication_release_components_address()
3457 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3458 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,178,
3459 "in_function : static void l7vs_replication_release_components_address(void)");
3464 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
3465 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,44,
3466 "free : replication_state.component_memory=%p",
3467 replication_state.component_memory);
3470 if ( NULL != replication_state.component_memory)
3472 free(replication_state.component_memory);
3474 replication_state.component_memory=NULL;
3477 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3478 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,179,
3479 "out_function : static void l7vs_replication_release_components_address(void)");
3484 /*! Release Sarface Memory
3486 static void l7vs_replication_release_surface_info_address()
3489 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3490 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,180,
3491 "in_function : static void l7vs_replication_release_surface_info_address(void)");
3497 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
3498 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,45,
3499 "free : replication_state.sarface_block_array_ptr=%p",
3500 replication_state.sarface_block_array_ptr);
3503 if ( NULL != replication_state.sarface_block_array_ptr )
3505 free(replication_state.sarface_block_array_ptr);
3507 replication_state.sarface_block_array_ptr=NULL;
3510 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3511 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,181,
3512 "out_function : static void l7vs_replication_release_surface_info_address(void)");
3519 * get Name for NetworkDeviceName
3520 * @param[IN] const char* NetworkDeviceName
3521 * @param[OUT] struct addressinfo* address info struct
3522 * @return 0 is fail / not 0 is success.
3524 static int getNICAddressInfo( const char* nicname, struct addressinfo* info )
3527 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3528 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,182,
3529 "in_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3538 if( !nicname || !info )
3541 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3542 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,183,
3543 "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3550 //Networkdevice struct define
3552 memset( &ifr, 0, sizeof( struct ifreq ) );
3555 int fd = socket( AF_INET, SOCK_DGRAM, 0 );
3559 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3560 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,184,
3561 "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3568 //get networkdevice struct for IPv4
3569 strncpy( ifr.ifr_name, nicname, IFNAMSIZ-1 );
3570 ifr.ifr_addr.sa_family = AF_INET;
3573 if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM) == LOG_LV_DEBUG){
3574 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM,2,
3576 "in_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3584 if( ioctl( fd, SIOCGIFADDR, &ifr ) < 0 )
3587 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3588 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,185,
3589 "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3595 memcpy( &(info->addr_in), &(ifr.ifr_addr), sizeof( struct sockaddr_in ) );
3598 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3599 char sockaddr_in_str[DEBUG_STR_LEN] = {0};
3600 sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
3601 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,186,
3602 "sockaddr_in_struct : %s",
3608 //get networkdevice struct for IPv6
3609 memset( &ifr, 0, sizeof( struct ifreq ) );
3610 strncpy( ifr.ifr_name, nicname, IFNAMSIZ-1 );
3611 ifr.ifr_addr.sa_family = AF_INET6;
3612 if( ioctl( fd, SIOCGIFADDR, &ifr ) < 0 )
3615 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3616 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,187,
3617 "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3622 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3623 char sockaddr_in_str[DEBUG_STR_LEN] = {0};
3624 sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
3625 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,188,
3626 "sockaddr_in_struct : %s",
3632 memcpy( &(info->addr_in6 ), &(ifr.ifr_addr), sizeof( struct sockaddr_in6 ) );
3637 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3638 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,189,
3639 "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
3644 if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
3645 char sockaddr_in_str[DEBUG_STR_LEN] = {0};
3646 sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
3647 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,190,
3648 "sockaddr_in_struct : %s",
3657 * Extract struct l7vs_protomod to strings for debug log.
3659 * @return l7vs_replication_data
3662 static void l7vs_replication_data_c_str(char *ret, struct l7vs_replication_data *replication_data)
3664 if ( !replication_data ){
3665 snprintf(ret, DEBUG_STR_LEN, "(nil)");
3668 snprintf( ret, DEBUG_STR_LEN,
3669 "replication_data = %p:"
3676 replication_data->id,
3677 replication_data->serial,
3678 replication_data->block_num,
3679 (long long int)replication_data->size,
3680 replication_data->data);
3685 static void l7vs_replication_component_c_str(char *ret, struct l7vs_replication_component *component_info, int i)
3687 if ( !component_info )
3689 snprintf(ret, DEBUG_STR_LEN, "(nil)");
3692 snprintf( ret, DEBUG_STR_LEN,
3693 "replication_component = %p:"
3695 "block_head[%d] = %u:"
3696 "block_size[%d] = %u:",
3698 i,component_info[i].id,
3699 i,component_info[i].block_head,
3700 i,component_info[i].block_size);
3704 static void l7vs_replication_state_c_str(char *ret, struct l7vs_replication_state *replication_state)
3706 if ( !replication_state )
3708 snprintf(ret, DEBUG_STR_LEN, "(nil)");
3712 snprintf( ret, DEBUG_STR_LEN,
3713 "replication_state = %p:"
3714 "service_status = %s:"
3716 "last_send_block = %u:"
3717 "last_recv_block = %u:"
3719 "replication_memory = %p:"
3720 "component_memory = %p:"
3721 "sarface_block_no = %llu:"
3722 "sarface_block_array_ptr = %p:",
3724 replication_mode[(int)replication_state->service_status],
3725 replication_state->send_time,
3726 replication_state->last_send_block,
3727 replication_state->last_recv_block,
3728 replication_state->total_block,
3729 replication_state->replication_memory,
3730 replication_state->component_memory,
3731 (long long int)replication_state->sarface_block_no,
3732 replication_state->sarface_block_array_ptr);
3736 static void l7vs_replication_info_c_str(char *ret, struct l7vs_replication_info *replication_info)
3738 if ( !replication_info )
3740 snprintf(ret, DEBUG_STR_LEN, "(nil)");
3744 snprintf( ret, DEBUG_STR_LEN,
3745 "replication_info = %p:"
3747 "service_name = %s:"
3750 "component_num = %d:"
3751 "component_info = %p:",
3753 replication_info->ip_addr,
3754 replication_info->service_name,
3755 replication_info->nic,
3756 replication_info->interval,
3757 replication_info->component_num,
3758 replication_info->component_info);
3761 static void sockaddr_in_c_str(char *ret, struct sockaddr_in *addr_in)
3763 struct sockaddr_in p;
3765 memset(&p,0,sizeof(struct sockaddr_in));
3769 snprintf(ret, DEBUG_STR_LEN, "(nil)");
3773 memcpy(&p,addr_in,sizeof(struct sockaddr_in));
3774 snprintf( ret, DEBUG_STR_LEN,
3778 "in_addr.sin_addr = %llu:"
3781 addr_in->sin_family,
3783 (long long int)p.sin_addr.s_addr,