Skip to content
Snippets Groups Projects
Select Git revision
  • a960e4b3b2ae72c6c3573fb690a1b9cde1642bc0
  • master default protected
  • LUFA-170418
  • LUFA-151115
  • LUFA-140928
  • LUFA-140302
  • LUFA-130901
  • LUFA-130901-BETA
  • LUFA-130303
  • LUFA-120730
  • LUFA-120730-BETA
  • LUFA-120219
  • LUFA-120219-BETA
  • LUFA-111009
  • LUFA-111009-BETA
  • LUFA-110528
  • LUFA-110528-BETA
17 results

uip_arch.h

Blame
  • uip_arch.h 4.36 KiB
    /**
     * \addtogroup uip
     * {@
     */
    
    /**
     * \defgroup uiparch Architecture specific uIP functions
     * @{
     *
     * The functions in the architecture specific module implement the IP
     * check sum and 32-bit additions.
     *
     * The IP checksum calculation is the most computationally expensive
     * operation in the TCP/IP stack and it therefore pays off to
     * implement this in efficient assembler. The purpose of the uip-arch
     * module is to let the checksum functions to be implemented in
     * architecture specific assembler.
     *
     */
    
    /**
     * \file
     * Declarations of architecture specific functions.
     * \author Adam Dunkels <adam@dunkels.com>
     */
    
    /*
     * Copyright (c) 2001, Adam Dunkels.
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     * 3. The name of the author may not be used to endorse or promote
     *    products derived from this software without specific prior
     *    written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     * This file is part of the uIP TCP/IP stack.
     *
     * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $
     *
     */
    
    #ifndef __UIP_ARCH_H__
    #define __UIP_ARCH_H__
    
    #include "uip.h"
    
    /**
     * Carry out a 32-bit addition.
     *
     * Because not all architectures for which uIP is intended has native
     * 32-bit arithmetic, uIP uses an external C function for doing the
     * required 32-bit additions in the TCP protocol processing. This
     * function should add the two arguments and place the result in the
     * global variable uip_acc32.
     *
     * \note The 32-bit integer pointed to by the op32 parameter and the
     * result in the uip_acc32 variable are in network byte order (big
     * endian).
     *
     * \param op32 A pointer to a 4-byte array representing a 32-bit
     * integer in network byte order (big endian).
     *
     * \param op16 A 16-bit integer in host byte order.
     */
    void uip_add32(u8_t *op32, u16_t op16);
    
    /**
     * Calculate the Internet checksum over a buffer.
     *
     * The Internet checksum is the one's complement of the one's
     * complement sum of all 16-bit words in the buffer.
     *
     * See RFC1071.
     *
     * \note This function is not called in the current version of uIP,
     * but future versions might make use of it.
     *
     * \param buf A pointer to the buffer over which the checksum is to be
     * computed.
     *
     * \param len The length of the buffer over which the checksum is to
     * be computed.
     *
     * \return The Internet checksum of the buffer.
     */
    u16_t uip_chksum(u16_t *buf, u16_t len);
    
    /**
     * Calculate the IP header checksum of the packet header in uip_buf.
     *
     * The IP header checksum is the Internet checksum of the 20 bytes of
     * the IP header.
     *
     * \return The IP header checksum of the IP header in the uip_buf
     * buffer.
     */
    u16_t uip_ipchksum(void);
    
    /**
     * Calculate the TCP checksum of the packet in uip_buf and uip_appdata.
     *
     * The TCP checksum is the Internet checksum of data contents of the
     * TCP segment, and a pseudo-header as defined in RFC793.
     *
     * \note The uip_appdata pointer that points to the packet data may
     * point anywhere in memory, so it is not possible to simply calculate
     * the Internet checksum of the contents of the uip_buf buffer.
     *
     * \return The TCP checksum of the TCP segment in uip_buf and pointed
     * to by uip_appdata.
     */
    u16_t uip_tcpchksum(void);
    
    u16_t uip_udpchksum(void);
    
    /** @} */
    /** @} */
    
    #endif /* __UIP_ARCH_H__ */