--- C:/igmp_patch/igmp_original.c Fri Nov 16 14:31:11 2007 +++ C:/igmp_patch/igmp.c Fri Mar 07 13:42:28 2008 @@ -350,7 +350,7 @@ /* Note that the length CAN be greater than 8 but only 8 are used - All are included in the checksum */ iphdr = p->payload; - if (pbuf_header(p, -(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { + if (pbuf_header(p, -(s16_t)(IPH_HL(iphdr) * 4)) || (p->len < IGMP_MINLEN)) { pbuf_free(p); IGMP_STATS_INC(igmp.lenerr); LWIP_DEBUGF(IGMP_DEBUG, ("igmp_input: length error\n")); @@ -718,19 +718,17 @@ iphdr = p->payload; if (dest != IP_HDRINCL) { - iphdr->_ttl_proto = (proto<<8); - iphdr->_ttl_proto |= ttl; + iphdr->_ttl_proto = htons((ttl<<8) | proto); /* iphdr->dest = dest->addr; */ ip_addr_set(&(iphdr->dest), dest); #ifdef HAVE_BITFIELDS - iphdr->_v_hl_tos |= ((IP_HLEN+ ROUTER_ALERTLEN)/4)<<16; - iphdr->_v_hl_tos |= 4<<24; + iphdr->_v_hl_tos |= ((IP_HLEN+ ROUTER_ALERTLEN)/4)<<16; ??? htons, _v_hl_tos is u16_t ??? + iphdr->_v_hl_tos |= 4<<24; ??? htons, _v_hl_tos is u16_t ??? #else - iphdr->_v_hl_tos = (4 << 4) | ((IP_HLEN + ROUTER_ALERTLEN)/ 4 & 0xf); + iphdr->_v_hl_tos = htons( ((0x4000 | (((IP_HLEN+ROUTER_ALERTLEN)/ 4) & 0xf) << 8) | 0) ); #endif /* HAVE_BITFIELDS */ - iphdr->_v_hl_tos |= 0; iphdr->_len = htons(p->tot_len); iphdr->_offset = htons(0); iphdr->_id = htons(ip_id++); @@ -742,7 +740,7 @@ } iphdr->_chksum = 0; - iphdr->_chksum = inet_chksum(iphdr, IP_HLEN + ROUTER_ALERTLEN); + iphdr->_chksum = htons(inet_chksum(iphdr, IP_HLEN + ROUTER_ALERTLEN)); } else { dest = &(iphdr->dest); }