summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
author崔一鸣 <[email protected]>2019-09-04 18:58:50 +0800
committer崔一鸣 <[email protected]>2019-09-04 18:58:50 +0800
commit94e8c6184dc3f2318065aba2fb51ef5f3ad8dc0e (patch)
tree94810aa605419cba80cc302d8ae1148c0bf0de08 /common
parentb01f282f34bb468b79eef4f05f7271e7d94a0681 (diff)
完成polling接口改造和重复流量识别功能
Diffstat (limited to 'common')
-rw-r--r--common/CMakeLists.txt5
-rw-r--r--common/include/kni_utils.h50
-rw-r--r--common/src/kni_utils.cpp35
-rw-r--r--common/test/test_dabloom.cpp10
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