• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revisãoff7dbac45c2341fade032200cc5e5cdc5971b9ba (tree)
Hora2014-07-11 17:19:45
AutorHiroaki Nakano <nakano.hiroaki@nttc...>
CommiterHiroaki Nakano

Mensagem de Log

edit途中。

- l7vs_service_argにある使わないchild_pid配列のせいでl7vsadmが失敗していたので削除
- 親プロセスと子プロセスの間でやり取りするipとportがネットバイトオーダーだったので、通常のものに変換。それに伴うIF変更対応。

Signed-off-by: Hiroaki Nakano <nakano.hiroaki@nttcom.co.jp>

Mudança Sumário

Diff

--- a/include/l7vs_service.h
+++ b/include/l7vs_service.h
@@ -89,8 +89,6 @@ struct l7vs_service_arg{
8989 int persist; //! persistency
9090 int backlog; //! listen(2) backlog length
9191
92- pid_t child_pid[MAX_CHILD]; //! child process pid list
93-
9492 char protomod[L7VS_MODNAME_LEN]; //! protocol module name
9593 char schedmod[L7VS_MODNAME_LEN]; //! scheduler
9694
--- a/src/service.c
+++ b/src/service.c
@@ -841,7 +841,7 @@ l7vs_child_proto_grp_init(uint32_t ip, uint16_t port, char *proto)
841841 * @return l7vs_child_proto_grp pointer
842842 */
843843 struct l7vs_child_proto_grp *
844-l7vs_child_proto_grp_search(uint32_t ip, uint16_t port)
844+l7vs_child_proto_grp_search(struct in_addr ip, uint16_t port)
845845 {
846846 GList *l;
847847 struct l7vs_child_proto_grp *grp;
@@ -849,7 +849,7 @@ l7vs_child_proto_grp_search(uint32_t ip, uint16_t port)
849849 grp = NULL;
850850 for(l = g_list_first(l7vs_child_list); l != NULL; l = g_list_next(l)) {
851851 grp = (struct l7vs_child_proto_grp *)l->data;
852- if((grp->addr.sin_addr.s_addr != ip) || (grp->addr.sin_port != port)) {
852+ if((grp->addr.sin_addr.s_addr != ip.s_addr) || (grp->addr.sin_port != port)) {
853853 continue;
854854 }else{
855855 return grp;
@@ -983,7 +983,7 @@ l7vs_child_process_check(struct l7vs_service_arg_multi *arg)
983983 struct l7vs_child_proto_grp *cpgrp;
984984
985985 /* IP, port重複チェック */
986- cpgrp = l7vs_child_proto_grp_search(arg->srv_arg.addr.sin_addr.s_addr,arg->srv_arg.addr.sin_port);
986+ cpgrp = l7vs_child_proto_grp_search(arg->srv_arg.addr.sin_addr, arg->srv_arg.addr.sin_port);
987987 if(cpgrp == NULL){
988988 /* 無かったので子プロ作る */
989989 srv_sock_check_flg = 0;
@@ -1121,7 +1121,7 @@ l7vs_service_create(struct l7vs_service_arg_multi *arg, int *err)
11211121 int srv_mod_check_flg = 0;
11221122 int ret = 0;
11231123 int i, readid, writeid, writefifo, readfifo, dummyfifo;
1124- uint32_t ip;
1124+ char *ip;
11251125 uint16_t port;
11261126 pid_t pid;
11271127 GList *l;
@@ -1182,11 +1182,11 @@ l7vs_service_create(struct l7vs_service_arg_multi *arg, int *err)
11821182 if( srv == NULL) return NULL;
11831183
11841184 /* 名前付きパイプ作成 */
1185- ip = arg->srv_arg.addr.sin_addr.s_addr;
1186- port = arg->srv_arg.addr.sin_port;
1185+ ip = inet_ntoa(arg->srv_arg.addr.sin_addr);
1186+ port = ntohs(arg->srv_arg.addr.sin_port);
11871187 pid = getpid();
11881188
1189- snprintf(fifopath, sizeof(fifopath), "/tmp/l7vsd_%ud_%ud", ip, port);
1189+ snprintf(fifopath, sizeof(fifopath), "/tmp/l7vsd_%s_%d", ip, port);
11901190 ret = stat(fifopath, &st);
11911191 if(!ret){
11921192 if(!(S_ISDIR(st.st_mode))){
@@ -1210,7 +1210,7 @@ l7vs_service_create(struct l7vs_service_arg_multi *arg, int *err)
12101210 }
12111211 }
12121212
1213- snprintf(fifoname, sizeof(fifoname), "/tmp/l7vsd_%ud_%ud/l7vsd.%ud", ip, port, pid);
1213+ snprintf(fifoname, sizeof(fifoname), "/tmp/l7vsd_%s_%d/l7vsd.%d", ip, port, pid);
12141214 ret = mkfifo(fifoname, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
12151215 if(ret == -1){
12161216 perror("mkfifo");
@@ -1233,7 +1233,7 @@ l7vs_service_create(struct l7vs_service_arg_multi *arg, int *err)
12331233 l7vs_iomux_add( l7vs_cfifo_iomux, iom_read );
12341234
12351235 /* 親PIPEを開いてPIDとIP,portを親に通知 */
1236- snprintf(childinfo, sizeof(childinfo), "%ud %ud %ud", ip, port, pid);
1236+ snprintf(childinfo, sizeof(childinfo), "%s %d %d", ip, port, pid);
12371237 if((writefifo = open(P_FIFO, O_WRONLY, 0)) < 0) {
12381238 perror("open");
12391239 /* 各種アンロード */
@@ -1285,10 +1285,12 @@ int
12851285 l7vs_receive_child_process_info(int fd)
12861286 {
12871287 // すぐ上のforkの親プロセス処理でやるか、epollイベントでやるか検討
1288- uint32_t ip;
1289- uint16_t port;
1288+ char ip[17];
1289+ struct in_addr nip;
1290+ uint16_t port, nport;
12901291 pid_t pid;
12911292 struct l7vs_child_proto_grp *grp;
1293+ int ret;
12921294
12931295 // 読み込み
12941296 if((read(fd, childinfo, sizeof(childinfo)))==-1) {
@@ -1297,9 +1299,15 @@ l7vs_receive_child_process_info(int fd)
12971299 }
12981300
12991301 // ip, port, pidを切り出す
1300- sscanf(childinfo, "%ud %ud %ud", ip, port, pid);
1302+ sscanf(childinfo, "%s %d %d", ip, port, pid);
1303+ // 取り出した情報をネットワークバイトオーダーに変換する
1304+ if(!(inet_aton(ip, &nip))){
1305+ return -1;
1306+ }
1307+ nport = htons(port);
1308+
13011309 // ipとportからl7vs_child_proto_grpを検索
1302- grp = l7vs_child_proto_grp_search(ip, port);
1310+ grp = l7vs_child_proto_grp_search(nip, nport);
13031311 if(grp == NULL) {
13041312 return -1;
13051313 }