Changeset b5e68c8 in mainline for uspace/lib/net/il/ip_client.c


Ignore:
Timestamp:
2011-05-12T16:49:44Z (14 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f36787d7
Parents:
e80329d6 (diff), 750636a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge mainline changes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/net/il/ip_client.c

    re80329d6 rb5e68c8  
    4848 *
    4949 * @param[in] packet    The packet.
    50  * @returns             The IP header length in bytes.
    51  * @returns             Zero if there is no IP header.
    52  */
    53 size_t ip_client_header_length(packet_t packet)
    54 {
    55         ip_header_ref header;
    56 
    57         header = (ip_header_ref) packet_get_data(packet);
     50 * @return              The IP header length in bytes.
     51 * @return              Zero if there is no IP header.
     52 */
     53size_t ip_client_header_length(packet_t *packet)
     54{
     55        ip_header_t *header;
     56
     57        header = (ip_header_t *) packet_get_data(packet);
    5858        if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t)))
    5959                return 0;
     
    7272 * @param[out] header   The constructed IPv4 pseudo header.
    7373 * @param[out] headerlen The length of the IP pseudo header in bytes.
    74  * @returns             EOK on success.
    75  * @returns             EBADMEM if the header and/or the headerlen parameter is
     74 * @return              EOK on success.
     75 * @return              EBADMEM if the header and/or the headerlen parameter is
    7676 *                      NULL.
    77  * @returns             EINVAL if the source address and/or the destination
     77 * @return              EINVAL if the source address and/or the destination
    7878 *                      address parameter is NULL.
    79  * @returns             EINVAL if the source address length is less than struct
     79 * @return              EINVAL if the source address length is less than struct
    8080 *                      sockaddr length.
    81  * @returns             EINVAL if the source address length differs from the
     81 * @return              EINVAL if the source address length differs from the
    8282 *                      destination address length.
    83  * @returns             EINVAL if the source address family differs from the
     83 * @return              EINVAL if the source address family differs from the
    8484 *                      destination family.
    85  * @returns             EAFNOSUPPORT if the address family is not supported.
    86  * @returns             ENOMEM if there is not enough memory left.
     85 * @return              EAFNOSUPPORT if the address family is not supported.
     86 * @return              ENOMEM if there is not enough memory left.
    8787 */
    8888int
     
    9191    size_t data_length, void **header, size_t *headerlen)
    9292{
    93         ipv4_pseudo_header_ref header_in;
     93        ipv4_pseudo_header_t *header_in;
    9494        struct sockaddr_in *address_in;
    9595
     
    109109               
    110110                *headerlen = sizeof(*header_in);
    111                 header_in = (ipv4_pseudo_header_ref) malloc(*headerlen);
     111                header_in = (ipv4_pseudo_header_t *) malloc(*headerlen);
    112112                if (!header_in)
    113113                        return ENOMEM;
     
    124124
    125125        // TODO IPv6
    126 /*      case AF_INET6:
     126#if 0
     127        case AF_INET6:
    127128                if (addrlen != sizeof(struct sockaddr_in6))
    128129                        return EINVAL;
     
    130131                address_in6 = (struct sockaddr_in6 *) addr;
    131132                return EOK;
    132 */
     133#endif
    133134
    134135        default:
     
    148149 *                      disabled.
    149150 * @param[in] ipopt_length The prefixed IP options length in bytes.
    150  * @returns             EOK on success.
    151  * @returns             ENOMEM if there is not enough memory left in the packet.
    152  */
    153 int
    154 ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl,
     151 * @return              EOK on success.
     152 * @return              ENOMEM if there is not enough memory left in the packet.
     153 */
     154int
     155ip_client_prepare_packet(packet_t *packet, ip_protocol_t protocol, ip_ttl_t ttl,
    155156    ip_tos_t tos, int dont_fragment, size_t ipopt_length)
    156157{
    157         ip_header_ref header;
     158        ip_header_t *header;
    158159        uint8_t *data;
    159160        size_t padding;
    160161
    161         // compute the padding if IP options are set
    162         // multiple of 4 bytes
     162        /*
     163         * Compute the padding if IP options are set
     164         * multiple of 4 bytes
     165         */
    163166        padding =  ipopt_length % 4;
    164167        if (padding) {
     
    167170        }
    168171
    169         // prefix the header
     172        /* Prefix the header */
    170173        data = (uint8_t *) packet_prefix(packet, sizeof(ip_header_t) + padding);
    171174        if (!data)
    172175                return ENOMEM;
    173176
    174         // add the padding
     177        /* Add the padding */
    175178        while (padding--)
    176179                data[sizeof(ip_header_t) + padding] = IPOPT_NOOP;
    177180
    178         // set the header
    179         header = (ip_header_ref) data;
     181        /* Set the header */
     182        header = (ip_header_t *) data;
    180183        header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) +
    181184            ipopt_length);
     
    203206 * @param[out] ipopt_length The IP options length in bytes. May be NULL if not
    204207 *                      desired.
    205  * @returns             The prefixed IP header length in bytes on success.
    206  * @returns             ENOMEM if the packet is too short to contain the IP
     208 * @return              The prefixed IP header length in bytes on success.
     209 * @return              ENOMEM if the packet is too short to contain the IP
    207210 *                      header.
    208211 */
    209212int
    210 ip_client_process_packet(packet_t packet, ip_protocol_t *protocol,
     213ip_client_process_packet(packet_t *packet, ip_protocol_t *protocol,
    211214    ip_ttl_t *ttl, ip_tos_t *tos, int *dont_fragment, size_t *ipopt_length)
    212215{
    213         ip_header_ref header;
    214 
    215         header = (ip_header_ref) packet_get_data(packet);
     216        ip_header_t *header;
     217
     218        header = (ip_header_t *) packet_get_data(packet);
    216219        if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t)))
    217220                return ENOMEM;
     
    238241 * @param[in] headerlen The length of the IP pseudo header in bytes.
    239242 * @param[in] data_length The data length to be set.
    240  * @returns             EOK on success.
    241  * @returns             EBADMEM if the header parameter is NULL.
    242  * @returns             EINVAL if the headerlen parameter is not IPv4 pseudo
     243 * @return              EOK on success.
     244 * @return              EBADMEM if the header parameter is NULL.
     245 * @return              EINVAL if the headerlen parameter is not IPv4 pseudo
    243246 *                      header length.
    244247 */
     
    247250    size_t data_length)
    248251{
    249         ipv4_pseudo_header_ref header_in;
     252        ipv4_pseudo_header_t *header_in;
    250253
    251254        if (!header)
     
    253256
    254257        if (headerlen == sizeof(ipv4_pseudo_header_t)) {
    255                 header_in = (ipv4_pseudo_header_ref) header;
     258                header_in = (ipv4_pseudo_header_t *) header;
    256259                header_in->data_length = htons(data_length);
    257260                return EOK;
Note: See TracChangeset for help on using the changeset viewer.