tapip的工程框架

工程目录

目录 文件 Description
app 内嵌shell的网络命令
ping.c 网络请求命令
snc.c 网络监听命令
arp arp_cache.c 地址数据缓存
arp.c 地址解析处理逻辑
doc 工程文档
include 头文件
ip 网络层
icmp.c 网际控制报文协议
ip_forward.c 报文重定向
ip_in.c 收到ip数据报,交给运输层
ip_out.c 发送ip数据报,从运输层来
raw.c 读取链路层数据
route.c 路由寻找下一跳
lib 静态库文件
cbuf.c 环型缓冲数据结构
checksum.c 加和检查完整性
lib.c 打印、内存分配方法等
net 物理层、数据链路层
loop.c 事件轮询
net.c 数据链路层
netdev.c 网络设备相关
pkb.c 数据报相关
tap.c 操作tap设备
veth.c 虚拟网络,用户态处理的起点
shell 交互界面
main.c 程序启动入口
net_command.c 网络命令交互
ping_command.c ping命令交互
shell.c
socket
inet.c 绑定上层运输层协议
raw_sock.c 默认网络帧处理
sock.c 底层套接字
socket.c 上层套接字
tcp 模拟传输控制协议
tcp_in.c tcp报文接收处理
tcp_out.c tcp报文发送处理
tcp_reass.c 分配数据段?
tcp_sock.c tcp套接字相关
tcp_state.c 状态处理 RFC 793
tcp_text.c 滑动窗口收发数据
tcp_timer.c 超时计时器
udp 模拟用户数据报协议
udp_sock.c udp套接字相关
udp.c udp报文接收处理

编译过程

外层Makefile 配置调试选项、网络拓扑选项
执行make命令时,先用下层Makefile构建各个模块.o文件
各模块.o文件链接为目标文件xxx_obj.o
各模块目标文件,构建为可执行文件tapip

1
2
3
4
5
6
7
8
9
LD = ld
CC = gcc
CFLAGS = -Wall -I../include
LFLAGS = -pthread
export LD CC CFLAGS

ifeq ($(CONFIG_DEBUG), y)
CFLAGS += -g
endif
  • ld 链接器
  • gcc 编译器
  • -Wall 选项可以打印出编译时所有的错误或者警告信息
  • -I 选项指定寻找头文件的路径
  • -pthread 执行多线程选项
  • -g 选项是指可以用gdb调试

CMake中使用pthread实践