目标
之前虽然能够解析udp报文,但无法承载上面的应用程序。换句话说,我们希望udp_server程序使用我们提供的API,API的函数内部是对于报文的解析。
解释server:UDP 不同于 TCP,不存在请求连接和受理过程,因此在某种意义上无法明确区分服务器端和客户端,只是因为其提供服务而称为服务器端。1
详细的,请看如下的一个使用内核api的udp程序 unix_udp.c
:
之前虽然能够解析udp报文,但无法承载上面的应用程序。换句话说,我们希望udp_server程序使用我们提供的API,API的函数内部是对于报文的解析。
解释server:UDP 不同于 TCP,不存在请求连接和受理过程,因此在某种意义上无法明确区分服务器端和客户端,只是因为其提供服务而称为服务器端。1
详细的,请看如下的一个使用内核api的udp程序 unix_udp.c
:
之前是在main函数的while(1)中实现了全部功能,本次把之前的流水账改为层次化。层次化需要不同模块共同运作,依赖环形队列进行数据传送,这就叫做“异步解耦”。如图所示。
arp的相关功能分为:
在前面实现了“4.应答其他人发来的arp请求”,本节来实现“2”和“3”.
还记得前面是手动在windows的cmd中添加一条静态arp表项。如果没有此项,windows会广播arp请求报文,但在虚拟机上我们没做应答功能。
如果做了应答功能,那么就能完成mac地址的自动解析,就不用手动添加了。
#if ENABLE_SEND
与 #endif
间。rte_eth_macaddr_get(gDpdkPortId, (struct rte_ether_addr *)gSrcMac);
)从绑定pci地址(dpdk-setup.sh的【49】那一步来的)rte_memcpy(gDstMac, ehdr->s_addr.addr_bytes, RTE_ETHER_ADDR_LEN);
)工具 | 用途 | 版本 |
---|---|---|
Ubuntu虚拟机 | 运行dpdk代码 | 16 Server |
vmware | 虚拟机软件 | 17 |
Source Insight | 阅读代码、编写代码 | |
NetAssist | 模拟发包 | 5.0.14 |
xshell | 远程连接 | 8(free for home/school) |
wireshark | 抓包,看包到底发出去了没有 | 4.2.4 |
Samba | 在虚拟机里装,共享文件 |