| 1246 | #endif /* !RTE_EXEC_ENV_WINDOWS */ |
| 1247 | |
| 1248 | static int |
| 1249 | test_mbuf_linearize(struct rte_mempool *pktmbuf_pool, int pkt_len, |
| 1250 | int nb_segs) |
| 1251 | { |
| 1252 | |
| 1253 | struct rte_mbuf *m = NULL, *mbuf = NULL; |
| 1254 | uint8_t *data; |
| 1255 | int data_len = 0; |
| 1256 | int remain; |
| 1257 | int seg, seg_len; |
| 1258 | int i; |
| 1259 | |
| 1260 | if (pkt_len < 1) { |
| 1261 | printf("Packet size must be 1 or more (is %d)\n", pkt_len); |
| 1262 | return -1; |
| 1263 | } |
| 1264 | |
| 1265 | if (nb_segs < 1) { |
| 1266 | printf("Number of segments must be 1 or more (is %d)\n", |
| 1267 | nb_segs); |
| 1268 | return -1; |
| 1269 | } |
| 1270 | |
| 1271 | seg_len = pkt_len / nb_segs; |
| 1272 | if (seg_len == 0) |
| 1273 | seg_len = 1; |
| 1274 | |
| 1275 | remain = pkt_len; |
| 1276 | |
| 1277 | /* Create chained mbuf_src and fill it generated data */ |
| 1278 | for (seg = 0; remain > 0; seg++) { |
| 1279 | |
| 1280 | m = rte_pktmbuf_alloc(pktmbuf_pool); |
| 1281 | if (m == NULL) { |
| 1282 | printf("Cannot create segment for source mbuf"); |
| 1283 | goto fail; |
| 1284 | } |
| 1285 | |
| 1286 | /* Make sure if tailroom is zeroed */ |
| 1287 | memset(rte_pktmbuf_mtod(m, uint8_t *), 0, |
| 1288 | rte_pktmbuf_tailroom(m)); |
| 1289 | |
| 1290 | data_len = remain; |
| 1291 | if (data_len > seg_len) |
| 1292 | data_len = seg_len; |
| 1293 | |
| 1294 | data = (uint8_t *)rte_pktmbuf_append(m, data_len); |
| 1295 | if (data == NULL) { |
| 1296 | printf("Cannot append %d bytes to the mbuf\n", |
| 1297 | data_len); |
| 1298 | goto fail; |
| 1299 | } |
| 1300 | |
| 1301 | for (i = 0; i < data_len; i++) |
| 1302 | data[i] = (seg * seg_len + i) % 0x0ff; |
| 1303 | |
| 1304 | if (seg == 0) |
| 1305 | mbuf = m; |
no test coverage detected