diff options
Diffstat (limited to 'platform/linux-generic/odp_packet_io.c')
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 369c319c2..711e5f8a6 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -1812,7 +1812,7 @@ int odp_pktio_capability(odp_pktio_t pktio, odp_pktio_capability_t *capa) capa->lso.max_profiles_per_pktio = PKTIO_LSO_PROFILES; capa->lso.max_packet_segments = PKT_MAX_SEGS; capa->lso.max_segments = PKTIO_LSO_MAX_SEGMENTS; - capa->lso.max_payload_len = mtu - PKTIO_LSO_MAX_PAYLOAD_OFFSET; + capa->lso.max_payload_len = mtu - PKTIO_LSO_MIN_PAYLOAD_OFFSET; capa->lso.max_payload_offset = PKTIO_LSO_MAX_PAYLOAD_OFFSET; capa->lso.max_num_custom = ODP_LSO_MAX_CUSTOM; capa->lso.proto.ipv4 = 1; @@ -1830,6 +1830,10 @@ int odp_pktio_capability(odp_pktio_t pktio, odp_pktio_capability_t *capa) capa->vector.min_tmo_ns = 0; } + capa->reassembly.ip = false; + capa->reassembly.ipv4 = false; + capa->reassembly.ipv6 = false; + return ret; } @@ -2685,10 +2689,14 @@ int odp_packet_lso_request(odp_packet_t pkt, const odp_packet_lso_opt_t *lso_opt return -1; } + if (odp_packet_payload_offset_set(pkt, payload_offset)) { + ODP_ERR("Payload offset set failed\n"); + return -1; + } + pkt_hdr->p.flags.lso = 1; pkt_hdr->lso_max_payload = lso_opt->max_payload_len; pkt_hdr->lso_profile_idx = lso_prof->index; - odp_packet_payload_offset_set(pkt, payload_offset); return 0; } @@ -2829,6 +2837,12 @@ static int pktout_send_lso(odp_pktout_queue_t queue, odp_packet_t packet, num_pkt++; } + if (num_pkt > PKTIO_LSO_MAX_SEGMENTS) { + ODP_ERR("Too many LSO segments %i. Maximum is %i\n", num_pkt, + PKTIO_LSO_MAX_SEGMENTS); + return -1; + } + /* Alloc packets */ odp_packet_t pkt_out[num_pkt]; |