Networking MAC头何时添加到linux网络堆栈中的sk_buff结构中

Networking MAC头何时添加到linux网络堆栈中的sk_buff结构中,networking,routing,linux-kernel,Networking,Routing,Linux Kernel,我只是想知道MAC头是在排队步骤之前还是在排队步骤之后添加到sk_buff结构中?我问这个问题的原因是,我正在htb队列规程中进行一些内核编程,并且我正在尝试查看/更改mac头。我将通过放置printk()语句,然后ping另一个IP来测试它。但是,我得到了以下信息: MAC长度:0 IP头长度:20 macHeaderset:0 真实尺寸:768 看起来数据包进展顺利,但MAC报头尚未添加。所以我的问题是,什么时候添加MAC头,当添加MAC头时,系统如何知道将什么作为MAC头中的MAC地址?(

我只是想知道MAC头是在排队步骤之前还是在排队步骤之后添加到sk_buff结构中?我问这个问题的原因是,我正在htb队列规程中进行一些内核编程,并且我正在尝试查看/更改mac头。我将通过放置printk()语句,然后ping另一个IP来测试它。但是,我得到了以下信息:

MAC长度:0 IP头长度:20 macHeaderset:0 真实尺寸:768


看起来数据包进展顺利,但MAC报头尚未添加。所以我的问题是,什么时候添加MAC头,当添加MAC头时,系统如何知道将什么作为MAC头中的MAC地址?(之前我认为MAC头是通过查看路由表在路由过程中添加的)

在打印出队列中的整个数据包字节并通过它之后,看起来MAC头确实是在排队之前添加的,但由于某些原因,sk_buff中的MAC头指针没有更新

编辑:进一步检查后,MAC头在排队前添加到sk_buff结构中,但实际目标MAC地址在到达传出硬件接口之前不会添加