diff options
author | Jack Humbert <jack.humb@gmail.com> | 2017-07-07 15:33:29 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-07 15:33:29 -0400 |
commit | 9de443cbf10ac41bc15762c9c83f138f51dd3b9a (patch) | |
tree | d8ddcb428e0b7d9773a1e52c42b60bdca2658beb /lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h | |
parent | 88b3d051b21cb1ddacc6353c5d59b19f03f3a242 (diff) | |
parent | 1c26468ad5a0701e244c99cbcbc547c93b75d515 (diff) |
Merge pull request #1471 from qmk/lufa_lib
Update LUFA and move it to /lib/lufa
Diffstat (limited to 'lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h')
-rw-r--r-- | lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h new file mode 100644 index 0000000000..0dd6db8a41 --- /dev/null +++ b/lib/lufa/Demos/Device/ClassDriver/RNDISEthernet/Lib/IP.h @@ -0,0 +1,93 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2017. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2017 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + without fee, provided that the above copyright notice appear in + all copies and that both that the copyright notice and this + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + The author disclaims all warranties with regard to this + software, including all implied warranties of merchantability + and fitness. In no event shall the author be liable for any + special, indirect or consequential damages or any damages + whatsoever resulting from loss of use, data or profits, whether + in an action of contract, negligence or other tortious action, + arising out of or in connection with the use or performance of + this software. +*/ + +/** \file + * + * Header file for IP.c. + */ + +#ifndef _IP_H_ +#define _IP_H_ + + /* Includes: */ + #include <avr/io.h> + #include <string.h> + + #include "EthernetProtocols.h" + #include "Ethernet.h" + #include "ProtocolDecoders.h" + #include "Config/AppConfig.h" + + /* Macros: */ + /** Protocol IP address of the broadcast address. */ + #define BROADCAST_IP_ADDRESS {0xFF, 0xFF, 0xFF, 0xFF} + + /** Default Time To Live (TTL) value for sent packets, indicating the maximum allowable hops until their destination + * is reached. + */ + #define DEFAULT_TTL 128 + + /** Performs a comparison between two IP addresses, indicating if they are identical. + * + * \param[in] IP1 First IP address + * \param[in] IP2 Second IP address + * + * \return True if the addresses match, \c false otherwise + */ + #define IP_COMPARE(IP1, IP2) (memcmp(IP1, IP2, sizeof(IP_Address_t)) == 0) + + /* Type Defines: */ + /** Type define of an IP packet header. */ + typedef struct + { + unsigned HeaderLength : 4; /**< Total length of the packet header, in 4-byte blocks */ + unsigned Version : 4; /**< IP protocol version */ + uint8_t TypeOfService; /**< Special service type identifier, indicating delay/throughput/reliability levels */ + uint16_t TotalLength; /**< Total length of the IP packet, in bytes */ + + uint16_t Identification; /**< Identification value for identifying fragmented packets */ + unsigned FragmentOffset : 13; /**< Offset of this IP fragment */ + unsigned Flags : 3; /**< Fragment flags, to indicate if a packet is fragmented */ + + uint8_t TTL; /**< Maximum allowable number of hops to reach the packet destination */ + uint8_t Protocol; /**< Encapsulated protocol type */ + uint16_t HeaderChecksum; /**< Ethernet checksum of the IP header */ + + IP_Address_t SourceAddress; /**< Source protocol IP address of the packet */ + IP_Address_t DestinationAddress; /**< Destination protocol IP address of the packet */ + } IP_Header_t; + + /* Function Prototypes: */ + int16_t IP_ProcessIPPacket(Ethernet_Frame_Info_t* const FrameIN, + void* InDataStart, + void* OutDataStart); + +#endif + |