TSG-2611:1、修改对获取tcp_maxseg的处理

This commit is contained in:
fumingwei
2020-08-17 18:45:55 +08:00
parent 6812704f92
commit d60632cd96
3 changed files with 90 additions and 30 deletions

View File

@@ -60,6 +60,7 @@ struct dup_traffic_dabloom_key{
}; };
struct proxy_tcp_option{ struct proxy_tcp_option{
int client_tcp_maxseg_enable;
int client_tcp_maxseg; int client_tcp_maxseg;
int client_tcp_nodelay; int client_tcp_nodelay;
int client_tcp_ttl; int client_tcp_ttl;
@@ -69,6 +70,7 @@ struct proxy_tcp_option{
int client_tcp_keepalive_keepintvl; int client_tcp_keepalive_keepintvl;
int client_tcp_user_timeout; int client_tcp_user_timeout;
int server_tcp_maxseg_enable;
int server_tcp_maxseg; int server_tcp_maxseg;
int server_tcp_nodelay; int server_tcp_nodelay;
int server_tcp_ttl; int server_tcp_ttl;

View File

@@ -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) if(g_kni_handle->pxy_tcp_option_enable == 1)
{ {
ret = pxy_tcp_option_cmsg_set(cmsg, pmeinfo); 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 //src mac

View File

@@ -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 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; 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); json=cJSON_Parse(srv_def_large);
if(json==NULL) if(json==NULL)
{ {
@@ -25,6 +25,37 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de
} }
else 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"); client_side_keepalive = cJSON_GetObjectItem(client_side, "keep_alive");
if(client_side_keepalive == NULL) 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"); item=cJSON_GetObjectItem(client_side,"nodelay");
if(item && item->type==cJSON_Number) 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 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"); server_side_keepalive = cJSON_GetObjectItem(server_side, "keep_alive");
if(server_side_keepalive == NULL) if(server_side_keepalive == NULL)
{ {
@@ -185,18 +235,6 @@ int pxy_tcp_option_parse_json(const struct Maat_rule_t* rule, const char* srv_de
} }
} }
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"); item=cJSON_GetObjectItem(server_side,"nodelay");
if(item && item->type==cJSON_Number) 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) 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); 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);
pmeinfo->client_tcpopt.mss = pmeinfo->pxy_tcp_option.client_tcp_maxseg; if(pmeinfo->pxy_tcp_option.client_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 client mss:%u, 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;
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);
}
} }