Hi Frank,

LwIP can manage checksums either through software or by offloading the task
to hardware.

You can configure these options in `lwipopt.h`:

```c
//***************************************************
// ---------- checksum options ----------
//***************************************************
//#define CHECKSUM_GEN_IP 1
//#define CHECKSUM_GEN_UDP 1
//#define CHECKSUM_GEN_TCP 1
//#define CHECKSUM_CHECK_IP 1
//#define CHECKSUM_CHECK_UDP 1
//#define CHECKSUM_CHECK_TCP 1
```

Regards,
Rémy


Le sam. 12 avr. 2025 à 08:04, Nathan Martin <t...@t2n.org> a écrit :

> lwIP does not generate the Ethernet frame check sequence (FCS) value on
> packet output. That responsbility is on the Ethernet / Wi-Fi driver or
> hardware MAC. lwIP also does not check the Ethernet FCS value on packet
> input processing either. Both cases are so commonly handled by MAC+PHY
> hardware side its probably why it wasn't implemented in LwIP.
>
> However I can confirm that the UDP checksum is being generated
> successfully in your packet dump:
>
> 000028 *59 A9* 01 01 06 00 01 00
>
>
> May I ask what MAC+PHY you're using?
>
>
>         -Nathan
>
>
> On 4/11/2025 6:38 PM, Van Hooft, Frank via lwip-users wrote:
>
> I have a single ethernet netif and have it configured (I believe) to
> calculate & generate checksums.  This is in a no-OS environment. I am
> trying to use DHCP. But packets generated by LwIP always have zeros at the
> end.
>
> Here's what I see, from a start-up, with some logging enabled:
>
>
> netif: added interface A0 IP addr 0.0.0.0 netmask 0.0.0.0 gw 0.0.0.0
> netif: setting default interface A0
> dhcp_start(netif=0x200001a0) A00
> dhcp_start(): mallocing new DHCP client
> dhcp_start(): allocated dhcp
> dhcp_start(): starting DHCP configuration
> udp_bind(ipaddr = 0.0.0.0, port = 68)
> udp_bind: bound to 0.0.0.0, port 68)
> udp_connect: connected to 0.0.0.0, port 67)
> dhcp_discover()
> transaction id xid(abcd0001)
> dhcp_discover: making request
> dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST,
> LWIP_IANA_PORT_DHCP_SERVER)
> udp_send: added header in given pbuf 0x20003124
> udp_send: sending datagram of length 316
> udp_send: UDP packet length 316
> udp_send: UDP checksum 0xa959
> udp_send: ip_output_if (,,,,0x11,)
> ethernet_output: sending packet 0x20003124
>
>
> 000000 FF FF FF FF FF FF 38 24
> 000008 31 06 C6 C3 00 08 45 00
> 000010 50 01 00 00 00 00 FF 11
> 000018 6B EC 00 00 00 00 FF FF
> 000020 FF FF 44 00 43 00 3C 01
> 000028 59 A9 01 01 06 00 01 00
> 000030 CD AB 00 00 00 00 00 00
> 000038 00 00 00 00 00 00 00 00
> 000040 00 00 00 00 00 00 38 24
> 000048 31 06 C6 C3 00 00 00 00
> 000050 00 00 00 00 00 00 00 00
> 000058 00 00 00 00 00 00 00 00
> 000060 00 00 00 00 00 00 00 00
> 000068 00 00 00 00 00 00 00 00
> 000070 00 00 00 00 00 00 00 00
> 000078 00 00 00 00 00 00 00 00
> 000080 00 00 00 00 00 00 00 00
> 000088 00 00 00 00 00 00 00 00
> 000090 00 00 00 00 00 00 00 00
> 000098 00 00 00 00 00 00 00 00
> 0000A0 00 00 00 00 00 00 00 00
> 0000A8 00 00 00 00 00 00 00 00
> 0000B0 00 00 00 00 00 00 00 00
> 0000B8 00 00 00 00 00 00 00 00
> 0000C0 00 00 00 00 00 00 00 00
> 0000C8 00 00 00 00 00 00 00 00
> 0000D0 00 00 00 00 00 00 00 00
> 0000D8 00 00 00 00 00 00 00 00
> 0000E0 00 00 00 00 00 00 00 00
> 0000E8 00 00 00 00 00 00 00 00
> 0000F0 00 00 00 00 00 00 00 00
> 0000F8 00 00 00 00 00 00 00 00
> 000100 00 00 00 00 00 00 00 00
> 000108 00 00 00 00 00 00 00 00
> 000110 00 00 00 00 00 00 63 53
> 000118 82 63 35 01 01 39 02 05
> 000120 DC 0C 08 53 50 45 5F 54
> 000128 65 73 74 37 03 01 03 1C
> 000130 FF 00 00 00 00 00 00 00
> 000138 00 00 00 00 00 00 00 00
> 000140 00 00 00 00 00 00 00 00
> 000148 00 00 00 00 00 00 00 00
> 000150 00 00 00 00 00 00 00 00
> 000158 00 00 00 00 00 00
>
>
> dhcp_discover: deleting()
> dhcp_discover: SELECTING
> dhcp_discover(): set request timeout 2000 msecs
>
> NETIF
> MTU=0x5DC
> CkhSum Flgs=0xFFFF
> Flags=0x3F
> IP=0x0
> NetMask=0x0
> GW=0x0
>
>
> The packet printout and some netif contents printout is debugging I've
> added. This packet is transmitted, as-is, onto the line. Wireshark sees
> this packet (unchanged as above), and wireshark complains about the invalid
> FCS.
>
> I am new to LwIP, so I assume I'm doing something wrong in my setup.
>
> I'm assuming the above is a DHCP discover packet?
>
> Any idea how to get the FCS working at the end of the packet?
>
>
>
> My lwipopts.h file contents looks like this:
>
>
> #define PROCESSOR_LITTLE_ENDIAN
>
> #define LWIP_DEBUG 1
> #define ETHARP_DEBUG  LWIP_DBG_ON
> #define NETIF_DEBUG LWIP_DBG_ON
> #define DHCP_DEBUG LWIP_DBG_ON
> #define UDP_DEBUG  LWIP_DBG_ON
> #define MEMP_DEBUG LWIP_DBG_ON
> #define MEM_DEBUG LWIP_DBG_ON
> //#define ICMP_DEBUG LWIP_DBG_ON
>
> #define NO_SYS 1
> #define MEM_LIBC_MALLOC 0
> #define MEM_CUSTOM_ALLOCATOR     0
> #define MEMP_MEM_INIT           1
> #define MEM_ALIGNMENT           4
> #define MEM_SIZE                 1600
>
> #define MEM_USE_POOLS           1
> #define MEM_USE_POOLS_TRY_BIGGER_POOL 1
> #define MEMP_USE_CUSTOM_POOLS           1
>
> #define LWIP_IPV4                       1
> #define LWIP_IPV6                       0
> #define LWIP_UDP                        1
> #define LWIP_TCP                        0
> #define LWIP_ARP                        1
> #define LWIP_ICMP                       1
> #define LWIP_DHCP                       1
> #define LWIP_AUTOIP 0
> // LWIP_ARP enables LWIP_ETHERNET in opt.h
>
> #define IP_REASSEMBLY                   0
> #define IP_FRAG                         0
>
> #define LWIP_RAW                        1
> #define LWIP_NETCONN                    0
> #define LWIP_SOCKET                     0
>
> #define LWIP_NETIF_TX_SINGLE_PBUF 1
> #define LWIP_SINGLE_NETIF               1
>
> // This defaults to 0, but it can be nice to
> // have a hostname, for human readability
> #define LWIP_NETIF_HOSTNAME 1
>
> #define LWIP_CHECKSUM_CTRL_PER_NETIF 1
> #define CHECKSUM_GEN_IP   1
> #define CHECKSUM_GEN_UDP   1
> #define CHECKSUM_GEN_TCP   1
> #define CHECKSUM_GEN_ICMP   1
> #define CHECKSUM_GEN_ICMP6   1
> #define CHECKSUM_CHECK_IP   1
> #define CHECKSUM_CHECK_UDP   1
> #define CHECKSUM_CHECK_TCP   1
> #define CHECKSUM_CHECK_ICMP   1
> #define CHECKSUM_CHECK_ICMP6   1
> #define LWIP_CHECKSUM_ON_COPY   0
>
>
>
> Many thanks.
>
> *Frank*
>
> _______________________________________________
> lwip-users mailing 
> listlwip-users@nongnu.orghttps://lists.nongnu.org/mailman/listinfo/lwip-users
>
>
> _______________________________________________
> lwip-users mailing list
> lwip-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/lwip-users
>
_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to