summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
author童宗振 <[email protected]>2023-12-29 04:09:08 +0000
committer陆秋文 <[email protected]>2023-12-29 04:09:08 +0000
commitbf85d39733c93f00c9c3540156ced32c34dbf837 (patch)
tree8dd72a7e87122a6d09b8284ec64ba5cf3b62322b /app/src
parentdda2a20a5fc0187f304994fd116711e40fec8493 (diff)
fix compile warning
Diffstat (limited to 'app/src')
-rw-r--r--app/src/arp.c268
-rw-r--r--app/src/marsio.c3
2 files changed, 141 insertions, 130 deletions
diff --git a/app/src/arp.c b/app/src/arp.c
index 2d0085a..538bdca 100644
--- a/app/src/arp.c
+++ b/app/src/arp.c
@@ -1,146 +1,155 @@
/* \brief 简单协议栈ARP/RARP协议处理模块
-*
-* 处理ARP/RARP协议报文数据
-*
-* \author Lu Qiuwen<[email protected]>
-* \date 2016-10-21
-*/
+ *
+ * 处理ARP/RARP协议报文数据
+ *
+ * \author Lu Qiuwen<[email protected]>
+ * \date 2016-10-21
+ */
-#include <rte_malloc.h>
-#include <rte_arp.h>
-#include <rte_version.h>
+#include <arp.h>
#include <common.h>
-#include <neigh.h>
-#include <vdev_define.h>
#include <mrapp.h>
+#include <neigh.h>
#include <netinet/in.h>
-#include <arp.h>
#include <protect.h>
+#include <rte_arp.h>
+#include <rte_malloc.h>
+#include <rte_version.h>
+#include <vdev_define.h>
-static struct rte_ether_addr broadcast_hwaddr = { { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF } };
+static struct rte_ether_addr broadcast_hwaddr = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
-static inline int __local_frame_filter(struct vdev * vdev, struct rte_ether_addr * ether_addr)
+static inline int __local_frame_filter(const struct vdev * vdev, const struct rte_ether_addr * ether_addr)
{
- if (rte_is_broadcast_ether_addr(ether_addr)) return 1;
- if (rte_is_same_ether_addr(&vdev->ether_addr, ether_addr)) return 1;
+ if (rte_is_broadcast_ether_addr(ether_addr))
+ return 1;
+ if (rte_is_same_ether_addr(&vdev->ether_addr, ether_addr))
+ return 1;
return 0;
}
-static inline int __local_inaddr_filter(struct vdev * vdev, struct in_addr * in_addr)
+static inline int __local_inaddr_filter(const struct vdev * vdev, const struct in_addr * in_addr)
{
return (vdev->in_addr.s_addr == in_addr->s_addr);
}
-static void arp_reply_entry(struct neighbour_manager * neigh_manager,
- struct vdev_instance* vdi, queue_id_t qid, struct rte_mbuf * mbuf, struct rte_arp_hdr * arp_header)
+static void arp_reply_entry(struct neighbour_manager * neigh_manager, struct vdev_instance * vdi, queue_id_t qid,
+ struct rte_mbuf * mbuf, struct rte_arp_hdr * arp_header)
{
- struct in_addr * s_in_addr = (struct in_addr *)&arp_header->arp_data.arp_sip;
- struct in_addr * d_in_addr = (struct in_addr *)&arp_header->arp_data.arp_tip;
- struct rte_ether_addr * s_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_sha;
- struct rte_ether_addr * d_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_tha;
-
- // 检测目的IP地址、MAC地址是否是本机的
- if (!__local_frame_filter(vdi->vdev, d_eth_addr))
- goto invalid_frame;
- if (!__local_inaddr_filter(vdi->vdev, d_in_addr))
- goto invalid_frame;
-
- // TODO: 错误处理
- neigh_create_or_update(neigh_manager, *s_in_addr, s_eth_addr, vdi, 0);
+ struct in_addr s_in_addr;
+ struct in_addr d_in_addr;
+ memcpy(&s_in_addr, &arp_header->arp_data.arp_sip, sizeof(struct in_addr));
+ memcpy(&d_in_addr, &arp_header->arp_data.arp_tip, sizeof(struct in_addr));
+ struct rte_ether_addr * s_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_sha;
+ struct rte_ether_addr * d_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_tha;
+
+ // 检测目的IP地址、MAC地址是否是本机的
+ if (!__local_frame_filter(vdi->vdev, d_eth_addr))
+ goto invalid_frame;
+ if (!__local_inaddr_filter(vdi->vdev, &d_in_addr))
+ goto invalid_frame;
+
+ // TODO: 错误处理
+ neigh_create_or_update(neigh_manager, s_in_addr, s_eth_addr, vdi, 0);
invalid_frame:
- return;
+ return;
}
-static void arp_request_entry(struct neighbour_manager * neigh_manager, struct vdev_instance * vdi,
- queue_id_t qid, struct rte_mbuf * mbuf, struct rte_arp_hdr * arp_header)
+static void arp_request_entry(struct neighbour_manager * neigh_manager, struct vdev_instance * vdi, queue_id_t qid,
+ struct rte_mbuf * mbuf, struct rte_arp_hdr * arp_header)
{
- struct in_addr * s_in_addr = (struct in_addr *)&arp_header->arp_data.arp_sip;
- struct in_addr * d_in_addr = (struct in_addr *)&arp_header->arp_data.arp_tip;
- struct rte_ether_addr * s_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_sha;
- struct rte_ether_addr * d_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_tha;
-
- // 过滤非广播报文和非目的MAC是本机的报文
- if (!(rte_is_zero_ether_addr(d_eth_addr) || __local_frame_filter(vdi->vdev, d_eth_addr)))
- goto done;
-
- // 根据广播的ARP报文,更新邻居表
- neigh_create_or_update(neigh_manager, *s_in_addr, s_eth_addr, vdi, 0);
-
- // 对请求是本机的,进行响应
- if (!__local_inaddr_filter(vdi->vdev, d_in_addr))
- goto done;
-
- struct rte_mbuf * reply_mbuf = PROTECT_rte_pktmbuf_alloc(vdi->direct_pool);
- if (unlikely(reply_mbuf == NULL)) goto done;
-
- // 构造以太网头
- struct rte_ether_hdr * ether_hdr = (struct rte_ether_hdr *) PROTECT_rte_pktmbuf_append(
- reply_mbuf, sizeof(struct rte_ether_hdr));
-
-#if RTE_VERSION_NUM(21,11,0,0) <= RTE_VERSION
+ struct in_addr s_in_addr;
+ struct in_addr d_in_addr;
+ memcpy(&s_in_addr, &arp_header->arp_data.arp_sip, sizeof(struct in_addr));
+ memcpy(&d_in_addr, &arp_header->arp_data.arp_tip, sizeof(struct in_addr));
+ struct rte_ether_addr * s_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_sha;
+ struct rte_ether_addr * d_eth_addr = (struct rte_ether_addr *)&arp_header->arp_data.arp_tha;
+
+ // 过滤非广播报文和非目的MAC是本机的报文
+ if (!(rte_is_zero_ether_addr(d_eth_addr) || __local_frame_filter(vdi->vdev, d_eth_addr)))
+ goto done;
+
+ // 根据广播的ARP报文,更新邻居表
+ neigh_create_or_update(neigh_manager, s_in_addr, s_eth_addr, vdi, 0);
+
+ // 对请求是本机的,进行响应
+ if (!__local_inaddr_filter(vdi->vdev, &d_in_addr))
+ goto done;
+
+ struct rte_mbuf * reply_mbuf = PROTECT_rte_pktmbuf_alloc(vdi->direct_pool);
+ if (unlikely(reply_mbuf == NULL))
+ goto done;
+
+ // 构造以太网头
+ struct rte_ether_hdr * ether_hdr =
+ (struct rte_ether_hdr *)PROTECT_rte_pktmbuf_append(reply_mbuf, sizeof(struct rte_ether_hdr));
+
+#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
rte_ether_addr_copy(&vdi->vdev->ether_addr, &ether_hdr->src_addr);
rte_ether_addr_copy(&arp_header->arp_data.arp_sha, &ether_hdr->dst_addr);
#else
- rte_ether_addr_copy(&vdi->vdev->ether_addr, &ether_hdr->s_addr);
- rte_ether_addr_copy(&arp_header->arp_data.arp_sha, &ether_hdr->d_addr);
+ rte_ether_addr_copy(&vdi->vdev->ether_addr, &ether_hdr->s_addr);
+ rte_ether_addr_copy(&arp_header->arp_data.arp_sha, &ether_hdr->d_addr);
#endif
- ether_hdr->ether_type = ntohs(RTE_ETHER_TYPE_ARP);
+ ether_hdr->ether_type = ntohs(RTE_ETHER_TYPE_ARP);
- // 构造ARP应答
- struct rte_arp_hdr * reply_arp_hdr = (struct rte_arp_hdr *) PROTECT_rte_pktmbuf_append(
- reply_mbuf, sizeof(struct rte_arp_hdr));
+ // 构造ARP应答
+ struct rte_arp_hdr * reply_arp_hdr =
+ (struct rte_arp_hdr *)PROTECT_rte_pktmbuf_append(reply_mbuf, sizeof(struct rte_arp_hdr));
- rte_memcpy(reply_arp_hdr, arp_header, sizeof(struct rte_arp_hdr));
- reply_arp_hdr->arp_opcode = ntohs(RTE_ARP_OP_REPLY);
+ rte_memcpy(reply_arp_hdr, arp_header, sizeof(struct rte_arp_hdr));
+ reply_arp_hdr->arp_opcode = ntohs(RTE_ARP_OP_REPLY);
#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
rte_ether_addr_copy(&ether_hdr->src_addr, &reply_arp_hdr->arp_data.arp_sha);
- rte_ether_addr_copy(&ether_hdr->dst_addr, &reply_arp_hdr->arp_data.arp_tha);
+ rte_ether_addr_copy(&ether_hdr->dst_addr, &reply_arp_hdr->arp_data.arp_tha);
#else
rte_ether_addr_copy(&ether_hdr->s_addr, &reply_arp_hdr->arp_data.arp_sha);
- rte_ether_addr_copy(&ether_hdr->d_addr, &reply_arp_hdr->arp_data.arp_tha);
+ rte_ether_addr_copy(&ether_hdr->d_addr, &reply_arp_hdr->arp_data.arp_tha);
#endif
- reply_arp_hdr->arp_data.arp_sip = vdi->vdev->in_addr.s_addr;
- reply_arp_hdr->arp_data.arp_tip = s_in_addr->s_addr;
-
- // 写应答包到线路
- mrapp_packet_fast_send_burst(vdi, qid, &reply_mbuf, 1);
+ reply_arp_hdr->arp_data.arp_sip = vdi->vdev->in_addr.s_addr;
+ reply_arp_hdr->arp_data.arp_tip = s_in_addr.s_addr;
+
+ // 写应答包到线路
+ mrapp_packet_fast_send_burst(vdi, qid, &reply_mbuf, 1);
done:
- return;
+ return;
}
-int arp_entry(struct mr_instance * instance, struct vdev_instance* vdi, queue_id_t qid,
- struct rte_mbuf* mbufs_in[], int nr_mbufs_in)
+int arp_entry(struct mr_instance * instance, struct vdev_instance * vdi, queue_id_t qid, struct rte_mbuf * mbufs_in[],
+ int nr_mbufs_in)
{
- int handled_packets = 0;
+ int handled_packets = 0;
+
+ for (int i = 0; i < nr_mbufs_in; i++)
+ {
+ struct rte_mbuf * mbuf = mbufs_in[i];
+ if (unlikely(mbuf == NULL))
+ continue;
- for (int i = 0; i < nr_mbufs_in; i++)
- {
- struct rte_mbuf * mbuf = mbufs_in[i];
- if (unlikely(mbuf == NULL)) continue;
+ struct rte_ether_hdr * eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *);
+ if (eth_hdr->ether_type != ntohs(RTE_ETHER_TYPE_ARP))
+ continue;
- struct rte_ether_hdr * eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *);
- if (eth_hdr->ether_type != ntohs(RTE_ETHER_TYPE_ARP)) continue;
-
- struct rte_arp_hdr * arp_hdr = rte_pktmbuf_mtod_offset(
- mbuf, struct rte_arp_hdr *, sizeof(struct rte_ether_hdr));
+ struct rte_arp_hdr * arp_hdr =
+ rte_pktmbuf_mtod_offset(mbuf, struct rte_arp_hdr *, sizeof(struct rte_ether_hdr));
- if (arp_hdr->arp_opcode == ntohs(RTE_ARP_OP_REQUEST))
- arp_request_entry(instance->neigh, vdi, qid, mbuf, arp_hdr);
- else if (arp_hdr->arp_opcode == ntohs(RTE_ARP_OP_REPLY))
- arp_reply_entry(instance->neigh, vdi, qid, mbuf, arp_hdr);
+ if (arp_hdr->arp_opcode == ntohs(RTE_ARP_OP_REQUEST))
+ arp_request_entry(instance->neigh, vdi, qid, mbuf, arp_hdr);
+ else if (arp_hdr->arp_opcode == ntohs(RTE_ARP_OP_REPLY))
+ arp_reply_entry(instance->neigh, vdi, qid, mbuf, arp_hdr);
- handled_packets++;
- }
+ handled_packets++;
+ }
- return handled_packets;
+ return handled_packets;
}
-int arp_request_send(struct vdev_instance* vdi, queue_id_t qid, struct in_addr in_addr)
+int arp_request_send(struct vdev_instance * vdi, queue_id_t qid, struct in_addr in_addr)
{
- struct vdev * dev_info = vdi->vdev;
+ struct vdev * dev_info = vdi->vdev;
if (unlikely(dev_info->enable == 0))
{
MR_DEBUG("Send ARP request on disable device %s, failed.", dev_info->symbol);
@@ -153,42 +162,43 @@ int arp_request_send(struct vdev_instance* vdi, queue_id_t qid, struct in_addr i
return -EINVAL;
}
- struct rte_ether_addr * src_hwaddr = &dev_info->ether_addr;
- struct rte_ether_addr * dst_hwaddr = &broadcast_hwaddr;
+ struct rte_ether_addr * src_hwaddr = &dev_info->ether_addr;
+ struct rte_ether_addr * dst_hwaddr = &broadcast_hwaddr;
- struct in_addr in_addr_src = dev_info->in_addr;
- struct rte_mbuf * req_mbuf = PROTECT_rte_pktmbuf_alloc(vdi->direct_pool);
- if (unlikely(req_mbuf == NULL)) return -ENOBUFS;
+ struct in_addr in_addr_src = dev_info->in_addr;
+ struct rte_mbuf * req_mbuf = PROTECT_rte_pktmbuf_alloc(vdi->direct_pool);
+ if (unlikely(req_mbuf == NULL))
+ return -ENOBUFS;
- // 构造以太网头
- struct rte_ether_hdr * ether_hdr = (struct rte_ether_hdr *) PROTECT_rte_pktmbuf_append(
- req_mbuf, sizeof(struct rte_ether_hdr));
+ // 构造以太网头
+ struct rte_ether_hdr * ether_hdr =
+ (struct rte_ether_hdr *)PROTECT_rte_pktmbuf_append(req_mbuf, sizeof(struct rte_ether_hdr));
-#if RTE_VERSION_NUM(21,11,0,0) <= RTE_VERSION
- rte_ether_addr_copy(src_hwaddr, &ether_hdr->src_addr);
- rte_ether_addr_copy(dst_hwaddr, &ether_hdr->dst_addr);
+#if RTE_VERSION_NUM(21, 11, 0, 0) <= RTE_VERSION
+ rte_ether_addr_copy(src_hwaddr, &ether_hdr->src_addr);
+ rte_ether_addr_copy(dst_hwaddr, &ether_hdr->dst_addr);
#else
- rte_ether_addr_copy(src_hwaddr, &ether_hdr->s_addr);
- rte_ether_addr_copy(dst_hwaddr, &ether_hdr->d_addr);
+ rte_ether_addr_copy(src_hwaddr, &ether_hdr->s_addr);
+ rte_ether_addr_copy(dst_hwaddr, &ether_hdr->d_addr);
#endif
- ether_hdr->ether_type = htons(RTE_ETHER_TYPE_ARP);
-
- // 构造ARP请求报文
- struct rte_arp_hdr * arp_hdr = (struct rte_arp_hdr *) PROTECT_rte_pktmbuf_append(
- req_mbuf, sizeof(struct rte_arp_hdr));
-
- arp_hdr->arp_hardware = htons(RTE_ARP_HRD_ETHER);
- arp_hdr->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
- arp_hdr->arp_hlen = 6;
- arp_hdr->arp_plen = 4;
- arp_hdr->arp_opcode = htons(RTE_ARP_OP_REQUEST);
- arp_hdr->arp_data.arp_sip = in_addr_src.s_addr;
- arp_hdr->arp_data.arp_tip = in_addr.s_addr;
-
- rte_ether_addr_copy(src_hwaddr, &arp_hdr->arp_data.arp_sha);
- memset(&arp_hdr->arp_data.arp_tha, 0, sizeof(arp_hdr->arp_data.arp_tha));
-
- // 写数据包到线路
- mrapp_packet_fast_send_burst(vdi, qid, &req_mbuf, 1);
- return 0;
+ ether_hdr->ether_type = htons(RTE_ETHER_TYPE_ARP);
+
+ // 构造ARP请求报文
+ struct rte_arp_hdr * arp_hdr =
+ (struct rte_arp_hdr *)PROTECT_rte_pktmbuf_append(req_mbuf, sizeof(struct rte_arp_hdr));
+
+ arp_hdr->arp_hardware = htons(RTE_ARP_HRD_ETHER);
+ arp_hdr->arp_protocol = htons(RTE_ETHER_TYPE_IPV4);
+ arp_hdr->arp_hlen = 6;
+ arp_hdr->arp_plen = 4;
+ arp_hdr->arp_opcode = htons(RTE_ARP_OP_REQUEST);
+ arp_hdr->arp_data.arp_sip = in_addr_src.s_addr;
+ arp_hdr->arp_data.arp_tip = in_addr.s_addr;
+
+ rte_ether_addr_copy(src_hwaddr, &arp_hdr->arp_data.arp_sha);
+ memset(&arp_hdr->arp_data.arp_tha, 0, sizeof(arp_hdr->arp_data.arp_tha));
+
+ // 写数据包到线路
+ mrapp_packet_fast_send_burst(vdi, qid, &req_mbuf, 1);
+ return 0;
} \ No newline at end of file
diff --git a/app/src/marsio.c b/app/src/marsio.c
index a9dd2da..16de860 100644
--- a/app/src/marsio.c
+++ b/app/src/marsio.c
@@ -305,6 +305,7 @@ int send_register_request(struct app_register_req * reg_req)
};
uintptr_t ptr_address = (uintptr_t)reg_req;
+ struct app_register_resp * rep_msg = NULL;
struct rte_mp_msg reg_msg = {};
strncpy(reg_msg.name, "instance_alive_register", sizeof(reg_msg.name) - 1);
@@ -321,7 +322,7 @@ int send_register_request(struct app_register_req * reg_req)
uintptr_t stored_ptr_address;
memcpy(&stored_ptr_address, mp_reply.msgs->param, sizeof(uintptr_t));
- struct app_register_resp * rep_msg = (struct app_register_resp *)stored_ptr_address;
+ rep_msg = (struct app_register_resp *)stored_ptr_address;
// 应用注册失败,退出。
if (rep_msg->errcode != 0)