TSG-22699 适配控制报文修改
This commit is contained in:
@@ -59,15 +59,15 @@ enum {
|
||||
};
|
||||
|
||||
int tags_ids_cmsg_maps[] = {
|
||||
[INDEX_SRC_IP_TAGS_IDS] = TFE_CMSG_SRC_IP_TAGS_IDS_STR,
|
||||
[INDEX_DST_IP_TAGS_IDS] = TFE_CMSG_DST_IP_TAGS_IDS_STR,
|
||||
[INDEX_FQDN_TAGS_IDS] = TFE_CMSG_FQDN_TAGS_IDS_STR,
|
||||
[INDEX_SRC_IP_TAGS_IDS] = TFE_CMSG_SRC_IP_TAGS_IDS_ARR,
|
||||
[INDEX_DST_IP_TAGS_IDS] = TFE_CMSG_DST_IP_TAGS_IDS_ARR,
|
||||
[INDEX_FQDN_TAGS_IDS] = TFE_CMSG_FQDN_TAGS_IDS_ARR,
|
||||
};
|
||||
|
||||
const char *tags_ids_cmsg_name_maps[] = {
|
||||
[INDEX_SRC_IP_TAGS_IDS] = "TFE_CMSG_SRC_IP_TAGS_IDS_STR",
|
||||
[INDEX_DST_IP_TAGS_IDS] = "TFE_CMSG_DST_IP_TAGS_IDS_STR",
|
||||
[INDEX_FQDN_TAGS_IDS] = "TFE_CMSG_FQDN_TAGS_IDS_STR",
|
||||
[INDEX_SRC_IP_TAGS_IDS] = "TFE_CMSG_SRC_IP_TAGS_IDS_ARR",
|
||||
[INDEX_DST_IP_TAGS_IDS] = "TFE_CMSG_DST_IP_TAGS_IDS_ARR",
|
||||
[INDEX_FQDN_TAGS_IDS] = "TFE_CMSG_FQDN_TAGS_IDS_ARR",
|
||||
};
|
||||
|
||||
struct mpack_mmap_id2type
|
||||
@@ -118,6 +118,15 @@ struct mpack_mmap_id2type
|
||||
|
||||
extern void * g_packet_io_logger;
|
||||
|
||||
static int mpack_parse_uuid(mpack_node_t node, uuid_t uuid)
|
||||
{
|
||||
size_t len = mpack_node_bin_size(node);
|
||||
if (len != UUID_LEN)
|
||||
return -1;
|
||||
memcpy(uuid, mpack_node_bin_data(node), len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sids_array_parse_mpack(struct ctrl_pkt_parser *handler, mpack_node_t node, int is_seq)
|
||||
{
|
||||
struct sids *sid = is_seq ? &handler->seq_sids : &handler->ack_sids;
|
||||
@@ -169,21 +178,23 @@ static int pkt_header_parse_mpack(struct ctrl_pkt_parser *handler, mpack_node_t
|
||||
|
||||
static int tags_ids_array_parse_mpack(struct ctrl_pkt_parser *handler, mpack_node_t node, int map_index)
|
||||
{
|
||||
uint64_t value = 0;
|
||||
int tags_ids_len = 0;
|
||||
char tags_ids_str[TAGS_IDS_STR_LEN] = {0};
|
||||
|
||||
uint32_t array_cnt = mpack_node_array_length(node);
|
||||
if (!array_cnt)
|
||||
return 0;
|
||||
|
||||
int tags_ids_len = UUID_LEN*array_cnt;
|
||||
uuid_t *tags_ids = (uuid_t *)calloc(tags_ids_len, 1);
|
||||
|
||||
for (uint32_t i = 0; i < array_cnt; i++)
|
||||
{
|
||||
value = mpack_node_u64(mpack_node_array_at(node, i));
|
||||
tags_ids_len += snprintf(tags_ids_str+tags_ids_len, TAGS_IDS_STR_LEN-tags_ids_len, "%s%lu", i==0?"":",", value);
|
||||
if (mpack_parse_uuid(mpack_node_array_at(node, i), tags_ids[i]) != 0)
|
||||
{
|
||||
TFE_LOG_ERROR(g_packet_io_logger, "%s: session %lu unexpected control packet: (%s[%d] len != uuid_t[%d])", LOG_TAG_CTRLPKT, handler->session_id, tags_ids_cmsg_name_maps[map_index], i, UUID_LEN);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
tfe_cmsg_set(handler->cmsg, (enum tfe_cmsg_tlv_type)tags_ids_cmsg_maps[map_index], (const unsigned char*)tags_ids_str, tags_ids_len);
|
||||
tfe_cmsg_set(handler->cmsg, (enum tfe_cmsg_tlv_type)tags_ids_cmsg_maps[map_index], (const unsigned char*)tags_ids, tags_ids_len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -336,8 +347,13 @@ static int proxy_parse_messagepack(mpack_node_t node, void *ctx, void *logger)
|
||||
return -1;
|
||||
}
|
||||
handler->tfe_policy_id_num = mpack_node_array_length(mpack_node_map_cstr(node, "rule_ids"));
|
||||
for (int i = 0; i < handler->tfe_policy_id_num; i++) {
|
||||
handler->tfe_policy_ids[i] = mpack_node_u64(mpack_node_array_at(mpack_node_map_cstr(node, "rule_ids"), i));
|
||||
for (int i = 0; i < handler->tfe_policy_id_num; i++)
|
||||
{
|
||||
if (mpack_parse_uuid(mpack_node_array_at(mpack_node_map_cstr(node, "rule_ids"), i), handler->tfe_policy_ids[i]) != 0)
|
||||
{
|
||||
TFE_LOG_ERROR(g_packet_io_logger, "%s: session %lu unexpected control packet: (proxy rule_ids[index:%d] len != uuid_t[16])", LOG_TAG_CTRLPKT, handler->session_id, i);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
mpack_node_t tcp_handshake = mpack_node_map_cstr(node, "tcp_handshake");
|
||||
@@ -466,8 +482,13 @@ int ctrl_packet_parser_parse(void *ctx, const char* data, size_t length, void *l
|
||||
goto error;
|
||||
}
|
||||
handler->sce_policy_id_num = mpack_node_array_length(mpack_node_map_cstr(sce_map, "rule_ids"));
|
||||
for (int i = 0; i < handler->sce_policy_id_num; i++) {
|
||||
handler->sce_policy_ids[i] = mpack_node_u64(mpack_node_array_at(mpack_node_map_cstr(sce_map, "rule_ids"), i));
|
||||
for (int i = 0; i < handler->sce_policy_id_num; i++)
|
||||
{
|
||||
if (mpack_parse_uuid(mpack_node_array_at(mpack_node_map_cstr(sce_map, "rule_ids"), i), handler->sce_policy_ids[i]) != 0)
|
||||
{
|
||||
TFE_LOG_ERROR(logger, "%s: session %lu unexpected control packet: (sce rule_ids[index:%d] len != uuid_t[16])", LOG_TAG_CTRLPKT, handler->session_id, i);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -545,7 +566,7 @@ void ctrl_packet_parser_dump(struct ctrl_pkt_parser *handler, void *logger)
|
||||
struct sids *sid = NULL;
|
||||
int map_index = 0;
|
||||
char *log_str = NULL;
|
||||
char tags_ids_str[4096] = {0};
|
||||
uuid_t tags_ids_array[128];
|
||||
int log_len = 0;
|
||||
log_str = (char *)calloc(1, LOG_STR_LEN);
|
||||
|
||||
@@ -560,12 +581,16 @@ void ctrl_packet_parser_dump(struct ctrl_pkt_parser *handler, void *logger)
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, ", tfe policy_id_num: %d, tfe policy_ids[", handler->tfe_policy_id_num);
|
||||
|
||||
for (int i = 0; i < handler->tfe_policy_id_num; i++) {
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "%03lu ", handler->tfe_policy_ids[i]);
|
||||
char str_tfe_policy_ids[UUID_STR_LEN] = {0};
|
||||
uuid_unparse(handler->tfe_policy_ids[i], str_tfe_policy_ids);
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "%s, ", str_tfe_policy_ids);
|
||||
}
|
||||
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "], sce policy_id_num: %d, sce policy_ids[", handler->sce_policy_id_num);
|
||||
for (int i = 0; i < handler->sce_policy_id_num; i++) {
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "%03lu ", handler->sce_policy_ids[i]);
|
||||
char str_sce_policy_ids[UUID_STR_LEN] = {0};
|
||||
uuid_unparse(handler->sce_policy_ids[i], str_sce_policy_ids);
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "%s, ", str_sce_policy_ids);
|
||||
}
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, "]");
|
||||
|
||||
@@ -596,13 +621,17 @@ void ctrl_packet_parser_dump(struct ctrl_pkt_parser *handler, void *logger)
|
||||
else if (mpack_table[i].type == MPACK_ARRAY_FQDN_TAGS_IDS)
|
||||
map_index = INDEX_FQDN_TAGS_IDS;
|
||||
|
||||
memset(tags_ids_str, 0, sizeof(tags_ids_str));
|
||||
ret = tfe_cmsg_get_value(handler->cmsg, (enum tfe_cmsg_tlv_type)tags_ids_cmsg_maps[map_index], (unsigned char *)tags_ids_str, sizeof(tags_ids_str), &size);
|
||||
memset(tags_ids_array, 0, sizeof(tags_ids_array));
|
||||
ret = tfe_cmsg_get_value(handler->cmsg, (enum tfe_cmsg_tlv_type)tags_ids_cmsg_maps[map_index], (unsigned char *)tags_ids_array, sizeof(tags_ids_array), &size);
|
||||
if (ret < 0) {
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, ", %s:null", tags_ids_cmsg_name_maps[map_index]);
|
||||
break;
|
||||
}
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, ", %s:%s", tags_ids_cmsg_name_maps[map_index], tags_ids_str);
|
||||
for (int i = 0; i < size/UUID_LEN; i++) {
|
||||
char str_tags_ids[UUID_STR_LEN] = {0};
|
||||
uuid_unparse(tags_ids_array[i], str_tags_ids);
|
||||
log_len += snprintf(log_str + log_len, LOG_STR_LEN - log_len, ", %s:%s", tags_ids_cmsg_name_maps[map_index], str_tags_ids);
|
||||
}
|
||||
break;
|
||||
case MPACK_ARRAY_SEQ_ROUTE_CTX:
|
||||
case MPACK_ARRAY_ACK_ROUTE_CTX:
|
||||
|
||||
Reference in New Issue
Block a user