diff options
author | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 |
---|---|---|
committer | tmk <hasu@tmk-kbd.com> | 2015-05-13 11:13:10 +0900 |
commit | f6d56675f9f981c5464f0ca7a1fbb0162154e8c5 (patch) | |
tree | 57c9d4b3808a26116ae0ee7956fc00b84841aa2b /protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c | |
parent | 4d116a04e94cf0d19317d5b44e4fa9f34a3e5594 (diff) |
Squashed 'tmk_core/' changes from caca2c0..dc0e46e
dc0e46e Rename LUFA to LUFA-git
3bfa7fa Remove LUFA-120730
215b764 Merge commit 'afa0f22a9299686fd88f58ce09c5b521ac917e8f' as 'protocol/lufa/LUFA'
afa0f22 Squashed 'protocol/lufa/LUFA/' content from commit def7fca
c0c42fa Remove submodule of LUFA
30f897d Merge commit '87ced33feb74e79c3281dda36eb6d6d153399b41' as 'protocol/usb_hid/USB_Host_Shield_2.0'
87ced33 Squashed 'protocol/usb_hid/USB_Host_Shield_2.0/' content from commit aab4a69
14f6d49 Remove submodule of USB_Host_Shield_2.0
git-subtree-dir: tmk_core
git-subtree-split: dc0e46eaa4367d4e218f8816e3c117895820f07c
Diffstat (limited to 'protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c')
m--------- | protocol/lufa/LUFA-git | 0 | ||||
-rw-r--r-- | protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c | 84 |
2 files changed, 84 insertions, 0 deletions
diff --git a/protocol/lufa/LUFA-git b/protocol/lufa/LUFA-git deleted file mode 160000 -Subproject b6c18b2a7c544653efbe12a1d4e8ba65e7d83c3 diff --git a/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c b/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c new file mode 100644 index 0000000000..95911fc5d3 --- /dev/null +++ b/protocol/lufa/LUFA-git/Demos/Device/ClassDriver/RNDISEthernet/Lib/UDP.c @@ -0,0 +1,84 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 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 + * + * User Datagram Protocol (UDP) packet handling routines. This protocol handles high throughput, low + * reliability packets which are typically used to encapsulate streaming data. + */ + +#define INCLUDE_FROM_UDP_C +#include "UDP.h" + +/** Processes a UDP packet inside an Ethernet frame, and writes the appropriate response + * to the output Ethernet frame if a sub-protocol handler has created a response packet. + * + * \param[in] IPHeaderInStart Pointer to the start of the incoming packet's IP header + * \param[in] UDPHeaderInStart Pointer to the start of the incoming packet's UDP header + * \param[out] UDPHeaderOutStart Pointer to the start of the outgoing packet's UDP header + * + * \return The number of bytes written to the out Ethernet frame if any, NO_RESPONSE otherwise + */ +int16_t UDP_ProcessUDPPacket(void* IPHeaderInStart, + void* UDPHeaderInStart, + void* UDPHeaderOutStart) +{ + UDP_Header_t* UDPHeaderIN = (UDP_Header_t*)UDPHeaderInStart; + UDP_Header_t* UDPHeaderOUT = (UDP_Header_t*)UDPHeaderOutStart; + + int16_t RetSize = NO_RESPONSE; + + DecodeUDPHeader(UDPHeaderInStart); + + switch (SwapEndian_16(UDPHeaderIN->DestinationPort)) + { + case UDP_PORT_DHCP_REQUEST: + RetSize = DHCP_ProcessDHCPPacket(IPHeaderInStart, + &((uint8_t*)UDPHeaderInStart)[sizeof(UDP_Header_t)], + &((uint8_t*)UDPHeaderOutStart)[sizeof(UDP_Header_t)]); + break; + } + + /* Check to see if the protocol processing routine has filled out a response */ + if (RetSize > 0) + { + /* Fill out the response UDP packet header */ + UDPHeaderOUT->SourcePort = UDPHeaderIN->DestinationPort; + UDPHeaderOUT->DestinationPort = UDPHeaderIN->SourcePort; + UDPHeaderOUT->Checksum = 0; + UDPHeaderOUT->Length = SwapEndian_16(sizeof(UDP_Header_t) + RetSize); + + /* Return the size of the response so far */ + return (sizeof(UDP_Header_t) + RetSize); + } + + return NO_RESPONSE; +} + |