lance.c (9307d8bdd4de57183bb421d18d34d21febe98656) lance.c (c6499eccad497913a5025fbde8ae76da70e08043)
1/* $NetBSD: lance.c,v 1.34 2005/12/24 20:27:30 perry Exp $ */
2
3/*-
4 * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace

--- 380 unchanged lines hidden (view full) ---

389
390 if (totlen <= ETHER_HDR_LEN || totlen > LEBLEN - ETHER_CRC_LEN) {
391#ifdef LEDEBUG
392 if_printf(ifp, "invalid packet size %d; dropping\n", totlen);
393#endif
394 return (NULL);
395 }
396
1/* $NetBSD: lance.c,v 1.34 2005/12/24 20:27:30 perry Exp $ */
2
3/*-
4 * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace

--- 380 unchanged lines hidden (view full) ---

389
390 if (totlen <= ETHER_HDR_LEN || totlen > LEBLEN - ETHER_CRC_LEN) {
391#ifdef LEDEBUG
392 if_printf(ifp, "invalid packet size %d; dropping\n", totlen);
393#endif
394 return (NULL);
395 }
396
397 MGETHDR(m0, M_DONTWAIT, MT_DATA);
397 MGETHDR(m0, M_NOWAIT, MT_DATA);
398 if (m0 == NULL)
399 return (NULL);
400 m0->m_pkthdr.rcvif = ifp;
401 m0->m_pkthdr.len = totlen;
402 len = MHLEN;
403 m = m0;
404
405 while (totlen > 0) {
406 if (totlen >= MINCLSIZE) {
398 if (m0 == NULL)
399 return (NULL);
400 m0->m_pkthdr.rcvif = ifp;
401 m0->m_pkthdr.len = totlen;
402 len = MHLEN;
403 m = m0;
404
405 while (totlen > 0) {
406 if (totlen >= MINCLSIZE) {
407 MCLGET(m, M_DONTWAIT);
407 MCLGET(m, M_NOWAIT);
408 if ((m->m_flags & M_EXT) == 0)
409 goto bad;
410 len = MCLBYTES;
411 }
412
413 if (m == m0) {
414 newdata = (caddr_t)
415 ALIGN(m->m_data + ETHER_HDR_LEN) - ETHER_HDR_LEN;
416 len -= newdata - m->m_data;
417 m->m_data = newdata;
418 }
419
420 m->m_len = len = min(totlen, len);
421 (*sc->sc_copyfrombuf)(sc, mtod(m, caddr_t), boff, len);
422 boff += len;
423
424 totlen -= len;
425 if (totlen > 0) {
408 if ((m->m_flags & M_EXT) == 0)
409 goto bad;
410 len = MCLBYTES;
411 }
412
413 if (m == m0) {
414 newdata = (caddr_t)
415 ALIGN(m->m_data + ETHER_HDR_LEN) - ETHER_HDR_LEN;
416 len -= newdata - m->m_data;
417 m->m_data = newdata;
418 }
419
420 m->m_len = len = min(totlen, len);
421 (*sc->sc_copyfrombuf)(sc, mtod(m, caddr_t), boff, len);
422 boff += len;
423
424 totlen -= len;
425 if (totlen > 0) {
426 MGET(newm, M_DONTWAIT, MT_DATA);
426 MGET(newm, M_NOWAIT, MT_DATA);
427 if (newm == 0)
428 goto bad;
429 len = MLEN;
430 m = m->m_next = newm;
431 }
432 }
433
434 return (m0);

--- 389 unchanged lines hidden ---
427 if (newm == 0)
428 goto bad;
429 len = MLEN;
430 m = m->m_next = newm;
431 }
432 }
433
434 return (m0);

--- 389 unchanged lines hidden ---