OSDN Git Service

Initial commit from 2.1.2-1
[ultramonkey-l7/ultramonkey-l7-v2.git] / src / replication.c
diff --git a/src/replication.c b/src/replication.c
new file mode 100644 (file)
index 0000000..53b3762
--- /dev/null
@@ -0,0 +1,3788 @@
+/*! @file
+ *  @brief Replication structure program
+ *
+ *  @author NTT COMWARE
+ *  @date
+ *  @version
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <time.h>
+#include <netdb.h>
+#include <errno.h>
+#include "logger_wrapper.h"
+#include "parameter_wrapper.h"
+#include "l7vs_replication.h"
+#include "l7vs_iom.h"
+#include "l7vs_iomuxlist.h"
+
+#include <net/if.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <iostream>
+#include <limits.h>
+
+//---------- Initial set value
+
+//! Initial value of Essential information set to SG file.
+
+
+static struct l7vs_replication_info replication_info;
+               
+//! Initial value of Replication status
+static struct l7vs_replication_state replication_state = {
+       REPLICATION_OUT,
+       0,
+       0,
+       0,
+       0,
+       NULL,
+       NULL,
+       0,
+       NULL
+};
+//! iomux structure
+static struct l7vs_iomux *l7vs_replication_iomux = NULL;
+
+//! recv sock
+struct  addressinfo{
+        struct sockaddr_in      addr_in;
+        struct sockaddr_in6     addr_in6;
+};
+
+struct  addressinfo addr;
+
+//! Internal value structure
+struct replication_internal_val
+{
+       int                     socket;                 //!< Opened socket file descriptor
+       struct addrinfo         *address_info;          //!< Socket property internal_val
+       struct  addressinfo     addr;
+};
+
+
+static struct replication_internal_val internal_val = {
+               -1,
+               NULL,
+               addr
+};
+
+//! emun States Type string
+static char replication_mode[6][24] = {
+       "REPLICATION_OUT",
+       "REPLICATION_SINGLE",
+       "REPLICATION_MASTER",
+       "REPLICATION_SLAVE",
+       "REPLICATION_MASTER_STOP",
+       "REPLICATION_SLAVE_STOP"
+};
+
+// Initialize network socket
+static int l7vs_replication_send_sock_init();
+// Initialize network socket
+static int l7vs_replication_recv_sock_init();
+// Finalize network socket
+static void l7vs_replication_sock_fini();
+// Set master mode to iomux
+static int l7vs_replication_set_master();
+// Set slave mode to iomux
+static int l7vs_replication_set_slave();
+// Obtain the memory the replication is done
+static void *l7vs_replication_get_replication_address();
+// Release replication memory 
+static void l7vs_replication_release_replication_address();
+// The memory the component uses 
+static void *l7vs_replication_get_component_address();
+// Release component memory
+static void l7vs_replication_release_components_address();
+// The memory with information on respect switch
+static uint64_t *l7vs_replication_get_surface_info_address();
+// Release memory of information on respect switch
+static void l7vs_replication_release_surface_info_address();
+// get value check
+static int l7vs_replication_check_parameter();
+// make serial
+static unsigned long long l7vs_replication_make_serial();
+// send
+static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data);
+// recve
+static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data);
+// get ip from nic
+static int getNICAddressInfo( const char* nicname, struct addressinfo* info );
+
+
+//---------- Debug Function declaration
+static void l7vs_replication_data_c_str(char *ret, struct l7vs_replication_data *replication_data);
+static void l7vs_replication_component_c_str(char *ret, struct l7vs_replication_component *component_info, int i);
+static void l7vs_replication_state_c_str(char *ret, struct l7vs_replication_state *replication_state);
+static void l7vs_replication_info_c_str(char *ret, struct l7vs_replication_info *replication_info);
+static void sockaddr_in_c_str(char *ret, struct sockaddr_in *addr_in);
+
+/*! Initialize Replication
+ *
+ * @return 0/-1
+ * @retval 0 Success
+ * @retval -1 Error
+ *
+ */
+
+int l7vs_replication_init()
+{
+       int     component_num = 0;
+       int     ret = -1;
+       int     ip_addr_ret = -1;
+       int     service_name_ret = -1;
+       int     nic_ret = -1;
+       int     interval_ret = -1;
+
+       // Check by continuous initialize.
+       if ( REPLICATION_OUT != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,1, "Initialization is a failure, because nitialization has already been done. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+               ret = -1;
+               goto END;
+       }
+
+       memset(&replication_info, 0, sizeof(struct l7vs_replication_info));
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,1, "in_function : int l7vs_replication_init(void)");
+       }
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+       {
+               char replication_state_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_state_c_str(replication_state_str,&replication_state);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,2,
+                                       "set_l7vs_replication_state_struct : %s",
+                                       replication_state_str);
+
+               char replication_info_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_info_c_str(replication_info_str,&replication_info);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,3,
+                                       "set_l7vs_replication_info_struct : %s",
+                                       replication_info_str);
+
+               for ( int i=0; i<replication_info.component_num; i++)
+               {
+                       char replication_component_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,4,
+                                               "set_l7vs_replication_component_struct : %s",
+                                               replication_component_str);
+               }
+       }
+       // Debug log END
+
+       // Check the Parameter exists
+       ip_addr_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION,"ip_addr");
+       service_name_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION, "service_name" );
+       nic_ret = parameter_is_char_exist( PARAM_COMP_REPLICATION, "nic");
+       interval_ret = parameter_is_int_exist( PARAM_COMP_REPLICATION, "interval" );
+
+       // SG File not set
+       if ( (0 == ip_addr_ret) && (0 == service_name_ret) && (0 == nic_ret) && (0 == interval_ret))
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,1, "Required item is not set in l7vs. ");
+               ret = 0;
+               goto END;
+       }
+       // IP Address exists
+       if ( 0 == ip_addr_ret  )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,2, "IP Address is not set." );
+               ret = -1;
+               goto END;
+       }
+       // Port exists
+       else if ( 0 == service_name_ret )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,3, "Port is not set." );
+               ret = -1;
+               goto END;
+       }
+       // NIC exists
+       else if ( 0 == nic_ret )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,4, "NIC is not set." );
+               ret = -1;
+               goto END;
+       }
+       // Interval exists
+       else if ( 0 == interval_ret )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,5, "Interval is not set." );
+               ret = -1;
+               goto END;
+       }
+
+       // Get IP Addressa
+       strncpy(replication_info.ip_addr, parameter_get_char_value( PARAM_COMP_REPLICATION, "ip_addr" ),NI_MAXHOST);
+       // Failed in the acquisition of IP
+       if ( strcmp(replication_info.ip_addr,"") == 0)
+       {
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,6, "Could not get IP Address." );
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto END;
+       }
+
+       // Get service_name (port)
+       strncpy(replication_info.service_name,
+                parameter_get_char_value( PARAM_COMP_REPLICATION,
+                "service_name"), NI_MAXSERV);
+       // Failed in the acquisition of Port
+       if ( strcmp(replication_info.service_name,"") == 0)
+       {
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,7, "Could not get Port." );
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto END;
+       }
+
+       // Get NIC
+       strncpy(replication_info.nic, parameter_get_char_value( PARAM_COMP_REPLICATION, "nic" ),NIC_LENGTH);
+       // Failed in the acquisition of NIC
+       if ( strcmp(replication_info.nic,"") == 0)
+       {
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,8, "Could not get NIC." );
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto END;
+       }
+
+       // Get interval
+       replication_info.interval =  parameter_get_int_value( PARAM_COMP_REPLICATION, "interval" );
+
+       // Set a starting component block number
+       replication_info.component_num = 0;
+       // Variable that sets ID
+       char key_id[ID_LENGTH];
+       char key_size[CMP_SIZE_LENGTH];
+
+       // Conponent exists
+       // Get Component infomation
+       for ( int i=0; i<CMP_MAX; i++)
+       {
+               memset( &key_id, 0, ID_LENGTH );
+               memset( &key_size, 0, CMP_SIZE_LENGTH);
+
+               sprintf( key_id, "cmponent_id_%02d",i);
+               sprintf( key_size, "cmponent_size_%02d",i);
+
+               // ID and the Size exist
+               if ( 0 == parameter_is_char_exist( PARAM_COMP_REPLICATION, key_id ) && 
+                                       0 == parameter_is_int_exist( PARAM_COMP_REPLICATION, key_size ) )
+               {
+                       break;
+               }else{
+                       // Get Conmponent ID
+                       strcpy( replication_info.component_info[i].id,
+                               parameter_get_char_value(PARAM_COMP_REPLICATION,
+                               key_id));
+                       if ( 0 == strcmp(replication_info.component_info[i].id,""))
+                       {
+                               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,9,
+                                                                       "Could not get  %s.",key_id );
+                               replication_state.service_status = REPLICATION_SINGLE;
+                               ret = -1;
+                               goto END;
+                       }
+                       
+                       // Get Block size of Component
+                       replication_info.component_info[i].block_size=parameter_get_int_value(PARAM_COMP_REPLICATION,
+                                                                                                               key_size);
+
+                       // Count block head number
+                       if ( 0 == i)
+                       {
+                               replication_info.component_info[i].block_head = 0;
+                               replication_state.total_block += replication_info.component_info[i].block_size;
+                       }else{
+                               replication_info.component_info[i].block_head =  replication_info.component_info[i-1].block_head
+                                                                                + replication_info.component_info[i-1].block_size;
+                               replication_state.total_block += replication_info.component_info[i].block_size;
+                       }
+                       // Number of Component 
+                       component_num++;
+               }
+               replication_info.component_num = component_num;
+       }
+
+
+       // Check the Parameters value
+       if ( 0 != l7vs_replication_check_parameter() )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,10, "Failed in parameter check." );
+               ret = -1;
+               goto SINGLE_END;
+       }
+       
+       // The memory is 0 or less. 
+       if ( 0 >= replication_state.total_block)
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = 0;
+               goto SINGLE_END;
+       }
+
+       // The memory is larger than int. 
+       if ( 100000 < replication_state.total_block)
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_REPLICATION,57, "Set number of blocks exceeds %d.",CMP_BLOCK_MAX );
+               ret = -1;
+               goto SINGLE_END;
+       }
+
+       // Get the Replication memory
+       replication_state.replication_memory = l7vs_replication_get_replication_address();
+       // Confirmation of Replication memory 
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,30, "Replication memory is NULL.");
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto SINGLE_END;
+                       
+       }
+       // Get the Components memory
+       replication_state.component_memory = l7vs_replication_get_component_address();
+       // Confirmation of Components memory
+       if ( NULL == replication_state.component_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,31, "Components memory is NULL.");
+               // free memory
+               l7vs_replication_release_replication_address();
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto SINGLE_END;
+       }
+
+       // Memory for Switch Sarface Number
+       replication_state.sarface_block_array_ptr = l7vs_replication_get_surface_info_address();
+       if ( NULL == replication_state.sarface_block_array_ptr )
+       {
+               // free memory
+               l7vs_replication_release_replication_address();
+               l7vs_replication_release_components_address();
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,32, "Surface infomation memory is NULL.");
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               ret = -1;
+               goto SINGLE_END;
+       }
+
+       // Get iomux
+       l7vs_replication_iomux = l7vs_iomux_get_from_avail_list();
+       if ( NULL == l7vs_replication_iomux )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,2, "Can not get replication_iomux.");
+               ret = -1;
+               goto SINGLE_END;
+       }
+
+       // Status Set to Slave
+       ret = l7vs_replication_set_slave();
+
+       if (0 == ret)
+       {
+               replication_state.service_status = REPLICATION_SLAVE;
+               goto END;
+       }else{
+               goto SINGLE_END;
+       }
+
+END:
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,2, "Initialized in %s mode.",
+                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+               {
+                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,5,
+                                               "set_l7vs_replication_state_struct : %s",
+                                               replication_state_str);
+
+                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,6,
+                                               "set_l7vs_replication_info_struct : %s",
+                                               replication_info_str);
+
+                       for ( int i=0; i<replication_info.component_num; i++)
+                       {
+                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,7,
+                                                       "set_l7vs_replication_component_struct : %s",
+                                                       replication_component_str);
+                       }
+               }
+               // Debug log END
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,8,
+                                                       "out_function : int l7vs_replication_initialize(void)"
+                                                       "return = %d",ret);     
+               }
+               // Debug log END
+               return ret;
+
+SINGLE_END:
+               if ( -1 != internal_val.socket)
+               {
+                       close(internal_val.socket);
+                       internal_val.socket = -1;
+               }
+
+               if ( NULL != internal_val.address_info)
+               {
+                       freeaddrinfo(internal_val.address_info);
+                       internal_val.address_info = NULL;
+               }
+
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,3, "Initialized in %s mode.",
+                                       replication_mode[(int)replication_state.service_status]);
+
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+               {
+                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,9,
+                                               "set_l7vs_replication_state_struct : %s",
+                                               replication_state_str);
+
+                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,10,
+                                               "set_l7vs_replication_info_struct : %s",
+                                               replication_info_str);
+
+                       for ( int i=0; i<replication_info.component_num; i++)
+                       {
+                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,11,
+                                                       "set_l7vs_replication_component_struct : %s",
+                                                       replication_component_str);
+                       }
+               }
+                       
+               // Debug log END
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,12,
+                                                       "out_function : int l7vs_replication_initialize(void)"
+                                                       "return = %d",ret);     
+               }
+               // Debug log END
+
+               return ret;
+       
+}
+
+/*! Finalize Replication
+ */
+void l7vs_replication_fini()
+{
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,13,
+                                       "in_function : void l7vs_replication_fini(void)");
+       }
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+       {
+               char replication_state_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_state_c_str(replication_state_str,&replication_state);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,14,
+                                       "set_l7vs_replication_state_struct : %s",
+                                       replication_state_str);
+
+               char replication_info_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_info_c_str(replication_info_str,&replication_info);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,15,
+                                       "set_l7vs_replication_info_struct : %s",
+                                       replication_info_str);
+
+               for ( int i=0; i<replication_info.component_num; i++)
+               {
+                       char replication_component_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,16,
+                                               "set_l7vs_replication_component_struct : %s",
+                                               replication_component_str);
+               }
+       }
+       // Debug log END
+       // Socket finalaize
+       l7vs_replication_sock_fini();
+       // Release replication memory
+       l7vs_replication_release_replication_address();
+       // Release component memory
+       l7vs_replication_release_components_address();
+       // Release sarface block memory
+       l7vs_replication_release_surface_info_address();
+
+       // reset of replication_state
+       replication_state.send_time = 0;
+       replication_state.last_send_block = 0;
+       replication_state.last_recv_block = 0;
+       replication_state.total_block = 0;
+       replication_state.sarface_block_no = 0;
+
+       // reset of replication_info
+       memset(&replication_info, 0, sizeof(struct l7vs_replication_info));
+
+       // imoux
+       if ( NULL != l7vs_replication_iomux )
+       { 
+               l7vs_iomux_put_to_avail_list(l7vs_replication_iomux);
+               l7vs_replication_iomux = NULL;
+       }
+
+       // status change
+       replication_state.service_status = REPLICATION_OUT;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+       {
+               char replication_state_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_state_c_str(replication_state_str,&replication_state);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,17,
+                                       "set_l7vs_replication_state_struct : %s",
+                                       replication_state_str);
+
+               char replication_info_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_info_c_str(replication_info_str,&replication_info);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,18,
+                                       "set_l7vs_replication_info_struct : %s",
+                                       replication_info_str);
+
+               for ( int i=0; i<replication_info.component_num; i++)
+               {
+                       char replication_component_str[DEBUG_STR_LEN] = {0};
+                       l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,19,
+                                               "set_l7vs_replication_component_struct : %s",
+                                               replication_component_str);
+               }
+       }
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,20, "out_function : l7vs_replication_fini(void)");
+       }
+       // Debug log END
+
+}
+
+/*! Switch Slave to Master
+ */
+extern void l7vs_replication_switch_to_master()
+{
+       int ret = -1;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,21,
+                                               "extern void l7vs_replication_switch_to_master(void)");
+       }
+       // Debug log END
+
+       switch (replication_state.service_status){
+               case REPLICATION_SLAVE:
+                       // Set Mastre Mode
+                       ret = l7vs_replication_set_master();
+                       if ( 0 != ret )
+                       {
+                               replication_state.service_status = REPLICATION_SINGLE;
+
+                               if ( -1 != internal_val.socket)
+                               {
+                                       close(internal_val.socket);
+                                       internal_val.socket = -1;
+                               }
+                               if ( NULL != internal_val.address_info)
+                               {
+                                       freeaddrinfo(internal_val.address_info);
+                                       internal_val.address_info = NULL;
+                               }
+                               l7vs_replication_release_replication_address();
+                               l7vs_replication_release_components_address();
+                               l7vs_replication_release_surface_info_address();
+
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,54, "Switch to master NG. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_error;
+
+                               break;
+
+                       }else{
+
+                               // Copy from component area to replication area.
+                               memcpy(replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE);
+       
+                               // Set mode.
+                               replication_state.service_status = REPLICATION_MASTER;
+       
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_send_wait;
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,22,
+                                                                       "l7vs_replication_iomux->status :"
+                                                                       "befor : iomux_replication_recv_wait"
+                                                                       "after : iomux_replication_send_wait");
+                               }
+                               // Debug log END
+       
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+                               {
+                                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,23,
+                                                               "set_l7vs_replication_state_struct : %s",
+                                                               replication_state_str);
+       
+                                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,24,
+                                                               "set_l7vs_replication_info_struct : %s",
+                                                               replication_info_str);
+       
+                                       for ( int i=0; i<replication_info.component_num; i++)
+                                       {
+                                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,25,
+                                                                       "set_l7vs_replication_component_struct : %s",
+                                                                       replication_component_str);
+                                       }
+                               }
+                               // Debug log END
+
+                               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,5, "Switch to master OK. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               break;
+                       }
+               case REPLICATION_SLAVE_STOP:
+                       // Set Mastre Mode
+                       ret = l7vs_replication_set_master();
+                       if ( 0 != ret )
+                       {
+                               replication_state.service_status = REPLICATION_SINGLE;
+
+                               if ( -1 != internal_val.socket)
+                               {
+                                       close(internal_val.socket);
+                                       internal_val.socket = -1;
+                               }
+                               if ( NULL != internal_val.address_info)
+                               {
+                                       freeaddrinfo(internal_val.address_info);
+                                       internal_val.address_info = NULL;
+                               }
+                               l7vs_replication_release_replication_address();
+                               l7vs_replication_release_components_address();
+                               l7vs_replication_release_surface_info_address();
+
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,53, "Switch to master NG. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_error;
+
+                               break;
+                       }else{
+
+                               // Copy from component area to replication area.
+                               memcpy(replication_state.replication_memory, replication_state.component_memory, replication_state.total_block*DATA_SIZE);
+
+                               // Set mode.
+                               replication_state.service_status = REPLICATION_MASTER_STOP;
+       
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_send_stop;
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,26,
+                                                                       "l7vs_replication_iomux->status :"
+                                                                       "befor : iomux_replication_recv_stop)"
+                                                                       "after : iomux_replication_send_stop");
+                               }
+                               // Debug log END
+       
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+                               {
+                                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,27,
+                                                               "set_l7vs_replication_state_struct : %s",
+                                                               replication_state_str);
+       
+                                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,28,
+                                                               "set_l7vs_replication_info_struct : %s",
+                                                               replication_info_str);
+       
+                                       for ( int i=0; i<replication_info.component_num; i++)
+                                       {
+                                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,29,
+                                                                       "set_l7vs_replication_component_struct : %s",
+                                                                       replication_component_str);
+                                       }
+                               }
+                               // Debug log END
+       
+                               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,7, "Switch to master OK. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               break;
+                       }
+               case REPLICATION_SINGLE:
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,42,"Starting by %s, doesn't shift to MASTER. ",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               default:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,2, "Can not switch to master. mode : %s",
+                                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,30, "extern void l7vs_replication_switch_to_master(void)");
+       }
+}
+
+/*! Set Master mode
+*/
+static int l7vs_replication_set_master()
+{
+       int sock_ret = -1;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,31, "in_function : static int l7vs_replication_set_master(void)");
+       }       
+       // Debug log END
+
+       if ( REPLICATION_SLAVE != replication_state.service_status &&
+                                                REPLICATION_SLAVE_STOP != replication_state.service_status )
+       {
+               // Status Set
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,3, "Can not set to master. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,32,
+                                               "out_function : static int l7vs_replication_set_master(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // close socket and delete l7vs_iomux
+       l7vs_replication_sock_fini();
+
+       // make send socket
+       sock_ret = l7vs_replication_send_sock_init();
+       if ( -1 == sock_ret )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,11, "Failed in the initialization of the send socket.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,33,
+                                               "out_function : static int l7vs_replication_set_master(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // set of send socket : struct l7vs_iomux l7vs_replication_iomux
+       // fd
+       l7vs_replication_iomux->fd = internal_val.socket;
+       // callback
+       l7vs_replication_iomux->callback = l7vs_replication_send_callback;
+       // status
+       l7vs_replication_iomux->status = iomux_replication_out;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,34,
+                                               "l7vs_replication_iomux->status :"
+                                               "befor : Any execution mode"
+                                               "after : iomux_replication_out");
+       }
+       // Debug log END
+
+       // add : struct l7vs_iomux l7vs_replication_iomux
+       l7vs_iomux_add(l7vs_replication_iomux, iom_write);
+
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,8,"Initialization of send socket is success.");
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,35,
+                                       "out_function : static int l7vs_replication_set_master(void)"
+                                       "return = 0");
+       }
+       // Debug log END
+
+       return 0;
+
+}
+
+/*! Switch Master to Slave
+ */
+extern void l7vs_replication_switch_to_slave()
+{
+       int ret = -1;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,36,
+                                       "in_function : extern void l7vs_replication_switch_to_slave(void)");
+       }
+       // Debug log END
+
+       switch (replication_state.service_status){
+               case REPLICATION_MASTER:
+                       // Set Mastre Mode
+                       ret = l7vs_replication_set_slave();
+                       if ( 0 != ret )
+                       {
+                               replication_state.service_status = REPLICATION_SINGLE;
+
+                               if ( -1 != internal_val.socket)
+                               {
+                                       close(internal_val.socket);
+                                       internal_val.socket = -1;
+                               }
+                               if ( NULL != internal_val.address_info)
+                               {
+                                       freeaddrinfo(internal_val.address_info);
+                                       internal_val.address_info = NULL;
+                               }
+                               l7vs_replication_release_replication_address();
+                               l7vs_replication_release_components_address();
+                               l7vs_replication_release_surface_info_address();
+
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,55, "Switch to slave NG. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_error;
+
+                               break;
+                       }else{
+
+                               // initialize to replication area.
+                               memset(replication_state.replication_memory, 0, replication_state.total_block*DATA_SIZE);
+       
+                               // Set mode.
+                               replication_state.service_status = REPLICATION_SLAVE;
+       
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_recv_wait;
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,37,
+                                                                       "l7vs_replication_iomux->status :"
+                                                                       "befor : iomux_replication_send_wait"
+                                                                       "after : iomux_replication_recv_wait");
+                               }
+                               // Debug log END
+               
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+                               {
+                                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,38,
+                                                               "set_l7vs_replication_state_struct : %s",
+                                                               replication_state_str);
+       
+                                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,39,
+                                                               "set_l7vs_replication_info_struct : %s",
+                                                               replication_info_str);
+       
+                                       for ( int i=0; i<replication_info.component_num; i++)
+                                       {
+                                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,40,
+                                                                       "set_l7vs_replication_component_struct : %s",
+                                                                       replication_component_str);
+                                       }
+                               }
+                               // Debug log END
+       
+                               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,10, "Switch to slave OK. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               break;
+                       }
+               case REPLICATION_MASTER_STOP:
+                       // Set Mastre Mode
+                       ret = l7vs_replication_set_slave();
+                       if ( 0 != ret )
+                       {
+                               replication_state.service_status = REPLICATION_SINGLE;
+
+                               if ( -1 != internal_val.socket)
+                               {
+                                       close(internal_val.socket);
+                                       internal_val.socket = -1;
+                               }
+                               if ( NULL != internal_val.address_info)
+                               {
+                                       freeaddrinfo(internal_val.address_info);
+                                       internal_val.address_info = NULL;
+                               }
+                               l7vs_replication_release_replication_address();
+                               l7vs_replication_release_components_address();
+                               l7vs_replication_release_surface_info_address();
+
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,56, "Switch to slave NG. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_error;
+
+                               break;
+                       }else{
+
+                               // initialize to replication area.
+                               memset(replication_state.replication_memory, 0, replication_state.total_block*DATA_SIZE);
+       
+                               // Set mode.
+                               replication_state.service_status = REPLICATION_SLAVE_STOP;
+       
+                               // change iomux status
+                               l7vs_replication_iomux->status = iomux_replication_recv_stop;
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,41,
+                                                                       "l7vs_replication_iomux->status :"
+                                                                       "befor : iomux_replication_send_stop"
+                                                                       "after : iomux_replication_recv_stop");
+                               }
+                               // Debug log END
+       
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+                               {
+                                       char replication_state_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_state_c_str(replication_state_str,&replication_state);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,42,
+                                                               "set_l7vs_replication_state_struct : %s",
+                                                               replication_state_str);
+       
+                                       char replication_info_str[DEBUG_STR_LEN] = {0};
+                                       l7vs_replication_info_c_str(replication_info_str,&replication_info);
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,43,
+                                                               "set_l7vs_replication_info_struct : %s",
+                                                               replication_info_str);
+       
+                                       for ( int i=0; i<replication_info.component_num; i++)
+                                       {
+                                               char replication_component_str[DEBUG_STR_LEN] = {0};
+                                               l7vs_replication_component_c_str(replication_component_str,replication_info.component_info,i);
+                                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,44,
+                                                                       "set_l7vs_replication_component_struct : %s",
+                                                                       replication_component_str);
+                                       }
+                               }
+                               // Debug log END
+       
+                               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,12, "Switch to slave OK. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+                               break;
+                       }
+               case REPLICATION_SINGLE:
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,13, "Starting by %s , doesn't shift to SLAVE .",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               default:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,4, "Can not switch to slave. mode : %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,45, "out_function : extern void l7vs_replication_switch_to_slave(void)");
+       }
+       // Debug log END
+}      
+
+/*! Set Slave mode
+*/
+static int l7vs_replication_set_slave()
+{
+       int sock_ret = -1;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,46, "int_function : static int l7vs_replication_set_slave(void)");
+       }
+       // Debug log END
+       
+
+       if ( REPLICATION_MASTER != replication_state.service_status &&
+                               REPLICATION_MASTER_STOP != replication_state.service_status &&
+                                               REPLICATION_OUT != replication_state.service_status )
+       {
+               // Status Set
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,5, "Can not set to slave. mode : %s",
+                                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,47,
+                                               "out_function : static int l7vs_replication_set_slave(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+
+               return -1;
+       }
+
+       // close socket and delete l7vs_iomux
+       l7vs_replication_sock_fini();
+       // make send socket
+       sock_ret = l7vs_replication_recv_sock_init();
+       if ( -1 == sock_ret )
+       {
+               // Status Set
+               replication_state.service_status = REPLICATION_SINGLE;
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,12, "Failed in the initialization of the recv socket.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,48,
+                                               "out_function : static int l7vs_replication_set_slave(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // set of send socket : struct l7vs_iomux l7vs_replication_iomux
+       // fd
+       l7vs_replication_iomux->fd = internal_val.socket;
+       // callback
+       l7vs_replication_iomux->callback = l7vs_replication_recv_callback;
+       // status
+       l7vs_replication_iomux->status = iomux_replication_out;
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,49,
+                                                               "l7vs_replication_iomux->status : iomux_replication_out");
+                       }
+                       // Debug log END
+       // add : struct l7vs_iomux l7vs_replication_iomux
+       l7vs_iomux_add(l7vs_replication_iomux, iom_read);
+
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,14,"Initialization of receive socket is success.");
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,50,
+                               "out_function : static int l7vs_replication_set_slave(void)"
+                               "return = 0");
+       }
+       // Debug log END
+       return 0;
+
+}
+
+/*! Pay replication memory 
+ *
+ * @param component_id is the one to identify the component.
+ * @param size of component use blocks
+ * 
+ * @return Replication memory address
+ * @retval nonnull Replication memory address
+ * @retval NULL Error
+ */
+extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size )
+{
+       char demand_id[ID_LENGTH];
+       void *ret = NULL;
+       int cmp_ret = -1;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,51,
+                                       "extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                                       "component_id = %p"
+                                       "size = %p",
+                                       component_id,
+                                       size);
+       }
+       // Debug log END
+
+
+       // argument is illegal
+       if ( NULL == component_id || NULL == size)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,13, "Argument illegal. Component id or component size is NULL. ");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,52,
+                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                       "return = NULL");
+               }       
+               // Debug log END
+               return NULL;
+       }
+       *size = 0;
+       // Check replication mode.
+       if ( REPLICATION_OUT == replication_state.service_status || 
+                                               REPLICATION_SINGLE == replication_state.service_status) 
+       {
+               // Check mode that can use the replication.
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,15, 
+                                       "Improper mode for Replication. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,53,
+                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                       "return = NULL");
+               }       
+               // Debug log END
+               return NULL;
+       }
+
+       if ( NULL == replication_state.component_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,33, 
+                                               "You can't get memory. Component memory is NULL. ");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,54,
+                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                       "return = NULL");
+               }       
+               // Debug log END
+               return NULL;
+       }
+
+       // memory initialize
+       memset( demand_id, 0, ID_LENGTH );
+
+       // get Demand ID
+       strncpy( demand_id, component_id, ID_LENGTH );
+
+       // search Component ID
+       for ( int i = 0; i < replication_info.component_num; i++ )
+       {
+               // Demand ID is compared with Component ID
+               cmp_ret = strncmp(demand_id, replication_info.component_info[i].id, ID_LENGTH);
+               if ( 0 == cmp_ret )
+               {
+
+                       // size check
+                       if ( 0 == replication_info.component_info[i].block_size )
+                       {
+                               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,16, "Component block size is 0.");
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,191,
+                                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                                       "return = NULL");
+                               }       
+                               // Debug log END
+                               return NULL;
+                       }
+
+                       // block_head check
+                       if ( replication_info.component_info[i].block_head < 0 || 
+                               replication_info.component_info[i].block_head > replication_state.total_block)
+                       {
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,14, 
+                                       "Too many component block. Max is %d . ",replication_state.total_block);
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,55,
+                                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                                       "return = NULL");
+                               }       
+                               // Debug log END
+                               return NULL;
+                       }
+                       // Pay memory address
+                       ret = (char *)replication_state.component_memory 
+                                       + replication_info.component_info[i].block_head * DATA_SIZE;
+                       // Nnumber of blocks of ID was returned. 
+                       *size = replication_info.component_info[i].block_size;
+
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,56,
+                                       "size data : %u",replication_info.component_info[i].block_size);
+                       }
+                       // Debug log END
+
+                       // LOG INFO
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,16, 
+                                       "Component Info ID : \"%s\". Block size : %d . Head Block No : %d/  Pay memory : %p ",
+                                       replication_info.component_info[i].id, 
+                                       replication_info.component_info[i].block_size,
+                                       replication_info.component_info[i].block_head,
+                                       (char *)ret);
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,57,
+                                       "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+                                       "return = %p",
+                                       ret);
+                       }       
+                       // Debug log END
+                       return ret;
+               }
+       }
+       LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,15, 
+                                       "Unknown component ID. Component ID : %s",demand_id);
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,58,
+               "out_function : extern void *l7vs_replication_pay_memory( char* component_id, unsigned int* size)"
+               "return = NULL");
+       }       
+               // Debug log END
+       return NULL;
+}
+
+
+
+/*! Replication Callback
+ *
+ * @param sturuct l7vs_iomux *iom
+ * 
+ * @return 0/1
+ *
+ */
+extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )
+{
+       struct l7vs_replication_data replication_data;
+       int send_ret = -1;
+
+       // Debug log
+//     if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+//             LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,59,
+//                                     "in_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+//                                     "iomux = %p",iom);
+//     }
+       // Debug log END
+
+       // change to iom_write
+       l7vs_iomux_mod(iom, iom_write);
+
+       // Check by continuous initialize.
+       if ( REPLICATION_MASTER != replication_state.service_status &&
+               REPLICATION_MASTER_STOP != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,16,
+                                       "Can not send_callback. Mode is difficult.  mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,60,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }else if ( REPLICATION_MASTER_STOP == replication_state.service_status ) {
+               // Debug log
+//             if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+//                     LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,61,
+//                                             "Can not send Replication data, because mode is MASTER_STOP..");
+//                     LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,62,
+//                                             "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+//                                             "return = 0" );
+//             }
+               // Debug log END
+
+               return 0;
+       }
+
+       // iomux is NULL
+       if ( (void *)NULL ==iom )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,34, "Send Argument(struct iomux) is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,63,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Replication memory is NULL
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,35, "Replication memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,64,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Component memory is NULL
+       if ( NULL == replication_state.component_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,36, "Component memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,65,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // 
+       if ( 0 != l7vs_replication_checkinterval() )
+       {
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_MEMORY,1, "Send data wait ...." );
+               }
+               // Debug log END
+
+               return 0;
+       }
+
+       // Temporary preservation sturuct initialize
+       memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
+       send_ret = l7vs_replication_send_data(&replication_data);
+
+       // change iomux status
+       l7vs_replication_iomux->status = iomux_replication_send_wait;
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,66,
+                                       "l7vs_replication_iomux->status :"
+                                       "befor : iomux_replication_sending"
+                                       "after : iomux_replication_send_wait");
+       }
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char replication_data_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_data_c_str(replication_data_str,&replication_data);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,67,
+                                               "replication_data_struct : %s",
+                                               replication_data_str);
+       }
+       // Debug log END
+
+       if ( 0 != send_ret )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,3,
+                                       "Send data is Failed." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,68,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // set last send block number
+       if ( replication_state.last_send_block < replication_state.total_block-1 )
+       {
+               replication_state.last_send_block += 1;
+       }else if(replication_state.last_send_block == replication_state.total_block-1){
+               replication_state.last_send_block = 0;
+       }else{
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,17,
+                                       "Last send block number is illegal.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,69,
+                                               "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                               "return = -1" );
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // sarface block number is change
+       if(replication_state.total_block == replication_state.last_send_block + 1 )
+       {
+               // Synchronization is executed. 
+               memcpy(replication_state.replication_memory,
+                       replication_state.component_memory,
+                       replication_state.total_block*DATA_SIZE );
+
+               // serial initialize
+               replication_state.sarface_block_no = 0;
+
+               // make new serial
+               replication_state.sarface_block_no = (uint64_t)l7vs_replication_make_serial();
+               if ( 0 == replication_state.sarface_block_no )
+               {
+                       LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,18,
+                                               "Could not get serial number .");
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,70,
+                                                       "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                                       "return = -1" );
+                       }
+                       // Debug log END
+                       return -1;
+               }
+//             if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+//                     LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION, 0,
+//                                             "Copy Success from component memory to replication memory." );
+//             }
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,71,
+                                       "out_function : extern int l7vs_replication_send_callback( struct l7vs_iomux *iom )"
+                                       "return = 0" );
+       }
+       // Debug log END
+
+       return 0;
+}
+
+/*! Replication Callback
+ *
+ * @param sturuct l7vs_iomux *iom
+ * 
+ * @return 0/1
+ *
+ */
+extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )
+{
+       struct l7vs_replication_data replication_data;
+       int recv_ret = -1;
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,72, 
+                                       "in_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                       "iom = %p",iom);
+       }
+       // Debug log END
+
+       // change to iom_read
+       l7vs_iomux_mod(iom, iom_read);
+
+       // Check by continuous initialize.
+       if ( REPLICATION_SLAVE != replication_state.service_status &&
+               REPLICATION_SLAVE_STOP != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,19,
+                                       "Can not recv_callback. Mode is difficult.  mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,73, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }else if ( REPLICATION_SLAVE_STOP == replication_state.service_status ) {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,17,
+                                       "Can not receive Replication data, because mode is SLAVE_STOP.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,74, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }
+
+       // iomux is NULL
+       if ( (void *)NULL ==iom )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,37, "Recv Argument(struct iomux) is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,75, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Replication memory is NULL
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,38, "Replication memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,76, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Component memory is NULL
+       if ( NULL == replication_state.component_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,39, "Component memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,77, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Sarface block array memory is NULL
+       if ( NULL == replication_state.sarface_block_array_ptr)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,20, "sarface block array pointer is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,78, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Temporary preservation sturuct initialize
+       memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
+       recv_ret = l7vs_replication_recv_data(&replication_data);
+
+       // change iomux status
+       l7vs_replication_iomux->status = iomux_replication_recv_wait;
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,79,
+                                       "l7vs_replication_iomux->status :"
+                                       "befor : iomux_replication_receving"
+                                       "after : iomux_replication_recv_wait");
+       }
+       // Debug log END
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char replication_data_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_data_c_str(replication_data_str,&replication_data);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,80,
+                                               "replication_data_struct : %s",
+                                               replication_data_str);
+       }
+       // Debug log END
+
+       if ( 0 != recv_ret )
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,3,
+                                       "Failed in the reception processing of data because of illegal receive data." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,81, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // set sarface block
+       replication_state.sarface_block_array_ptr[replication_data.block_num] = replication_data.serial;
+
+       // set last send block number
+       if ( replication_state.last_recv_block < replication_state.total_block-1 )
+       {
+               replication_state.last_recv_block += 1;
+       }else if(replication_state.last_recv_block == replication_state.total_block-1){
+               replication_state.last_recv_block = 0;
+       }else{
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,21,
+                                       "Last send block number is illegal.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,83, 
+                                               "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,84, 
+                                       "out_function : extern int l7vs_replication_recv_callback( struct l7vs_iomux *iom )"
+                                       "return = 0");
+       }
+       // Debug log END
+       return 0;
+
+       
+}
+
+/*! Replication Dump
+ *
+ */
+extern void l7vs_replication_dump_memory()
+{
+       int size;
+       char *p;
+       char *head;
+       int h = 0;
+       int i = 0;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,85, "in_function : extern void l7vs_replication_dump_memory(void)");
+       }
+       // Debug log END
+
+       if ( ( REPLICATION_SINGLE == replication_state.service_status ) || 
+                               ( REPLICATION_OUT == replication_state.service_status ) )
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,6, 
+                               "Replication memory dump failure. mode : %s",
+                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,86, "out_function : extern void l7vs_replication_dump_memory(void)");
+               }
+               // Debug log END
+               return;
+       }
+
+       // Replication memory is NULL.
+       if ( NULL == replication_state.replication_memory)
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,1, 
+                               "Replication memory is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,87, "out_function : extern void l7vs_replication_dump_memory(void)");
+               }
+               // Debug log END
+               return;
+       }
+       
+       // Dump size
+       size = 480 * replication_state.total_block;
+
+       if ( 0 == size )
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,7, 
+                               "Can not get Replication memory");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,88, "out_function : extern void l7vs_replication_dump_memory(void)");
+               }
+               // Debug log END
+               return;
+               
+       }
+
+       // Memory Dump
+       p = (char *)replication_state.replication_memory;
+
+       // Output mode
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,18,"Replication Dump Start ----------------------------");
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,19,"Mode is [ %s ].",
+                                       replication_mode[(int)replication_state.service_status]);
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,20,"Total Block is [ %u ]",
+                                       replication_state.total_block);
+
+       // Converts into the binary, and writes it to the file. 
+       for ( h = 0; h < size / DATA_SIZE ; h++ )
+       {
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,21,"Block Number [ %d ]",h);
+       
+               for ( i = 0; i < DATA_SIZE / LOG_DATA_WIDTH ; i++ )
+               {
+                       head = p + h*DATA_SIZE + i*LOG_DATA_WIDTH;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,22,
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX  "
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX"
+                                               , *head, *(head+1), *(head+2), *(head+3)
+                                               , *(head+4), *(head+5), *(head+6), *(head+7)
+                                               , *(head+8), *(head+9), *(head+10), *(head+11)
+                                               , *(head+12), *(head+13), *(head+14), *(head+15));
+
+               }
+       }
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,23,"Replication Dump End ------------------------------");
+
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+
+               char    *q;
+               char    *head_debug;
+               int     j=0;
+               int     k=0;
+
+               // Component Memory Dump
+               q = (char *)replication_state.component_memory;
+
+               // Output mode
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,89,"Component Dump Satrt ----------------------------");
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,90,"Mode is [ %s ].",
+                                               replication_mode[(int)replication_state.service_status]);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,91,"Total Block is [ %u ]",
+                                               replication_state.total_block);
+       
+               // Converts into the binary, and writes it to the file. 
+               for ( j = 0; j < size / DATA_SIZE ; j++ )
+               {
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,92,"Block Number [ %d ]",j);
+               
+                       for ( k = 0; k < DATA_SIZE / LOG_DATA_WIDTH ; k++ )
+                       {
+                               head_debug = q + j*DATA_SIZE + k*LOG_DATA_WIDTH;
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,93,
+                                                       "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX  "
+                                                       "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX"
+                                                       , *head_debug, *(head_debug+1), *(head_debug+2), *(head_debug+3)
+                                                       , *(head_debug+4), *(head_debug+5), *(head_debug+6), *(head_debug+7)
+                                                       , *(head_debug+8), *(head_debug+9), *(head_debug+10), *(head_debug+11)
+                                                       , *(head_debug+12), *(head_debug+13), *(head_debug+14), *(head_debug+15));
+       
+                       }
+               }
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,94,"Component Dump End ------------------------------");
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,95, "out_function : extern void l7vs_replication_dump_memory(void)");
+       }
+       // Debug log END
+       return;
+}
+
+
+/*! Chenge Status isActive
+ */
+extern void l7vs_replication_start()
+{
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,96, "in_function : extern void l7vs_replication_start(void)");
+       }
+       // Debug log END
+
+       switch (replication_state.service_status){
+               case REPLICATION_MASTER_STOP:
+                       replication_state.service_status = REPLICATION_MASTER;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,24, "Replication start. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_SLAVE_STOP:
+                       replication_state.service_status = REPLICATION_SLAVE;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,25, "Replication start. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_MASTER:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,8, "Could not MASTER start, because already start. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_SLAVE:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,9, "Could not SALVE start, because already start. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               default:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,10, "Could not start, because  mode is %s.",
+                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,97, "out_function : extern void l7vs_replication_start(void)");
+       }
+       // Debug log END
+                       
+}
+
+/*! Chenge Status isStop
+ */
+extern void l7vs_replication_stop()
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,98, "in_function : extern void l7vs_replication_start(void)");
+       }
+       // Debug log END
+       switch (replication_state.service_status){
+               case REPLICATION_MASTER:
+                       replication_state.service_status = REPLICATION_MASTER_STOP;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,26, "Replication stop. mode : %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_SLAVE:
+                       replication_state.service_status = REPLICATION_SLAVE_STOP;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,27, "Replication stop. mode : %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_MASTER_STOP:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,11, "Could not MASTER stop, because already stop. mode : %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               case REPLICATION_SLAVE_STOP:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,12, "Could not SLAVE stop, because already stop. mode : %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+               default:
+                       LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,17, "Could not stop, because  mode is %s",
+                                                       replication_mode[(int)replication_state.service_status]);
+                       break;
+
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,99, "out_function : extern void l7vs_replication_start(void)");
+       }
+       // Debug log END
+}
+
+/*! Compulsion reproduction execution
+ */
+extern void l7vs_replication_compulsorily()
+{
+       struct  l7vs_replication_data replication_data;
+       int     send_ret = -1;
+       int     interval_ret = -1;
+       int     ms_time = 0;
+       struct timespec time;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,100, "in_function : extern void l7vs_replication_compulsorily(void)");
+       }
+       // Debug log END
+
+       // Check by continuous initialize.
+       if ( REPLICATION_MASTER != replication_state.service_status &&
+               REPLICATION_MASTER_STOP != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,23,
+                                       "Could not compulsion replication. Mode is different. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,101, "out_function : extern void l7vs_replication_compulsorily(void)");
+               }
+               // Debug log END
+               return;
+       }else if ( REPLICATION_MASTER_STOP == replication_state.service_status ) {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,28,
+                                       "Can not replication compulsorily, because mode is %s .",
+                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,102, "out_function : extern void l7vs_replication_compulsorily(void)");
+               }
+               // Debug log END
+               return;
+       }
+
+       // Replication memory is NULL
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,40, "Replication memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,103, "out_function : extern void l7vs_replication_compulsorily(void)");
+               }
+               // Debug log END
+               return;
+       }
+
+       // Component memory is NULL
+       if ( NULL == replication_state.component_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,41, "Component memory is NULL." );
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,104, "out_function : extern void l7vs_replication_compulsorily(void)");
+               }
+               // Debug log END
+               return;
+       }
+
+       // set send interval
+       time.tv_sec = 0;
+       time.tv_nsec = 0;
+       interval_ret = parameter_is_int_exist( PARAM_COMP_REPLICATION, "compulsorily_interval" );
+
+       if ( 0 == interval_ret )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION, 51, "Could not get interval value for replication compulsorily.");
+               return;
+       }
+
+       ms_time = parameter_get_int_value( PARAM_COMP_REPLICATION, "compulsorily_interval" );
+
+       if ( ms_time < MIN_COMPULSORILRY_INTERVAL || MAX_COMPULSORILRY_INTERVAL < ms_time )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION, 52, "Invalid compulsorily interval.");
+               return;
+       }
+
+       time.tv_nsec =  (long)( ms_time * 1000000 );
+
+       // set last send block is c maximum block
+       replication_state.last_send_block = replication_state.total_block-1;
+
+       for(unsigned int i = 0; i < replication_state.total_block; i++)
+       {
+               // set compulsorily interval.
+               nanosleep( &time, NULL);
+
+               // Temporary preservation sturuct initialize
+               memset( &replication_data, 0, sizeof(struct l7vs_replication_data) );
+               send_ret = l7vs_replication_send_data(&replication_data);
+
+               // change iomux status
+               l7vs_replication_iomux->status = iomux_replication_send_wait;
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,105,
+                                               "l7vs_replication_iomux->status :"
+                                               "befor : iomux_replication_sending"
+                                               "after : iomux_replication_send_wait");
+               }
+               // Debug log END
+
+               if ( 0 != send_ret )
+               {
+                       LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,5,
+                                               "Send data is Failed." );
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,106, "out_function : extern void l7vs_replication_compulsorily(void)");
+                       }
+                       // Debug log END
+                       return;
+               }
+
+               // set last send block number
+               if ( replication_state.last_send_block < replication_state.total_block-1 )
+               {
+                       replication_state.last_send_block += 1;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,29,
+                                               "Data sending succeeded. Send block number : %u Version : %llu"
+                                               ,replication_state.last_send_block
+                                               ,(unsigned long long)replication_state.sarface_block_no );
+               }else if(replication_state.last_send_block == replication_state.total_block-1){
+                       replication_state.last_send_block = 0;
+                       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,30,
+                                               "Data sending succeeded. Send block number : %u Version : %llu"
+                                               ,replication_state.last_send_block
+                                               ,(unsigned long long)replication_state.sarface_block_no );
+               }else{
+                       LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,24,
+                                               "Last send block number is illegal.");
+                       // Debug log
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,107, "out_function : extern void l7vs_replication_compulsorily(void)");
+                       }
+                       // Debug log END
+                       return;
+               }
+
+               // sarface block number is change
+               if(replication_state.total_block == replication_state.last_send_block + 1 )
+               {
+                       // Synchronization is executed. 
+                       memcpy(replication_state.replication_memory,
+                               replication_state.component_memory,
+                               replication_state.total_block*DATA_SIZE );
+
+                       // serial initialize
+                       replication_state.sarface_block_no = 0;
+
+                       // make new serial
+                       replication_state.sarface_block_no = (uint64_t)l7vs_replication_make_serial();
+                       if ( 0 == replication_state.sarface_block_no )
+                       {
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,25,
+                                                       "Could not get serial number.");
+                               // Debug log
+                               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,108, "out_function : extern void l7vs_replication_compulsorily(void)");
+                               }
+                               // Debug log END
+                               return;
+                       }
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,109,
+                                                       "Copy Success from component memory to replication memory." );
+                       }
+               }
+       }
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,31, "Replication compulsorily is success." );
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,110, "out_function : extern void l7vs_replication_compulsorily(void)");
+       }
+       // Debug log END
+       return;
+
+}
+
+/*! Interval Re-setting
+ */
+extern void l7vs_replication_reset()
+{
+       int ret;
+       unsigned short value = 0;
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,111, "in_function : extern void l7vs_replication_reset(void)");
+       }
+       // Debug log END
+
+       // Check Parameter exists
+       ret = parameter_is_int_exist(PARAM_COMP_REPLICATION,"interval");
+       if ( 0 == ret )
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,13, "Not chage re-setting value.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,112, "out_function : extern void l7vs_replication_reset(void)");
+               }
+               // Debug log END
+               return;
+       }
+
+       // Get interval
+       value =  parameter_get_int_value( PARAM_COMP_REPLICATION, "interval" );
+       
+       // Check interval
+       if ( value < MIN_INTERVAL || MAX_INTERVAL < value ){
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,14, "Invalid Interval value. value : %d",(int)value);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,113, "out_function : extern void l7vs_replication_reset(void)");
+               }
+               // Debug log END
+               return;
+       }
+       //set interval
+       replication_info.interval =  value;
+}
+
+/*! Get Status
+ *
+ * @return REPLICATION_MODE_TAG enumration
+ *
+ */
+extern enum REPLICATION_MODE_TAG l7vs_replication_get_status()
+{
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,114, "function : extern enum REPLICATION_MODE_TAG l7vs_replication_get_status(void)");
+       }
+       // Debug log END
+       return replication_state.service_status;
+};
+
+
+/*! Send Interval Check
+ *
+ * @return 0/-1
+ * @retval 0 Send data
+ * @retval -1 Not send data
+ */
+extern int l7vs_replication_checkinterval()
+{
+       struct timeval tv;
+       struct timezone tz;
+       unsigned long long sending_time = 0;
+       unsigned long long last_send_time = 0;
+       unsigned long long diff_time = 0;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,115, "in_function : extern int l7vs_replication_checkinterval(void)");
+       }
+       // Debug log END
+
+       // last time
+       last_send_time = replication_state.send_time;
+
+       // now time
+       gettimeofday(&tv,&tz);
+       sending_time = (unsigned long long)(tv.tv_sec*1000000+tv.tv_usec);
+
+
+       // Last send time is 0.
+       if ( 0 == last_send_time )
+       {
+               replication_state.send_time = sending_time;
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,32,
+                       " Last send time is 0. ");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,116,
+                                               "out_function : extern int l7vs_replication_checkinterval(void)"
+                                               "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }
+       //Last send time is illegal. 
+       if ( last_send_time > sending_time)
+       {
+               replication_state.send_time = sending_time;
+               LOGGER_PUT_LOG_ERROR (LOG_CAT_L7VSD_REPLICATION,26,
+                       " Last send time illegal. ");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,117,
+                                               "out_function : extern int l7vs_replication_checkinterval(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }       
+       // interval
+       diff_time = sending_time - last_send_time;
+       // exit
+
+       if ( diff_time >= replication_info.interval)
+       {
+               replication_state.send_time = sending_time;
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,118," Send time is arrived ");
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,119,
+                                               "out_function : extern int l7vs_replication_checkinterval(void)"
+                                               "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }else{
+
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,120," Send time is not arrived. ");
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,121,
+                                               "out_function : extern int l7vs_replication_checkinterval(void)"
+                                               "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+}
+
+/*! Parameter Check
+ *
+ * @return 0/-1
+ * @retval 0 Success
+ * @retval -1 Error 
+ */
+static int l7vs_replication_check_parameter()
+{
+       int ret = -1;
+       int info_ret = -1;
+       int cmp_ret = -1;
+       struct addrinfo hints;
+       size_t sum=0;
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,122,
+                                       "in_function : static int l7vs_replication_check_parameter(void)");
+       }
+       // Debug log END
+
+       // initialize structure
+       memset(&hints, 0, sizeof(struct addrinfo));
+
+
+       // set address hints
+       hints.ai_family = AF_UNSPEC;     // permit any protocol (IPv4, IPv6, etc.)
+       hints.ai_socktype = SOCK_DGRAM;  // UDP
+       // IP NULL check
+       if ( 0 == strcmp(replication_info.ip_addr, "") )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,27,"IP is unsetting.");
+               ret = -1;
+               goto END;
+       }
+       // Port NULL check
+       if ( 0 == strcmp(replication_info.service_name,"") )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,28,"Port is unsetting.");
+               ret = -1;
+               goto END;
+       }
+       // Whether IP and the port are effective is confirmed.
+       info_ret = getaddrinfo(replication_info.ip_addr,replication_info.service_name,&hints,&internal_val.address_info);
+       if ( 0 != info_ret )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,27, "Failed to get IP or Service Name.(%d)",ret);
+               ret = -1;
+               goto END;
+       }
+       struct sockaddr_in *sin;
+       sin = (sockaddr_in *)internal_val.address_info->ai_addr;
+       
+       // Port check
+       if ( sin->sin_port == htons(0)) 
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_REPLICATION,15, "You can't specify port number 0.")
+               ret = -1;
+               goto END;
+       }
+       // NIC check
+       if ( 0 == strcmp( replication_info.nic, "") )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,29,"NIC is unsetting.");
+               ret = -1;
+               goto END;
+       }
+       // Interval check
+       if ((MIN_INTERVAL>replication_info.interval) || (MAX_INTERVAL<replication_info.interval)) 
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,30,"Invalid Interval value");
+               ret = -1;
+               goto END;
+       }
+       // Components ID check
+       // Components Size check
+       if (0 == replication_info.component_num)
+       {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,33,"Can not get component, because component is 0.");
+               ret = 0;
+               goto END;
+       }
+       for ( int i=0; i < replication_info.component_num; i++ )
+       {
+               sum += replication_info.component_info[i].block_size ;
+               for ( int j=i+1; j<replication_info.component_num; j++)
+               {
+                       cmp_ret = strcmp(replication_info.component_info[j].id,replication_info.component_info[i].id);
+                       if (0 == cmp_ret)
+                       {
+                               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,31,
+                                               "Too many component block. Max is %d . ",replication_state.total_block);
+                               ret = -1;
+                               goto END;
+                       }
+               }
+       }
+       if ( sum > CMP_BLOCK_MAX )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,32,"Total component size is too large.");
+               ret = -1;
+               goto END;
+       }
+       ret = 0;
+END:
+       if ( NULL != internal_val.address_info )
+       {
+               freeaddrinfo(internal_val.address_info);
+               internal_val.address_info = NULL;
+       }
+
+       if ( 0 == ret )
+       {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,34,"Parameter Check OK.");
+       }else{
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,35,"Parameter Check NG.");
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,123,
+                                       "out_function : static int l7vs_replication_check_parameter(void)"
+                                       "return = %d",ret);
+       }
+       // Debug log END
+       return ret;
+};
+
+
+/*! Get Replication Memory
+ *
+ * @param total_block The entire block that the component uses. 
+ *
+ * @return memory Replication memory
+ * @retval memory memory get Success
+ * @retval NULL Error
+ *
+ */
+static void *l7vs_replication_get_replication_address()
+{
+       unsigned int total_block = replication_state.total_block;
+       void *memory = NULL;
+
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,124,
+                                       "in_function : static void *l7vs_replication_get_replication_address(void)");
+       }
+       // Debug log END
+
+       // Check by continuous initialize.
+       if ( REPLICATION_OUT != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,33, "Already got replication memory.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,125,
+                                               "out_function : static void *l7vs_replication_get_replication_address(void)"
+                                               "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+
+       // Check Total Block
+       if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
+       {
+               // Check Total Block
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,34, "Invalid total component blocks.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,126,
+                                               "out_function : static void *l7vs_replication_get_replication_address(void)"
+                                               "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       // Get replication memory
+       memory = malloc( total_block*DATA_SIZE );
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,40, "malloc : memory=%p: size=%d",memory,total_block*DATA_SIZE);
+       }
+       // Debug log END
+
+       // malloc Error
+       if ( (void *)NULL == memory )
+       {
+               LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,1,"Replication memory is Malloc Error.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,127,
+                                               "out_function : static void *l7vs_replication_get_replication_address(void)"
+                                               "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       memset(memory,0,total_block*DATA_SIZE);
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,128,
+                                       "out_function : static void *l7vs_replication_get_replication_address(void)"
+                                       "return = %p",memory);
+       }
+       // Debug log END
+       return memory;
+}
+
+
+/*! Get Component Memory
+ *
+ * @return memory Component memory
+ * @retval memory memory get Success
+ * @retval NULL Error
+ *
+ */
+static void *l7vs_replication_get_component_address()
+{
+       unsigned int total_block ;
+       void *memory = NULL ;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,129, "in_function : static void *l7vs_replication_get_component_address(void)");
+       }
+       // Debug log END
+
+       total_block = replication_state.total_block;
+       // Check by continuous initialize.
+       if ( REPLICATION_OUT != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,35, "Already got component memory.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,130, 
+                       "out_function : static void *l7vs_replication_get_component_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       // Check Total Block
+       if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
+       {
+               // Check Total Block
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,36, "Invalid total component blocks.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,131, 
+                       "out_function : static void *l7vs_replication_get_component_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       // Get component memory
+       memory = malloc( total_block*DATA_SIZE );
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,41, "malloc : memory=%p: size=%d",memory,total_block*DATA_SIZE);
+       }
+       // Debug log END
+
+       // malloc Error
+       if ( (void *)NULL == memory )
+       {
+               LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,2,"Component memory is Malloc Error.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,132, 
+                       "out_function : static void *l7vs_replication_get_component_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       memset(memory,0,total_block*DATA_SIZE);
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,133, 
+               "out_function : static void *l7vs_replication_get_component_address(void)"
+               "return = %p",memory);
+       }
+       // Debug log END
+       return memory;
+}
+
+
+/*! Get Sarface Number Memory 
+ *
+ * @return memory Component memory
+ * @retval memory memory get Success
+ * @retval NULL Error
+ *
+ */
+static uint64_t *l7vs_replication_get_surface_info_address()
+{
+       unsigned int total_block;
+       uint64_t *memory = NULL;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,134, 
+                               "in_function : static uint64_t *l7vs_replication_get_surface_info_address(void)");
+       }
+       // Debug log END
+       total_block = replication_state.total_block;
+       // Check by continuous initialize.
+       if ( REPLICATION_OUT != replication_state.service_status ) 
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,37, "Already got surface info memory.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,135, 
+                       "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       // Check Total Block
+       if ( 0 == total_block || total_block > CMP_BLOCK_MAX)
+       {
+               // Check Total Block
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,38, "Invalid total component blocks.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,136, 
+                       "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       // Get memory
+       memory = (uint64_t*)malloc( total_block*sizeof(uint64_t) );
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,42, "malloc : memory=%p: size=%lu",memory,total_block*sizeof(uint64_t));
+       }
+       // Debug log END
+
+       // malloc Error
+       if ( (uint64_t *)NULL == memory )
+       {
+               LOGGER_PUT_LOG_FATAL(LOG_CAT_L7VSD_SYSTEM_MEMORY,3,"Surface info address is Malloc Error.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,137, 
+                       "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
+                       "return = NULL");
+               }
+               // Debug log END
+               return NULL;
+       }
+       memset(memory,0,total_block*sizeof(uint64_t));
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,138, 
+               "out_function : static uint64_t *l7vs_replication_get_surface_info_address(void)"
+               "return = %p",memory);
+       }
+       // Debug log END
+       return memory;
+}
+
+/*! Initialize send network socket
+ *
+ * @param *fd file descriptor
+ * 
+ * @return 0/-1
+ *  @retval  0 Success
+ *  @retval -1 Error
+ */
+static int l7vs_replication_send_sock_init( )
+{
+       int info_ret;
+       int sockopt_ret;
+       int errsv;
+       int ret = -1;
+       struct addrinfo hints;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,139, 
+               "in_function : static int l7vs_replication_send_sock_init(void)");
+       }
+       // Debug log END
+
+       // Check by continuous initialize.
+       if ( REPLICATION_SINGLE == replication_state.service_status ||
+               REPLICATION_MASTER == replication_state.service_status ||
+               REPLICATION_MASTER_STOP == replication_state.service_status )
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,39,
+                                       "send-socket initialization has already been done. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               ret = -1;
+               goto END;
+       }
+       // initialize structure
+       memset(&hints, 0, sizeof(struct addrinfo));
+
+       // set address hints
+       hints.ai_family = AF_UNSPEC;     // permit any protocol (IPv4, IPv6, etc.)
+       hints.ai_socktype = SOCK_DGRAM;  // UDP
+       hints.ai_flags = AI_ALL; 
+
+       //------ Make send socket -------//
+       // Whether IP and the port are effective is confirmed.
+       info_ret = getaddrinfo(replication_info.ip_addr,
+                               replication_info.service_name,
+                               &hints,
+                               &internal_val.address_info);
+       if ( 0 != info_ret )
+        {
+                LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,40, "Failed to get IP or Port.");
+               ret = -1;
+               goto END;
+       }
+
+       internal_val.socket = socket( internal_val.address_info->ai_family,
+                                       internal_val.address_info->ai_socktype,
+                                       internal_val.address_info->ai_protocol );
+       // if cannot make a socket
+       if ( internal_val.socket < 3 ) 
+       {
+               errsv = errno;
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,28,
+                                       "Make send socket error : %s ai_family:%d ai_socktype:%d ai_protocol:%d",
+                                       strerror(errsv),internal_val.address_info->ai_family,
+                                       internal_val.address_info->ai_socktype,
+                                       internal_val.address_info->ai_protocol);
+               ret = -1;
+               goto END;
+       }
+       // set a NIC
+        sockopt_ret = setsockopt(internal_val.socket, SOL_SOCKET, SO_BINDTODEVICE,
+                                               replication_info.nic, strlen(replication_info.nic) + 1);
+       if ( -1 == sockopt_ret ) 
+       {
+               // get error no 
+               errsv = errno;
+               // cannot set a NIC.  Close a Socket.
+               close(internal_val.socket);
+               internal_val.socket = -1;
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,29,
+                                       "Fails in the option operation of send socket : %s File descriptor : %d NIC : %s",
+                                       strerror(errsv),internal_val.socket,replication_info.nic);
+               ret = -1;
+               goto END;
+       }
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_SOCKET,1,"send-socket is make success.");
+       ret = 0;
+END:
+
+       if ( 0 == ret )
+       {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,36,"send-soket initialization is  succeess.");
+       }else{
+               if ( -1 != internal_val.socket )        
+               {
+                       close(internal_val.socket);
+                       internal_val.socket = -1;
+               }
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,37,"send-soket initialization is failure.");
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,140, 
+               "out_function : static int l7vs_replication_send_sock_init(void)"
+               "ret = %d",ret);
+       }
+       // Debug log END
+       return ret;
+}
+
+
+/*! Initialize recv network socket
+ *
+ * @param *fd file descriptor
+ * 
+ * @return 0/-1
+ *  @retval  0 Success
+ *  @retval -1 Error
+ */
+static int l7vs_replication_recv_sock_init( )
+{
+       int     getip_ret;
+       int     bind_ret;
+       int     errsv;
+       int     ret = -1;
+       struct  servent         *servent_info;
+       
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,141, 
+               "in_function : static int l7vs_replication_recv_sock_init(void)");
+       }
+       // Debug log END
+
+       // Check by continuous initialize.
+       if ( REPLICATION_SINGLE == replication_state.service_status ||
+               REPLICATION_SLAVE == replication_state.service_status ||
+               REPLICATION_SLAVE_STOP == replication_state.service_status )
+       {
+               // Initialization has already been done.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,41,
+                                       "recv-socket initialization has already been done. mode : %s",
+                                       replication_mode[(int)replication_state.service_status]);
+               ret = -1;
+               goto END;
+       }
+
+       // get Name for NetworkDeviceName ( IPv4 or IPv6 )
+       // address info structs initialize
+       memset( &internal_val.addr, 0, sizeof(struct  addressinfo) );
+
+       // get ip address from nic
+       getip_ret = getNICAddressInfo(replication_info.nic, &addr);
+       if ( 0 == getip_ret )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,31,"You can not get IP address from nic.");
+               ret = -1;
+               goto END;
+       }
+
+
+       servent_info = getservbyname(replication_info.service_name,"udp");
+       if( !servent_info )
+       {
+               internal_val.addr.addr_in.sin_port = htons( atoi(replication_info.service_name ) );
+       }
+       else{
+               internal_val.addr.addr_in.sin_port = servent_info->s_port ;
+       }
+
+       if ( 0 == internal_val.addr.addr_in.sin_port )
+       {
+               LOGGER_PUT_LOG_ERROR( LOG_CAT_L7VSD_SYSTEM_SOCKET,32,"You can not get port address from %s.",replication_info.service_name );
+               ret = -1;
+               goto END;
+       }
+
+
+       //make recv socket
+       internal_val.socket = socket( PF_INET,
+                                       SOCK_DGRAM,
+                                       IPPROTO_UDP );
+
+       // if cannot make a socket
+       if ( internal_val.socket < 3 ) 
+       {
+               errsv = errno;
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,32,
+                                       "Make recv socket error : %s ai_family:%d ai_socktype:%d ai_protocol:%d",
+                                       strerror(errsv),
+                                       PF_INET,
+                                       SOCK_DGRAM,
+                                       IPPROTO_UDP);
+               ret = -1;
+               goto END;
+       }
+
+       bind_ret = bind(internal_val.socket,(sockaddr *)&internal_val.addr.addr_in, sizeof(internal_val.addr.addr_in));
+
+       // get error no 
+       errsv = errno;
+       // Error
+       if ( bind_ret != 0 )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,33,
+                                        "Bind error : %s File descriptor : %d ai_addrlen : %d",
+                                       strerror(errsv),
+                                       internal_val.socket,
+                                       (int)sizeof(struct sockaddr));
+               //! Close a Socket.
+               ret = -1;
+               goto END;
+       }
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_SYSTEM_SOCKET,2,"recv-socket is make success.");
+       ret = 0;
+END:
+
+       if ( 0 == ret )
+       {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,38,"recv-socket initialization is  succeess.");
+       }else{
+               if ( -1 != internal_val.socket )        
+               {
+                       close(internal_val.socket);
+                       internal_val.socket = -1;
+               }
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,39,"recv-socket initialization is failure..");
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,142, 
+               "out_function : static int l7vs_replication_recv_sock_init(void)"
+               "ret = %d",ret);
+       }
+       // Debug log END
+       return ret;
+}
+
+/*! Finalize network socket
+ */
+static void l7vs_replication_sock_fini()
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,143, 
+               "in_function : static void l7vs_replication_sock_fini(void)");
+       }
+       // Debug log END
+
+       // close a send socket.
+       if ( -1 != internal_val.socket )
+       {
+               close(internal_val.socket);
+               internal_val.socket = -1;
+       }
+       // free address info
+       if ( NULL != internal_val.address_info)
+       {
+               freeaddrinfo(internal_val.address_info);
+               internal_val.address_info = NULL;
+       }
+
+       LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,40, "Socket(send-socket,recv-socket) is finalize.");
+
+       if ( NULL != l7vs_replication_iomux) 
+       {
+               // replication fini     
+               l7vs_replication_iomux->status = iomux_replication_destroy;
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,144,
+                                               "l7vs_replication_iomux->status : iomux_replication_destroy");
+               }
+               // Debug log END
+
+               // delete l7vs_iomux
+               if ( -1 != l7vs_replication_iomux->fd ) {
+                       l7vs_iomux_remove(l7vs_replication_iomux);
+                       l7vs_replication_iomux->fd = -1;
+               }
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,145, 
+               "out_function : static void l7vs_replication_sock_fini(void)");
+       }
+       // Debug log END
+       return;
+}
+
+/*! Make serial number
+ *
+ *  @return Serial number
+ *  @retval nonzero Serial number
+ *  @retval 0 Error
+ */
+static unsigned long long l7vs_replication_make_serial()
+{
+       unsigned long long int serial_num;
+       struct timespec current_time;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,146, 
+               "in_function : static void l7vs_replication_sock_fini(void)");
+       }
+       // Debug log END
+
+       // get time by clock_gettime
+       if ( clock_gettime(CLOCK_REALTIME, &current_time) == -1 )
+       {
+               // failre.
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,6, "You failed to get of time.");
+               serial_num = 0;
+       } else {
+               // make a serial succeeds.
+               serial_num = (unsigned long long int) current_time.tv_sec * 1000000 +
+                                       (unsigned long long int) current_time.tv_nsec / 1000;
+       }
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,147, 
+               "in_function : static void l7vs_replication_sock_fini(void)"
+               "return = %llu",serial_num);
+       }
+       // Debug log END
+
+        return serial_num;
+}
+
+/*! Send transfer data to standby server
+ *
+ *  @param data Points to input data from external program. This will be send to standby server.
+ *
+ *  @return 0/-1
+ *  @retval 0 Success
+ *  @retval -1 Error
+ */
+static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)
+{
+       char *send_memory;
+       int send_byte;
+       int errsv;
+       struct l7vs_replication_data send_data;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,148, 
+               "in_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+               "replication_data = %p",replication_data);
+       }
+       // Debug log END
+
+
+       // Check Argument is NULL. 
+       if ( NULL == replication_data )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,42, "Argument is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,149, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }       
+
+       // mode check 
+       if ( REPLICATION_MASTER != replication_state.service_status)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,43, "Can not send replication data. Mode is difficult.  mode : %s",
+                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,150, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+       // Check to replication memory is not  NULL
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,42, "Replication memory is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,151, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Check to iomux memory is not NULL
+       if ( NULL == l7vs_replication_iomux)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,43, "Initialize is not yet. Iomux is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,152, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // internal_val.address_info is NULL
+       if ( NULL == internal_val.address_info)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,44, "Initialize is not yet. address info is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,153, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+
+       // make replication data struct
+       //initialize
+       memset(replication_data, 0, sizeof(struct l7vs_replication_data));
+       // Set replication id
+       replication_data->id = REPLICATION_ID;
+       // set block_num (replication_state.last_send_block + 1) and Range check of memory
+       if ( replication_state.last_send_block < replication_state.total_block -1)
+       {
+               replication_data->block_num = replication_state.last_send_block + 1;
+       } else if ( replication_state.last_send_block == replication_state.total_block -1){
+               replication_data->block_num = 0;
+       }else{
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,44, "Recv block number is too large.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,154, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+               
+       // set serial
+       replication_data->serial = replication_state.sarface_block_no;
+       if ( 0 == replication_data->serial && 0 == replication_data->block_num)
+       {
+               LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_REPLICATION,41, "Serial number is 0, first send processing. ");
+       }
+
+       // set data size (sizeof(replication_data))
+       replication_data->size = sizeof(struct l7vs_replication_data);
+
+       if ( replication_data->size > SEND_DATA_SIZE)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,45, "Recv block data size is too large.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,155, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // change iomux status
+       l7vs_replication_iomux->status = iomux_replication_sending;
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,156,
+                                       "l7vs_replication_iomux->status :"
+                                       "befor : iomux_replication_send_wait"
+                                       "after : iomux_replication_sending");
+       }
+       // Debug log END
+
+       // set send data
+       memset(&send_data,0,sizeof(struct l7vs_replication_data));
+       // change to network byteorder
+       send_data.id = htons(replication_data->id);
+       send_data.serial = replication_data->serial;
+       send_data.block_num = htonl(replication_data->block_num);
+       send_data.size = (uint64_t)replication_data->size;
+
+       // set replication data (1 block)
+       send_memory = (char *)replication_state.replication_memory + DATA_SIZE*replication_data->block_num;
+       memcpy( &send_data.data, send_memory, DATA_SIZE );
+
+       // send to data
+       send_byte = sendto(internal_val.socket, &send_data, (int)replication_data->size, 0,
+                                       internal_val.address_info->ai_addr, internal_val.address_info->ai_addrlen);
+       errsv = errno;  
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char replication_data_str[DEBUG_STR_LEN] = {0};
+               l7vs_replication_data_c_str(replication_data_str,replication_data);
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,157,
+                                               "replication_data_struct : %s",
+                                               replication_data_str);
+       }
+
+       // Debug log END
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+       {
+               char    *head;
+               int     h=0;
+
+               for ( h = 0; h < (DATA_SIZE / LOG_DATA_WIDTH) ; h++ )
+               {
+                       head = (char *)&send_data.data + h*LOG_DATA_WIDTH;
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,158,
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX  "
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX"
+                                               , *head, *(head+1), *(head+2), *(head+3)
+                                               , *(head+4), *(head+5), *(head+6), *(head+7)
+                                               , *(head+8), *(head+9), *(head+10), *(head+11)
+                                               , *(head+12), *(head+13), *(head+14), *(head+15));
+               }
+       }
+       // Debug log END
+       if (-1 ==  send_byte)   
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM,7, 
+                                       "Data send error : %s  fd : %d size : %d ai_addr : %p addrlen : %d",
+                                       strerror(errsv),
+                                       internal_val.socket,
+                                       (int)replication_data->size,
+                                       internal_val.address_info->ai_addr,
+                                       internal_val.address_info->ai_addrlen);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,159, 
+                       "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,160,"Sent data is success. %d", send_byte); 
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,161, 
+               "out_function : static int l7vs_replication_send_data(struct l7vs_replication_data *replication_data)"
+               "return = 0");
+       }
+       // Debug log END
+        return 0;
+}
+/*! Receive transfer data from active server
+ *
+ *  @param  recv_data Points to output data from external program.
+ *
+ *  @return 0/-1 
+ *  @retval 0 Success
+ *  @retval -1 Error
+ */
+static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)
+{
+       char    *recv_memory;
+       int     recv_byte;
+       int     errsv = 0;
+       socklen_t fromlen;
+       struct l7vs_replication_data recv_data;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               if ( NULL == replication_data )
+               {
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,162, 
+                       "in_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "replication_data = NULL");
+                       
+               }else{
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,163, 
+                       "in_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "replication_data = %p",replication_data);
+               }
+       }
+       // Debug log END
+
+       // Check Argument is NULL. 
+       if ( NULL == replication_data )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,46, "Argument is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,164, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }       
+
+       // mode check 
+       if ( REPLICATION_SLAVE != replication_state.service_status)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,47, "Can not receive replication data. Mode is difficult.  mode : %s",
+                                               replication_mode[(int)replication_state.service_status]);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,165, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Check to replication memory is not  NULL
+       if ( NULL == replication_state.replication_memory )
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,45, "Replication memory is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,166, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Check to iomux memory is not NULL
+       if ( NULL == l7vs_replication_iomux)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,46, "Initialize is not yet. Iomux is NULL.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,167, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       fromlen = sizeof(struct sockaddr);
+
+       // change iomux status
+       l7vs_replication_iomux->status = iomux_replication_receving;
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,168,
+                                       "l7vs_replication_iomux->status :"
+                                       "before : iomux_replication_recv_wait :"
+                                       "after : iomux_replication_receving");
+       }
+       // Debug log END
+
+       //initialize
+       memset(&recv_data, 0, sizeof(struct l7vs_replication_data));
+       memset(replication_data, 0, sizeof(struct l7vs_replication_data));
+
+       // recv data
+       recv_byte = recvfrom( internal_val.socket, &recv_data,
+                               sizeof(struct l7vs_replication_data),
+                               MSG_DONTWAIT,
+                               (sockaddr *)&internal_val.addr.addr_in,
+                               &fromlen );
+       errsv = errno;
+
+       // change to host byteorder
+       replication_data->id = ntohs(recv_data.id);
+       replication_data->serial = recv_data.serial;
+       replication_data->block_num = ntohl(recv_data.block_num);
+       replication_data->size = (uint64_t) recv_data.size;
+
+       memcpy(&replication_data->data, &recv_data.data, DATA_SIZE);
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG)
+       {
+               char    *head;
+               int     h;
+
+               for ( h = 0; h < (DATA_SIZE / LOG_DATA_WIDTH) ; h++ )
+               {
+                       head = (char *)&recv_data.data + h*LOG_DATA_WIDTH;
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,169,
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX  "
+                                               "%02hhX %02hhX %02hhX %02hhX  %02hhX %02hhX %02hhX %02hhX"
+                                               , *head, *(head+1), *(head+2), *(head+3)
+                                               , *(head+4), *(head+5), *(head+6), *(head+7)
+                                               , *(head+8), *(head+9), *(head+10), *(head+11)
+                                               , *(head+12), *(head+13), *(head+14), *(head+15));
+               }
+       }
+       // Debug log END
+       if (-1 ==  recv_byte)   
+       {
+               LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_SYSTEM,2, 
+                                       "Reception processing is error : %s  fd : %d data : %p size : %d ai_addr : %p addrlen : %d",
+                                       strerror(errsv),
+                                       internal_val.socket,
+                                       (void *)&recv_data,
+                                       (int)recv_data.size,
+                                       &internal_val.addr.addr_in,
+                                       fromlen);
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,170, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,171,"Recv data is success. %u", recv_byte); 
+       }
+       // Check replication ID
+       if (replication_data->id != REPLICATION_ID)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,48, "Get invalid data.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,172, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // block number is over
+
+       if (replication_data->block_num > replication_state.total_block)
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,49, "Recv block number is too large.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,173, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }
+
+       // Comparison of serial numbers
+       if ( replication_data->serial < replication_state.sarface_block_array_ptr[replication_data->block_num])
+       {
+               LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_REPLICATION,50, "Recv replication data is too old.");
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,174, 
+                       "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+                       "return = -1");
+               }
+               // Debug log END
+               return -1;
+       }else{
+               // Substitution of version
+               replication_state.sarface_block_array_ptr[replication_data->block_num] = replication_data->serial;
+       }
+
+       // set recv data
+       recv_memory = (char *)replication_state.replication_memory + DATA_SIZE*replication_data->block_num;
+
+       // received data. 
+       memcpy(recv_memory, &replication_data->data, DATA_SIZE);
+
+       // set sarface block
+       replication_state.sarface_block_array_ptr[replication_data->block_num] = replication_data->serial;
+
+       // Sarface numbers are compared.
+       for ( unsigned int i = 0; i < replication_state.total_block-1; i++ )
+       {
+               if ( replication_state.sarface_block_array_ptr[i] != replication_state.sarface_block_array_ptr[i+1])
+               {
+                       break;
+               }
+               if ( i == replication_state.total_block-2)
+               {
+                       // Synchronization is executed.
+                       memcpy(replication_state.component_memory,
+                               replication_state.replication_memory,
+                               replication_state.total_block*DATA_SIZE );
+                       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,82, "Copy Success from replication memory to component memory.");
+                       }
+               }
+       }
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,175, 
+               "out_function : static int l7vs_replication_recv_data(struct l7vs_replication_data *replication_data)"
+               "return = 0");
+       }
+       // Debug log END
+        return 0;
+}
+
+/*! Release Replication Memory
+ */
+static void l7vs_replication_release_replication_address()
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,176,
+                               "in_function : static void l7vs_replication_release_replication_address(void)");
+       }
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,43,
+                                       "free : replication_state.replication_memory=%p",
+                                       replication_state.replication_memory);
+       }
+       // Debug log END
+       if (NULL != replication_state.replication_memory )
+       {
+               free(replication_state.replication_memory);
+       }
+       replication_state.replication_memory=NULL;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,177,
+                               "out_function : static void l7vs_replication_release_replication_address(void)");
+       }
+       // Debug log END
+}
+
+/*!
+ * Release Components Memory
+ */
+static void l7vs_replication_release_components_address()
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,178,
+                               "in_function : static void l7vs_replication_release_components_address(void)");
+       }
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,44,
+                                       "free : replication_state.component_memory=%p",
+                                       replication_state.component_memory);
+       }
+       // Debug log END
+       if ( NULL != replication_state.component_memory)
+       {
+               free(replication_state.component_memory);
+       }
+       replication_state.component_memory=NULL;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,179,
+                               "out_function : static void l7vs_replication_release_components_address(void)");
+       }
+       // Debug log END
+}
+
+/*! Release Sarface Memory
+ */
+static void l7vs_replication_release_surface_info_address()
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,180,
+                               "in_function : static void l7vs_replication_release_surface_info_address(void)");
+       }
+
+       // Debug log END
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM_MEMORY) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM_MEMORY,45,
+                                       "free : replication_state.sarface_block_array_ptr=%p",
+                                       replication_state.sarface_block_array_ptr);
+       }
+       // Debug log END
+       if ( NULL != replication_state.sarface_block_array_ptr )
+       {
+               free(replication_state.sarface_block_array_ptr);
+       }
+       replication_state.sarface_block_array_ptr=NULL;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,181,
+                               "out_function : static void l7vs_replication_release_surface_info_address(void)");
+       }
+       // Debug log END
+
+}
+
+/*
+ * get Name for NetworkDeviceName 
+ * @param[IN]  const char*             NetworkDeviceName
+ * @param[OUT]         struct addressinfo*     address info struct
+ * @return     0 is fail / not 0 is success.
+ */
+static int getNICAddressInfo( const char* nicname, struct addressinfo* info )
+{
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,182,
+                               "in_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                               "nicname = %p"
+                               "info = %p",
+                               nicname,
+                               info);
+       }
+       // Debug log END
+
+       //NIC NAME Check
+       if( !nicname || !info )
+       {
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,183,
+                                       "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                                       "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }
+
+       //Networkdevice struct define
+       struct ifreq ifr;
+       memset( &ifr, 0, sizeof( struct ifreq ) );
+
+       //create socket
+       int fd  = socket( AF_INET, SOCK_DGRAM, 0 );
+       if( fd < 0 )
+       {
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,184,
+                                       "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                                       "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }
+
+       //get networkdevice struct for IPv4
+       strncpy( ifr.ifr_name, nicname, IFNAMSIZ-1 );
+       ifr.ifr_addr.sa_family = AF_INET;
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_SYSTEM) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_SYSTEM,1,
+                               "Use ioctl() :"
+                               "in_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                               "nicname = %p"
+                               "info = %p",
+                               nicname,
+                               info);
+       }
+       // Debug log END
+
+       if( ioctl( fd, SIOCGIFADDR, &ifr ) < 0 )
+       {
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,185,
+                                       "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                                       "return = 0");
+               }
+               // Debug log END
+               return 0;
+       }
+       memcpy( &(info->addr_in), &(ifr.ifr_addr), sizeof( struct sockaddr_in ) );
+       
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char sockaddr_in_str[DEBUG_STR_LEN] = {0};
+               sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,186,
+                                               "sockaddr_in_struct : %s",
+                                               sockaddr_in_str);
+       }
+       // Debug log END
+
+
+       //get networkdevice struct for IPv6
+       memset( &ifr, 0, sizeof( struct ifreq ) );
+       strncpy( ifr.ifr_name, nicname, IFNAMSIZ-1 );
+       ifr.ifr_addr.sa_family = AF_INET6;
+       if( ioctl( fd, SIOCGIFADDR, &ifr ) < 0 )
+       {
+               // Debug log
+               if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+                       LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,187,
+                                       "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                                       "return = 0");
+               }
+               // Debug log END
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char sockaddr_in_str[DEBUG_STR_LEN] = {0};
+               sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,188,
+                                               "sockaddr_in_struct : %s",
+                                               sockaddr_in_str);
+       }
+       // Debug log END
+               return 0;
+       }
+       memcpy( &(info->addr_in6 ), &(ifr.ifr_addr), sizeof( struct sockaddr_in6 ) );
+
+       close( fd );
+
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,189,
+                               "out_function : static int getNICAddressInfo( const char* nicname, struct addressinfo* info )"
+                               "return = 1");
+       }
+       // Debug log END
+       // Debug log
+       if (logger_get_log_level(LOG_CAT_L7VSD_REPLICATION) == LOG_LV_DEBUG){
+               char sockaddr_in_str[DEBUG_STR_LEN] = {0};
+               sockaddr_in_c_str(sockaddr_in_str,&(info->addr_in));
+               LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_REPLICATION,190,
+                                               "sockaddr_in_struct : %s",
+                                               sockaddr_in_str);
+       }
+       // Debug log END
+       return 1;
+}
+
+
+/*!
+ * Extract struct l7vs_protomod to strings for debug log.
+ * @param  string
+ * @return l7vs_replication_data
+ */
+
+static void l7vs_replication_data_c_str(char *ret, struct l7vs_replication_data *replication_data)
+{
+       if ( !replication_data ){
+               snprintf(ret, DEBUG_STR_LEN, "(nil)");
+               return;
+       }       
+       snprintf( ret, DEBUG_STR_LEN,
+                       "replication_data = %p:"
+                       "id = %u:"
+                       "serial = %llu:"
+                       "block_num = %u:"
+                       "size = %llu:"
+                       "data = %s:",
+                       replication_data,
+                       replication_data->id,
+                       replication_data->serial,
+                       replication_data->block_num,
+                       (long long int)replication_data->size,
+                       replication_data->data);
+       printf("%s",ret);
+       return;
+}
+
+static void l7vs_replication_component_c_str(char *ret, struct l7vs_replication_component *component_info, int i)
+{
+       if ( !component_info )
+       {
+               snprintf(ret, DEBUG_STR_LEN, "(nil)");
+               return;
+       }
+       snprintf( ret, DEBUG_STR_LEN,
+                       "replication_component = %p:"
+                       "id[%d] = %s:"
+                       "block_head[%d] = %u:"
+                       "block_size[%d] = %u:",
+                       component_info,
+                       i,component_info[i].id,
+                       i,component_info[i].block_head,
+                       i,component_info[i].block_size);
+       return;
+}
+
+static void l7vs_replication_state_c_str(char *ret, struct l7vs_replication_state *replication_state)
+{
+       if ( !replication_state )
+       {
+               snprintf(ret, DEBUG_STR_LEN, "(nil)");
+               return;
+       }
+
+       snprintf( ret, DEBUG_STR_LEN,
+                       "replication_state = %p:"
+                       "service_status = %s:"
+                       "send_time = %llu:"
+                       "last_send_block = %u:"
+                       "last_recv_block = %u:"
+                       "total_block = %d:"
+                       "replication_memory = %p:"
+                       "component_memory = %p:"
+                       "sarface_block_no = %llu:"
+                       "sarface_block_array_ptr = %p:",
+                       replication_state,
+                       replication_mode[(int)replication_state->service_status],
+                       replication_state->send_time,
+                       replication_state->last_send_block,
+                       replication_state->last_recv_block,
+                       replication_state->total_block,
+                       replication_state->replication_memory,
+                       replication_state->component_memory,
+                       (long long int)replication_state->sarface_block_no,
+                       replication_state->sarface_block_array_ptr);
+       return;
+}
+
+static void l7vs_replication_info_c_str(char *ret, struct l7vs_replication_info *replication_info)
+{
+       if ( !replication_info )
+       {
+               snprintf(ret, DEBUG_STR_LEN, "(nil)");
+               return;
+       }
+
+       snprintf( ret, DEBUG_STR_LEN,
+                       "replication_info = %p:"
+                       "ip_addr = %s:"
+                       "service_name = %s:"
+                       "nic = %s:"
+                       "interval = %u:"
+                       "component_num = %d:"
+                       "component_info = %p:",
+                       replication_info,
+                       replication_info->ip_addr,
+                       replication_info->service_name,
+                       replication_info->nic,
+                       replication_info->interval,
+                       replication_info->component_num,
+                       replication_info->component_info);
+}
+
+static void sockaddr_in_c_str(char *ret, struct sockaddr_in *addr_in)
+{
+       struct sockaddr_in p;
+
+       memset(&p,0,sizeof(struct sockaddr_in));
+
+       if ( !addr_in )
+       {
+               snprintf(ret, DEBUG_STR_LEN, "(nil)");
+               return;
+       }
+
+       memcpy(&p,addr_in,sizeof(struct sockaddr_in));
+       snprintf( ret, DEBUG_STR_LEN,
+                       "addr_in = %p:" 
+                       "sin_family = %d:"
+                       "sin_port = %u:"
+                       "in_addr.sin_addr = %llu:"
+                       "sin_zero = %s:",
+                       addr_in,
+                       addr_in->sin_family,
+                       addr_in->sin_port,
+                       (long long int)p.sin_addr.s_addr,
+                       addr_in->sin_zero);
+       return;
+
+}
+