diff options
| author | 崔一鸣 <[email protected]> | 2019-09-04 18:58:50 +0800 |
|---|---|---|
| committer | 崔一鸣 <[email protected]> | 2019-09-04 18:58:50 +0800 |
| commit | 94e8c6184dc3f2318065aba2fb51ef5f3ad8dc0e (patch) | |
| tree | 94810aa605419cba80cc302d8ae1148c0bf0de08 /common | |
| parent | b01f282f34bb468b79eef4f05f7271e7d94a0681 (diff) | |
完成polling接口改造和重复流量识别功能
Diffstat (limited to 'common')
| -rw-r--r-- | common/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | common/include/kni_utils.h | 50 | ||||
| -rw-r--r-- | common/src/kni_utils.cpp | 35 | ||||
| -rw-r--r-- | common/test/test_dabloom.cpp | 10 |
4 files changed, 72 insertions, 28 deletions
diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 70def4d..899cc1e 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -11,3 +11,8 @@ target_link_libraries(test_cmsg PRIVATE common) add_executable(test_uuid test/test_uuid.cpp) target_include_directories(test_uuid PRIVATE include) target_link_libraries(test_uuid PRIVATE uuid common) + +### test_dabloom +add_executable(test_dabloom test/test_dabloom.cpp) +target_include_directories(test_dabloom PRIVATE include) +target_link_libraries(test_dabloom PRIVATE dabloom common) diff --git a/common/include/kni_utils.h b/common/include/kni_utils.h index a38b1a2..83f7ea7 100644 --- a/common/include/kni_utils.h +++ b/common/include/kni_utils.h @@ -20,6 +20,7 @@ #define KNI_PATH_MAX 256 #define KNI_SYMBOL_MAX 64 #define KNI_DOMAIN_MAX 256 +#define KNI_ADDR_MAX 128 #ifndef MAX #define MAX(a, b) (((a) > (b)) ? (a) : (b)) @@ -57,19 +58,26 @@ struct kni_tcpopt_info{ uint16_t mss; uint8_t wscale_set; uint8_t wscale; - uint8_t ts; + uint8_t ts_set; uint8_t sack; + uint32_t ts_value; }; //field_stat -#define KNI_FIELD_MAX 64 +#define KNI_FS_FIELD_MAX 64 +#define KNI_FS_COLUMN_MAX 256 +#define KNI_FS_LINE_MAX 256 enum kni_field{ KNI_FIELD_INTCP_STM, KNI_FIELD_BYP_STM, - KNI_FIELD_POLICY_BYP, - KNI_FIELD_PME_NEW_FAIL, - KNI_FIELD_NO_TFE, + KNI_FIELD_BYP_STM_POLICY, + KNI_FIELD_BYP_STM_PME_NEW_FAIL, + KNI_FIELD_BYP_STM_NO_TFE, + KNI_FIELD_BYP_STM_ERR, + KNI_FIELD_BYP_STM_DUP_TFC, KNI_FIELD_STATE_UNKNOWN, + KNI_FIELD_DUP_TFC_STM, + //stream error KNI_FIELD_STM_ERR, KNI_FIELD_NO_SYN, KNI_FIELD_SINGLE_DIR, @@ -77,10 +85,9 @@ enum kni_field{ KNI_FIELD_NO_SA, KNI_FIELD_ACTION_INVALID, KNI_FIELD_NO_DATA, - KNI_FIELD_IPV4HDR_PARSE_FAIL, - KNI_FIELD_IPV6HDR_PARSE_FAIL, - KNI_FIELD_KA_ADD_FAIL, + KNI_FIELD_IPHDR_PARSE_FAIL, KNI_FIELD_EXCEED_MTU, + KNI_FIELD_STMERR_TUPLE2STM_ADD_FAIL, KNI_FIELD_SENDTO_TFE_FAIL, //others KNI_FIELD_NULL_PKT, @@ -92,27 +99,43 @@ enum kni_field{ KNI_FIELD_SENDLOG_FAIL, KNI_FIELD_PME_NEW_SUCC, KNI_FIELD_PME_FREE, + KNI_FIELD_IPV4HDR_PARSE_FAIL, + KNI_FIELD_IPV6HDR_PARSE_FAIL, KNI_FIELD_ID2PME_ADD_SUCC, KNI_FIELD_ID2PME_ADD_FAIL, KNI_FIELD_ID2PME_DEL_SUCC, KNI_FIELD_ID2PME_DEL_FAIL, - KNI_FIELD_KEEPALIVE_REPLAY_ADD_SUCC, - KNI_FIELD_KEEPALIVE_REPLAY_DEL_SUCC, - KNI_FIELD_KEEPALIVE_REPLAY_DEL_FAIL, + KNI_FIELD_TUPLE2STM_ADD_SUCC, + KNI_FIELD_TUPLE2STM_ADD_FAIL, + KNI_FIELD_TUPLE2STM_DEL_SUCC, + KNI_FIELD_TUPLE2STM_DEL_FAIL, KNI_FIELD_KNI_INTCP_BYTES, KNI_FIELD_TFE_INTCP_BYTES, KNI_FIELD_KNI_INTCP_STM, KNI_FIELD_TFE_INTCP_STM, + KNI_FIELD_TUPLE2STM_SEARCH_SUCC, + KNI_FIELD_TUPLE2STM_SEARCH_FAIL, + KNI_FIELD_SAPP_INJECT_SUCC, + KNI_FIELD_SAPP_INJECT_FAIL, + KNI_FIELD_BLOOM_SEARCH_SUCC, + KNI_FIELD_BLOOM_SEARCH_FAIL, + KNI_FIELD_BLOOM_ADD_SUCC, + KNI_FIELD_BLOOM_ADD_FAIL, //KNI_FIELD_TFE_STATUS_BASE must be last KNI_FIELD_TFE_STATUS_BASE, }; struct kni_field_stat_handle{ screen_stat_handle_t handle; - int fields[KNI_FIELD_MAX]; + int fields[KNI_FS_FIELD_MAX]; + int column_ids[KNI_FS_COLUMN_MAX]; + int line_ids[KNI_FS_LINE_MAX]; + int column_cnt; + int line_cnt; }; struct pkt_info{ + addr_type_t addr_type; union{ struct iphdr *v4; struct ip6_hdr *v6; @@ -135,7 +158,8 @@ enum kni_ipv6hdr_parse_error{ KNI_IPV6HDR_PARSE_ERROR_INVALID_TYPE = -3, }; -int kni_stream_addr_trans(const struct layer_addr *addr, addr_type_t addr_type, char *output, int len); +int kni_addr_trans_v4(struct stream_tuple4_v4 *tuple4, char *output, int len); +int kni_addr_trans_v6(struct stream_tuple4_v6 *tuple4, char *output, int len); uint16_t kni_ip_checksum(const void *buf, size_t hdr_len); uint16_t kni_tcp_checksum(const void *_buf, size_t len, in_addr_t src_addr, in_addr_t dest_addr); uint16_t kni_tcp_checksum_v6(const void *_buf, size_t len, struct in6_addr src_addr, struct in6_addr dest_addr); diff --git a/common/src/kni_utils.cpp b/common/src/kni_utils.cpp index 52f8295..cafaa73 100644 --- a/common/src/kni_utils.cpp +++ b/common/src/kni_utils.cpp @@ -3,22 +3,24 @@ #include <netinet/ip6.h> #include <net/if.h> -int kni_stream_addr_trans(const struct layer_addr *addr, addr_type_t addr_type, char *output, int len){ +int kni_addr_trans_v4(struct stream_tuple4_v4 *tuple4, char *output, int len){ + char saddr[INET_ADDRSTRLEN]; + char daddr[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &(tuple4->saddr), saddr, INET_ADDRSTRLEN); + inet_ntop(AF_INET, &(tuple4->daddr), daddr, INET_ADDRSTRLEN); + uint16_t source = ntohs(tuple4->source); + uint16_t dest = ntohs(tuple4->dest); + snprintf(output, len, "%s:%d -> %s:%d", saddr, source, daddr, dest); + return 0; +} + +int kni_addr_trans_v6(struct stream_tuple4_v6 *tuple4, char *output, int len){ char saddr[INET6_ADDRSTRLEN]; char daddr[INET6_ADDRSTRLEN]; - uint16_t source, dest; - if(addr_type == ADDR_TYPE_IPV6){ - inet_ntop(AF_INET6, &(addr->tuple4_v6->saddr), saddr, INET6_ADDRSTRLEN); - inet_ntop(AF_INET6, &(addr->tuple4_v6->daddr), daddr, INET6_ADDRSTRLEN); - source = ntohs(addr->tuple4_v6->source); - dest = ntohs(addr->tuple4_v6->dest); - } - else{ - inet_ntop(AF_INET, &(addr->tuple4_v4->saddr), saddr, INET6_ADDRSTRLEN); - inet_ntop(AF_INET, &(addr->tuple4_v4->daddr), daddr, INET6_ADDRSTRLEN); - source = ntohs(addr->tuple4_v4->source); - dest = ntohs(addr->tuple4_v4->dest); - } + inet_ntop(AF_INET6, tuple4->saddr, saddr, INET6_ADDRSTRLEN); + inet_ntop(AF_INET6, tuple4->daddr, daddr, INET6_ADDRSTRLEN); + uint16_t source = ntohs(tuple4->source); + uint16_t dest = ntohs(tuple4->dest); snprintf(output, len, "%s:%d -> %s:%d", saddr, source, daddr, dest); return 0; } @@ -195,7 +197,8 @@ struct kni_tcpopt_info* kni_get_tcpopt(struct tcphdr* tcphdr,int tcphdr_len){ break; case TCPOPT_TIMESTAMP: if ((opsize == TCPOLEN_TIMESTAMP)){ - tcpopt->ts = 1; + tcpopt->ts_set = 1; + tcpopt->ts_value = *(uint32_t*)ptr; } break; case TCPOPT_SACK_PERMITTED: @@ -333,6 +336,7 @@ int kni_ipv4_header_parse(const void *a_packet, struct pkt_info *pktinfo){ if(a_packet == NULL){ return KNI_IPV4HDR_PARSE_ERROR_NULL_PACKET; } + pktinfo->addr_type = ADDR_TYPE_IPV4; pktinfo->iphdr.v4 = (struct iphdr*)a_packet; pktinfo->iphdr_len = pktinfo->iphdr.v4->ihl * 4; pktinfo->ip_totlen = ntohs(pktinfo->iphdr.v4->tot_len); @@ -347,6 +351,7 @@ int kni_ipv6_header_parse(const void *a_packet, struct pkt_info *pktinfo){ if(a_packet == NULL){ return KNI_IPV6HDR_PARSE_ERROR_NULL_PACKET; } + pktinfo->addr_type = ADDR_TYPE_IPV6; pktinfo->iphdr.v6 = (struct ip6_hdr*)a_packet; pktinfo->ip_totlen = ntohs(pktinfo->iphdr.v6->ip6_ctlun.ip6_un1.ip6_un1_plen) + sizeof(struct ip6_hdr); uint8_t next_hdr_type = pktinfo->iphdr.v6->ip6_ctlun.ip6_un1.ip6_un1_nxt; diff --git a/common/test/test_dabloom.cpp b/common/test/test_dabloom.cpp new file mode 100644 index 0000000..67bd7d1 --- /dev/null +++ b/common/test/test_dabloom.cpp @@ -0,0 +1,10 @@ +#include <stdio.h> +#include <stdlib.h> +extern "C" { + #include "dablooms.h" +} + + +int main(int argc, char *argv[]){ + +}
\ No newline at end of file |
