LwIP udp_input函数校验和代码

本文深入探讨了LwIP网络库中udp_input函数的校验和计算过程,详细解析了如何确保UDP数据包的完整性。通过分析源代码,阐述了校验和的计算原理和关键步骤,帮助读者更好地理解和使用LwIP进行UDP通信。
摘要由CSDN通过智能技术生成
#define ip4_addr_get_u32(src_ipaddr) ((src_ipaddr)->addr)
#define FOLD_U32T(u)          (((u) >> 16) + ((u) & 0x0000ffffUL))
#define SWAP_BYTES_IN_WORD(w) (((w) & 0xff) << 8) | (((w) & 0xff00) >> 8)

/*
 * Curt McDowell
 * Broadcom Corp.
 * csm@broadcom.com
 *
 * IP checksum two bytes at a time with support for
 * unaligned buffer.
 * Works for len up to and including 0x20000.
 * by Curt McDowell, Broadcom Corp. 12/08/2005
 *
 * @param dataptr points to start of data to be summed at any boundary
 * @param len length of data to be summed
 * @return host order (!) lwip checksum (non-inverted Internet sum)
 */
u16_t
lwip_standard_chksum(const void *dataptr, int len)
{
   
  const u8_t *pb = (const u8_t *)dataptr;
  const u16_t *ps;
  u16_t t = 0;
  u32_t sum = 0;
  int odd = ((mem_ptr_t)pb & 1);

  /* Get aligned to u16_t */
  if (odd && len > 0) {
   
    ((u8_t *)&t)[1] = *pb++;
    len--;
  }

  /* Add the bulk of the data */
  ps = (const u16_t *)(const void *
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lwip 是一个用于嵌入式系统的轻量级 IP 协议栈,udp_send 函数用于发送 UDP 数据报。你可以调用 udp_send 函数来发送 UDP 数据报,该函数的原型如下: ``` err_t udp_send(struct udp_pcb *pcb, struct pbuf *p); ``` 其中,`pcb` 是指向 udp_pcb 结构体的指针,表示 UDP 协议控制块。`p` 是指向 pbuf 结构体的指针,表示要发送的数据。该函数将会把 `p` 中的数据发送出去。 需要注意的是,调用 udp_send 函数之前,你需要先创建一个 udp_pcb 结构体,并通过 udp_bind 函数绑定到特定的端口上。同时,你还需要设置远程主机的 IP 地址和端口号。 以下是一个示例代码片段,展示了如何使用 lwipudp_send 函数发送 UDP 数据报: ```c #include <lwip/udp.h> // 创建 udp_pcb 结构体 struct udp_pcb *pcb; pcb = udp_new(); // 设置远程主机的 IP 地址和端口号 ip_addr_t remote_ip; IP_ADDR4(&remote_ip, 192, 168, 0, 2); u16_t remote_port = 12345; // 绑定到本地端口 udp_bind(pcb, IP_ADDR_ANY, 0); // 构造要发送的数据 const char *data = "Hello, UDP!"; int data_len = strlen(data); // 创建 pbuf 结构体 struct pbuf *p; p = pbuf_alloc(PBUF_TRANSPORT, data_len, PBUF_RAM); memcpy(p->payload, data, data_len); // 发送 UDP 数据报 udp_sendto(pcb, p, &remote_ip, remote_port); // 释放 pbuf 和 udp_pcb pbuf_free(p); udp_remove(pcb); ``` 以上代码创建了一个 udp_pcb 结构体,设置了远程主机的 IP 地址和端口号,并绑定到本地端口。然后,通过 pbuf_alloc 函数创建一个 pbuf 结构体,并将要发送的数据复制到 payload 中。最后,调用 udp_sendto 函数发送 UDP 数据报,并在发送完成后释放 pbuf 和 udp_pcb。 希望能帮到你!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值