IBM Support

PI90866: SENDTO() SOCKET API CALL FOR RAW TCP-PROTOCOL PACKET NOT GETTINGEMSGSIZE ERROR WHEN ITS PACKET LENGTH EXCEEDS ROUTE'S MTU SIZE

A fix is available

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • If an application builds a RAW TCP-protocol packet with its
    length larger than a outgoing routing interface's MTU and
    uses the sendto() socket API call for the write, it gets no
    EMSGSIZE error for the response. The IP/RAW layer in the TCPIP
    stack simply discards the packet silently. If the EMSGSIZE
    error had been returned, then the application will know
    that it needs to carve the large packet into smaller segments
    without requiring fragmentation.
    

Local fix

  • Use packet length of 576 (smallest MTU) for all RAW TCP-protocol
    packets. That is, the application has to do the TCP segmentation
    (without fragmentation) that is not being done at the lower
    IP/RAW layer by design.
    
    KEYWORDS:
    RAW TCP SENDTO SOCKET API EZBRWWRI TORUWP EMSGSIZE MTU MSS
    PACKET
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED:                                              *
    * All users of the IBM Communications Server for z/OS Version  *
    * 2 Release 2 and 3 IP: Raw sockets                            *
    ****************************************************************
    * PROBLEM DESCRIPTION:                                         *
    * RAW socket application sends of TCP or UDP protocol packets  *
    * do not fail with EMSGSIZE if the packet must be fragmented   *
    * and has the don't fragment bit set in the IP header.         *
    ****************************************************************
    * RECOMMENDATION:                                              *
    * Apply PTF                                                    *
    ****************************************************************
    The raw sockets API does not support opening a raw socket with
    protocol 6 (IPPROTO_TCP) or protocol 17 (IPPROTO_UDP).  To send
    packets with the TCP or UDP protocol the raw socket must be
    opened with protocol 255 (IPPROTO_RAW) and the IP header must be
    supplied by the application.  The TCPIP stack will discard a
    packet when the don't fragment flag (IP_DF) is set in the
    supplied IP header and the length of the packet being sent is
    larger than the MTU defined for the route selected to reach the
    destination.  When this happens the EMSGSIZE error is not
    returned to the application send operation, thus allowing it to
    complete successfully.  The internally  generated error is not
    presented as an ICMP protocol message so raw sockets open on
    protocol 1 (IPPROTO_ICMP) and protocl 255 (IPPROTO_RAW) are
    unable to detect the error condition.  The raw application has
    no method of determining the send operation has failed to send
    the packet into the network.  If an ICMP message was generated
    in the network it could have been delivered to the raw socket
    application, allowing the application to make adjustments to the
    packets being sent.
    

Problem conclusion

  • The raw sockets layer has been amended to fail a send operation
    when a TCP or UDP packet is discarded by the TCPIP stack.
    

Temporary fix

Comments

APAR Information

  • APAR number

    PI90866

  • Reported component name

    TCP/IP MVS

  • Reported component ID

    5655HAL00

  • Reported release

    220

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2017-11-29

  • Closed date

    2018-07-19

  • Last modified date

    2018-11-01

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

    UI57364 UI57365

Modules/Macros

  • EZBRWRD
    

Fix information

  • Fixed component name

    TCP/IP MVS

  • Fixed component ID

    5655HAL00

Applicable component levels

  • R230 PSY UI57365

       UP18/10/09 P F810

  • R220 PSY UI57364

       UP18/10/09 P F810

Fix is available

  • Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG19M","label":"APARs - z\/OS environment"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"220","Edition":"","Line of Business":{"code":"","label":""}},{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SSCY4DZ","label":"DO NOT USE"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"220","Edition":"","Line of Business":{"code":"","label":""}}]

Document Information

Modified date:
01 November 2018