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 --- |