/[lwip]/lwip/src/core/ipv4/ip_frag.c
ViewVC logotype

Diff of /lwip/src/core/ipv4/ip_frag.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.17 by likewise, Mon Jan 24 21:05:47 2005 UTC revision 1.18 by christiaans, Fri Nov 25 12:03:38 2005 UTC
# Line 142  ip_reass(struct pbuf *p) Line 142  ip_reass(struct pbuf *p)
142         reassembly buffer, we discard the entire packet. */         reassembly buffer, we discard the entire packet. */
143      if (offset > IP_REASS_BUFSIZE || offset + len > IP_REASS_BUFSIZE) {      if (offset > IP_REASS_BUFSIZE || offset + len > IP_REASS_BUFSIZE) {
144        LWIP_DEBUGF(IP_REASS_DEBUG,        LWIP_DEBUGF(IP_REASS_DEBUG,
145         ("ip_reass: fragment outside of buffer (%d:%d/%d).\n", offset,         ("ip_reass: fragment outside of buffer (%"S16_F":%"S16_F"/%"S16_F").\n", offset,
146          offset + len, IP_REASS_BUFSIZE));          offset + len, IP_REASS_BUFSIZE));
147        sys_untimeout(ip_reass_timer, NULL);        sys_untimeout(ip_reass_timer, NULL);
148        ip_reasstmr = 0;        ip_reasstmr = 0;
# Line 152  ip_reass(struct pbuf *p) Line 152  ip_reass(struct pbuf *p)
152      /* Copy the fragment into the reassembly buffer, at the right      /* Copy the fragment into the reassembly buffer, at the right
153         offset. */         offset. */
154      LWIP_DEBUGF(IP_REASS_DEBUG,      LWIP_DEBUGF(IP_REASS_DEBUG,
155       ("ip_reass: copying with offset %d into %d:%d\n", offset,       ("ip_reass: copying with offset %"S16_F" into %"S16_F":%"S16_F"\n", offset,
156        IP_HLEN + offset, IP_HLEN + offset + len));        IP_HLEN + offset, IP_HLEN + offset + len));
157      i = IPH_HL(fraghdr) * 4;      i = IPH_HL(fraghdr) * 4;
158      copy_from_pbuf(p, &i, &ip_reassbuf[IP_HLEN + offset], len);      copy_from_pbuf(p, &i, &ip_reassbuf[IP_HLEN + offset], len);
# Line 172  ip_reass(struct pbuf *p) Line 172  ip_reass(struct pbuf *p)
172           0xff. */           0xff. */
173        ip_reassbitmap[offset / (8 * 8)] |= bitmap_bits[(offset / 8) & 7];        ip_reassbitmap[offset / (8 * 8)] |= bitmap_bits[(offset / 8) & 7];
174        LWIP_DEBUGF(IP_REASS_DEBUG,        LWIP_DEBUGF(IP_REASS_DEBUG,
175         ("ip_reass: updating many bytes in bitmap (%d:%d).\n",         ("ip_reass: updating many bytes in bitmap (%"S16_F":%"S16_F").\n",
176          1 + offset / (8 * 8), (offset + len) / (8 * 8)));          1 + offset / (8 * 8), (offset + len) / (8 * 8)));
177        for (i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {        for (i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) {
178    ip_reassbitmap[i] = 0xff;    ip_reassbitmap[i] = 0xff;
# Line 191  ip_reass(struct pbuf *p) Line 191  ip_reass(struct pbuf *p)
191        ip_reassflags |= IP_REASS_FLAG_LASTFRAG;        ip_reassflags |= IP_REASS_FLAG_LASTFRAG;
192        ip_reasslen = offset + len;        ip_reasslen = offset + len;
193        LWIP_DEBUGF(IP_REASS_DEBUG,        LWIP_DEBUGF(IP_REASS_DEBUG,
194         ("ip_reass: last fragment seen, total len %d\n",         ("ip_reass: last fragment seen, total len %"S16_F"\n",
195          ip_reasslen));          ip_reasslen));
196      }      }
197    
# Line 204  ip_reass(struct pbuf *p) Line 204  ip_reass(struct pbuf *p)
204        for (i = 0; i < ip_reasslen / (8 * 8) - 1; ++i) {        for (i = 0; i < ip_reasslen / (8 * 8) - 1; ++i) {
205    if (ip_reassbitmap[i] != 0xff) {    if (ip_reassbitmap[i] != 0xff) {
206      LWIP_DEBUGF(IP_REASS_DEBUG,      LWIP_DEBUGF(IP_REASS_DEBUG,
207       ("ip_reass: last fragment seen, bitmap %d/%d failed (%x)\n",       ("ip_reass: last fragment seen, bitmap %"S16_F"/%"S16_F" failed (%"X16_F")\n",
208        i, ip_reasslen / (8 * 8) - 1, ip_reassbitmap[i]));        i, ip_reasslen / (8 * 8) - 1, ip_reassbitmap[i]));
209      goto nullreturn;      goto nullreturn;
210    }    }
# Line 214  ip_reass(struct pbuf *p) Line 214  ip_reass(struct pbuf *p)
214        if (ip_reassbitmap[ip_reasslen / (8 * 8)] !=        if (ip_reassbitmap[ip_reasslen / (8 * 8)] !=
215      (u8_t) ~ bitmap_bits[ip_reasslen / 8 & 7]) {      (u8_t) ~ bitmap_bits[ip_reasslen / 8 & 7]) {
216    LWIP_DEBUGF(IP_REASS_DEBUG,    LWIP_DEBUGF(IP_REASS_DEBUG,
217           ("ip_reass: last fragment seen, bitmap %d didn't contain %x (%x)\n",           ("ip_reass: last fragment seen, bitmap %"S16_F" didn't contain %"X16_F" (%"X16_F")\n",
218      ip_reasslen / (8 * 8), ~bitmap_bits[ip_reasslen / 8 & 7],      ip_reasslen / (8 * 8), ~bitmap_bits[ip_reasslen / 8 & 7],
219      ip_reassbitmap[ip_reasslen / (8 * 8)]));      ip_reassbitmap[ip_reasslen / (8 * 8)]));
220    goto nullreturn;    goto nullreturn;
# Line 243  ip_reass(struct pbuf *p) Line 243  ip_reass(struct pbuf *p)
243         available data in the pbuf is given by the q->len         available data in the pbuf is given by the q->len
244         variable. */         variable. */
245      LWIP_DEBUGF(IP_REASS_DEBUG,      LWIP_DEBUGF(IP_REASS_DEBUG,
246       ("ip_reass: memcpy from %p (%d) to %p, %d bytes\n",       ("ip_reass: memcpy from %p (%"S16_F") to %p, %"S16_F" bytes\n",
247        (void *)&ip_reassbuf[i], i, q->payload,        (void *)&ip_reassbuf[i], i, q->payload,
248        q->len > ip_reasslen - i ? ip_reasslen - i : q->len));        q->len > ip_reasslen - i ? ip_reasslen - i : q->len));
249      memcpy(q->payload, &ip_reassbuf[i],      memcpy(q->payload, &ip_reassbuf[i],

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26