diff -ruN keepalived-1.1.11.orig/keepalived/check/check_data.c keepalived-1.1.11/keepalived/check/check_data.c --- keepalived-1.1.11.orig/keepalived/check/check_data.c 2005-09-19 18:47:04.000000000 +0200 +++ keepalived-1.1.11/keepalived/check/check_data.c 2005-09-19 20:29:38.000000000 +0200 @@ -215,7 +215,9 @@ #endif #endif } - + if (vs->ops) { + syslog(LOG_INFO, " lb_ops = 1 (on)"); + } if (vs->s_svr) { syslog(LOG_INFO, " sorry server = %s:%d", inet_ntop2(SVR_IP(vs->s_svr)) diff -ruN keepalived-1.1.11.orig/keepalived/check/check_parser.c keepalived-1.1.11/keepalived/check/check_parser.c --- keepalived-1.1.11.orig/keepalived/check/check_parser.c 2005-09-19 18:47:04.000000000 +0200 +++ keepalived-1.1.11/keepalived/check/check_parser.c 2005-09-19 20:26:00.000000000 +0200 @@ -117,6 +117,12 @@ syslog(LOG_INFO, "PARSER : unknown [%s] routing method.", str); } static void +lbops_handler(vector strvec) +{ + virtual_server *vs = LIST_TAIL_DATA(check_data->vs); + vs->ops = atoi(VECTOR_SLOT(strvec, 1)) ? 1 : 0; +} +static void natmask_handler(vector strvec) { virtual_server *vs = LIST_TAIL_DATA(check_data->vs); @@ -223,6 +229,7 @@ install_keyword("lb_algo", &lbalgo_handler); install_keyword("lvs_sched", &lbalgo_handler); install_keyword("lb_kind", &lbkind_handler); + install_keyword("lb_ops", &lbops_handler); install_keyword("lvs_method", &lbkind_handler); install_keyword("nat_mask", &natmask_handler); install_keyword("persistence_timeout", &pto_handler); diff -ruN keepalived-1.1.11.orig/keepalived/check/ipvswrapper.c keepalived-1.1.11/keepalived/check/ipvswrapper.c --- keepalived-1.1.11.orig/keepalived/check/ipvswrapper.c 2005-09-19 18:47:04.000000000 +0200 +++ keepalived-1.1.11/keepalived/check/ipvswrapper.c 2005-09-22 16:59:49.000000000 +0200 @@ -92,7 +92,9 @@ inet_ntop2(SVR_IP(vs)) , ntohs(SVR_PORT(vs))); if (ctl.u.vs_user.timeout != 0 || vs->granularity_persistence) - ctl.u.vs_user.vs_flags = IP_VS_SVC_F_PERSISTENT; + ctl.u.vs_user.vs_flags |= IP_VS_SVC_F_PERSISTENT; + if (vs->ops) + ctl.u.vs_user.vs_flags |= IP_VS_SVC_F_ONEPACKET; /* VS specific */ if (vs->vfwmark) { @@ -318,7 +320,10 @@ inet_ntop2(SVR_IP(vs)), ntohs(SVR_PORT(vs))); if (urule->timeout != 0 || vs->granularity_persistence) - urule->vs_flags = IP_VS_SVC_F_PERSISTENT; + urule->vs_flags |= IP_VS_SVC_F_PERSISTENT; + + if (vs->ops) + urule->vs_flags |= IP_VS_SVC_F_ONEPACKET; if (cmd == IP_VS_SO_SET_ADD || cmd == IP_VS_SO_SET_DEL) if (vs->granularity_persistence) @@ -610,7 +615,10 @@ inet_ntop2(SVR_IP(vs)), ntohs(SVR_PORT(vs))); if (srule->timeout != 0 || vs->granularity_persistence) - srule->flags = IP_VS_SVC_F_PERSISTENT; + srule->flags |= IP_VS_SVC_F_PERSISTENT; + + if (vs->ops) + srule->flags |= IP_VS_SVC_F_ONEPACKET; if (cmd == IP_VS_SO_SET_ADD || cmd == IP_VS_SO_SET_DEL) if (vs->granularity_persistence) diff -ruN keepalived-1.1.11.orig/keepalived/include/check_data.h keepalived-1.1.11/keepalived/include/check_data.h --- keepalived-1.1.11.orig/keepalived/include/check_data.h 2005-09-19 18:47:04.000000000 +0200 +++ keepalived-1.1.11/keepalived/include/check_data.h 2005-09-19 19:04:32.000000000 +0200 @@ -119,6 +119,7 @@ real_server *s_svr; list rs; int alive; + int ops; } virtual_server; /* Configuration data root */