}
//! create up down thread
- void start_thread();
+ int start_thread();
//! session shared ptr getter
//! @return session shared ptr
bool timeout_flag = false;
bool reschedule_flag = false;
bool no_reschedule_flag = false;
- bool forward_checked = false;
bool sorryuri_checked = false;
bool stats_checked = false;
break;
}
}
- //option string = "-F"
- else if (*it == "-F" || *it == "--forwarded-for") {
- //set forward flag ON
- forward_checked = true;
- }
//option string = "-S"
else if (*it == "-S" || *it == "--sorry-uri") {
//set sorryURI flag OFF
buffer_element.first += sendbuffer_rest_size;
buffer_element.second -= sendbuffer_rest_size;
sendbuffer_rest_size = 0;
-
- //add remain item
- data_ptr->buffer_sequence.push_back(buffer_element);
- //delete the item
- data_ptr->buffer_sequence.pop_front();
break;
}
}
hash = cl_endpoint.address().to_v4().to_ulong() * GOLDEN_RATIO_PRIME;
} else {
boost::asio::ip::address_v6::bytes_type v6_bytes = cl_endpoint.address().to_v6().to_bytes();
- boost::asio::ip::address_v4::bytes_type v4_bytes = {{v6_bytes[12], v6_bytes[13], v6_bytes[14], v6_bytes[15]}};
- boost::asio::ip::address_v4::address_v4 v4_address = boost::asio::ip::address_v4::address_v4(v4_bytes);
+ const boost::asio::ip::address_v4::bytes_type v4_bytes = {{v6_bytes[12], v6_bytes[13], v6_bytes[14], v6_bytes[15]}};
+ boost::asio::ip::address_v4 v4_address(v4_bytes);
hash = v4_address.to_ulong() * GOLDEN_RATIO_PRIME;
}
//set check result true
check_message_result check_result;
check_result.flag = true;
- bool forward_checked = false;
bool sorryuri_checked = false;
bool stats_checked = false;
vec_str_it it_end = args.end();
//loop option strings
for (; it != it_end; ++it) {
- //option string = "-F"
- if (*it == "-F" || *it == "--forwarded-for") {
- //set forward flag ON
- forward_checked = true;
- }
//option string = "-S"
- else if (*it == "-S" || *it == "--sorry-uri") {
+ if (*it == "-S" || *it == "--sorry-uri") {
//set sorryURI flag OFF
if (!sorryuri_checked) {
//next item exist
// Get l7vsadm execute file path from /proc/(pid)/exe (symbolic link)
char l7vsadm_file_path[256];
- ssize_t retsize;
memset(l7vsadm_file_path, 0, sizeof(l7vsadm_file_path));
- retsize = readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path));
+ readlink("/proc/self/exe", l7vsadm_file_path, sizeof(l7vsadm_file_path));
// L7vsadm command conflict check. (Try l7vsadm execute file lock)
file_lock lock(l7vsadm_file_path, l7vsadm_err);
}
// get hostname
- int ret = 0;
char buff[HOST_NAME_MAX];
- ret = gethostname(buff, HOST_NAME_MAX);
+ gethostname(buff, HOST_NAME_MAX);
hostname = buff;
initialized = true;
//
//! @brief create up down thread
//
-void session_thread_control::start_thread()
+int session_thread_control::start_thread()
{
- int int_val;
-
upthread.reset(new boost::thread(&session_thread_control::upstream_run, this)); //! upstream thread create
downthread.reset(new boost::thread(&session_thread_control::downstream_run, this)); //! downstream thread create
//pthread_setschedparam
int retval, sched_policy;
sched_param scheduler_param;
- int_val = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param);
+ retval = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param);
+ if (retval != 0) return retval;
+
if (SCHED_FIFO == sched_algorithm) {
scheduler_param.__sched_priority = sched_priority;
sched_policy = SCHED_FIFO;
}
if (0 <= sched_algorithm) {
retval = pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param);
+ if (retval != 0 ) return retval;
retval = pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param);
+ if (retval != 0 ) return retval;
}
+ return retval;
}
//
map< size_t, string > cpu_nic_map;
string buff;
ifstream ifs("/proc/interrupts");
- unsigned int target_interrupt;
+ //unsigned int target_interrupt;
size_t target_cpuid = 0;
cpu_set_t mask;
sched_getaffinity(0, sizeof(cpu_set_t), &mask);
algorithm::split(split_vec, buff, algorithm::is_any_of(":"));
if (!split_vec.size()) return mask; // cannot split interrupt
algorithm::trim(split_vec[0]);
- target_interrupt = lexical_cast<unsigned int>(split_vec[0]);
+ //target_interrupt = lexical_cast<unsigned int>(split_vec[0]);
+ lexical_cast<unsigned int>(split_vec[0]);
for (size_t i = 0; i < cpu_nic_map.size(); ++i) {
size_t start_position = 4 + (i * 11);
size_t end_position = 11;
#include <boost/format.hpp>
#include <sys/socket.h>
#include <linux/version.h>
+#include <pthread.h>
#include "virtualservice.h"
#include "logger_enum.h"
*/
void l7vs::virtualservice_tcp::initialize(l7vs::error_code &err)
{
+ int ret = 0;
+
if (unlikely(LOG_LV_DEBUG == Logger::getLogLevel(LOG_CAT_L7VSD_VIRTUALSERVICE))) {
boost::format formatter("in_function: void virtualservice_tcp::initialize( "
"l7vs::error_code& err )");
session_thread_control *p_stc = new session_thread_control(
sess, vsnic_cpumask, rsnic_cpumask, -1);
- p_stc->start_thread();
+ ret = p_stc->start_thread();
+ if (ret == ESRCH) {
+ continue;
+ } else if (ret == EPERM) {
+ //Error
+ Logger::putLogError(LOG_CAT_L7VSD_VIRTUALSERVICE, 999, "Not super user authority",
+ __FILE__, __LINE__);
+ err.setter(true, "set pthread schedule parameter.");
+ throw;
+ }
while (!pool_sessions.push(p_stc)) {}
} catch (...) {
Logger::putLogFatal(