diff --git a/entry/include/kni_entry.h b/entry/include/kni_entry.h index 84aaab2..8598499 100644 --- a/entry/include/kni_entry.h +++ b/entry/include/kni_entry.h @@ -60,6 +60,7 @@ struct dup_traffic_dabloom_key{ }; struct proxy_tcp_option{ + int client_tcp_maxseg_enable; int client_tcp_maxseg; int client_tcp_nodelay; int client_tcp_ttl; @@ -69,6 +70,7 @@ struct proxy_tcp_option{ int client_tcp_keepalive_keepintvl; int client_tcp_user_timeout; + int server_tcp_maxseg_enable; int server_tcp_maxseg; int server_tcp_nodelay; int server_tcp_ttl; diff --git a/entry/src/kni_entry.cpp b/entry/src/kni_entry.cpp index 57b8a29..bfdd31b 100644 --- a/entry/src/kni_entry.cpp +++ b/entry/src/kni_entry.cpp @@ -361,7 +361,11 @@ static unsigned char* kni_cmsg_serialize_header_new(struct pme_info *pmeinfo, st if(g_kni_handle->pxy_tcp_option_enable == 1) { ret = pxy_tcp_option_cmsg_set(cmsg, pmeinfo); - if(ret < 0) goto error_out; + if(ret < 0) + { + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: Failed at set cmsg"); + goto error_out; + } } //src mac diff --git a/entry/src/kni_pxy_tcp_option.cpp b/entry/src/kni_pxy_tcp_option.cpp index 603d3cd..cff3c18 100644 --- a/entry/src/kni_pxy_tcp_option.cpp +++ b/entry/src/kni_pxy_tcp_option.cpp @@ -9,7 +9,7 @@ extern int wrapped_kni_cmsg_set(struct kni_cmsg *cmsg, uint16_t type, const unsi int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_def_large,struct proxy_tcp_option *pxy_tcpop, void *logger) { int ret = 0; - cJSON *json=NULL, *item=NULL, *client_side = NULL, *server_side = NULL, *client_side_keepalive = NULL, *server_side_keepalive = NULL; + cJSON *json=NULL, *item=NULL, *client_side = NULL, *server_side = NULL, *client_side_keepalive = NULL, *server_side_keepalive = NULL, *client_tcp_maxseg = NULL, *server_tcp_maxseg = NULL; json=cJSON_Parse(srv_def_large); if(json==NULL) { @@ -25,6 +25,37 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de } else { + client_tcp_maxseg = cJSON_GetObjectItem(client_side, "tcp_maxseg"); + if(client_tcp_maxseg == NULL) + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = client_side_conn_param.tcp_maxseg"); + break; + } + else + { + item = cJSON_GetObjectItem(client_tcp_maxseg, "enable"); + if(item && item->type==cJSON_Number) + { + pxy_tcpop->client_tcp_maxseg_enable = item->valueint; + } + else + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = client_side_conn_param.tcp_maxseg.enable"); + break; + } + + item = cJSON_GetObjectItem(client_tcp_maxseg, "maxseg"); + if(item && item->type==cJSON_Number) + { + pxy_tcpop->client_tcp_maxseg = item->valueint; + } + else + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = client_side_conn_param.tcp_maxseg.maxseg"); + break; + } + } + client_side_keepalive = cJSON_GetObjectItem(client_side, "keep_alive"); if(client_side_keepalive == NULL) { @@ -78,18 +109,6 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de } } - - item=cJSON_GetObjectItem(client_side,"tcp_maxseg"); - if(item && item->type==cJSON_Number) - { - pxy_tcpop->client_tcp_maxseg = item->valueint; - } - else - { - KNI_LOG_ERROR(logger, "Failed to parse json data, json key = client_side_conn_param.tcp_maxseg"); - break; - } - item=cJSON_GetObjectItem(client_side,"nodelay"); if(item && item->type==cJSON_Number) { @@ -132,6 +151,37 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de } else { + server_tcp_maxseg = cJSON_GetObjectItem(server_side, "tcp_maxseg"); + if(server_tcp_maxseg == NULL) + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = server_side_conn_param.tcp_maxseg"); + break; + } + else + { + item = cJSON_GetObjectItem(server_tcp_maxseg, "enable"); + if(item && item->type==cJSON_Number) + { + pxy_tcpop->server_tcp_maxseg_enable = item->valueint; + } + else + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = server_side_conn_param.tcp_maxseg.enable"); + break; + } + + item = cJSON_GetObjectItem(server_tcp_maxseg, "maxseg"); + if(item && item->type==cJSON_Number) + { + pxy_tcpop->server_tcp_maxseg = item->valueint; + } + else + { + KNI_LOG_ERROR(logger, "Failed to parse json data, json key = server_side_conn_param.tcp_maxseg.maxseg"); + break; + } + } + server_side_keepalive = cJSON_GetObjectItem(server_side, "keep_alive"); if(server_side_keepalive == NULL) { @@ -184,18 +234,6 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de break; } } - - - item=cJSON_GetObjectItem(server_side,"tcp_maxseg"); - if(item && item->type==cJSON_Number) - { - pxy_tcpop->server_tcp_maxseg = item->valueint; - } - else - { - KNI_LOG_ERROR(logger, "Failed to parse json data, json key = server_side_conn_param.tcp_maxseg"); - break; - } item=cJSON_GetObjectItem(server_side,"nodelay"); if(item && item->type==cJSON_Number) @@ -543,10 +581,26 @@ int pxy_tcp_option_get_param(Maat_feather_t maat_feather,const struct streaminfo void pxy_tcp_option_modify_mss(struct pme_info *pmeinfo,void *logger) { - KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, origin client mss:%u,origin server mss:%u", pmeinfo->stream_traceid,pmeinfo->client_tcpopt.mss, pmeinfo->server_tcpopt.mss); - pmeinfo->client_tcpopt.mss = pmeinfo->pxy_tcp_option.client_tcp_maxseg; - pmeinfo->server_tcpopt.mss = pmeinfo->pxy_tcp_option.server_tcp_maxseg; - KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, modified client mss:%u, server mss:%u", pmeinfo->stream_traceid,pmeinfo->client_tcpopt.mss, pmeinfo->server_tcpopt.mss); + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, origin client side mss:%u,origin server side mss:%u", pmeinfo->stream_traceid,pmeinfo->client_tcpopt.mss, pmeinfo->server_tcpopt.mss); + if(pmeinfo->pxy_tcp_option.client_tcp_maxseg_enable == 1) + { + pmeinfo->client_tcpopt.mss = pmeinfo->pxy_tcp_option.client_tcp_maxseg; + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, modified client side mss:%u", pmeinfo->stream_traceid,pmeinfo->client_tcpopt.mss); + } + else + { + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, modify client side mss enable=%d,origin client side mss:%u", pmeinfo->stream_traceid,pmeinfo->pxy_tcp_option.client_tcp_maxseg_enable,pmeinfo->client_tcpopt.mss); + } + + if(pmeinfo->pxy_tcp_option.server_tcp_maxseg_enable == 1) + { + pmeinfo->server_tcpopt.mss = pmeinfo->pxy_tcp_option.server_tcp_maxseg; + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, modified server mss:%u", pmeinfo->stream_traceid, pmeinfo->server_tcpopt.mss); + } + else + { + KNI_LOG_DEBUG(logger, "Proxy-tcp-option: stream id: %s, modify server side mss enable=%d,origin server side mss:%u", pmeinfo->stream_traceid,pmeinfo->pxy_tcp_option.server_tcp_maxseg_enable,pmeinfo->server_tcpopt.mss); + } }