修正pcap模式下解密流量转发发包缓冲区未初始化的问题

This commit is contained in:
luqiuwen
2019-06-18 09:38:07 +08:00
parent d3e6be283e
commit 8f140e0b3d
4 changed files with 18 additions and 13 deletions

View File

@@ -54,7 +54,7 @@ struct profile_table_ex_data
struct traffic_mirror_ethdev_pcap struct traffic_mirror_ethdev_pcap
{ {
pcap_t * pcap_device_handle; pcap_t * pcap_device_handle;
char * sendbuf[TFE_THREAD_MAX]; char sendbuf[TFE_THREAD_MAX][ETHER_MAX_LEN];
}; };
struct traffic_mirror_ethdev_mr4 struct traffic_mirror_ethdev_mr4
@@ -78,10 +78,6 @@ struct traffic_mirror_ethdev
unsigned int en_offload_vlan; unsigned int en_offload_vlan;
unsigned int en_offload_ip_cksum; unsigned int en_offload_ip_cksum;
unsigned int en_offload_tcp_cksum; unsigned int en_offload_tcp_cksum;
/* PRIVATE, FOR PCAP */
pcap_t * pcap_device_handle;
char local_ether_addr[6]; char local_ether_addr[6];
enum traffic_mirror_ethdev_type type; enum traffic_mirror_ethdev_type type;

View File

@@ -465,6 +465,15 @@ int traffic_mirror_init(struct tfe_proxy * proxy)
const char * profile = "./conf/pangu/pangu_pxy.conf"; const char * profile = "./conf/pangu/pangu_pxy.conf";
const char * section = "maat"; const char * section = "maat";
unsigned int is_enable = 1;
MESA_load_profile_uint_def(profile, "traffic_mirror", "enable", &is_enable, 1);
if (!is_enable)
{
TFE_LOG_INFO(instance->logger, "traffic_mirror is disabled.");
return -1;
}
/* INIT DECRYPT MIRROR INSTANCE */ /* INIT DECRYPT MIRROR INSTANCE */
instance->logger = tfe_proxy_get_error_logger(); instance->logger = tfe_proxy_get_error_logger();
instance->nr_threads = tfe_proxy_get_work_thread_count(); instance->nr_threads = tfe_proxy_get_work_thread_count();

View File

@@ -101,7 +101,7 @@ static int pcap_ethdev_send_finish(struct traffic_mirror_ethdev * ethdev, unsign
assert(detail_pcap != NULL && detail_pcap->sendbuf[tid] != NULL); assert(detail_pcap != NULL && detail_pcap->sendbuf[tid] != NULL);
char * sendbuf = detail_pcap->sendbuf[tid]; char * sendbuf = detail_pcap->sendbuf[tid];
return pcap_sendpacket(ethdev->pcap_device_handle, (const u_char *)sendbuf, pktlen); return pcap_sendpacket(detail_pcap->pcap_device_handle, (const u_char *)sendbuf, pktlen);
} }
static void pcap_ethdev_send_abort(struct traffic_mirror_ethdev * ethdev, unsigned int tid) static void pcap_ethdev_send_abort(struct traffic_mirror_ethdev * ethdev, unsigned int tid)
@@ -111,7 +111,7 @@ static void pcap_ethdev_send_abort(struct traffic_mirror_ethdev * ethdev, unsign
static void pcap_ethdev_destroy(struct traffic_mirror_ethdev * ethdev) static void pcap_ethdev_destroy(struct traffic_mirror_ethdev * ethdev)
{ {
pcap_close(ethdev->pcap_device_handle); pcap_close(ethdev->detail_pcap->pcap_device_handle);
return free(ethdev); return free(ethdev);
} }
@@ -200,9 +200,9 @@ struct traffic_mirror_ethdev * traffic_mirror_ethdev_pcap_create(const char * st
ethdev->en_offload_tcp_cksum = 0; ethdev->en_offload_tcp_cksum = 0;
ethdev->en_offload_vlan = 0; ethdev->en_offload_vlan = 0;
/* open the device by pcap */ ethdev->detail_pcap = ALLOC(struct traffic_mirror_ethdev_pcap, 1);
ethdev->pcap_device_handle = pcap_open_live(str_ethdev, 0, 0, 0, pcap_errbuf); ethdev->detail_pcap->pcap_device_handle = pcap_open_live(str_ethdev, 0, 0, 0, pcap_errbuf);
if (!ethdev->pcap_device_handle) if (!ethdev->detail_pcap->pcap_device_handle)
{ {
TFE_LOG_ERROR(logger, "failed at pcap_open_live(), device = %s: %s", str_ethdev, pcap_errbuf); TFE_LOG_ERROR(logger, "failed at pcap_open_live(), device = %s: %s", str_ethdev, pcap_errbuf);
goto errout; goto errout;
@@ -258,7 +258,7 @@ struct traffic_mirror_ethdev * traffic_mirror_ethdev_pcap_create(const char * st
errout: errout:
if (fd > 0) close(fd); if (fd > 0) close(fd);
if (ethdev->pcap_device_handle) pcap_close(ethdev->pcap_device_handle); if (ethdev->detail_pcap->pcap_device_handle) pcap_close(ethdev->detail_pcap->pcap_device_handle);
if (ethdev) FREE(&ethdev); if (ethdev) FREE(&ethdev);
return nullptr; return nullptr;
} }

View File

@@ -80,8 +80,8 @@ static inline uint32_t __rte_raw_cksum(const void *buf, size_t len, uint32_t sum
static inline uint16_t __rte_raw_cksum_reduce(uint32_t sum) static inline uint16_t __rte_raw_cksum_reduce(uint32_t sum)
{ {
sum = ((sum & 0xffff0000U) >> 16) + (sum & 0xffffU); sum = ((sum & 0xffff0000U) >> 16U) + (sum & 0xffffU);
sum = ((sum & 0xffff0000U) >> 16) + (sum & 0xffffU); sum = ((sum & 0xffff0000U) >> 16U) + (sum & 0xffffU);
return (uint16_t) sum; return (uint16_t) sum;
} }