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