当我看到这些代码时,我把linux网络协议栈中的ip_append_data搞混了:
if (!(rt->u.dst.dev->features&NETIF_F_SG)) {
unsigned int off;
off = skb->len;
if (getfrag(from, skb_put(skb, copy),
offset, copy, off, skb) < 0) {
__skb_trim(skb, off);
e
我需要知道在什么地方可以对e1000 linux驱动程序中接收/传输的网络数据包进行归零。我需要知道这一点才能通过一个遵从性要求,但我无法在e1000的代码中找到对网络数据包缓冲区进行零化的地方(或者如果它已经在某个地方进行了零化,那就太好了)
当接口在文件Intel_LAN_15.0.0_Linux_Source_A00/Source/base_driver/e1000e-2.4.14/src/netdev.c中的内核中、e1000_clean_rx_ring()函数和e1000_clean_tx_ring()函数中上升或下降时,我看到它确实会引起零化:
/* Zero out th
我修改了linux内核中的UDP代码,以实现发送和接收缓冲区,以处理数据包的无序传递。在新代码中,每当我试图从接收缓冲区向套接字传递多个数据包时,就会出现内核崩溃。我的代码片段:
while(!skb_queue_empty(&sk->sk_receive_queue)){
skb = skb_peek(&sk->sk_receive_queue);
qb = QUIC_SKB_CB(skb);
//Check if this is the packet to be received
if(qb->sequence != qp
在Linux论坛上的asking about the same problem和一些bug测试之后,我得到了以下似乎与我的问题相关的信息: 我正在构建一个应用程序,它将传入的数据包通过内核网络钩子转移到用户空间中的代理,该代理从tcp套接字读取数据,然后将其发送到其原始目的地。当数据包进入时,我将skb目标地址更改为我的代理tcp服务器的地址,当它离开时,我更改源地址,以便通信将透明地通过。 我遇到了以下问题: 当大量数据进入时,它们会毫无问题地到达代理服务器。 但是,在将数据发送到其原始目的地时,如果我发送的数据量足够大,系统就会挂起。Caveman调试表明,skb只有在离开代理时才是非线