爱上香烟
分类: LINUX
2016-05-27 20:10:58
转载:
3.4.7 添加或删除尾部数据
1.skb_add_data()
skb_add_data()将指定用户空间的数据添加到SKB的数据缓存区的尾部,操作过程如图3-22所示。如果成功则返回0,否则返回相应的错误码。参数skb为待添加数据的SKB;from为待添加的数据源,指向在用户空间的存储缓存区;copy为待添加数据的长度。
图3-22 skb_add_data()示意 a) 操作前 b) 操作后 |
2.skb_trim()
skb_trim()根据指定长度删除SKB的数据缓存区尾部的数据,如果新长度大于当前长度,则不作处理,操作过程如图3-23所示。调用该函数的前提条件是,待操作的SKB的数据必须是线性存储的。参数skb为待操作的SKB;len为删除尾部数据后剩余的长度。
图3-23 skb_trim()示意 a) 操作前 b) 操作后 |
3.pskb_trim()
pskb_trim()与skb_trim()功能类似,也是根据指定长度删除SKB尾部的数据。不同的是,pskb_trim()是skb_trim()的功能超集,不仅可以处理线性数据的SKB,还可以处理非线性的SKB。线性数据的处理过程与skb_trim()相同,非线性数据操作过程如图3-24 和图3-25所示。
图3-24 pskb_trim()示意--操作前 |
图3-25 pskb_trim()示意--操作后 |