usbatm.c (f0eef25339f92f7cd4aeea23d9ae97987a5a1e82) usbatm.c (27a884dc3cb63b93c2b3b643f5b31eed5f8a4d26)
1/******************************************************************************
2 * usbatm.c - Generic USB xDSL driver core
3 *
4 * Copyright (C) 2001, Alcatel
5 * Copyright (C) 2003, Duncan Sands, SolNegro, Josep Comas
6 * Copyright (C) 2004, David Woodhouse, Roman Kagan
7 *
8 * This program is free software; you can redistribute it and/or modify it

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

330 atm_warn(instance, "%s: OAM not supported (vpi %d, vci %d)!\n",
331 __func__, vpi, vci);
332 atomic_inc(&vcc->stats->rx_err);
333 return;
334 }
335
336 sarb = instance->cached_vcc->sarb;
337
1/******************************************************************************
2 * usbatm.c - Generic USB xDSL driver core
3 *
4 * Copyright (C) 2001, Alcatel
5 * Copyright (C) 2003, Duncan Sands, SolNegro, Josep Comas
6 * Copyright (C) 2004, David Woodhouse, Roman Kagan
7 *
8 * This program is free software; you can redistribute it and/or modify it

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

330 atm_warn(instance, "%s: OAM not supported (vpi %d, vci %d)!\n",
331 __func__, vpi, vci);
332 atomic_inc(&vcc->stats->rx_err);
333 return;
334 }
335
336 sarb = instance->cached_vcc->sarb;
337
338 if (sarb->tail + ATM_CELL_PAYLOAD > sarb->end) {
338 if (skb_tail_pointer(sarb) + ATM_CELL_PAYLOAD > sarb->end) {
339 atm_rldbg(instance, "%s: buffer overrun (sarb->len %u, vcc: 0x%p)!\n",
340 __func__, sarb->len, vcc);
341 /* discard cells already received */
342 skb_trim(sarb, 0);
339 atm_rldbg(instance, "%s: buffer overrun (sarb->len %u, vcc: 0x%p)!\n",
340 __func__, sarb->len, vcc);
341 /* discard cells already received */
342 skb_trim(sarb, 0);
343 UDSL_ASSERT(sarb->tail + ATM_CELL_PAYLOAD <= sarb->end);
343 UDSL_ASSERT(skb_tail_pointer(sarb) + ATM_CELL_PAYLOAD <= sarb->end);
344 }
345
344 }
345
346 memcpy(sarb->tail, source + ATM_CELL_HEADER, ATM_CELL_PAYLOAD);
346 memcpy(skb_tail_pointer(sarb), source + ATM_CELL_HEADER, ATM_CELL_PAYLOAD);
347 __skb_put(sarb, ATM_CELL_PAYLOAD);
348
349 if (pti & 1) {
350 struct sk_buff *skb;
351 unsigned int length;
352 unsigned int pdu_length;
353
354 length = (source[ATM_CELL_SIZE - 6] << 8) + source[ATM_CELL_SIZE - 5];

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

365
366 if (sarb->len < pdu_length) {
367 atm_rldbg(instance, "%s: bogus pdu_length %u (sarb->len: %u, vcc: 0x%p)!\n",
368 __func__, pdu_length, sarb->len, vcc);
369 atomic_inc(&vcc->stats->rx_err);
370 goto out;
371 }
372
347 __skb_put(sarb, ATM_CELL_PAYLOAD);
348
349 if (pti & 1) {
350 struct sk_buff *skb;
351 unsigned int length;
352 unsigned int pdu_length;
353
354 length = (source[ATM_CELL_SIZE - 6] << 8) + source[ATM_CELL_SIZE - 5];

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

365
366 if (sarb->len < pdu_length) {
367 atm_rldbg(instance, "%s: bogus pdu_length %u (sarb->len: %u, vcc: 0x%p)!\n",
368 __func__, pdu_length, sarb->len, vcc);
369 atomic_inc(&vcc->stats->rx_err);
370 goto out;
371 }
372
373 if (crc32_be(~0, sarb->tail - pdu_length, pdu_length) != 0xc704dd7b) {
373 if (crc32_be(~0, skb_tail_pointer(sarb) - pdu_length, pdu_length) != 0xc704dd7b) {
374 atm_rldbg(instance, "%s: packet failed crc check (vcc: 0x%p)!\n",
375 __func__, vcc);
376 atomic_inc(&vcc->stats->rx_err);
377 goto out;
378 }
379
380 vdbg("%s: got packet (length: %u, pdu_length: %u, vcc: 0x%p)", __func__, length, pdu_length, vcc);
381

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

391
392 if (!atm_charge(vcc, skb->truesize)) {
393 atm_rldbg(instance, "%s: failed atm_charge (skb->truesize: %u)!\n",
394 __func__, skb->truesize);
395 dev_kfree_skb_any(skb);
396 goto out; /* atm_charge increments rx_drop */
397 }
398
374 atm_rldbg(instance, "%s: packet failed crc check (vcc: 0x%p)!\n",
375 __func__, vcc);
376 atomic_inc(&vcc->stats->rx_err);
377 goto out;
378 }
379
380 vdbg("%s: got packet (length: %u, pdu_length: %u, vcc: 0x%p)", __func__, length, pdu_length, vcc);
381

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

391
392 if (!atm_charge(vcc, skb->truesize)) {
393 atm_rldbg(instance, "%s: failed atm_charge (skb->truesize: %u)!\n",
394 __func__, skb->truesize);
395 dev_kfree_skb_any(skb);
396 goto out; /* atm_charge increments rx_drop */
397 }
398
399 memcpy(skb->data, sarb->tail - pdu_length, length);
399 memcpy(skb->data, skb_tail_pointer(sarb) - pdu_length, length);
400 __skb_put(skb, length);
401
402 vdbg("%s: sending skb 0x%p, skb->len %u, skb->truesize %u",
403 __func__, skb, skb->len, skb->truesize);
404
405 PACKETDEBUG(skb->data, skb->len);
406
407 vcc->push(vcc, skb);

--- 976 unchanged lines hidden ---
400 __skb_put(skb, length);
401
402 vdbg("%s: sending skb 0x%p, skb->len %u, skb->truesize %u",
403 __func__, skb, skb->len, skb->truesize);
404
405 PACKETDEBUG(skb->data, skb->len);
406
407 vcc->push(vcc, skb);

--- 976 unchanged lines hidden ---