diff options
author | Justin Sobota | 2015-06-24 15:45:25 -0500 |
---|---|---|
committer | Justin Sobota | 2015-06-24 15:45:25 -0500 |
commit | 449b16e50779486282ad1bbed96badea242a62d1 (patch) | |
tree | 49b1ada38e35d28318e2ffcdd79693987baa7640 | |
parent | da0e9eaf95a195ba0e081809964038f72136eb7e (diff) | |
download | mpm-transport-449b16e50779486282ad1bbed96badea242a62d1.tar.gz mpm-transport-449b16e50779486282ad1bbed96badea242a62d1.tar.xz mpm-transport-449b16e50779486282ad1bbed96badea242a62d1.zip |
srio_rcv now returns SRIO source address. Fixed SDOCM00117465
-rwxr-xr-x | include/mpm_transport.h | 18 | ||||
-rw-r--r-- | scripts/mpm_config.json | 4 | ||||
-rwxr-xr-x | src/transport/mpm_transport.c | 27 | ||||
-rw-r--r-- | src/transport/qmss/mpm_transport_qmss.c | 17 | ||||
-rw-r--r-- | src/transport/srio/mpm_transport_srio.c | 32 | ||||
-rw-r--r-- | src/transport/srio/mpm_transport_srio.h | 2 |
6 files changed, 80 insertions, 20 deletions
diff --git a/include/mpm_transport.h b/include/mpm_transport.h index 01f14fb..b91f86f 100755 --- a/include/mpm_transport.h +++ b/include/mpm_transport.h | |||
@@ -295,6 +295,24 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len, | |||
295 | mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); | 295 | mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); |
296 | 296 | ||
297 | /** | 297 | /** |
298 | * @b Function mpm_transport_packet_recv2 | ||
299 | * @n Pops information from the packet_addr_t binded to handle h. Data is | ||
300 | * copied to buf, of size len. | ||
301 | * | ||
302 | * Valid for SRIO recv: The source address from which the data was | ||
303 | * received is returned in the src_addr structure. | ||
304 | * | ||
305 | * @retval | ||
306 | * Success - returns 0 | ||
307 | * @retval | ||
308 | * Failure - returns value less than 0 (negative integer) | ||
309 | * | ||
310 | */ | ||
311 | int mpm_transport_packet_recv2(mpm_transport_h h, char **buf, int *len, | ||
312 | mpm_transport_packet_addr_t *src_addr, | ||
313 | mpm_transport_recv_t *cfg); | ||
314 | |||
315 | /** | ||
298 | * @b Function mpm_transport_packet_recv | 316 | * @b Function mpm_transport_packet_recv |
299 | * @n Pops information from the packet_addr_t binded to handle h. Data is | 317 | * @n Pops information from the packet_addr_t binded to handle h. Data is |
300 | * copied to buf, of size len. | 318 | * copied to buf, of size len. |
diff --git a/scripts/mpm_config.json b/scripts/mpm_config.json index ffd1d54..d419f05 100644 --- a/scripts/mpm_config.json +++ b/scripts/mpm_config.json | |||
@@ -446,14 +446,14 @@ | |||
446 | "queue": -1, | 446 | "queue": -1, |
447 | "qtype": "general", | 447 | "qtype": "general", |
448 | "numdesc": 32, | 448 | "numdesc": 32, |
449 | "sizebuf": 256 | 449 | "sizebuf": 4096 |
450 | }, | 450 | }, |
451 | { | 451 | { |
452 | "name": "rx-free-q-1", | 452 | "name": "rx-free-q-1", |
453 | "queue": -1, | 453 | "queue": -1, |
454 | "qtype": "general", | 454 | "qtype": "general", |
455 | "numdesc": 32, | 455 | "numdesc": 32, |
456 | "sizebuf": 256 | 456 | "sizebuf": 4096 |
457 | } | 457 | } |
458 | ] | 458 | ] |
459 | } | 459 | } |
diff --git a/src/transport/mpm_transport.c b/src/transport/mpm_transport.c index dcd3bb3..661ef5e 100755 --- a/src/transport/mpm_transport.c +++ b/src/transport/mpm_transport.c | |||
@@ -2161,7 +2161,11 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len, mpm_trans | |||
2161 | 2161 | ||
2162 | /** | 2162 | /** |
2163 | * @b Description | 2163 | * @b Description |
2164 | * @n Pops information from the packet_addr_t binded to handle h. Data is copied to buf, of size len. | 2164 | * @n Pops information from the packet_addr_t binded to handle h. Data is |
2165 | * copied to buf, of size len. | ||
2166 | * | ||
2167 | * Valid for SRIO recv: The source address from which the data was | ||
2168 | * received is returned in the src_addr structure. | ||
2165 | * | 2169 | * |
2166 | * @retval | 2170 | * @retval |
2167 | * Success - returns 0 | 2171 | * Success - returns 0 |
@@ -2169,7 +2173,9 @@ int mpm_transport_packet_send(mpm_transport_h h, char **buf, int *len, mpm_trans | |||
2169 | * Failure - returns value less than 0 (negative integer) | 2173 | * Failure - returns value less than 0 (negative integer) |
2170 | * | 2174 | * |
2171 | */ | 2175 | */ |
2172 | int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_transport_recv_t *cfg) | 2176 | int mpm_transport_packet_recv2(mpm_transport_h h, char **buf, int *len, |
2177 | mpm_transport_packet_addr_t *src_addr, | ||
2178 | mpm_transport_recv_t *cfg) | ||
2173 | { | 2179 | { |
2174 | mpm_transport_cfg_t *sp = (mpm_transport_cfg_t *) h; | 2180 | mpm_transport_cfg_t *sp = (mpm_transport_cfg_t *) h; |
2175 | int ret = 0; | 2181 | int ret = 0; |
@@ -2179,7 +2185,7 @@ int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_trans | |||
2179 | ret = mpm_transport_qmss_packet_recv(sp, buf, len, cfg); | 2185 | ret = mpm_transport_qmss_packet_recv(sp, buf, len, cfg); |
2180 | break; | 2186 | break; |
2181 | case srio: | 2187 | case srio: |
2182 | ret = mpm_transport_srio_packet_recv(sp, buf, len, cfg); | 2188 | ret = mpm_transport_srio_packet_recv(sp, buf, len, src_addr, cfg); |
2183 | break; | 2189 | break; |
2184 | default: | 2190 | default: |
2185 | mpm_printf(1, "mpm_transport_packet_recv: unsupported transport %d\n", sp->transport); | 2191 | mpm_printf(1, "mpm_transport_packet_recv: unsupported transport %d\n", sp->transport); |
@@ -2188,3 +2194,18 @@ int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_trans | |||
2188 | } | 2194 | } |
2189 | return ret; | 2195 | return ret; |
2190 | } | 2196 | } |
2197 | |||
2198 | /** | ||
2199 | * @b Description | ||
2200 | * @n Pops information from the packet_addr_t binded to handle h. Data is copied to buf, of size len. | ||
2201 | * | ||
2202 | * @retval | ||
2203 | * Success - returns 0 | ||
2204 | * @retval | ||
2205 | * Failure - returns value less than 0 (negative integer) | ||
2206 | * | ||
2207 | */ | ||
2208 | int mpm_transport_packet_recv(mpm_transport_h h, char **buf, int *len, mpm_transport_recv_t *cfg) | ||
2209 | { | ||
2210 | return(mpm_transport_packet_recv2(h, buf, len, NULL, cfg)); | ||
2211 | } | ||
diff --git a/src/transport/qmss/mpm_transport_qmss.c b/src/transport/qmss/mpm_transport_qmss.c index 13fd382..270e776 100644 --- a/src/transport/qmss/mpm_transport_qmss.c +++ b/src/transport/qmss/mpm_transport_qmss.c | |||
@@ -361,7 +361,7 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
361 | desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); | 361 | desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); |
362 | 362 | ||
363 | /* Grab the packet's buffer into tempBuf */ | 363 | /* Grab the packet's buffer into tempBuf */ |
364 | Cppi_getData(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); | 364 | Cppi_getOriginalBufInfo(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); |
365 | 365 | ||
366 | if (cfg == NULL) { | 366 | if (cfg == NULL) { |
367 | bufferOption = packet_send_BUFFER_DEFAULT; | 367 | bufferOption = packet_send_BUFFER_DEFAULT; |
@@ -384,7 +384,7 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
384 | } | 384 | } |
385 | else { | 385 | else { |
386 | memcpy(tempBuf, *buf, *len); | 386 | memcpy(tempBuf, *buf, *len); |
387 | *len = buffLen; | 387 | Cppi_setDataLen(Cppi_DescType_HOST, desc, *len); |
388 | } | 388 | } |
389 | } | 389 | } |
390 | else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { | 390 | else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { |
@@ -396,11 +396,10 @@ int mpm_transport_qmss_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
396 | tag.destTagHi = 0; | 396 | tag.destTagHi = 0; |
397 | tag.srcTagLo = flow_id; | 397 | tag.srcTagLo = flow_id; |
398 | tag.srcTagHi = 0; | 398 | tag.srcTagHi = 0; |
399 | 399 | Cppi_setTag(Cppi_DescType_HOST, desc, &tag); | |
400 | Cppi_setTag (Cppi_DescType_HOST, desc, &tag); | ||
401 | 400 | ||
402 | /* Set packet length */ | 401 | /* Set packet length */ |
403 | Cppi_setPacketLen (Cppi_DescType_HOST, desc, td->txBufSize); | 402 | Cppi_setPacketLen(Cppi_DescType_HOST, desc, *len); |
404 | 403 | ||
405 | Qmss_queuePushDescSize (td->txqHnd, (uint32_t *) desc, td->txDescSize); | 404 | Qmss_queuePushDescSize (td->txqHnd, (uint32_t *) desc, td->txDescSize); |
406 | 405 | ||
@@ -467,12 +466,14 @@ int mpm_transport_qmss_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len | |||
467 | // PUSH TO RX COMPLETE Q | 466 | // PUSH TO RX COMPLETE Q |
468 | } | 467 | } |
469 | else { | 468 | else { |
470 | if (*len > buffLen) { | 469 | if (*len < buffLen) { |
471 | mpm_printf(1, "mpm_transport_qmss_packet_recv(): Error, tried to get more data than buffer size!\n"); | 470 | mpm_printf(1, "mpm_transport_qmss_packet_recv(): " |
471 | "Error, received %d bytes but " | ||
472 | "provided buffer only has %d bytes!\n", buffLen, *len); | ||
472 | return -1; | 473 | return -1; |
473 | } | 474 | } |
474 | else { | 475 | else { |
475 | memcpy(*buf, tempBuf, *len); | 476 | memcpy(*buf, tempBuf, buffLen); |
476 | *len = buffLen; | 477 | *len = buffLen; |
477 | } | 478 | } |
478 | 479 | ||
diff --git a/src/transport/srio/mpm_transport_srio.c b/src/transport/srio/mpm_transport_srio.c index 95cd186..177dd9c 100644 --- a/src/transport/srio/mpm_transport_srio.c +++ b/src/transport/srio/mpm_transport_srio.c | |||
@@ -467,7 +467,7 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
467 | desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); | 467 | desc = (Cppi_Desc *) QMSS_DESC_PTR(desc); |
468 | 468 | ||
469 | /* Grab the packet's buffer into tempBuf */ | 469 | /* Grab the packet's buffer into tempBuf */ |
470 | Cppi_getData(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); | 470 | Cppi_getOriginalBufInfo(Cppi_DescType_HOST, desc, &tempBuf, &buffLen); |
471 | 471 | ||
472 | if (cfg == NULL) { | 472 | if (cfg == NULL) { |
473 | bufferOption = packet_send_BUFFER_DEFAULT; | 473 | bufferOption = packet_send_BUFFER_DEFAULT; |
@@ -490,7 +490,7 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
490 | } | 490 | } |
491 | else { | 491 | else { |
492 | memcpy(tempBuf, *buf, *len); | 492 | memcpy(tempBuf, *buf, *len); |
493 | *len = buffLen; | 493 | Cppi_setDataLen(Cppi_DescType_HOST, desc, *len); |
494 | } | 494 | } |
495 | } | 495 | } |
496 | else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { | 496 | else if (bufferOption == packet_send_LINK_BUFFER_POINTER) { |
@@ -526,7 +526,10 @@ int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len | |||
526 | return 0; | 526 | return 0; |
527 | } | 527 | } |
528 | 528 | ||
529 | int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_recv_t *cfg) | 529 | int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, |
530 | int *len, | ||
531 | mpm_transport_packet_addr_t *src_addr, | ||
532 | mpm_transport_recv_t *cfg) | ||
530 | { | 533 | { |
531 | mpm_transport_srio_t *td = (mpm_transport_srio_t *) sp->td; | 534 | mpm_transport_srio_t *td = (mpm_transport_srio_t *) sp->td; |
532 | int32_t num_bytes; | 535 | int32_t num_bytes; |
@@ -577,16 +580,33 @@ int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len | |||
577 | // PUSH TO RX COMPLETE Q | 580 | // PUSH TO RX COMPLETE Q |
578 | } | 581 | } |
579 | else { | 582 | else { |
580 | if (*len > buffLen) { | 583 | if (*len < buffLen) { |
581 | mpm_printf(1, "mpm_transport_srio_packet_recv(): Error, tried to get more data than buffer size!\n"); | 584 | mpm_printf(1, "mpm_transport_srio_packet_recv(): " |
585 | "Error, received %d bytes but " | ||
586 | "provided buffer only has %d bytes!\n", buffLen, *len); | ||
582 | return -1; | 587 | return -1; |
583 | } | 588 | } |
584 | else { | 589 | else { |
585 | memcpy(*buf, tempBuf, *len); | 590 | memcpy(*buf, tempBuf, buffLen); |
586 | *len = buffLen; | 591 | *len = buffLen; |
587 | } | 592 | } |
588 | } | 593 | } |
589 | 594 | ||
595 | if (src_addr) { | ||
596 | if (src_addr->addr_type == packet_addr_type_SRIO_TYPE9) { | ||
597 | ((src_addr->addr)).srio.type9.tt = from.type9.tt; | ||
598 | ((src_addr->addr)).srio.type9.id = from.type9.id; | ||
599 | ((src_addr->addr)).srio.type9.cos = from.type9.cos; | ||
600 | ((src_addr->addr)).srio.type9.streamId = from.type9.streamId; | ||
601 | } | ||
602 | else if (src_addr->addr_type == packet_addr_type_SRIO_TYPE11) { | ||
603 | ((src_addr->addr)).srio.type11.tt = from.type11.tt; | ||
604 | ((src_addr->addr)).srio.type11.id = from.type11.id; | ||
605 | ((src_addr->addr)).srio.type11.letter = from.type11.letter; | ||
606 | ((src_addr->addr)).srio.type11.mailbox = from.type11.mbox; | ||
607 | } | ||
608 | } | ||
609 | |||
590 | Srio_freeRxDrvBuffer(td->srioSockHnd, (Srio_DrvBuffer)desc); | 610 | Srio_freeRxDrvBuffer(td->srioSockHnd, (Srio_DrvBuffer)desc); |
591 | 611 | ||
592 | return 0; | 612 | return 0; |
diff --git a/src/transport/srio/mpm_transport_srio.h b/src/transport/srio/mpm_transport_srio.h index fc3c810..681c8a4 100644 --- a/src/transport/srio/mpm_transport_srio.h +++ b/src/transport/srio/mpm_transport_srio.h | |||
@@ -117,7 +117,7 @@ int mpm_transport_srio_insert_mem_region(mpm_transport_cfg_t *sp, mpm_transport_ | |||
117 | int mpm_transport_srio_open(mpm_transport_cfg_t *sp, mpm_transport_open_t *ocfg); | 117 | int mpm_transport_srio_open(mpm_transport_cfg_t *sp, mpm_transport_open_t *ocfg); |
118 | void mpm_transport_srio_close(mpm_transport_cfg_t *sp); | 118 | void mpm_transport_srio_close(mpm_transport_cfg_t *sp); |
119 | int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); | 119 | int mpm_transport_srio_packet_send(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *addr_info, mpm_transport_send_t *cfg); |
120 | int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_recv_t *cfg); | 120 | int mpm_transport_srio_packet_recv(mpm_transport_cfg_t *sp, char **buf, int *len, mpm_transport_packet_addr_t *src_addr, mpm_transport_recv_t *cfg); |
121 | 121 | ||
122 | #ifdef STATIC_BUILD | 122 | #ifdef STATIC_BUILD |
123 | void Srio_freeRxDrvBuffer(Srio_SockHandle srioSock, Srio_DrvBuffer hDrvBuffer) __attribute__((weak)); | 123 | void Srio_freeRxDrvBuffer(Srio_SockHandle srioSock, Srio_DrvBuffer hDrvBuffer) __attribute__((weak)); |