当前位置: 技术问答>linux和unix
linux内核中sk_buff的问题
来源: 互联网 发布时间:2016-04-25
本文导语: 内核编程,定义了一个struct sk_buff skb; 把skb相应的数据段填充好了之后,包括网络各层的信息和要发送的数据, 问如何实现发送skb到网络,有相应的API吗?或者这个过程应该怎么做? 貌似netfilter的源码中有这样的...
内核编程,定义了一个struct sk_buff skb;
把skb相应的数据段填充好了之后,包括网络各层的信息和要发送的数据,
问如何实现发送skb到网络,有相应的API吗?或者这个过程应该怎么做?
貌似netfilter的源码中有这样的例子,但我还没看。
刚开始内核编程,请大家不吝赐教。
把skb相应的数据段填充好了之后,包括网络各层的信息和要发送的数据,
问如何实现发送skb到网络,有相应的API吗?或者这个过程应该怎么做?
貌似netfilter的源码中有这样的例子,但我还没看。
刚开始内核编程,请大家不吝赐教。
|
一般状况下你要发送skb需要将skb里面的dev指针赋值为你要发送的那个设备
然后直接调用dev_queue_xmit即可,
这个函数里面也很简单,将skb加入到NIC的发送队列里面后OS的工作就完成了,生下来的事情就是网卡驱动和网卡硬件做的了
然后直接调用dev_queue_xmit即可,
这个函数里面也很简单,将skb加入到NIC的发送队列里面后OS的工作就完成了,生下来的事情就是网卡驱动和网卡硬件做的了
|
楼主的意思是如何发送sk_struct的package的信息的,那就看IP协议的原理和相关的code吧。
然后再看TCP的协议。
具体内容太多,你先看看这个先。
然后再看TCP的协议。
具体内容太多,你先看看这个先。
|
这个过程由网卡芯片做,你只要按手册去配置你的网卡(比如:你的SKB的物理地址写哪里,你的TX_RING的地址等),具体的要看你的网卡芯片手册。
|
LDD3的网络设备驱动
|
实现的过程在网卡的驱动程序里面。具体需要看网卡的芯片手册,还有系统分配给网卡的地址。