Deleted Added
full compact
netback_unit_tests.c (302408) netback_unit_tests.c (316362)
1/*-
2 * Copyright (c) 2009-2011 Spectra Logic Corporation
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

28 * POSSIBILITY OF SUCH DAMAGES.
29 *
30 * Authors: Justin T. Gibbs (Spectra Logic Corporation)
31 * Alan Somers (Spectra Logic Corporation)
32 * John Suykerbuyk (Spectra Logic Corporation)
33 */
34
35#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2009-2011 Spectra Logic Corporation
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

28 * POSSIBILITY OF SUCH DAMAGES.
29 *
30 * Authors: Justin T. Gibbs (Spectra Logic Corporation)
31 * Alan Somers (Spectra Logic Corporation)
32 * John Suykerbuyk (Spectra Logic Corporation)
33 */
34
35#include <sys/cdefs.h>
36__FBSDID("$FreeBSD: stable/11/sys/dev/xen/netback/netback_unit_tests.c 298955 2016-05-03 03:41:25Z pfg $");
36__FBSDID("$FreeBSD: stable/11/sys/dev/xen/netback/netback_unit_tests.c 316362 2017-04-01 16:51:49Z asomers $");
37
38/**
39 * \file netback_unit_tests.c
40 *
41 * \brief Unit tests for the Xen netback driver.
42 *
43 * Due to the driver's use of static functions, these tests cannot be compiled
44 * standalone; they must be #include'd from the driver's .c file.

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

1222 req->gref = 8;
1223 req->offset = 0;
1224 xnb_unit_pvt.txf.req_prod_pvt++;
1225
1226 RING_PUSH_REQUESTS(&xnb_unit_pvt.txf);
1227 xnb_ring2pkt(&pkt, &xnb_unit_pvt.txb, xnb_unit_pvt.txb.req_cons);
1228
1229 pMbuf = xnb_pkt2mbufc(&pkt, xnb_unit_pvt.ifp);
37
38/**
39 * \file netback_unit_tests.c
40 *
41 * \brief Unit tests for the Xen netback driver.
42 *
43 * Due to the driver's use of static functions, these tests cannot be compiled
44 * standalone; they must be #include'd from the driver's .c file.

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

1222 req->gref = 8;
1223 req->offset = 0;
1224 xnb_unit_pvt.txf.req_prod_pvt++;
1225
1226 RING_PUSH_REQUESTS(&xnb_unit_pvt.txf);
1227 xnb_ring2pkt(&pkt, &xnb_unit_pvt.txb, xnb_unit_pvt.txb.req_cons);
1228
1229 pMbuf = xnb_pkt2mbufc(&pkt, xnb_unit_pvt.ifp);
1230 XNB_ASSERT(pMbuf != NULL);
1231 if (pMbuf == NULL)
1232 return;
1233
1230 n_entries = xnb_txpkt2gnttab(&pkt, pMbuf, xnb_unit_pvt.gnttab,
1231 &xnb_unit_pvt.txb, DOMID_FIRST_RESERVED);
1232
1233 if (M_TRAILINGSPACE(pMbuf) == MCLBYTES) {
1234 /* there should be three mbufs and three gnttab entries */
1235 XNB_ASSERT(n_entries == 3);
1236 XNB_ASSERT(xnb_unit_pvt.gnttab[0].len == MCLBYTES);
1237 XNB_ASSERT(

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

1266 mtod(pMbuf->m_next, vm_offset_t)));
1267 XNB_ASSERT(
1268 xnb_unit_pvt.gnttab[1].source.offset == 2 * MCLBYTES);
1269
1270 } else {
1271 /* should never get here */
1272 XNB_ASSERT(0);
1273 }
1234 n_entries = xnb_txpkt2gnttab(&pkt, pMbuf, xnb_unit_pvt.gnttab,
1235 &xnb_unit_pvt.txb, DOMID_FIRST_RESERVED);
1236
1237 if (M_TRAILINGSPACE(pMbuf) == MCLBYTES) {
1238 /* there should be three mbufs and three gnttab entries */
1239 XNB_ASSERT(n_entries == 3);
1240 XNB_ASSERT(xnb_unit_pvt.gnttab[0].len == MCLBYTES);
1241 XNB_ASSERT(

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

1270 mtod(pMbuf->m_next, vm_offset_t)));
1271 XNB_ASSERT(
1272 xnb_unit_pvt.gnttab[1].source.offset == 2 * MCLBYTES);
1273
1274 } else {
1275 /* should never get here */
1276 XNB_ASSERT(0);
1277 }
1274 if (pMbuf != NULL)
1275 m_freem(pMbuf);
1278 m_freem(pMbuf);
1276}
1277
1278
1279/**
1280 * xnb_update_mbufc on a short packet that only has one gnttab entry
1281 */
1282static void
1283xnb_update_mbufc_short(char *buffer, size_t buflen)

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

1489 struct xnb_pkt pkt;
1490 size_t size1 = MHLEN - 5;
1491 size_t size2 = MHLEN - 15;
1492 int free_slots = 32;
1493 RING_IDX start = 14;
1494 struct mbuf *mbufc, *mbufc2;
1495
1496 mbufc = m_getm(NULL, size1, M_WAITOK, MT_DATA);
1279}
1280
1281
1282/**
1283 * xnb_update_mbufc on a short packet that only has one gnttab entry
1284 */
1285static void
1286xnb_update_mbufc_short(char *buffer, size_t buflen)

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

1492 struct xnb_pkt pkt;
1493 size_t size1 = MHLEN - 5;
1494 size_t size2 = MHLEN - 15;
1495 int free_slots = 32;
1496 RING_IDX start = 14;
1497 struct mbuf *mbufc, *mbufc2;
1498
1499 mbufc = m_getm(NULL, size1, M_WAITOK, MT_DATA);
1497 mbufc->m_flags |= M_PKTHDR;
1498 if (mbufc == NULL) {
1499 XNB_ASSERT(mbufc != NULL);
1500 XNB_ASSERT(mbufc != NULL);
1501 if (mbufc == NULL)
1500 return;
1502 return;
1501 }
1503 mbufc->m_flags |= M_PKTHDR;
1502
1503 mbufc2 = m_getm(mbufc, size2, M_WAITOK, MT_DATA);
1504
1505 mbufc2 = m_getm(mbufc, size2, M_WAITOK, MT_DATA);
1506 XNB_ASSERT(mbufc2 != NULL);
1504 if (mbufc2 == NULL) {
1507 if (mbufc2 == NULL) {
1505 XNB_ASSERT(mbufc2 != NULL);
1506 safe_m_freem(&mbufc);
1507 return;
1508 }
1509 mbufc2->m_pkthdr.len = size1 + size2;
1510 mbufc2->m_len = size1;
1511
1512 xnb_mbufc2pkt(mbufc2, &pkt, start, free_slots);
1513 XNB_ASSERT(xnb_pkt_is_valid(&pkt));

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

1532 struct xnb_pkt pkt;
1533 size_t size = 14 * MCLBYTES / 3;
1534 size_t size_remaining;
1535 int free_slots = 15;
1536 RING_IDX start = 3;
1537 struct mbuf *mbufc, *m;
1538
1539 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1508 safe_m_freem(&mbufc);
1509 return;
1510 }
1511 mbufc2->m_pkthdr.len = size1 + size2;
1512 mbufc2->m_len = size1;
1513
1514 xnb_mbufc2pkt(mbufc2, &pkt, start, free_slots);
1515 XNB_ASSERT(xnb_pkt_is_valid(&pkt));

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

1534 struct xnb_pkt pkt;
1535 size_t size = 14 * MCLBYTES / 3;
1536 size_t size_remaining;
1537 int free_slots = 15;
1538 RING_IDX start = 3;
1539 struct mbuf *mbufc, *m;
1540
1541 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1540 mbufc->m_flags |= M_PKTHDR;
1541 if (mbufc == NULL) {
1542 XNB_ASSERT(mbufc != NULL);
1542 XNB_ASSERT(mbufc != NULL);
1543 if (mbufc == NULL)
1543 return;
1544 return;
1544 }
1545 mbufc->m_flags |= M_PKTHDR;
1545
1546 mbufc->m_pkthdr.len = size;
1547 size_remaining = size;
1548 for (m = mbufc; m != NULL; m = m->m_next) {
1549 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);
1550 size_remaining -= m->m_len;
1551 }
1552

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

1571 struct xnb_pkt pkt;
1572 size_t size = 14 * MCLBYTES / 3;
1573 size_t size_remaining;
1574 int free_slots = 15;
1575 RING_IDX start = 3;
1576 struct mbuf *mbufc, *m;
1577
1578 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1546
1547 mbufc->m_pkthdr.len = size;
1548 size_remaining = size;
1549 for (m = mbufc; m != NULL; m = m->m_next) {
1550 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);
1551 size_remaining -= m->m_len;
1552 }
1553

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

1572 struct xnb_pkt pkt;
1573 size_t size = 14 * MCLBYTES / 3;
1574 size_t size_remaining;
1575 int free_slots = 15;
1576 RING_IDX start = 3;
1577 struct mbuf *mbufc, *m;
1578
1579 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1579 if (mbufc == NULL) {
1580 XNB_ASSERT(mbufc != NULL);
1580 XNB_ASSERT(mbufc != NULL);
1581 if (mbufc == NULL)
1581 return;
1582 return;
1582 }
1583
1584 mbufc->m_flags |= M_PKTHDR;
1585 mbufc->m_pkthdr.len = size;
1586 mbufc->m_pkthdr.csum_flags |= CSUM_TSO;
1587 mbufc->m_pkthdr.tso_segsz = TCP_MSS - 40;
1588 size_remaining = size;
1589 for (m = mbufc; m != NULL; m = m->m_next) {
1590 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);

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

1614 size_t size = 14 * MCLBYTES / 3;
1615 size_t size_remaining;
1616 int free_slots = 2;
1617 RING_IDX start = 3;
1618 struct mbuf *mbufc, *m;
1619 int error;
1620
1621 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1583
1584 mbufc->m_flags |= M_PKTHDR;
1585 mbufc->m_pkthdr.len = size;
1586 mbufc->m_pkthdr.csum_flags |= CSUM_TSO;
1587 mbufc->m_pkthdr.tso_segsz = TCP_MSS - 40;
1588 size_remaining = size;
1589 for (m = mbufc; m != NULL; m = m->m_next) {
1590 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);

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

1614 size_t size = 14 * MCLBYTES / 3;
1615 size_t size_remaining;
1616 int free_slots = 2;
1617 RING_IDX start = 3;
1618 struct mbuf *mbufc, *m;
1619 int error;
1620
1621 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1622 mbufc->m_flags |= M_PKTHDR;
1623 if (mbufc == NULL) {
1624 XNB_ASSERT(mbufc != NULL);
1622 XNB_ASSERT(mbufc != NULL);
1623 if (mbufc == NULL)
1625 return;
1624 return;
1626 }
1625 mbufc->m_flags |= M_PKTHDR;
1627
1628 mbufc->m_pkthdr.len = size;
1629 size_remaining = size;
1630 for (m = mbufc; m != NULL; m = m->m_next) {
1631 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);
1632 size_remaining -= m->m_len;
1633 }
1634

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

1835 uint16_t gref = 65;
1836 uint16_t mss = TCP_MSS - 40;
1837 struct mbuf *mbufc;
1838 struct netif_rx_request *req;
1839 struct netif_rx_response *rsp;
1840 struct netif_extra_info *ext;
1841
1842 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1626
1627 mbufc->m_pkthdr.len = size;
1628 size_remaining = size;
1629 for (m = mbufc; m != NULL; m = m->m_next) {
1630 m->m_len = MAX(M_TRAILINGSPACE(m), size_remaining);
1631 size_remaining -= m->m_len;
1632 }
1633

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

1834 uint16_t gref = 65;
1835 uint16_t mss = TCP_MSS - 40;
1836 struct mbuf *mbufc;
1837 struct netif_rx_request *req;
1838 struct netif_rx_response *rsp;
1839 struct netif_extra_info *ext;
1840
1841 mbufc = m_getm(NULL, size, M_WAITOK, MT_DATA);
1843 if (mbufc == NULL) {
1844 XNB_ASSERT(mbufc != NULL);
1842 XNB_ASSERT(mbufc != NULL);
1843 if (mbufc == NULL)
1845 return;
1844 return;
1846 }
1847
1848 mbufc->m_flags |= M_PKTHDR;
1849 mbufc->m_pkthdr.len = size;
1850 mbufc->m_pkthdr.csum_flags |= CSUM_TSO;
1851 mbufc->m_pkthdr.tso_segsz = mss;
1852 mbufc->m_len = size;
1853
1854 xnb_mbufc2pkt(mbufc, &pkt, start, free_slots);

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

1969 RING_IDX start = 14;
1970 uint16_t id = 47;
1971 uint16_t gref = 54;
1972 struct netif_rx_request *req;
1973 struct netif_rx_response *rsp;
1974 struct mbuf *mbufc;
1975
1976 mbufc = m_getm(NULL, size1, M_WAITOK, MT_DATA);
1845
1846 mbufc->m_flags |= M_PKTHDR;
1847 mbufc->m_pkthdr.len = size;
1848 mbufc->m_pkthdr.csum_flags |= CSUM_TSO;
1849 mbufc->m_pkthdr.tso_segsz = mss;
1850 mbufc->m_len = size;
1851
1852 xnb_mbufc2pkt(mbufc, &pkt, start, free_slots);

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

1967 RING_IDX start = 14;
1968 uint16_t id = 47;
1969 uint16_t gref = 54;
1970 struct netif_rx_request *req;
1971 struct netif_rx_response *rsp;
1972 struct mbuf *mbufc;
1973
1974 mbufc = m_getm(NULL, size1, M_WAITOK, MT_DATA);
1977 mbufc->m_flags |= M_PKTHDR;
1978 if (mbufc == NULL) {
1979 XNB_ASSERT(mbufc != NULL);
1975 XNB_ASSERT(mbufc != NULL);
1976 if (mbufc == NULL)
1980 return;
1977 return;
1981 }
1978 mbufc->m_flags |= M_PKTHDR;
1982
1983 m_getm(mbufc, size2, M_WAITOK, MT_DATA);
1984 XNB_ASSERT(mbufc->m_next != NULL);
1985 mbufc->m_pkthdr.len = size1 + size2;
1986 mbufc->m_len = size1;
1987 mbufc->m_next->m_len = size2;
1988
1989 xnb_mbufc2pkt(mbufc, &pkt, start, free_slots);

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

2446{
2447 const char mystr[] = "137";
2448 uint8_t dest[12];
2449 int i;
2450
2451 for (i = 0; i < 12; i++)
2452 dest[i] = 'X';
2453
1979
1980 m_getm(mbufc, size2, M_WAITOK, MT_DATA);
1981 XNB_ASSERT(mbufc->m_next != NULL);
1982 mbufc->m_pkthdr.len = size1 + size2;
1983 mbufc->m_len = size1;
1984 mbufc->m_next->m_len = size2;
1985
1986 xnb_mbufc2pkt(mbufc, &pkt, start, free_slots);

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

2443{
2444 const char mystr[] = "137";
2445 uint8_t dest[12];
2446 int i;
2447
2448 for (i = 0; i < 12; i++)
2449 dest[i] = 'X';
2450
2454 sscanf(mystr, "%hhu", &dest[4]);
2451 XNB_ASSERT(sscanf(mystr, "%hhu", &dest[4]) == 1);
2455 for (i = 0; i < 12; i++)
2456 XNB_ASSERT(dest[i] == (i == 4 ? 137 : 'X'));
2457}
2458
2459/**
2460 * sscanf on signed chars
2461 */
2462static void
2463xnb_sscanf_hhd(char *buffer, size_t buflen)
2464{
2465 const char mystr[] = "-27";
2466 int8_t dest[12];
2467 int i;
2468
2469 for (i = 0; i < 12; i++)
2470 dest[i] = 'X';
2471
2452 for (i = 0; i < 12; i++)
2453 XNB_ASSERT(dest[i] == (i == 4 ? 137 : 'X'));
2454}
2455
2456/**
2457 * sscanf on signed chars
2458 */
2459static void
2460xnb_sscanf_hhd(char *buffer, size_t buflen)
2461{
2462 const char mystr[] = "-27";
2463 int8_t dest[12];
2464 int i;
2465
2466 for (i = 0; i < 12; i++)
2467 dest[i] = 'X';
2468
2472 sscanf(mystr, "%hhd", &dest[4]);
2469 XNB_ASSERT(sscanf(mystr, "%hhd", &dest[4]) == 1);
2473 for (i = 0; i < 12; i++)
2474 XNB_ASSERT(dest[i] == (i == 4 ? -27 : 'X'));
2475}
2476
2477/**
2478 * sscanf on signed long longs
2479 */
2480static void
2481xnb_sscanf_lld(char *buffer, size_t buflen)
2482{
2483 const char mystr[] = "-123456789012345"; /* about -2**47 */
2484 long long dest[3];
2485 int i;
2486
2487 for (i = 0; i < 3; i++)
2488 dest[i] = (long long)0xdeadbeefdeadbeef;
2489
2470 for (i = 0; i < 12; i++)
2471 XNB_ASSERT(dest[i] == (i == 4 ? -27 : 'X'));
2472}
2473
2474/**
2475 * sscanf on signed long longs
2476 */
2477static void
2478xnb_sscanf_lld(char *buffer, size_t buflen)
2479{
2480 const char mystr[] = "-123456789012345"; /* about -2**47 */
2481 long long dest[3];
2482 int i;
2483
2484 for (i = 0; i < 3; i++)
2485 dest[i] = (long long)0xdeadbeefdeadbeef;
2486
2490 sscanf(mystr, "%lld", &dest[1]);
2487 XNB_ASSERT(sscanf(mystr, "%lld", &dest[1]) == 1);
2491 for (i = 0; i < 3; i++)
2492 XNB_ASSERT(dest[i] == (i != 1 ? (long long)0xdeadbeefdeadbeef :
2493 -123456789012345));
2494}
2495
2496/**
2497 * sscanf on unsigned long longs
2498 */
2499static void
2500xnb_sscanf_llu(char *buffer, size_t buflen)
2501{
2502 const char mystr[] = "12802747070103273189";
2503 unsigned long long dest[3];
2504 int i;
2505
2506 for (i = 0; i < 3; i++)
2507 dest[i] = (long long)0xdeadbeefdeadbeef;
2508
2488 for (i = 0; i < 3; i++)
2489 XNB_ASSERT(dest[i] == (i != 1 ? (long long)0xdeadbeefdeadbeef :
2490 -123456789012345));
2491}
2492
2493/**
2494 * sscanf on unsigned long longs
2495 */
2496static void
2497xnb_sscanf_llu(char *buffer, size_t buflen)
2498{
2499 const char mystr[] = "12802747070103273189";
2500 unsigned long long dest[3];
2501 int i;
2502
2503 for (i = 0; i < 3; i++)
2504 dest[i] = (long long)0xdeadbeefdeadbeef;
2505
2509 sscanf(mystr, "%llu", &dest[1]);
2506 XNB_ASSERT(sscanf(mystr, "%llu", &dest[1]) == 1);
2510 for (i = 0; i < 3; i++)
2511 XNB_ASSERT(dest[i] == (i != 1 ? (long long)0xdeadbeefdeadbeef :
2512 12802747070103273189ull));
2513}
2514
2515/**
2516 * sscanf on unsigned short short n's
2517 */

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

2523 "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
2524 "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f";
2525 unsigned char dest[12];
2526 int i;
2527
2528 for (i = 0; i < 12; i++)
2529 dest[i] = (unsigned char)'X';
2530
2507 for (i = 0; i < 3; i++)
2508 XNB_ASSERT(dest[i] == (i != 1 ? (long long)0xdeadbeefdeadbeef :
2509 12802747070103273189ull));
2510}
2511
2512/**
2513 * sscanf on unsigned short short n's
2514 */

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

2520 "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
2521 "404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f";
2522 unsigned char dest[12];
2523 int i;
2524
2525 for (i = 0; i < 12; i++)
2526 dest[i] = (unsigned char)'X';
2527
2531 sscanf(mystr,
2528 XNB_ASSERT(sscanf(mystr,
2532 "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
2533 "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
2529 "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
2530 "202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
2534 "404142434445464748494a4b4c4d4e4f%hhn", &dest[4]);
2531 "404142434445464748494a4b4c4d4e4f%hhn", &dest[4]) == 0);
2535 for (i = 0; i < 12; i++)
2536 XNB_ASSERT(dest[i] == (i == 4 ? 160 : 'X'));
2537}
2532 for (i = 0; i < 12; i++)
2533 XNB_ASSERT(dest[i] == (i == 4 ? 160 : 'X'));
2534}