zoukankan      html  css  js  c++  java
  • pbuf类型和应用

    下面的讨论仅限于RAW API。

    按存储方式分类

    1. PBUF_RAM

        从一般性的Heap中分配。可用空间大小受MEM_SIZE宏控制。可看作一般意义上的动态内存。

        用途:

        a) 将应用层中的待发送数据复制下来(当使用拷贝发送时)

        b) 构造请求类的数据包(ARP,DHCP,DNS,etc)

        c) 当发送零拷贝数据时,需要额外的pbuf用于下层协议的协议头

    2. PBUF_POOL

        驱动使用这种类型的PBUF接收网卡数据包。其数量和大小受PBUF_POOL_SIZE和PBUF_POOL_BUFSIZE这两个宏控制。

        默认情况下使用和PBUF_RAM互相独立的缓冲(可更改options使用公共缓冲?)。

        当单个PBUF_POOL不满足大小要求时,会分配多个PBUF_POOL并link在一起。

        一般用于数据包的接收。

    3. PBUF_ROM/REF

        当应用程序使用零拷贝选项发送数据时,使用这种类型的pbuf保存待发送数据位置和长度。

        可用数量受MEMP_NUM_PBUF控制。

        由于这种类型的pbuf只有头部,所以占用空间不大。

        需要说明的是,PBUF_POOL和PBUF_ROM/REF这两种类型的pbuf大小和数量是在编译时确定的,所以它们都由lwip的内存池管理代码管着(memp_malloc/memp_free)。

    按协议层分类

    PBUF_TRANSPORT, PBUF_IP, PBUF_LINK, PBUF_RAW

  • 相关阅读:
    多个装饰器装饰一个函数
    DRF 里面DestroyAPIView实例
    ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-e7q1vcuk/mysqlclient/解决办法!
    python3 协程爬取两张妹子图
    python3 协程简单运用爬取两张妹子图
    gevent 简单运用
    D
    C
    B
    javascript cookie
  • 原文地址:https://www.cnblogs.com/byeyear/p/3525515.html
Copyright © 2011-2022 走看看