From b06c0b77e147b11f8eb097dc2cfd189d5b389b90 Mon Sep 17 00:00:00 2001 From: luwenpeng Date: Fri, 24 Feb 2023 15:32:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8marsio=20API=E8=8E=B7?= =?UTF-8?q?=E5=8F=96dev=5Fendpoint=E7=9A=84MAC=20address?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/sce.conf | 8 ++++++-- platform/src/packet_io.cpp | 42 ++++++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/conf/sce.conf b/conf/sce.conf index 8656d0f..15f2429 100644 --- a/conf/sce.conf +++ b/conf/sce.conf @@ -29,8 +29,12 @@ rx_burst_max=128 app_symbol=sce dev_endpoint=eth_sf_endpoint dev_nf_interface=eth_nf_interface -default_src_ip=192.168.100.1 -default_src_mac=aa:aa:aa:aa:aa:aa +dev_endpoint_src_ip=192.168.100.1 + +# If the configuration file does not set src mac, get src mac through marsio_get_device_ether_addr(); +# If the configuration file has src mac set, use the src mac in the file +# dev_endpoint_src_mac=aa:aa:aa:aa:aa:aa + # only used for bypass_all_traffic=2 default_dst_ip=192.168.100.2 default_dst_mac=bb:bb:bb:bb:bb:bb diff --git a/platform/src/packet_io.cpp b/platform/src/packet_io.cpp index 3c6c920..1070ae7 100644 --- a/platform/src/packet_io.cpp +++ b/platform/src/packet_io.cpp @@ -43,9 +43,9 @@ struct config char dev_endpoint[256]; char dev_nf_interface[256]; - char default_src_ip[16]; + char dev_endpoint_src_ip[16]; + char dev_endpoint_src_mac[32]; char default_dst_ip[16]; - char default_src_mac[32]; char default_dst_mac[32]; }; @@ -232,6 +232,12 @@ struct packet_io *packet_io_create(const char *profile, int thread_num) goto error_out; } + if (strlen(handle->config.dev_endpoint_src_mac) == 0) + { + marsio_get_device_ether_addr(handle->dev_endpoint.mr_dev, handle->config.dev_endpoint_src_mac, sizeof(handle->config.dev_endpoint_src_mac)); + LOG_DEBUG("%s: PACKET_IO->dev_endpoint_src_mac : %s (get from marsio api)", LOG_TAG_PKTIO, handle->config.dev_endpoint_src_mac); + } + return handle; error_out: @@ -363,9 +369,11 @@ int packet_io_polling_nf_interface(struct packet_io *handle, int thread_seq, voi { case RAW_PKT_ERR_BYPASS: throughput_metrics_inc(&g_metrics->dev_nf_interface_err_bypass, 1, action_bytes); + throughput_metrics_inc(&g_metrics->dev_nf_interface_tx, 1, raw_len); break; case RAW_PKT_HIT_BYPASS: throughput_metrics_inc(&g_metrics->hit_bypass_policy, 1, action_bytes); + throughput_metrics_inc(&g_metrics->dev_nf_interface_tx, 1, raw_len); break; case RAW_PKT_HIT_BLOCK: throughput_metrics_inc(&g_metrics->hit_block_policy, 1, action_bytes); @@ -467,9 +475,9 @@ static int packet_io_config(const char *profile, struct config *config) MESA_load_profile_string_nodef(profile, "PACKET_IO", "dev_endpoint", config->dev_endpoint, sizeof(config->dev_endpoint)); MESA_load_profile_string_nodef(profile, "PACKET_IO", "dev_nf_interface", config->dev_nf_interface, sizeof(config->dev_nf_interface)); - MESA_load_profile_string_nodef(profile, "PACKET_IO", "default_src_ip", config->default_src_ip, sizeof(config->default_src_ip)); + MESA_load_profile_string_nodef(profile, "PACKET_IO", "dev_endpoint_src_ip", config->dev_endpoint_src_ip, sizeof(config->dev_endpoint_src_ip)); MESA_load_profile_string_nodef(profile, "PACKET_IO", "default_dst_ip", config->default_dst_ip, sizeof(config->default_dst_ip)); - MESA_load_profile_string_nodef(profile, "PACKET_IO", "default_src_mac", config->default_src_mac, sizeof(config->default_src_mac)); + MESA_load_profile_string_nodef(profile, "PACKET_IO", "dev_endpoint_src_mac", config->dev_endpoint_src_mac, sizeof(config->dev_endpoint_src_mac)); MESA_load_profile_string_nodef(profile, "PACKET_IO", "default_dst_mac", config->default_dst_mac, sizeof(config->default_dst_mac)); if (config->rx_burst_max > RX_BURST_MAX) @@ -496,15 +504,19 @@ static int packet_io_config(const char *profile, struct config *config) return -1; } - LOG_DEBUG("%s: PACKET_IO->bypass_all_traffic : %d", LOG_TAG_PKTIO, config->bypass_all_traffic); - LOG_DEBUG("%s: PACKET_IO->rx_burst_max : %d", LOG_TAG_PKTIO, config->rx_burst_max); - LOG_DEBUG("%s: PACKET_IO->app_symbol : %s", LOG_TAG_PKTIO, config->app_symbol); - LOG_DEBUG("%s: PACKET_IO->dev_endpoint : %s", LOG_TAG_PKTIO, config->dev_endpoint); - LOG_DEBUG("%s: PACKET_IO->dev_nf_interface : %s", LOG_TAG_PKTIO, config->dev_nf_interface); - LOG_DEBUG("%s: PACKET_IO->default_src_ip : %s", LOG_TAG_PKTIO, config->default_src_ip); - LOG_DEBUG("%s: PACKET_IO->default_dst_ip : %s", LOG_TAG_PKTIO, config->default_dst_ip); - LOG_DEBUG("%s: PACKET_IO->default_src_mac : %s", LOG_TAG_PKTIO, config->default_src_mac); - LOG_DEBUG("%s: PACKET_IO->default_dst_mac : %s", LOG_TAG_PKTIO, config->default_dst_mac); + LOG_DEBUG("%s: PACKET_IO->bypass_all_traffic : %d", LOG_TAG_PKTIO, config->bypass_all_traffic); + LOG_DEBUG("%s: PACKET_IO->rx_burst_max : %d", LOG_TAG_PKTIO, config->rx_burst_max); + LOG_DEBUG("%s: PACKET_IO->app_symbol : %s", LOG_TAG_PKTIO, config->app_symbol); + LOG_DEBUG("%s: PACKET_IO->dev_endpoint : %s", LOG_TAG_PKTIO, config->dev_endpoint); + LOG_DEBUG("%s: PACKET_IO->dev_nf_interface : %s", LOG_TAG_PKTIO, config->dev_nf_interface); + LOG_DEBUG("%s: PACKET_IO->dev_endpoint_src_ip : %s", LOG_TAG_PKTIO, config->dev_endpoint_src_ip); + LOG_DEBUG("%s: PACKET_IO->default_dst_ip : %s", LOG_TAG_PKTIO, config->default_dst_ip); + if (strlen(config->dev_endpoint_src_mac)) + { + LOG_DEBUG("%s: PACKET_IO->dev_endpoint_src_mac : %s (get from configuration file)", LOG_TAG_PKTIO, config->dev_endpoint_src_mac); + } + + LOG_DEBUG("%s: PACKET_IO->default_dst_mac : %s", LOG_TAG_PKTIO, config->default_dst_mac); return 0; } @@ -1001,8 +1013,8 @@ static int forward_packet_to_sf(struct packet_io *handle, marsio_buff_t *rx_buff g_vxlan_set_sf_index(g_vxlan_hdr, sf->sf_index); g_vxlan_set_traffic_type(g_vxlan_hdr, meta->traffic_is_decrypted); - build_ether_header(eth_hdr, ETH_P_IP, handle->config.default_src_mac, sf->sf_dst_mac); - build_ip_header(ip_hdr, IPPROTO_UDP, handle->config.default_src_ip, sf->sf_dst_ip, sizeof(struct udp_hdr) + sizeof(struct g_vxlan) + meta->raw_len); + build_ether_header(eth_hdr, ETH_P_IP, handle->config.dev_endpoint_src_mac, sf->sf_dst_mac); + build_ip_header(ip_hdr, IPPROTO_UDP, handle->config.dev_endpoint_src_ip, sf->sf_dst_ip, sizeof(struct udp_hdr) + sizeof(struct g_vxlan) + meta->raw_len); build_udp_header((const char *)&ip_hdr->ip_src, 8, udp_hdr, meta->session_id % (65535 - 49152) + 49152, 4789, sizeof(struct g_vxlan) + meta->raw_len); int raw_len = marsio_buff_datalen(rx_buff);