ZBLOG

dpdk中arp请求,目标mac地址写什么,用c实现一段填写发送arp请求的代码,要求把对方mac地址带上

在DPDK中,当发送ARP请求时,目标MAC地址应该写0x00,0x00,0x00,0x00,0x00,0x00。这是因为ARP协议需要获取目标MAC地址,并且MAC地址还未知。

以下是一个使用C语言实现填写并发送ARP请求的示例代码,其中包括将目标MAC地址添加到ARP请求中:

#include <rte_ether.h>
#include <rte_arp.h>

/* Ethernet header */
struct ether_hdr eth_hdr;

/* ARP header */
struct arp_hdr arp_hdr;

/* Destination MAC address */
uint8_t dst_mac[ETHER_ADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

/* Source MAC address */
uint8_t src_mac[ETHER_ADDR_LEN];

/* Target IP address */
uint32_t target_ip = IPv4(192, 168, 0, 1);

/* Local IP address */
uint32_t local_ip = IPv4(192, 168, 0, 2);

/* Fill in the Ethernet header */
memset(&eth_hdr, 0, sizeof(struct ether_hdr));
ether_addr_copy(dst_mac, &eth_hdr.d_addr);
ether_addr_copy(src_mac, &eth_hdr.s_addr);
eth_hdr.ether_type = rte_cpu_to_be_16(ETHER_TYPE_ARP);

/* Fill in the ARP header */
memset(&arp_hdr, 0, sizeof(struct arp_hdr));
arp_hdr.htype = rte_cpu_to_be_16(ARP_HTYPE_ETH);
arp_hdr.ptype = rte_cpu_to_be_16(ARP_PTYPE_IPv4);
arp_hdr.hlen = ETHER_ADDR_LEN;
arp_hdr.plen = sizeof(uint32_t);
arp_hdr.opcode = rte_cpu_to_be_16(ARP_OP_REQUEST);
ether_addr_copy(src_mac, &arp_hdr.sha);
arp_hdr.sip = rte_cpu_to_be_32(local_ip);
ether_addr_copy(dst_mac, &arp_hdr.tha);
arp_hdr.tip = rte_cpu_to_be_32(target_ip);

/* Send the ARP request */
rte_eth_tx_burst(port_id, queue_id, &eth_hdr, sizeof(struct ether_hdr) + sizeof(struct arp_hdr));

在此示例代码中,我们使用DPDK的ETHER和ARP头文件来创建以太网和ARP头。首先,我们填写以太网头,将目标MAC地址设置为广播地址0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,并将源MAC地址设置为本机MAC地址。

接下来,我们填写ARP头,指定HTYPE、PTYPE、HLEN、PLEN、OPCODE等字段。在此示例中,我们使用请求操作码,并设置源MAC地址和源IP地址。对于目标MAC地址和目标IP地址,我们将它们保持为0x00,0x00,0x00,0x00,0x00,0x00和目标IP地址。

最后,我们使用DPDK的rte_eth_tx_burst()函数将以太网和ARP头发送到网络上。这将触发ARP请求,并尝试获取目标MAC地址。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=475

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?