Hibari Michiro
hibar****@lab*****
2013年 3月 18日 (月) 18:05:34 JST
中野様 雲雀です。お世話になっております。 チケットの発行お願いします。 diff(patch)ですが、添付ファイルとしても乗っけて 頂けると、手元の環境に取り込んだりするのが楽なので、 助かります。 (メーラによってはスペースを勝手に省略してしまったりして、 コピペだけだとそのままpatchとして使えなかったりするので。) Fedora18がRHEL7のベースになると言われているので、 ターゲットとしてはFedora18に同梱されているgcc4.7で コンパイルが通ることがゴールにすると良いかと。 (2013/03/18 17:42), 中野 宏朗 wrote: > 中野@幕張です。 > > そういえばこれはまだチケット発行してなかったですね。 > v3.1.0には間に合わないかな? > > wheezyのgccは4.6になります。あ、でもバージョンアップ > してるから4.7とかになってたりして。 > > fedoraだとfedora 16が4.6、17だと4.7系ですね。 > v3.1.xの早いうちに対応したほうが良さそうです。 > チケット発行しておきます。 > > 修正方針メモを投稿しておきます。 > こんな感じでOK? > > ===================== > diff --git a/l7vsd/module/protocol/protocol_module_ip.cpp b/l7vsd/module/protocol/protocol_module_ip.cpp > index 2d3ec46..8c028d6 100644 > --- a/l7vsd/module/protocol/protocol_module_ip.cpp > +++ b/l7vsd/module/protocol/protocol_module_ip.cpp > @@ -324,7 +324,7 @@ protocol_module_base::check_message_result protocol_module_ip::check_parameter(c > bool timeout_flag = false; > bool reschedule_flag = false; > bool no_reschedule_flag = false; > - bool forward_checked = false; > + //bool forward_checked = false; > bool sorryuri_checked = false; > bool stats_checked = false; > > @@ -450,7 +450,7 @@ protocol_module_base::check_message_result protocol_module_ip::check_parameter(c > //option string = "-F" > else if (*it == "-F" || *it == "--forwarded-for") { > //set forward flag ON > - forward_checked = true; > + //forward_checked = true; > } > //option string = "-S" > else if (*it == "-S" || *it == "--sorry-uri") { > check_parameterでのforwadedフラグチェックは意味無いからなくしていい。 > > @@ -5657,11 +5657,6 @@ bool protocol_module_ip::put_data_into_sendbuffer( > 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; > } > } > これは不明 > > diff --git a/l7vsd/module/protocol/protocol_module_ip.h b/l7vsd/module/protocol/protocol_module_ip.h > index 50d064b..54af5f7 100644 > --- a/l7vsd/module/protocol/protocol_module_ip.h > +++ b/l7vsd/module/protocol/protocol_module_ip.h > @@ -93,8 +93,8 @@ protected: > 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; > 将来的には治したほうがいい。 > > } > diff --git a/l7vsd/module/protocol/protocol_module_sessionless.cpp b/l7vsd/module/protocol/protocol_module_sessionless.cpp > index d042afb..f655cec 100644 > --- a/l7vsd/module/protocol/protocol_module_sessionless.cpp > +++ b/l7vsd/module/protocol/protocol_module_sessionless.cpp > @@ -356,7 +356,7 @@ protocol_module_base::check_message_result protocol_module_sessionless::check_pa > //set check result true > check_message_result check_result; > check_result.flag = true; > - bool forward_checked = false; > + //bool forward_checked = false; > bool sorryuri_checked = false; > bool stats_checked = false; > > @@ -408,7 +408,7 @@ protocol_module_base::check_message_result protocol_module_sessionless::check_pa > //option string = "-F" > if (*it == "-F" || *it == "--forwarded-for") { > //set forward flag ON > - forward_checked = true; > + //forward_checked = true; > } > //option string = "-S" > else if (*it == "-S" || *it == "--sorry-uri") { > いらん。 > > diff --git a/l7vsd/src/l7vsadm.cpp b/l7vsd/src/l7vsadm.cpp > index b63d573..951db90 100644 > --- a/l7vsd/src/l7vsadm.cpp > +++ b/l7vsd/src/l7vsadm.cpp > @@ -2957,9 +2957,10 @@ bool l7vs::l7vsadm::execute(int argc, char *argv[]) > > // Get l7vsadm execute file path from /proc/(pid)/exe (symbolic link) > char l7vsadm_file_path[256]; > - ssize_t retsize; > + //ssize_t retsize; > memset(l7vsadm_file_path, 0, sizeof(l7vsadm_file_path)); > - retsize = readlink("/proc/self/exe", l7vsadm_file_path, 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); > この直後、ファイルパスでロックをかけようとして、ロックかけられなかったら > エラー終了してるからここではエラーチェックしなくていいかも。 > してもいいけど。 > > diff --git a/l7vsd/src/logger_impl.cpp b/l7vsd/src/logger_impl.cpp > index 0ab72b1..9401d8f 100644 > --- a/l7vsd/src/logger_impl.cpp > +++ b/l7vsd/src/logger_impl.cpp > @@ -343,9 +343,9 @@ bool l7vs::LoggerImpl::init() > } > > // get hostname > - int ret = 0; > + //int ret = 0; > char buff[HOST_NAME_MAX]; > - ret = gethostname(buff, HOST_NAME_MAX); > + gethostname(buff, HOST_NAME_MAX); > hostname = buff; > > initialized = true; > ここは一応hostnameが取れたかどうか判定してもいいんで無いか? > 取れていなかった場合どうする?エラー終了? > それともログ用ホスト名なし程度、無視する? > > diff --git a/l7vsd/src/session_thread_control.cpp b/l7vsd/src/session_thread_control.cpp > index df0c938..2bd5e24 100644 > --- a/l7vsd/src/session_thread_control.cpp > +++ b/l7vsd/src/session_thread_control.cpp > @@ -36,15 +36,17 @@ namespace l7vs > void session_thread_control::start_thread() > { > > - int int_val; > + //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; > + //int retval, sched_policy; > + int sched_policy; > sched_param scheduler_param; > - int_val = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); > + //int_val = pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); > + pthread_getschedparam(upthread->native_handle(), &sched_policy, &scheduler_param); > if (SCHED_FIFO == sched_algorithm) { > scheduler_param.__sched_priority = sched_priority; > sched_policy = SCHED_FIFO; > @@ -55,8 +57,10 @@ void session_thread_control::start_thread() > sched_policy = SCHED_BATCH; > } > if (0 <= sched_algorithm) { > - retval = pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); > - retval = pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); > + //retval = pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); > + //retval = pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); > + pthread_setschedparam(upthread->native_handle(), sched_algorithm, &scheduler_param); > + pthread_setschedparam(downthread->native_handle(), sched_algorithm, &scheduler_param); > } > > } > pthread_getschedparamで返されるエラーはESRCHとEFAULTの二つ。EFAULTはSEGV。ESRCHはスレッドが無効または終了している。 > これはエラー処理書いてもいいかもしれない。 > setはEINVAL, EPERM, ESRCH, EFAULT。EINVALはパラメータ指定違い。EPERMはスーパーユーザ権限チェック。 > これもESRCHはログだしてもいいかな。 > > diff --git a/l7vsd/src/virtualservice_base.cpp b/l7vsd/src/virtualservice_base.cpp > index 94ab8a2..994c634 100644 > --- a/l7vsd/src/virtualservice_base.cpp > +++ b/l7vsd/src/virtualservice_base.cpp > @@ -481,7 +481,7 @@ cpu_set_t l7vs::virtualservice_base::get_cpu_mask(std::string nic_name) > 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); > @@ -503,7 +503,8 @@ cpu_set_t l7vs::virtualservice_base::get_cpu_mask(std::string nic_name) > 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; > これはsched afinity用の使われていないメソッド。 > 呼び元のvirtualservice_tcpでifdefしてる。 > そもそも、このメソッド自体が未完成。いまは手動でネットワークのキューにピンさしたら > スケジューラ任せでよしなにしてくれる。 > > ===================== > > (2013/02/06 0:35), Hiroaki Nakano wrote: >> たるすぴ@幕張です。 >> >> ultramonkey-l7-v3のmasterブランチをdebian testingで >> コンパイルしてみたら、いくつかエラーが出ました。 >> >> どうやら、新しいg++では値を代入しても参照されない >> 変数はエラーになるようです。 >> あと、protocol_module_ip.hにへんなクラス宣言?がありました。 >> >> ----------- >> protocol_module_ip.cpp: In member function 'virtual >> l7vs::protocol_module_base::check_message_result >> l7vs::protocol_module_ip::check_parameter(const >> std::vector<std::basic_string<char> >&)': >> protocol_module_ip.cpp:327:14: error: variable 'forward_checked' set but >> not used [-Werror=unused-but-set-variable] >> cc1plus: all warnings being treated as errors >> make[4]: *** [protocol_module_ip.lo] エラー 1 >> >> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. -g -O2 >> -fno-strict-aliasing -Wall -Werror -fPIC -pthread -I../../include >> -I../../logger -I../../parameter -DMAX_BUFFER_SIZE=4096 -g -O2 -MT >> protocol_module_ip.lo -MD -MP -MF .deps/protocol_module_ip.Tpo -c >> protocol_module_ip.cpp -fPIC -DPIC -o .libs/protocol_module_ip.o >> protocol_module_sessionless.cpp: In member function 'virtual >> l7vs::protocol_module_base::check_message_result >> l7vs::protocol_module_sessionless::check_parameter(const >> std::vector<std::basic_string<char> >&)': >> protocol_module_sessionless.cpp:359:14: error: variable >> 'forward_checked' set but not used [-Werror=unused-but-set-variable] >> In file included from protocol_module_ip.cpp:33:0: >> protocol_module_ip.h: In member function 'unsigned int >> l7vs::protocol_module_ip::l7vs_ip_service_calc_hash(const endpoint&)': >> protocol_module_ip.h:97:25: error: >> 'boost::asio::ip::address_v4::address_v4' names the constructor, not the >> type >> protocol_module_ip.h:97:65: error: expected ';' before 'v4_address' >> protocol_module_ip.h:97:127: error: statement cannot resolve address of >> overloaded function >> protocol_module_ip.h:98:32: error: 'v4_address' was not declared in this >> scope >> In file included from protocol_module_ip.cpp:33:0: >> protocol_module_ip.h:96:65: error: unused variable 'v4_bytes' >> [-Werror=unused-variable] >> cc1plus: all warnings being treated as errors >> make[4]: *** [protocol_module_sessionless.lo] エラー 1 >> make[4]: *** 未完了のジョブを待っています.... >> cc1plus: all warnings being treated as errors >> make[4]: *** [protocol_module_ip.lo] エラー 1 >> >> >> l7vsadm.cpp: In member function ‘bool l7vs::l7vsadm::execute(int, char**)’: >> l7vsadm.cpp:2960:17: error: variable ‘retsize’ set but not used >> [-Werror=unused-but-set-variable] >> cc1plus: all warnings being treated as errors >> make[3]: *** [l7vsadm-l7vsadm.o] エラー 1 >> >> g++ -DHAVE_CONFIG_H -I. -I../.. -O2 -fno-strict-aliasing -g -Wall >> -Werror -pthread -I../include -I../include >> -DL7VS_MODULE_PATH="\"/usr/lib64/l7vs\"" -DMAX_BUFFER_SIZE=4096 >> -DPARAMETER_FILE="\"/etc/l7vs/l7vs.cf\"" >> -DL7VS_CONFIG_SOCK_PATH="\"/var/run/l7vs\"" -DLOGGER_PROCESS_VSD >> -DNETSNMP_NO_INLINE -DVERSION=\"3.0.4\" -g -O2 -MT >> l7vsd-protocol_module_control.o -MD -MP -MF >> .deps/l7vsd-protocol_module_control.Tpo -c -o >> l7vsd-protocol_module_control.o `test -f 'protocol_module_control.cpp' >> || echo './'`protocol_module_control.cpp >> session_thread_control.cpp: In member function ‘void >> l7vs::session_thread_control::start_thread()’: >> session_thread_control.cpp:39:24: error: variable ‘int_val’ set but not >> used [-Werror=unused-but-set-variable] >> session_thread_control.cpp:45:16: error: variable ‘retval’ set but not >> used [-Werror=unused-but-set-variable] >> cc1plus: all warnings being treated as errors >> make[3]: *** [l7vsd-session_thread_control.o] エラー 1 >> make[3]: *** 未完了のジョブを待っています.... >> >> >> g++ -DHAVE_CONFIG_H -I. -I../.. -O2 -fno-strict-aliasing -g -Wall >> -Werror -pthread -I../include -I../include >> -DL7VS_MODULE_PATH="\"/usr/lib64/l7vs\"" -DMAX_BUFFER_SIZE=4096 >> -DPARAMETER_FILE="\"/etc/l7vs/l7vs.cf\"" >> -DL7VS_CONFIG_SOCK_PATH="\"/var/run/l7vs\"" -DLOGGER_PROCESS_VSD >> -DNETSNMP_NO_INLINE -DVERSION=\"3.0.4\" -g -O2 -MT >> l7vsd-virtualservice_udp.o -MD -MP -MF >> .deps/l7vsd-virtualservice_udp.Tpo -c -o l7vsd-virtualservice_udp.o >> `test -f 'virtualservice_udp.cpp' || echo './'`virtualservice_udp.cpp >> virtualservice_base.cpp: In member function ‘cpu_set_t >> l7vs::virtualservice_base::get_cpu_mask(std::string)’: >> virtualservice_base.cpp:484:33: error: variable ‘target_interrupt’ set >> but not used [-Werror=unused-but-set-variable] >> cc1plus: all warnings being treated as errors >> make[3]: *** [l7vsd-virtualservice_base.o] エラー 1 >> make[3]: *** 未完了のジョブを待っています.... >> >> >> logger_a-logger_impl.o -MD -MP -MF >> .deps/libl7vsd_logger_a-logger_impl.Tpo -c -o >> libl7vsd_logger_a-logger_impl.o `test -f 'logger_impl.cpp' || echo >> './'`logger_impl.cpp >> logger_impl.cpp: In member function ‘virtual bool l7vs::LoggerImpl::init()’: >> logger_impl.cpp:346:20: error: variable ‘ret’ set but not used >> [-Werror=unused-but-set-variable] >> cc1plus: all warnings being treated as errors >> make[3]: *** [libl7vsd_logger_a-logger_impl.o] エラー 1 >> make[3]: *** 未完了のジョブを待っています.... >> ---------------------------------------------------- >> >> 使っていない変数はコメントにしたり消したりして、 >> 変な宣言のところを直したパッチを作ったので添付しておきます。 >> # 必要な変数だったのなら、処理が漏れていることになるね。 >> >> >> >> >> _______________________________________________ >> Ultramonkey-l7-develop mailing list >> Ultra****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/ultramonkey-l7-develop >> -- 雲雀 路朗 (Michiro Hibari) MAIL: hibar****@lab***** 所属: NTT OSSセンタ 基盤技術ユニット 高信頼担当 TEL : 03-5860-5135 / FAX: 03-5463-5490