mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
Remove carriage returns
Git for windows handles those by itself
This commit is contained in:
parent
366d25ae38
commit
a3b754b662
@ -1,96 +1,96 @@
|
|||||||
/* Copyright (C) 2005, 2006, 2007, 2008 by Thomas Hillebrandt and Heiko Will
|
/* Copyright (C) 2005, 2006, 2007, 2008 by Thomas Hillebrandt and Heiko Will
|
||||||
|
|
||||||
This file is part of the Micro-mesh SensorWeb Firmware.
|
This file is part of the Micro-mesh SensorWeb Firmware.
|
||||||
|
|
||||||
Micro-Mesh is free software; you can redistribute it and/or modify
|
Micro-Mesh is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; either version 3, or (at your option)
|
the Free Software Foundation; either version 3, or (at your option)
|
||||||
any later version.
|
any later version.
|
||||||
|
|
||||||
Micro-Mesh is distributed in the hope that it will be useful,
|
Micro-Mesh is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with Micro-Mesh; see the file COPYING. If not, write to
|
along with Micro-Mesh; see the file COPYING. If not, write to
|
||||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#ifndef __ARM_COMMON_H
|
#ifndef __ARM_COMMON_H
|
||||||
#define __ARM_COMMON_H
|
#define __ARM_COMMON_H
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup arm_common
|
* @ingroup arm_common
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define I_Bit 0x80
|
#define I_Bit 0x80
|
||||||
#define F_Bit 0x40
|
#define F_Bit 0x40
|
||||||
|
|
||||||
#define SYS32Mode 0x1F
|
#define SYS32Mode 0x1F
|
||||||
#define IRQ32Mode 0x12
|
#define IRQ32Mode 0x12
|
||||||
#define FIQ32Mode 0x11
|
#define FIQ32Mode 0x11
|
||||||
|
|
||||||
#define INTMode (FIQ32Mode | IRQ32Mode)
|
#define INTMode (FIQ32Mode | IRQ32Mode)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name IRQ Priority Mapping
|
* @name IRQ Priority Mapping
|
||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
#define HIGHEST_PRIORITY 0x01
|
#define HIGHEST_PRIORITY 0x01
|
||||||
#define IRQP_RTIMER 1 // FIQ_PRIORITY // TODO: investigate problems with rtimer and FIQ
|
#define IRQP_RTIMER 1 // FIQ_PRIORITY // TODO: investigate problems with rtimer and FIQ
|
||||||
#define IRQP_TIMER1 1
|
#define IRQP_TIMER1 1
|
||||||
#define IRQP_WATCHDOG 1
|
#define IRQP_WATCHDOG 1
|
||||||
#define IRQP_CLOCK 3
|
#define IRQP_CLOCK 3
|
||||||
#define IRQP_GPIO 4
|
#define IRQP_GPIO 4
|
||||||
#define IRQP_RTC 8
|
#define IRQP_RTC 8
|
||||||
#define LOWEST_PRIORITY 0x0F
|
#define LOWEST_PRIORITY 0x0F
|
||||||
// @}
|
// @}
|
||||||
|
|
||||||
|
|
||||||
#define WDT_INT 0
|
#define WDT_INT 0
|
||||||
#define SWI_INT 1
|
#define SWI_INT 1
|
||||||
#define ARM_CORE0_INT 2
|
#define ARM_CORE0_INT 2
|
||||||
#define ARM_CORE1_INT 3
|
#define ARM_CORE1_INT 3
|
||||||
#define TIMER0_INT 4
|
#define TIMER0_INT 4
|
||||||
#define TIMER1_INT 5
|
#define TIMER1_INT 5
|
||||||
#define UART0_INT 6
|
#define UART0_INT 6
|
||||||
#define UART1_INT 7
|
#define UART1_INT 7
|
||||||
#define PWM0_1_INT 8
|
#define PWM0_1_INT 8
|
||||||
#define I2C0_INT 9
|
#define I2C0_INT 9
|
||||||
#define SPI0_INT 10 /* SPI and SSP0 share VIC slot */
|
#define SPI0_INT 10 /* SPI and SSP0 share VIC slot */
|
||||||
#define SSP0_INT 10
|
#define SSP0_INT 10
|
||||||
#define SSP1_INT 11
|
#define SSP1_INT 11
|
||||||
#define PLL_INT 12
|
#define PLL_INT 12
|
||||||
#define RTC_INT 13
|
#define RTC_INT 13
|
||||||
#define EINT0_INT 14
|
#define EINT0_INT 14
|
||||||
#define EINT1_INT 15
|
#define EINT1_INT 15
|
||||||
#define EINT2_INT 16
|
#define EINT2_INT 16
|
||||||
#define EINT3_INT 17
|
#define EINT3_INT 17
|
||||||
#define ADC0_INT 18
|
#define ADC0_INT 18
|
||||||
#define I2C1_INT 19
|
#define I2C1_INT 19
|
||||||
#define BOD_INT 20
|
#define BOD_INT 20
|
||||||
#define EMAC_INT 21
|
#define EMAC_INT 21
|
||||||
#define USB_INT 22
|
#define USB_INT 22
|
||||||
#define CAN_INT 23
|
#define CAN_INT 23
|
||||||
#define MCI_INT 24
|
#define MCI_INT 24
|
||||||
#define GPDMA_INT 25
|
#define GPDMA_INT 25
|
||||||
#define TIMER2_INT 26
|
#define TIMER2_INT 26
|
||||||
#define TIMER3_INT 27
|
#define TIMER3_INT 27
|
||||||
#define UART2_INT 28
|
#define UART2_INT 28
|
||||||
#define UART3_INT 29
|
#define UART3_INT 29
|
||||||
#define I2C2_INT 30
|
#define I2C2_INT 30
|
||||||
#define I2S_INT 31
|
#define I2S_INT 31
|
||||||
|
|
||||||
#define VECT_ADDR_INDEX 0x100
|
#define VECT_ADDR_INDEX 0x100
|
||||||
#define VECT_CNTL_INDEX 0x200
|
#define VECT_CNTL_INDEX 0x200
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
|
||||||
bool cpu_install_irq(int IntNumber, void *HandlerAddr, int Priority);
|
bool cpu_install_irq(int IntNumber, void *HandlerAddr, int Priority);
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
#endif /*ARMVIC_H_*/
|
#endif /*ARMVIC_H_*/
|
||||||
|
@ -1,96 +1,96 @@
|
|||||||
@-----------------------------------------------------------@
|
@-----------------------------------------------------------@
|
||||||
@ Fast Block Copy (declared in diskio.h)
|
@ Fast Block Copy (declared in diskio.h)
|
||||||
@-----------------------------------------------------------@
|
@-----------------------------------------------------------@
|
||||||
|
|
||||||
.global Copy_un2al
|
.global Copy_un2al
|
||||||
.arm
|
.arm
|
||||||
Copy_un2al:
|
Copy_un2al:
|
||||||
STMFD SP!, {R4-R8}
|
STMFD SP!, {R4-R8}
|
||||||
ANDS IP, R1, #3
|
ANDS IP, R1, #3
|
||||||
BEQ lb_align
|
BEQ lb_align
|
||||||
|
|
||||||
BIC R1, #3
|
BIC R1, #3
|
||||||
MOV IP, IP, LSL #3
|
MOV IP, IP, LSL #3
|
||||||
RSB R8, IP, #32
|
RSB R8, IP, #32
|
||||||
LDMIA R1!, {R7}
|
LDMIA R1!, {R7}
|
||||||
lb_l1: MOV R3, R7
|
lb_l1: MOV R3, R7
|
||||||
LDMIA R1!, {R4-R7}
|
LDMIA R1!, {R4-R7}
|
||||||
MOV R3, R3, LSR IP
|
MOV R3, R3, LSR IP
|
||||||
ORR R3, R3, R4, LSL R8
|
ORR R3, R3, R4, LSL R8
|
||||||
MOV R4, R4, LSR IP
|
MOV R4, R4, LSR IP
|
||||||
ORR R4, R4, R5, LSL R8
|
ORR R4, R4, R5, LSL R8
|
||||||
MOV R5, R5, LSR IP
|
MOV R5, R5, LSR IP
|
||||||
ORR R5, R5, R6, LSL R8
|
ORR R5, R5, R6, LSL R8
|
||||||
MOV R6, R6, LSR IP
|
MOV R6, R6, LSR IP
|
||||||
ORR R6, R6, R7, LSL R8
|
ORR R6, R6, R7, LSL R8
|
||||||
SUBS R2, R2, #16
|
SUBS R2, R2, #16
|
||||||
STMIA R0!, {R3-R6}
|
STMIA R0!, {R3-R6}
|
||||||
BNE lb_l1
|
BNE lb_l1
|
||||||
LDMFD SP!, {R4-R8}
|
LDMFD SP!, {R4-R8}
|
||||||
BX LR
|
BX LR
|
||||||
|
|
||||||
lb_align:
|
lb_align:
|
||||||
LDMIA R1!, {R3-R6}
|
LDMIA R1!, {R3-R6}
|
||||||
SUBS R2, R2, #16
|
SUBS R2, R2, #16
|
||||||
STMIA R0!, {R3-R6}
|
STMIA R0!, {R3-R6}
|
||||||
BNE lb_align
|
BNE lb_align
|
||||||
LDMFD SP!, {R4-R8}
|
LDMFD SP!, {R4-R8}
|
||||||
BX LR
|
BX LR
|
||||||
|
|
||||||
|
|
||||||
.global Copy_al2un
|
.global Copy_al2un
|
||||||
.arm
|
.arm
|
||||||
Copy_al2un:
|
Copy_al2un:
|
||||||
STMFD SP!, {R4-R8}
|
STMFD SP!, {R4-R8}
|
||||||
ANDS IP, R0, #3
|
ANDS IP, R0, #3
|
||||||
BEQ sb_align
|
BEQ sb_align
|
||||||
|
|
||||||
MOV IP, IP, LSL #3
|
MOV IP, IP, LSL #3
|
||||||
RSB R8, IP, #32
|
RSB R8, IP, #32
|
||||||
|
|
||||||
LDMIA R1!, {R4-R7}
|
LDMIA R1!, {R4-R7}
|
||||||
sb_p1: STRB R4, [R0], #1
|
sb_p1: STRB R4, [R0], #1
|
||||||
MOV R4, R4, LSR #8
|
MOV R4, R4, LSR #8
|
||||||
TST R0, #3
|
TST R0, #3
|
||||||
BNE sb_p1
|
BNE sb_p1
|
||||||
ORR R4, R4, R5, LSL IP
|
ORR R4, R4, R5, LSL IP
|
||||||
MOV R5, R5, LSR R8
|
MOV R5, R5, LSR R8
|
||||||
ORR R5, R5, R6, LSL IP
|
ORR R5, R5, R6, LSL IP
|
||||||
MOV R6, R6, LSR R8
|
MOV R6, R6, LSR R8
|
||||||
ORR R6, R6, R7, LSL IP
|
ORR R6, R6, R7, LSL IP
|
||||||
SUBS R2, R2, #16
|
SUBS R2, R2, #16
|
||||||
STMIA R0!, {R4-R6}
|
STMIA R0!, {R4-R6}
|
||||||
|
|
||||||
sb_l1: MOV R3, R7
|
sb_l1: MOV R3, R7
|
||||||
LDMIA R1!, {R4-R7}
|
LDMIA R1!, {R4-R7}
|
||||||
MOV R3, R3, LSR R8
|
MOV R3, R3, LSR R8
|
||||||
ORR R3, R3, R4, LSL IP
|
ORR R3, R3, R4, LSL IP
|
||||||
MOV R4, R4, LSR R8
|
MOV R4, R4, LSR R8
|
||||||
ORR R4, R4, R5, LSL IP
|
ORR R4, R4, R5, LSL IP
|
||||||
MOV R5, R5, LSR R8
|
MOV R5, R5, LSR R8
|
||||||
ORR R5, R5, R6, LSL IP
|
ORR R5, R5, R6, LSL IP
|
||||||
MOV R6, R6, LSR R8
|
MOV R6, R6, LSR R8
|
||||||
ORR R6, R6, R7, LSL IP
|
ORR R6, R6, R7, LSL IP
|
||||||
SUBS R2, R2, #16
|
SUBS R2, R2, #16
|
||||||
STMIA R0!, {R3-R6}
|
STMIA R0!, {R3-R6}
|
||||||
BNE sb_l1
|
BNE sb_l1
|
||||||
|
|
||||||
MOV R7, R7, LSR R8
|
MOV R7, R7, LSR R8
|
||||||
sb_p2: SUBS IP, IP, #8
|
sb_p2: SUBS IP, IP, #8
|
||||||
STRB R7, [R0], #1
|
STRB R7, [R0], #1
|
||||||
MOV R7, R7, LSR #8
|
MOV R7, R7, LSR #8
|
||||||
BNE sb_p2
|
BNE sb_p2
|
||||||
|
|
||||||
LDMFD SP!, {R4-R8}
|
LDMFD SP!, {R4-R8}
|
||||||
BX LR
|
BX LR
|
||||||
|
|
||||||
sb_align:
|
sb_align:
|
||||||
LDMIA R1!, {R3-R6}
|
LDMIA R1!, {R3-R6}
|
||||||
SUBS R2, #16
|
SUBS R2, #16
|
||||||
STMIA R0!, {R3-R6}
|
STMIA R0!, {R3-R6}
|
||||||
BNE sb_align
|
BNE sb_align
|
||||||
LDMFD SP!, {R4-R8}
|
LDMFD SP!, {R4-R8}
|
||||||
BX LR
|
BX LR
|
||||||
|
|
||||||
.end
|
.end
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,2 +1,2 @@
|
|||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
/*
|
/*
|
||||||
* destiny.h
|
* destiny.h
|
||||||
*
|
*
|
||||||
* Created on: 03.09.2011
|
* Created on: 03.09.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef DESTINY_H_
|
#ifndef DESTINY_H_
|
||||||
#define DESTINY_H_
|
#define DESTINY_H_
|
||||||
|
|
||||||
void init_transport_layer(void);
|
void init_transport_layer(void);
|
||||||
|
|
||||||
#endif /* DESTINY_H_ */
|
#endif /* DESTINY_H_ */
|
||||||
|
@ -1,133 +1,133 @@
|
|||||||
/*
|
/*
|
||||||
* in.h
|
* in.h
|
||||||
*
|
*
|
||||||
* Created on: 16.09.2011
|
* Created on: 16.09.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IN_H_
|
#ifndef IN_H_
|
||||||
#define IN_H_
|
#define IN_H_
|
||||||
/*
|
/*
|
||||||
* Constants and structures defined by the internet system,
|
* Constants and structures defined by the internet system,
|
||||||
* Per RFC 790, September 1981, and numerous additions.
|
* Per RFC 790, September 1981, and numerous additions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Protocols (RFC 1700)
|
* Protocols (RFC 1700)
|
||||||
*/
|
*/
|
||||||
#define IPPROTO_IP (0) /* dummy for IP */
|
#define IPPROTO_IP (0) /* dummy for IP */
|
||||||
#define IPPROTO_HOPOPTS (0) /* IP6 hop-by-hop options */
|
#define IPPROTO_HOPOPTS (0) /* IP6 hop-by-hop options */
|
||||||
#define IPPROTO_ICMP (1) /* control message protocol */
|
#define IPPROTO_ICMP (1) /* control message protocol */
|
||||||
#define IPPROTO_IGMP (2) /* group mgmt protocol */
|
#define IPPROTO_IGMP (2) /* group mgmt protocol */
|
||||||
#define IPPROTO_GGP (3) /* gateway^2 (deprecated) */
|
#define IPPROTO_GGP (3) /* gateway^2 (deprecated) */
|
||||||
#define IPPROTO_IPV4 (4) /* IPv4 encapsulation */
|
#define IPPROTO_IPV4 (4) /* IPv4 encapsulation */
|
||||||
#define IPPROTO_IPIP IPPROTO_IPV4 /* for compatibility */
|
#define IPPROTO_IPIP IPPROTO_IPV4 /* for compatibility */
|
||||||
#define IPPROTO_TCP (6) /* tcp */
|
#define IPPROTO_TCP (6) /* tcp */
|
||||||
#define IPPROTO_ST (7) /* Stream protocol II */
|
#define IPPROTO_ST (7) /* Stream protocol II */
|
||||||
#define IPPROTO_EGP (8) /* exterior gateway protocol */
|
#define IPPROTO_EGP (8) /* exterior gateway protocol */
|
||||||
#define IPPROTO_PIGP (9) /* private interior gateway */
|
#define IPPROTO_PIGP (9) /* private interior gateway */
|
||||||
#define IPPROTO_RCCMON (10) /* BBN RCC Monitoring */
|
#define IPPROTO_RCCMON (10) /* BBN RCC Monitoring */
|
||||||
#define IPPROTO_NVPII (11) /* network voice protocol*/
|
#define IPPROTO_NVPII (11) /* network voice protocol*/
|
||||||
#define IPPROTO_PUP (12) /* pup */
|
#define IPPROTO_PUP (12) /* pup */
|
||||||
#define IPPROTO_ARGUS (13) /* Argus */
|
#define IPPROTO_ARGUS (13) /* Argus */
|
||||||
#define IPPROTO_EMCON (14) /* EMCON */
|
#define IPPROTO_EMCON (14) /* EMCON */
|
||||||
#define IPPROTO_XNET (15) /* Cross Net Debugger */
|
#define IPPROTO_XNET (15) /* Cross Net Debugger */
|
||||||
#define IPPROTO_CHAOS (16) /* Chaos*/
|
#define IPPROTO_CHAOS (16) /* Chaos*/
|
||||||
#define IPPROTO_UDP (17) /* user datagram protocol */
|
#define IPPROTO_UDP (17) /* user datagram protocol */
|
||||||
#define IPPROTO_MUX (18) /* Multiplexing */
|
#define IPPROTO_MUX (18) /* Multiplexing */
|
||||||
#define IPPROTO_MEAS (19) /* DCN Measurement Subsystems */
|
#define IPPROTO_MEAS (19) /* DCN Measurement Subsystems */
|
||||||
#define IPPROTO_HMP (20) /* Host Monitoring */
|
#define IPPROTO_HMP (20) /* Host Monitoring */
|
||||||
#define IPPROTO_PRM (21) /* Packet Radio Measurement */
|
#define IPPROTO_PRM (21) /* Packet Radio Measurement */
|
||||||
#define IPPROTO_IDP (22) /* xns idp */
|
#define IPPROTO_IDP (22) /* xns idp */
|
||||||
#define IPPROTO_TRUNK1 (23) /* Trunk-1 */
|
#define IPPROTO_TRUNK1 (23) /* Trunk-1 */
|
||||||
#define IPPROTO_TRUNK2 (24) /* Trunk-2 */
|
#define IPPROTO_TRUNK2 (24) /* Trunk-2 */
|
||||||
#define IPPROTO_LEAF1 (25) /* Leaf-1 */
|
#define IPPROTO_LEAF1 (25) /* Leaf-1 */
|
||||||
#define IPPROTO_LEAF2 (26) /* Leaf-2 */
|
#define IPPROTO_LEAF2 (26) /* Leaf-2 */
|
||||||
#define IPPROTO_RDP (27) /* Reliable Data */
|
#define IPPROTO_RDP (27) /* Reliable Data */
|
||||||
#define IPPROTO_IRTP (28) /* Reliable Transaction */
|
#define IPPROTO_IRTP (28) /* Reliable Transaction */
|
||||||
#define IPPROTO_TP (29) /* tp-4 w/ class negotiation */
|
#define IPPROTO_TP (29) /* tp-4 w/ class negotiation */
|
||||||
#define IPPROTO_BLT (30) /* Bulk Data Transfer */
|
#define IPPROTO_BLT (30) /* Bulk Data Transfer */
|
||||||
#define IPPROTO_NSP (31) /* Network Services */
|
#define IPPROTO_NSP (31) /* Network Services */
|
||||||
#define IPPROTO_INP (32) /* Merit Internodal */
|
#define IPPROTO_INP (32) /* Merit Internodal */
|
||||||
#define IPPROTO_SEP (33) /* Sequential Exchange */
|
#define IPPROTO_SEP (33) /* Sequential Exchange */
|
||||||
#define IPPROTO_3PC (34) /* Third Party Connect */
|
#define IPPROTO_3PC (34) /* Third Party Connect */
|
||||||
#define IPPROTO_IDPR (35) /* InterDomain Policy Routing */
|
#define IPPROTO_IDPR (35) /* InterDomain Policy Routing */
|
||||||
#define IPPROTO_XTP (36) /* XTP */
|
#define IPPROTO_XTP (36) /* XTP */
|
||||||
#define IPPROTO_DDP (37) /* Datagram Delivery */
|
#define IPPROTO_DDP (37) /* Datagram Delivery */
|
||||||
#define IPPROTO_CMTP (38) /* Control Message Transport */
|
#define IPPROTO_CMTP (38) /* Control Message Transport */
|
||||||
#define IPPROTO_TPXX (39) /* TP++ Transport */
|
#define IPPROTO_TPXX (39) /* TP++ Transport */
|
||||||
#define IPPROTO_IL (40) /* IL transport protocol */
|
#define IPPROTO_IL (40) /* IL transport protocol */
|
||||||
#define IPPROTO_IPV6 (41) /* IP6 header */
|
#define IPPROTO_IPV6 (41) /* IP6 header */
|
||||||
#define IPPROTO_SDRP (42) /* Source Demand Routing */
|
#define IPPROTO_SDRP (42) /* Source Demand Routing */
|
||||||
#define IPPROTO_ROUTING (43) /* IP6 routing header */
|
#define IPPROTO_ROUTING (43) /* IP6 routing header */
|
||||||
#define IPPROTO_FRAGMENT (44) /* IP6 fragmentation header */
|
#define IPPROTO_FRAGMENT (44) /* IP6 fragmentation header */
|
||||||
#define IPPROTO_IDRP (45) /* InterDomain Routing*/
|
#define IPPROTO_IDRP (45) /* InterDomain Routing*/
|
||||||
#define IPPROTO_RSVP (46) /* resource reservation */
|
#define IPPROTO_RSVP (46) /* resource reservation */
|
||||||
#define IPPROTO_GRE (47) /* General Routing Encap. */
|
#define IPPROTO_GRE (47) /* General Routing Encap. */
|
||||||
#define IPPROTO_MHRP (48) /* Mobile Host Routing */
|
#define IPPROTO_MHRP (48) /* Mobile Host Routing */
|
||||||
#define IPPROTO_BHA (49) /* BHA */
|
#define IPPROTO_BHA (49) /* BHA */
|
||||||
#define IPPROTO_ESP (50) /* IP6 Encap Sec. Payload */
|
#define IPPROTO_ESP (50) /* IP6 Encap Sec. Payload */
|
||||||
#define IPPROTO_AH (51) /* IP6 Auth Header */
|
#define IPPROTO_AH (51) /* IP6 Auth Header */
|
||||||
#define IPPROTO_INLSP (52) /* Integ. Net Layer Security */
|
#define IPPROTO_INLSP (52) /* Integ. Net Layer Security */
|
||||||
#define IPPROTO_SWIPE (53) /* IP with encryption */
|
#define IPPROTO_SWIPE (53) /* IP with encryption */
|
||||||
#define IPPROTO_NHRP (54) /* Next Hop Resolution */
|
#define IPPROTO_NHRP (54) /* Next Hop Resolution */
|
||||||
/* 55-57: Unassigned */
|
/* 55-57: Unassigned */
|
||||||
#define IPPROTO_ICMPV6 (58) /* ICMP6 */
|
#define IPPROTO_ICMPV6 (58) /* ICMP6 */
|
||||||
#define IPPROTO_NONE (59) /* IP6 no next header */
|
#define IPPROTO_NONE (59) /* IP6 no next header */
|
||||||
#define IPPROTO_DSTOPTS (60) /* IP6 destination option */
|
#define IPPROTO_DSTOPTS (60) /* IP6 destination option */
|
||||||
#define IPPROTO_AHIP (61) /* any host internal protocol */
|
#define IPPROTO_AHIP (61) /* any host internal protocol */
|
||||||
#define IPPROTO_CFTP (62) /* CFTP */
|
#define IPPROTO_CFTP (62) /* CFTP */
|
||||||
#define IPPROTO_HELLO (63) /* "hello" routing protocol */
|
#define IPPROTO_HELLO (63) /* "hello" routing protocol */
|
||||||
#define IPPROTO_SATEXPAK (64) /* SATNET/Backroom EXPAK */
|
#define IPPROTO_SATEXPAK (64) /* SATNET/Backroom EXPAK */
|
||||||
#define IPPROTO_KRYPTOLAN (65) /* Kryptolan */
|
#define IPPROTO_KRYPTOLAN (65) /* Kryptolan */
|
||||||
#define IPPROTO_RVD (66) /* Remote Virtual Disk */
|
#define IPPROTO_RVD (66) /* Remote Virtual Disk */
|
||||||
#define IPPROTO_IPPC (67) /* Pluribus Packet Core */
|
#define IPPROTO_IPPC (67) /* Pluribus Packet Core */
|
||||||
#define IPPROTO_ADFS (68) /* Any distributed FS */
|
#define IPPROTO_ADFS (68) /* Any distributed FS */
|
||||||
#define IPPROTO_SATMON (69) /* Satnet Monitoring */
|
#define IPPROTO_SATMON (69) /* Satnet Monitoring */
|
||||||
#define IPPROTO_VISA (70) /* VISA Protocol */
|
#define IPPROTO_VISA (70) /* VISA Protocol */
|
||||||
#define IPPROTO_IPCV (71) /* Packet Core Utility */
|
#define IPPROTO_IPCV (71) /* Packet Core Utility */
|
||||||
#define IPPROTO_CPNX (72) /* Comp. Prot. Net. Executive */
|
#define IPPROTO_CPNX (72) /* Comp. Prot. Net. Executive */
|
||||||
#define IPPROTO_CPHB (73) /* Comp. Prot. HeartBeat */
|
#define IPPROTO_CPHB (73) /* Comp. Prot. HeartBeat */
|
||||||
#define IPPROTO_WSN (74) /* Wang Span Network */
|
#define IPPROTO_WSN (74) /* Wang Span Network */
|
||||||
#define IPPROTO_PVP (75) /* Packet Video Protocol */
|
#define IPPROTO_PVP (75) /* Packet Video Protocol */
|
||||||
#define IPPROTO_BRSATMON (76) /* BackRoom SATNET Monitoring */
|
#define IPPROTO_BRSATMON (76) /* BackRoom SATNET Monitoring */
|
||||||
#define IPPROTO_ND (77) /* Sun net disk proto (temp.) */
|
#define IPPROTO_ND (77) /* Sun net disk proto (temp.) */
|
||||||
#define IPPROTO_WBMON (78) /* WIDEBAND Monitoring */
|
#define IPPROTO_WBMON (78) /* WIDEBAND Monitoring */
|
||||||
#define IPPROTO_WBEXPAK (79) /* WIDEBAND EXPAK */
|
#define IPPROTO_WBEXPAK (79) /* WIDEBAND EXPAK */
|
||||||
#define IPPROTO_EON (80) /* ISO cnlp */
|
#define IPPROTO_EON (80) /* ISO cnlp */
|
||||||
#define IPPROTO_VMTP (81) /* VMTP */
|
#define IPPROTO_VMTP (81) /* VMTP */
|
||||||
#define IPPROTO_SVMTP (82) /* Secure VMTP */
|
#define IPPROTO_SVMTP (82) /* Secure VMTP */
|
||||||
#define IPPROTO_VINES (83) /* Banyon VINES */
|
#define IPPROTO_VINES (83) /* Banyon VINES */
|
||||||
#define IPPROTO_TTP (84) /* TTP */
|
#define IPPROTO_TTP (84) /* TTP */
|
||||||
#define IPPROTO_IGP (85) /* NSFNET-IGP */
|
#define IPPROTO_IGP (85) /* NSFNET-IGP */
|
||||||
#define IPPROTO_DGP (86) /* dissimilar gateway prot. */
|
#define IPPROTO_DGP (86) /* dissimilar gateway prot. */
|
||||||
#define IPPROTO_TCF (87) /* TCF */
|
#define IPPROTO_TCF (87) /* TCF */
|
||||||
#define IPPROTO_IGRP (88) /* Cisco/GXS IGRP */
|
#define IPPROTO_IGRP (88) /* Cisco/GXS IGRP */
|
||||||
#define IPPROTO_OSPFIGP (89) /* OSPFIGP */
|
#define IPPROTO_OSPFIGP (89) /* OSPFIGP */
|
||||||
#define IPPROTO_SRPC (90) /* Strite RPC protocol */
|
#define IPPROTO_SRPC (90) /* Strite RPC protocol */
|
||||||
#define IPPROTO_LARP (91) /* Locus Address Resoloution */
|
#define IPPROTO_LARP (91) /* Locus Address Resoloution */
|
||||||
#define IPPROTO_MTP (92) /* Multicast Transport */
|
#define IPPROTO_MTP (92) /* Multicast Transport */
|
||||||
#define IPPROTO_AX25 (93) /* AX.25 Frames */
|
#define IPPROTO_AX25 (93) /* AX.25 Frames */
|
||||||
#define IPPROTO_IPEIP (94) /* IP encapsulated in IP */
|
#define IPPROTO_IPEIP (94) /* IP encapsulated in IP */
|
||||||
#define IPPROTO_MICP (95) /* Mobile Int.ing control */
|
#define IPPROTO_MICP (95) /* Mobile Int.ing control */
|
||||||
#define IPPROTO_SCCSP (96) /* Semaphore Comm. security */
|
#define IPPROTO_SCCSP (96) /* Semaphore Comm. security */
|
||||||
#define IPPROTO_ETHERIP (97) /* Ethernet IP encapsulation */
|
#define IPPROTO_ETHERIP (97) /* Ethernet IP encapsulation */
|
||||||
#define IPPROTO_ENCAP (98) /* encapsulation header */
|
#define IPPROTO_ENCAP (98) /* encapsulation header */
|
||||||
#define IPPROTO_APES (99) /* any private encr. scheme */
|
#define IPPROTO_APES (99) /* any private encr. scheme */
|
||||||
#define IPPROTO_GMTP (100) /* GMTP*/
|
#define IPPROTO_GMTP (100) /* GMTP*/
|
||||||
#define IPPROTO_IPCOMP (108) /* payload compression (IPComp) */
|
#define IPPROTO_IPCOMP (108) /* payload compression (IPComp) */
|
||||||
/* 101-254: Partly Unassigned */
|
/* 101-254: Partly Unassigned */
|
||||||
#define IPPROTO_PIM (103) /* Protocol Independent Mcast */
|
#define IPPROTO_PIM (103) /* Protocol Independent Mcast */
|
||||||
#define IPPROTO_PGM (113) /* PGM */
|
#define IPPROTO_PGM (113) /* PGM */
|
||||||
/* 255: Reserved */
|
/* 255: Reserved */
|
||||||
/* BSD Private, local use, namespace incursion */
|
/* BSD Private, local use, namespace incursion */
|
||||||
#define IPPROTO_DIVERT (254) /* divert pseudo-protocol */
|
#define IPPROTO_DIVERT (254) /* divert pseudo-protocol */
|
||||||
#define IPPROTO_RAW (255) /* raw IP packet */
|
#define IPPROTO_RAW (255) /* raw IP packet */
|
||||||
#define IPPROTO_MAX (256)
|
#define IPPROTO_MAX (256)
|
||||||
|
|
||||||
/* last return value of *_input(), meaning "all job for this pkt is done". */
|
/* last return value of *_input(), meaning "all job for this pkt is done". */
|
||||||
#define IPPROTO_DONE (257)
|
#define IPPROTO_DONE (257)
|
||||||
|
|
||||||
#define IN_LOOPBACKNET (127) /* official! */
|
#define IN_LOOPBACKNET (127) /* official! */
|
||||||
|
|
||||||
#endif /* IN_H_ */
|
#endif /* IN_H_ */
|
||||||
|
@ -1,248 +1,248 @@
|
|||||||
/**
|
/**
|
||||||
* Destiny socket API
|
* Destiny socket API
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 INRIA.
|
* Copyright (C) 2013 INRIA.
|
||||||
*
|
*
|
||||||
* This file subject to the terms and conditions of the GNU Lesser General
|
* This file subject to the terms and conditions of the GNU Lesser General
|
||||||
* Public License. See the file LICENSE in the top level directory for more
|
* Public License. See the file LICENSE in the top level directory for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* @ingroup destiny
|
* @ingroup destiny
|
||||||
* @{
|
* @{
|
||||||
* @file socket.h
|
* @file socket.h
|
||||||
* @brief header for BSD socket API
|
* @brief header for BSD socket API
|
||||||
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef SOCKET_H_
|
#ifndef SOCKET_H_
|
||||||
#define SOCKET_H_
|
#define SOCKET_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "tcp.h"
|
#include "tcp.h"
|
||||||
#include "udp.h"
|
#include "udp.h"
|
||||||
#include "in.h"
|
#include "in.h"
|
||||||
#include "../sixlowpan/sixlowip.h"
|
#include "../sixlowpan/sixlowip.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* POSIX compatibility
|
* POSIX compatibility
|
||||||
*/
|
*/
|
||||||
typedef uint8_t sa_family_t;
|
typedef uint8_t sa_family_t;
|
||||||
typedef uint32_t socklen_t;
|
typedef uint32_t socklen_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Types
|
* Types
|
||||||
*/
|
*/
|
||||||
#define SOCK_STREAM 1 /* stream socket */
|
#define SOCK_STREAM 1 /* stream socket */
|
||||||
#define SOCK_DGRAM 2 /* datagram socket */
|
#define SOCK_DGRAM 2 /* datagram socket */
|
||||||
#define SOCK_RAW 3 /* raw-protocol interface */
|
#define SOCK_RAW 3 /* raw-protocol interface */
|
||||||
#define SOCK_RDM 4 /* reliably-delivered message */
|
#define SOCK_RDM 4 /* reliably-delivered message */
|
||||||
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
|
#define SOCK_SEQPACKET 5 /* sequenced packet stream */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Address families.
|
* Address families.
|
||||||
*/
|
*/
|
||||||
#define AF_UNSPEC 0 /* unspecified */
|
#define AF_UNSPEC 0 /* unspecified */
|
||||||
#define AF_LOCAL 1 /* local to host (pipes, portals) */
|
#define AF_LOCAL 1 /* local to host (pipes, portals) */
|
||||||
#define AF_UNIX AF_LOCAL /* backward compatibility */
|
#define AF_UNIX AF_LOCAL /* backward compatibility */
|
||||||
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
|
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
|
||||||
#define AF_IMPLINK 3 /* arpanet imp addresses */
|
#define AF_IMPLINK 3 /* arpanet imp addresses */
|
||||||
#define AF_PUP 4 /* pup protocols: e.g. BSP */
|
#define AF_PUP 4 /* pup protocols: e.g. BSP */
|
||||||
#define AF_CHAOS 5 /* mit CHAOS protocols */
|
#define AF_CHAOS 5 /* mit CHAOS protocols */
|
||||||
#define AF_NS 6 /* XEROX NS protocols */
|
#define AF_NS 6 /* XEROX NS protocols */
|
||||||
#define AF_ISO 7 /* ISO protocols */
|
#define AF_ISO 7 /* ISO protocols */
|
||||||
#define AF_OSI AF_ISO
|
#define AF_OSI AF_ISO
|
||||||
#define AF_ECMA 8 /* European computer manufacturers */
|
#define AF_ECMA 8 /* European computer manufacturers */
|
||||||
#define AF_DATAKIT 9 /* datakit protocols */
|
#define AF_DATAKIT 9 /* datakit protocols */
|
||||||
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
|
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
|
||||||
#define AF_SNA 11 /* IBM SNA */
|
#define AF_SNA 11 /* IBM SNA */
|
||||||
#define AF_DECnet 12 /* DECnet */
|
#define AF_DECnet 12 /* DECnet */
|
||||||
#define AF_DLI 13 /* DEC Direct data link interface */
|
#define AF_DLI 13 /* DEC Direct data link interface */
|
||||||
#define AF_LAT 14 /* LAT */
|
#define AF_LAT 14 /* LAT */
|
||||||
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
||||||
#define AF_APPLETALK 16 /* Apple Talk */
|
#define AF_APPLETALK 16 /* Apple Talk */
|
||||||
#define AF_ROUTE 17 /* Internal Routing Protocol */
|
#define AF_ROUTE 17 /* Internal Routing Protocol */
|
||||||
#define AF_LINK 18 /* Link layer interface */
|
#define AF_LINK 18 /* Link layer interface */
|
||||||
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
||||||
#define AF_COIP 20 /* connection-oriented IP, aka ST II */
|
#define AF_COIP 20 /* connection-oriented IP, aka ST II */
|
||||||
#define AF_CNT 21 /* Computer Network Technology */
|
#define AF_CNT 21 /* Computer Network Technology */
|
||||||
#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */
|
#define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */
|
||||||
#define AF_IPX 23 /* Novell Internet Protocol */
|
#define AF_IPX 23 /* Novell Internet Protocol */
|
||||||
#define AF_SIP 24 /* Simple Internet Protocol */
|
#define AF_SIP 24 /* Simple Internet Protocol */
|
||||||
#define pseudo_AF_PIP 25 /* Help Identify PIP packets */
|
#define pseudo_AF_PIP 25 /* Help Identify PIP packets */
|
||||||
#define AF_ISDN 26 /* Integrated Services Digital Network*/
|
#define AF_ISDN 26 /* Integrated Services Digital Network*/
|
||||||
#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */
|
#define AF_E164 AF_ISDN /* CCITT E.164 recommendation */
|
||||||
#define pseudo_AF_KEY 27 /* Internal key-management function */
|
#define pseudo_AF_KEY 27 /* Internal key-management function */
|
||||||
#define AF_INET6 28 /* IPv6 */
|
#define AF_INET6 28 /* IPv6 */
|
||||||
#define AF_NATM 29 /* native ATM access */
|
#define AF_NATM 29 /* native ATM access */
|
||||||
#define AF_ATM 30 /* ATM */
|
#define AF_ATM 30 /* ATM */
|
||||||
#define pseudo_AF_HDRCMPLT 31 /* Used by BPF to not rewrite headers
|
#define pseudo_AF_HDRCMPLT 31 /* Used by BPF to not rewrite headers
|
||||||
* in interface output routine
|
* in interface output routine
|
||||||
*/
|
*/
|
||||||
#define AF_NETGRAPH 32 /* Netgraph sockets */
|
#define AF_NETGRAPH 32 /* Netgraph sockets */
|
||||||
#define AF_MAX 33
|
#define AF_MAX 33
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Protocol families, same as address families for now.
|
* Protocol families, same as address families for now.
|
||||||
*/
|
*/
|
||||||
#define PF_UNSPEC AF_UNSPEC
|
#define PF_UNSPEC AF_UNSPEC
|
||||||
#define PF_LOCAL AF_LOCAL
|
#define PF_LOCAL AF_LOCAL
|
||||||
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
||||||
#define PF_INET AF_INET
|
#define PF_INET AF_INET
|
||||||
#define PF_IMPLINK AF_IMPLINK
|
#define PF_IMPLINK AF_IMPLINK
|
||||||
#define PF_PUP AF_PUP
|
#define PF_PUP AF_PUP
|
||||||
#define PF_CHAOS AF_CHAOS
|
#define PF_CHAOS AF_CHAOS
|
||||||
#define PF_NS AF_NS
|
#define PF_NS AF_NS
|
||||||
#define PF_ISO AF_ISO
|
#define PF_ISO AF_ISO
|
||||||
#define PF_OSI AF_ISO
|
#define PF_OSI AF_ISO
|
||||||
#define PF_ECMA AF_ECMA
|
#define PF_ECMA AF_ECMA
|
||||||
#define PF_DATAKIT AF_DATAKIT
|
#define PF_DATAKIT AF_DATAKIT
|
||||||
#define PF_CCITT AF_CCITT
|
#define PF_CCITT AF_CCITT
|
||||||
#define PF_SNA AF_SNA
|
#define PF_SNA AF_SNA
|
||||||
#define PF_DECnet AF_DECnet
|
#define PF_DECnet AF_DECnet
|
||||||
#define PF_DLI AF_DLI
|
#define PF_DLI AF_DLI
|
||||||
#define PF_LAT AF_LAT
|
#define PF_LAT AF_LAT
|
||||||
#define PF_HYLINK AF_HYLINK
|
#define PF_HYLINK AF_HYLINK
|
||||||
#define PF_APPLETALK AF_APPLETALK
|
#define PF_APPLETALK AF_APPLETALK
|
||||||
#define PF_ROUTE AF_ROUTE
|
#define PF_ROUTE AF_ROUTE
|
||||||
#define PF_LINK AF_LINK
|
#define PF_LINK AF_LINK
|
||||||
#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
|
#define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
|
||||||
#define PF_COIP AF_COIP
|
#define PF_COIP AF_COIP
|
||||||
#define PF_CNT AF_CNT
|
#define PF_CNT AF_CNT
|
||||||
#define PF_SIP AF_SIP
|
#define PF_SIP AF_SIP
|
||||||
#define PF_IPX AF_IPX /* same format as AF_NS */
|
#define PF_IPX AF_IPX /* same format as AF_NS */
|
||||||
#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */
|
#define PF_RTIP pseudo_AF_RTIP /* same format as AF_INET */
|
||||||
#define PF_PIP pseudo_AF_PIP
|
#define PF_PIP pseudo_AF_PIP
|
||||||
#define PF_ISDN AF_ISDN
|
#define PF_ISDN AF_ISDN
|
||||||
#define PF_KEY pseudo_AF_KEY
|
#define PF_KEY pseudo_AF_KEY
|
||||||
#define PF_INET6 AF_INET6
|
#define PF_INET6 AF_INET6
|
||||||
#define PF_NATM AF_NATM
|
#define PF_NATM AF_NATM
|
||||||
#define PF_ATM AF_ATM
|
#define PF_ATM AF_ATM
|
||||||
#define PF_NETGRAPH AF_NETGRAPH
|
#define PF_NETGRAPH AF_NETGRAPH
|
||||||
#define PF_MAX AF_MAX
|
#define PF_MAX AF_MAX
|
||||||
|
|
||||||
#define MAX_SOCKETS 5
|
#define MAX_SOCKETS 5
|
||||||
// #define MAX_QUEUED_SOCKETS 2
|
// #define MAX_QUEUED_SOCKETS 2
|
||||||
|
|
||||||
#define EPHEMERAL_PORTS 49152
|
#define EPHEMERAL_PORTS 49152
|
||||||
|
|
||||||
#define STATIC_MSS 48
|
#define STATIC_MSS 48
|
||||||
#define STATIC_WINDOW 1 * STATIC_MSS
|
#define STATIC_WINDOW 1 * STATIC_MSS
|
||||||
#define MAX_TCP_BUFFER 1 * STATIC_WINDOW
|
#define MAX_TCP_BUFFER 1 * STATIC_WINDOW
|
||||||
|
|
||||||
#define INC_PACKET 0
|
#define INC_PACKET 0
|
||||||
#define OUT_PACKET 1
|
#define OUT_PACKET 1
|
||||||
|
|
||||||
#define SEND_MSG_BUF_SIZE 64
|
#define SEND_MSG_BUF_SIZE 64
|
||||||
|
|
||||||
typedef struct socka6 {
|
typedef struct socka6 {
|
||||||
uint8_t sin6_family; /* AF_INET6 */
|
uint8_t sin6_family; /* AF_INET6 */
|
||||||
uint16_t sin6_port; /* transport layer port # */
|
uint16_t sin6_port; /* transport layer port # */
|
||||||
uint32_t sin6_flowinfo; /* IPv6 flow information */
|
uint32_t sin6_flowinfo; /* IPv6 flow information */
|
||||||
ipv6_addr_t sin6_addr; /* IPv6 address */
|
ipv6_addr_t sin6_addr; /* IPv6 address */
|
||||||
} sockaddr6_t;
|
} sockaddr6_t;
|
||||||
|
|
||||||
typedef struct tcp_hc_con {
|
typedef struct tcp_hc_con {
|
||||||
uint16_t context_id;
|
uint16_t context_id;
|
||||||
uint32_t seq_rcv; // Last received packet values
|
uint32_t seq_rcv; // Last received packet values
|
||||||
uint32_t ack_rcv;
|
uint32_t ack_rcv;
|
||||||
uint16_t wnd_rcv;
|
uint16_t wnd_rcv;
|
||||||
uint32_t seq_snd; // Last sent packet values
|
uint32_t seq_snd; // Last sent packet values
|
||||||
uint32_t ack_snd;
|
uint32_t ack_snd;
|
||||||
uint16_t wnd_snd;
|
uint16_t wnd_snd;
|
||||||
uint8_t hc_type;
|
uint8_t hc_type;
|
||||||
} tcp_hc_context_t;
|
} tcp_hc_context_t;
|
||||||
|
|
||||||
typedef struct tcp_control_block {
|
typedef struct tcp_control_block {
|
||||||
uint32_t send_una;
|
uint32_t send_una;
|
||||||
uint32_t send_nxt;
|
uint32_t send_nxt;
|
||||||
uint16_t send_wnd;
|
uint16_t send_wnd;
|
||||||
uint32_t send_iss;
|
uint32_t send_iss;
|
||||||
|
|
||||||
uint32_t rcv_nxt;
|
uint32_t rcv_nxt;
|
||||||
uint16_t rcv_wnd;
|
uint16_t rcv_wnd;
|
||||||
uint32_t rcv_irs;
|
uint32_t rcv_irs;
|
||||||
|
|
||||||
timex_t last_packet_time;
|
timex_t last_packet_time;
|
||||||
uint8_t no_of_retries;
|
uint8_t no_of_retries;
|
||||||
uint16_t mss;
|
uint16_t mss;
|
||||||
|
|
||||||
uint8_t state;
|
uint8_t state;
|
||||||
|
|
||||||
double srtt;
|
double srtt;
|
||||||
double rttvar;
|
double rttvar;
|
||||||
double rto;
|
double rto;
|
||||||
|
|
||||||
#ifdef TCP_HC
|
#ifdef TCP_HC
|
||||||
tcp_hc_context_t tcp_context;
|
tcp_hc_context_t tcp_context;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} tcp_cb_t;
|
} tcp_cb_t;
|
||||||
|
|
||||||
typedef struct sock_t {
|
typedef struct sock_t {
|
||||||
uint8_t domain;
|
uint8_t domain;
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint8_t protocol;
|
uint8_t protocol;
|
||||||
tcp_cb_t tcp_control;
|
tcp_cb_t tcp_control;
|
||||||
sockaddr6_t local_address;
|
sockaddr6_t local_address;
|
||||||
sockaddr6_t foreign_address;
|
sockaddr6_t foreign_address;
|
||||||
} socket_t;
|
} socket_t;
|
||||||
|
|
||||||
typedef struct socket_in_t {
|
typedef struct socket_in_t {
|
||||||
uint8_t socket_id;
|
uint8_t socket_id;
|
||||||
uint8_t recv_pid;
|
uint8_t recv_pid;
|
||||||
uint8_t send_pid;
|
uint8_t send_pid;
|
||||||
uint8_t tcp_input_buffer_end;
|
uint8_t tcp_input_buffer_end;
|
||||||
mutex_t tcp_buffer_mutex;
|
mutex_t tcp_buffer_mutex;
|
||||||
socket_t socket_values;
|
socket_t socket_values;
|
||||||
uint8_t tcp_input_buffer[MAX_TCP_BUFFER];
|
uint8_t tcp_input_buffer[MAX_TCP_BUFFER];
|
||||||
} socket_internal_t;
|
} socket_internal_t;
|
||||||
|
|
||||||
extern socket_internal_t sockets[MAX_SOCKETS];
|
extern socket_internal_t sockets[MAX_SOCKETS];
|
||||||
|
|
||||||
int socket(int domain, int type, int protocol);
|
int socket(int domain, int type, int protocol);
|
||||||
int connect(int socket, sockaddr6_t *addr, socklen_t addrlen);
|
int connect(int socket, sockaddr6_t *addr, socklen_t addrlen);
|
||||||
socket_internal_t *getWaitingConnectionSocket(int socket,
|
socket_internal_t *getWaitingConnectionSocket(int socket,
|
||||||
ipv6_hdr_t *ipv6_header,
|
ipv6_hdr_t *ipv6_header,
|
||||||
tcp_hdr_t *tcp_header);
|
tcp_hdr_t *tcp_header);
|
||||||
void close_socket(socket_internal_t *current_socket);
|
void close_socket(socket_internal_t *current_socket);
|
||||||
int32_t recvfrom(int s, void *buf, uint32_t len, int flags, sockaddr6_t *from,
|
int32_t recvfrom(int s, void *buf, uint32_t len, int flags, sockaddr6_t *from,
|
||||||
socklen_t *fromlen);
|
socklen_t *fromlen);
|
||||||
int32_t sendto(int s, const void *msg, uint32_t len, int flags,
|
int32_t sendto(int s, const void *msg, uint32_t len, int flags,
|
||||||
sockaddr6_t *to, socklen_t tolen);
|
sockaddr6_t *to, socklen_t tolen);
|
||||||
int32_t send(int s, void *msg, uint32_t len, int flags);
|
int32_t send(int s, void *msg, uint32_t len, int flags);
|
||||||
int recv(int s, void *buf, uint32_t len, int flags);
|
int recv(int s, void *buf, uint32_t len, int flags);
|
||||||
int close(int s);
|
int close(int s);
|
||||||
int bind(int s, sockaddr6_t *name, int namelen);
|
int bind(int s, sockaddr6_t *name, int namelen);
|
||||||
int listen(int s, int backlog);
|
int listen(int s, int backlog);
|
||||||
int accept(int s, sockaddr6_t *addr, socklen_t *addrlen);
|
int accept(int s, sockaddr6_t *addr, socklen_t *addrlen);
|
||||||
void socket_init(void);
|
void socket_init(void);
|
||||||
socket_internal_t *get_udp_socket(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header);
|
socket_internal_t *get_udp_socket(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header);
|
||||||
socket_internal_t *get_tcp_socket(ipv6_hdr_t *ipv6_header, tcp_hdr_t *tcp_header);
|
socket_internal_t *get_tcp_socket(ipv6_hdr_t *ipv6_header, tcp_hdr_t *tcp_header);
|
||||||
socket_internal_t *getSocket(uint8_t s);
|
socket_internal_t *getSocket(uint8_t s);
|
||||||
void print_sockets(void);
|
void print_sockets(void);
|
||||||
void print_internal_socket(socket_internal_t *current_socket_internal);
|
void print_internal_socket(socket_internal_t *current_socket_internal);
|
||||||
void print_socket(socket_t *current_socket);
|
void print_socket(socket_t *current_socket);
|
||||||
void printf_tcp_context(tcp_hc_context_t *current_tcp_context);
|
void printf_tcp_context(tcp_hc_context_t *current_tcp_context);
|
||||||
bool exists_socket(uint8_t socket);
|
bool exists_socket(uint8_t socket);
|
||||||
socket_internal_t *new_tcp_queued_socket(ipv6_hdr_t *ipv6_header,
|
socket_internal_t *new_tcp_queued_socket(ipv6_hdr_t *ipv6_header,
|
||||||
tcp_hdr_t *tcp_header);
|
tcp_hdr_t *tcp_header);
|
||||||
void print_tcp_status(int in_or_out, ipv6_hdr_t *ipv6_header,
|
void print_tcp_status(int in_or_out, ipv6_hdr_t *ipv6_header,
|
||||||
tcp_hdr_t *tcp_header, socket_t *tcp_socket);
|
tcp_hdr_t *tcp_header, socket_t *tcp_socket);
|
||||||
void set_socket_address(sockaddr6_t *sockaddr, sa_family_t sin6_family,
|
void set_socket_address(sockaddr6_t *sockaddr, sa_family_t sin6_family,
|
||||||
uint16_t sin6_port, uint32_t sin6_flowinfo,
|
uint16_t sin6_port, uint32_t sin6_flowinfo,
|
||||||
ipv6_addr_t *sin6_addr);
|
ipv6_addr_t *sin6_addr);
|
||||||
void set_tcp_cb(tcp_cb_t *tcp_control, uint32_t rcv_nxt, uint16_t rcv_wnd,
|
void set_tcp_cb(tcp_cb_t *tcp_control, uint32_t rcv_nxt, uint16_t rcv_wnd,
|
||||||
uint32_t send_nxt, uint32_t send_una, uint16_t send_wnd);
|
uint32_t send_nxt, uint32_t send_una, uint16_t send_wnd);
|
||||||
void set_tcp_packet(tcp_hdr_t *tcp_hdr, uint16_t src_port, uint16_t dst_port,
|
void set_tcp_packet(tcp_hdr_t *tcp_hdr, uint16_t src_port, uint16_t dst_port,
|
||||||
uint32_t seq_nr, uint32_t ack_nr,
|
uint32_t seq_nr, uint32_t ack_nr,
|
||||||
uint8_t dataOffset_reserved, uint8_t reserved_flags,
|
uint8_t dataOffset_reserved, uint8_t reserved_flags,
|
||||||
uint16_t window, uint16_t checksum, uint16_t urg_pointer);
|
uint16_t window, uint16_t checksum, uint16_t urg_pointer);
|
||||||
int check_tcp_consistency(socket_t *current_tcp_socket, tcp_hdr_t *tcp_header);
|
int check_tcp_consistency(socket_t *current_tcp_socket, tcp_hdr_t *tcp_header);
|
||||||
void switch_tcp_packet_byte_order(tcp_hdr_t *current_tcp_packet);
|
void switch_tcp_packet_byte_order(tcp_hdr_t *current_tcp_packet);
|
||||||
int send_tcp(socket_internal_t *current_socket, tcp_hdr_t *current_tcp_packet,
|
int send_tcp(socket_internal_t *current_socket, tcp_hdr_t *current_tcp_packet,
|
||||||
ipv6_hdr_t *temp_ipv6_header, uint8_t flags,
|
ipv6_hdr_t *temp_ipv6_header, uint8_t flags,
|
||||||
uint8_t payload_length);
|
uint8_t payload_length);
|
||||||
bool isTCPSocket(uint8_t s);
|
bool isTCPSocket(uint8_t s);
|
||||||
#endif /* SOCKET_H_ */
|
#endif /* SOCKET_H_ */
|
||||||
|
@ -1,114 +1,114 @@
|
|||||||
/**
|
/**
|
||||||
* Destiny TCP header
|
* Destiny TCP header
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 INRIA.
|
* Copyright (C) 2013 INRIA.
|
||||||
*
|
*
|
||||||
* This file subject to the terms and conditions of the GNU Lesser General
|
* This file subject to the terms and conditions of the GNU Lesser General
|
||||||
* Public License. See the file LICENSE in the top level directory for more
|
* Public License. See the file LICENSE in the top level directory for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* @ingroup destiny
|
* @ingroup destiny
|
||||||
* @{
|
* @{
|
||||||
* @file tcp.c
|
* @file tcp.c
|
||||||
* @brief TCP data structs and prototypes
|
* @brief TCP data structs and prototypes
|
||||||
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TCP_H_
|
#ifndef TCP_H_
|
||||||
#define TCP_H_
|
#define TCP_H_
|
||||||
|
|
||||||
#define TCP_HDR_LEN 20
|
#define TCP_HDR_LEN 20
|
||||||
|
|
||||||
#define TCP_EOO_OPTION 0x00 // End of option list
|
#define TCP_EOO_OPTION 0x00 // End of option list
|
||||||
#define TCP_NOP_OPTION 0x01 // No operation
|
#define TCP_NOP_OPTION 0x01 // No operation
|
||||||
#define TCP_MSS_OPTION 0x02 // Maximum segment size
|
#define TCP_MSS_OPTION 0x02 // Maximum segment size
|
||||||
#define TCP_WSF_OPTION 0x03 // Window scale factor
|
#define TCP_WSF_OPTION 0x03 // Window scale factor
|
||||||
#define TCP_TS_OPTION 0x08 // Timestamp
|
#define TCP_TS_OPTION 0x08 // Timestamp
|
||||||
|
|
||||||
enum tcp_flags {
|
enum tcp_flags {
|
||||||
TCP_ACK = 0x08,
|
TCP_ACK = 0x08,
|
||||||
TCP_URG_PSH = 0x14,
|
TCP_URG_PSH = 0x14,
|
||||||
TCP_RST = 0x20,
|
TCP_RST = 0x20,
|
||||||
TCP_SYN = 0x40,
|
TCP_SYN = 0x40,
|
||||||
TCP_SYN_ACK = 0x48,
|
TCP_SYN_ACK = 0x48,
|
||||||
TCP_FIN = 0x80,
|
TCP_FIN = 0x80,
|
||||||
TCP_FIN_ACK = 0x88
|
TCP_FIN_ACK = 0x88
|
||||||
};
|
};
|
||||||
|
|
||||||
enum tcp_states {
|
enum tcp_states {
|
||||||
CLOSED = 0,
|
CLOSED = 0,
|
||||||
LISTEN = 1,
|
LISTEN = 1,
|
||||||
SYN_SENT = 2,
|
SYN_SENT = 2,
|
||||||
SYN_RCVD = 3,
|
SYN_RCVD = 3,
|
||||||
ESTABLISHED = 4,
|
ESTABLISHED = 4,
|
||||||
FIN_WAIT_1 = 5,
|
FIN_WAIT_1 = 5,
|
||||||
FIN_WAIT_2 = 6,
|
FIN_WAIT_2 = 6,
|
||||||
CLOSE_WAIT = 7,
|
CLOSE_WAIT = 7,
|
||||||
CLOSING = 8,
|
CLOSING = 8,
|
||||||
LAST_ACK = 9,
|
LAST_ACK = 9,
|
||||||
TIME_WAIT = 10,
|
TIME_WAIT = 10,
|
||||||
UNKNOWN = 11
|
UNKNOWN = 11
|
||||||
};
|
};
|
||||||
|
|
||||||
enum tcp_codes {
|
enum tcp_codes {
|
||||||
UNDEFINED = 0,
|
UNDEFINED = 0,
|
||||||
PACKET_OK = 1,
|
PACKET_OK = 1,
|
||||||
CLOSE_CONN = 2,
|
CLOSE_CONN = 2,
|
||||||
SEQ_NO_TOO_SMALL = 3,
|
SEQ_NO_TOO_SMALL = 3,
|
||||||
ACK_NO_TOO_SMALL = 4,
|
ACK_NO_TOO_SMALL = 4,
|
||||||
ACK_NO_TOO_BIG = 5
|
ACK_NO_TOO_BIG = 5
|
||||||
};
|
};
|
||||||
|
|
||||||
#define REMOVE_RESERVED 0xFC
|
#define REMOVE_RESERVED 0xFC
|
||||||
|
|
||||||
#define IS_TCP_ACK(a) ((a & TCP_ACK) == TCP_ACK) // Test for ACK flag only, ignore URG und PSH flag
|
#define IS_TCP_ACK(a) ((a & TCP_ACK) == TCP_ACK) // Test for ACK flag only, ignore URG und PSH flag
|
||||||
#define IS_TCP_RST(a) ((a & TCP_RST) == TCP_RST)
|
#define IS_TCP_RST(a) ((a & TCP_RST) == TCP_RST)
|
||||||
#define IS_TCP_SYN(a) ((a & TCP_SYN) == TCP_SYN)
|
#define IS_TCP_SYN(a) ((a & TCP_SYN) == TCP_SYN)
|
||||||
#define IS_TCP_SYN_ACK(a) ((a & TCP_SYN_ACK) == TCP_SYN_ACK)
|
#define IS_TCP_SYN_ACK(a) ((a & TCP_SYN_ACK) == TCP_SYN_ACK)
|
||||||
#define IS_TCP_FIN(a) ((a & TCP_FIN) == TCP_FIN)
|
#define IS_TCP_FIN(a) ((a & TCP_FIN) == TCP_FIN)
|
||||||
#define IS_TCP_FIN_ACK(a) ((a & TCP_FIN_ACK) == TCP_FIN_ACK)
|
#define IS_TCP_FIN_ACK(a) ((a & TCP_FIN_ACK) == TCP_FIN_ACK)
|
||||||
|
|
||||||
#define SET_TCP_ACK(a) a = ((a & 0x00) | TCP_ACK)
|
#define SET_TCP_ACK(a) a = ((a & 0x00) | TCP_ACK)
|
||||||
#define SET_TCP_RST(a) a = ((a & 0x00) | TCP_RST)
|
#define SET_TCP_RST(a) a = ((a & 0x00) | TCP_RST)
|
||||||
#define SET_TCP_SYN(a) a = ((a & 0x00) | TCP_SYN)
|
#define SET_TCP_SYN(a) a = ((a & 0x00) | TCP_SYN)
|
||||||
#define SET_TCP_SYN_ACK(a) a = ((a & 0x00) | TCP_SYN_ACK)
|
#define SET_TCP_SYN_ACK(a) a = ((a & 0x00) | TCP_SYN_ACK)
|
||||||
#define SET_TCP_FIN(a) a = ((a & 0x00) | TCP_FIN)
|
#define SET_TCP_FIN(a) a = ((a & 0x00) | TCP_FIN)
|
||||||
#define SET_TCP_FIN_ACK(a) a = ((a & 0x00) | TCP_FIN_ACK)
|
#define SET_TCP_FIN_ACK(a) a = ((a & 0x00) | TCP_FIN_ACK)
|
||||||
|
|
||||||
#define TCP_STACK_SIZE 1024
|
#define TCP_STACK_SIZE 1024
|
||||||
|
|
||||||
#include "../sixlowpan/sixlowip.h"
|
#include "../sixlowpan/sixlowip.h"
|
||||||
|
|
||||||
typedef struct __attribute__((packed)) tcp_mms_o_t {
|
typedef struct __attribute__((packed)) tcp_mms_o_t {
|
||||||
uint8_t kind;
|
uint8_t kind;
|
||||||
uint8_t len;
|
uint8_t len;
|
||||||
uint16_t mss;
|
uint16_t mss;
|
||||||
} tcp_mss_option_t;
|
} tcp_mss_option_t;
|
||||||
|
|
||||||
typedef struct __attribute__((packed)) tcp_h_t {
|
typedef struct __attribute__((packed)) tcp_h_t {
|
||||||
uint16_t src_port;
|
uint16_t src_port;
|
||||||
uint16_t dst_port;
|
uint16_t dst_port;
|
||||||
uint32_t seq_nr;
|
uint32_t seq_nr;
|
||||||
uint32_t ack_nr;
|
uint32_t ack_nr;
|
||||||
uint8_t dataOffset_reserved;
|
uint8_t dataOffset_reserved;
|
||||||
uint8_t reserved_flags;
|
uint8_t reserved_flags;
|
||||||
uint16_t window;
|
uint16_t window;
|
||||||
uint16_t checksum;
|
uint16_t checksum;
|
||||||
uint16_t urg_pointer;
|
uint16_t urg_pointer;
|
||||||
} tcp_hdr_t;
|
} tcp_hdr_t;
|
||||||
|
|
||||||
#ifdef TCP_HC
|
#ifdef TCP_HC
|
||||||
mutex_t global_context_counter_mutex;
|
mutex_t global_context_counter_mutex;
|
||||||
uint8_t global_context_counter;
|
uint8_t global_context_counter;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mutex_t global_sequence_clunter_mutex;
|
mutex_t global_sequence_clunter_mutex;
|
||||||
uint32_t global_sequence_counter;
|
uint32_t global_sequence_counter;
|
||||||
|
|
||||||
void tcp_packet_handler(void);
|
void tcp_packet_handler(void);
|
||||||
uint16_t tcp_csum(ipv6_hdr_t *ipv6_header, tcp_hdr_t *tcp_header);
|
uint16_t tcp_csum(ipv6_hdr_t *ipv6_header, tcp_hdr_t *tcp_header);
|
||||||
void printTCPHeader(tcp_hdr_t *tcp_header);
|
void printTCPHeader(tcp_hdr_t *tcp_header);
|
||||||
void printArrayRange_tcp(uint8_t *udp_header, uint16_t len);
|
void printArrayRange_tcp(uint8_t *udp_header, uint16_t len);
|
||||||
|
|
||||||
#endif /* TCP_H_ */
|
#endif /* TCP_H_ */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,25 +1,25 @@
|
|||||||
/*
|
/*
|
||||||
* tcp_hc.h
|
* tcp_hc.h
|
||||||
*
|
*
|
||||||
* Created on: 01.02.2012
|
* Created on: 01.02.2012
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TCP_HC_H_
|
#ifndef TCP_HC_H_
|
||||||
#define TCP_HC_H_
|
#define TCP_HC_H_
|
||||||
|
|
||||||
#include "tcp.h"
|
#include "tcp.h"
|
||||||
#include "../sixlowpan/sixlowip.h"
|
#include "../sixlowpan/sixlowip.h"
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
#ifdef TCP_HC
|
#ifdef TCP_HC
|
||||||
|
|
||||||
#define FULL_HEADER 1
|
#define FULL_HEADER 1
|
||||||
#define MOSTLY_COMPRESSED_HEADER 2
|
#define MOSTLY_COMPRESSED_HEADER 2
|
||||||
#define COMPRESSED_HEADER 3
|
#define COMPRESSED_HEADER 3
|
||||||
|
|
||||||
void update_tcp_hc_context(bool incoming, socket_internal_t *current_socket, tcp_hdr_t *current_tcp_packet);
|
void update_tcp_hc_context(bool incoming, socket_internal_t *current_socket, tcp_hdr_t *current_tcp_packet);
|
||||||
uint16_t compress_tcp_packet(socket_internal_t *current_socket, uint8_t *current_tcp_packet, ipv6_hdr_t *temp_ipv6_header, uint8_t flags, uint8_t payload_length);
|
uint16_t compress_tcp_packet(socket_internal_t *current_socket, uint8_t *current_tcp_packet, ipv6_hdr_t *temp_ipv6_header, uint8_t flags, uint8_t payload_length);
|
||||||
socket_internal_t *decompress_tcp_packet(ipv6_hdr_t *temp_ipv6_header);
|
socket_internal_t *decompress_tcp_packet(ipv6_hdr_t *temp_ipv6_header);
|
||||||
#endif
|
#endif
|
||||||
#endif /* TCP_HC_H_ */
|
#endif /* TCP_HC_H_ */
|
||||||
|
@ -1,156 +1,156 @@
|
|||||||
/**
|
/**
|
||||||
* Destiny TCP timer implementation
|
* Destiny TCP timer implementation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 INRIA.
|
* Copyright (C) 2013 INRIA.
|
||||||
*
|
*
|
||||||
* This file subject to the terms and conditions of the GNU Lesser General
|
* This file subject to the terms and conditions of the GNU Lesser General
|
||||||
* Public License. See the file LICENSE in the top level directory for more
|
* Public License. See the file LICENSE in the top level directory for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* @ingroup destiny
|
* @ingroup destiny
|
||||||
* @{
|
* @{
|
||||||
* @file tcp_timer.c
|
* @file tcp_timer.c
|
||||||
* @brief TCP timer
|
* @brief TCP timer
|
||||||
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <thread.h>
|
#include <thread.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "tcp_timer.h"
|
#include "tcp_timer.h"
|
||||||
#include "vtimer.h"
|
#include "vtimer.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
#include "destiny.h"
|
#include "destiny.h"
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
#include "net_help/msg_help.h"
|
#include "net_help/msg_help.h"
|
||||||
#include "../sixlowpan/sixlowpan.h"
|
#include "../sixlowpan/sixlowpan.h"
|
||||||
|
|
||||||
void handle_synchro_timeout(socket_internal_t *current_socket)
|
void handle_synchro_timeout(socket_internal_t *current_socket)
|
||||||
{
|
{
|
||||||
msg_t send;
|
msg_t send;
|
||||||
|
|
||||||
if (thread_getstatus(current_socket->recv_pid) == STATUS_RECEIVE_BLOCKED) {
|
if (thread_getstatus(current_socket->recv_pid) == STATUS_RECEIVE_BLOCKED) {
|
||||||
timex_t now;
|
timex_t now;
|
||||||
vtimer_now(&now);
|
vtimer_now(&now);
|
||||||
|
|
||||||
if ((current_socket->socket_values.tcp_control.no_of_retries == 0) &&
|
if ((current_socket->socket_values.tcp_control.no_of_retries == 0) &&
|
||||||
(timex_sub(now,
|
(timex_sub(now,
|
||||||
current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
||||||
TCP_SYN_INITIAL_TIMEOUT)) {
|
TCP_SYN_INITIAL_TIMEOUT)) {
|
||||||
current_socket->socket_values.tcp_control.no_of_retries++;
|
current_socket->socket_values.tcp_control.no_of_retries++;
|
||||||
net_msg_send(&send, current_socket->recv_pid, 0, TCP_RETRY);
|
net_msg_send(&send, current_socket->recv_pid, 0, TCP_RETRY);
|
||||||
}
|
}
|
||||||
else if ((current_socket->socket_values.tcp_control.no_of_retries > 0) &&
|
else if ((current_socket->socket_values.tcp_control.no_of_retries > 0) &&
|
||||||
(timex_sub(now,
|
(timex_sub(now,
|
||||||
current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
||||||
(current_socket->socket_values.tcp_control.no_of_retries *
|
(current_socket->socket_values.tcp_control.no_of_retries *
|
||||||
TCP_SYN_TIMEOUT + TCP_SYN_INITIAL_TIMEOUT))) {
|
TCP_SYN_TIMEOUT + TCP_SYN_INITIAL_TIMEOUT))) {
|
||||||
current_socket->socket_values.tcp_control.no_of_retries++;
|
current_socket->socket_values.tcp_control.no_of_retries++;
|
||||||
|
|
||||||
if (current_socket->socket_values.tcp_control.no_of_retries >
|
if (current_socket->socket_values.tcp_control.no_of_retries >
|
||||||
TCP_MAX_SYN_RETRIES) {
|
TCP_MAX_SYN_RETRIES) {
|
||||||
net_msg_send(&send, current_socket->recv_pid, 0, TCP_TIMEOUT);
|
net_msg_send(&send, current_socket->recv_pid, 0, TCP_TIMEOUT);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
net_msg_send(&send, current_socket->recv_pid, 0, TCP_RETRY);
|
net_msg_send(&send, current_socket->recv_pid, 0, TCP_RETRY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_established(socket_internal_t *current_socket)
|
void handle_established(socket_internal_t *current_socket)
|
||||||
{
|
{
|
||||||
msg_t send;
|
msg_t send;
|
||||||
double current_timeout = current_socket->socket_values.tcp_control.rto;
|
double current_timeout = current_socket->socket_values.tcp_control.rto;
|
||||||
|
|
||||||
if (current_timeout < SECOND) {
|
if (current_timeout < SECOND) {
|
||||||
current_timeout = SECOND;
|
current_timeout = SECOND;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
|
||||||
if ((current_socket->socket_values.tcp_control.send_nxt >
|
if ((current_socket->socket_values.tcp_control.send_nxt >
|
||||||
current_socket->socket_values.tcp_control.send_una) &&
|
current_socket->socket_values.tcp_control.send_una) &&
|
||||||
(thread_getstatus(current_socket->send_pid) == STATUS_RECEIVE_BLOCKED)) {
|
(thread_getstatus(current_socket->send_pid) == STATUS_RECEIVE_BLOCKED)) {
|
||||||
for (i = 0; i < current_socket->socket_values.tcp_control.no_of_retries;
|
for (i = 0; i < current_socket->socket_values.tcp_control.no_of_retries;
|
||||||
i++) {
|
i++) {
|
||||||
current_timeout *= 2;
|
current_timeout *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
timex_t now;
|
timex_t now;
|
||||||
vtimer_now(&now);
|
vtimer_now(&now);
|
||||||
|
|
||||||
if (current_timeout > TCP_ACK_MAX_TIMEOUT) {
|
if (current_timeout > TCP_ACK_MAX_TIMEOUT) {
|
||||||
net_msg_send(&send, current_socket->send_pid, 0, TCP_TIMEOUT);
|
net_msg_send(&send, current_socket->send_pid, 0, TCP_TIMEOUT);
|
||||||
}
|
}
|
||||||
else if (timex_sub(now, current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
else if (timex_sub(now, current_socket->socket_values.tcp_control.last_packet_time).microseconds >
|
||||||
current_timeout) {
|
current_timeout) {
|
||||||
current_socket->socket_values.tcp_control.no_of_retries++;
|
current_socket->socket_values.tcp_control.no_of_retries++;
|
||||||
net_msg_send(&send, current_socket->send_pid, 0, TCP_RETRY);
|
net_msg_send(&send, current_socket->send_pid, 0, TCP_RETRY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_sockets(void)
|
void check_sockets(void)
|
||||||
{
|
{
|
||||||
socket_internal_t *current_socket;
|
socket_internal_t *current_socket;
|
||||||
uint8_t i = 1;
|
uint8_t i = 1;
|
||||||
|
|
||||||
while (i < MAX_SOCKETS + 1) {
|
while (i < MAX_SOCKETS + 1) {
|
||||||
current_socket = getSocket(i);
|
current_socket = getSocket(i);
|
||||||
|
|
||||||
if (isTCPSocket(i)) {
|
if (isTCPSocket(i)) {
|
||||||
switch(current_socket->socket_values.tcp_control.state) {
|
switch(current_socket->socket_values.tcp_control.state) {
|
||||||
case ESTABLISHED: {
|
case ESTABLISHED: {
|
||||||
handle_established(current_socket);
|
handle_established(current_socket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SYN_SENT: {
|
case SYN_SENT: {
|
||||||
handle_synchro_timeout(current_socket);
|
handle_synchro_timeout(current_socket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SYN_RCVD: {
|
case SYN_RCVD: {
|
||||||
handle_synchro_timeout(current_socket);
|
handle_synchro_timeout(current_socket);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void inc_global_variables(void)
|
void inc_global_variables(void)
|
||||||
{
|
{
|
||||||
mutex_lock(&global_sequence_clunter_mutex);
|
mutex_lock(&global_sequence_clunter_mutex);
|
||||||
global_sequence_counter += rand();
|
global_sequence_counter += rand();
|
||||||
mutex_unlock(&global_sequence_clunter_mutex);
|
mutex_unlock(&global_sequence_clunter_mutex);
|
||||||
#ifdef TCP_HC
|
#ifdef TCP_HC
|
||||||
mutex_lock(&global_context_counter_mutex);
|
mutex_lock(&global_context_counter_mutex);
|
||||||
global_context_counter += rand();
|
global_context_counter += rand();
|
||||||
mutex_unlock(&global_context_counter_mutex);
|
mutex_unlock(&global_context_counter_mutex);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void tcp_general_timer(void)
|
void tcp_general_timer(void)
|
||||||
{
|
{
|
||||||
vtimer_t tcp_vtimer;
|
vtimer_t tcp_vtimer;
|
||||||
timex_t interval = timex_set(0, TCP_TIMER_RESOLUTION);
|
timex_t interval = timex_set(0, TCP_TIMER_RESOLUTION);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
inc_global_variables();
|
inc_global_variables();
|
||||||
check_sockets();
|
check_sockets();
|
||||||
vtimer_set_wakeup(&tcp_vtimer, interval, thread_getpid());
|
vtimer_set_wakeup(&tcp_vtimer, interval, thread_getpid());
|
||||||
thread_sleep();
|
thread_sleep();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,33 +1,33 @@
|
|||||||
/*
|
/*
|
||||||
* tcp_timer.h
|
* tcp_timer.h
|
||||||
*
|
*
|
||||||
* Created on: 21.01.2012
|
* Created on: 21.01.2012
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef TCP_TIMER_H_
|
#ifndef TCP_TIMER_H_
|
||||||
#define TCP_TIMER_H_
|
#define TCP_TIMER_H_
|
||||||
|
|
||||||
#define TCP_TIMER_RESOLUTION 500*1000
|
#define TCP_TIMER_RESOLUTION 500*1000
|
||||||
|
|
||||||
#define SECOND 1000.0f*1000.0f
|
#define SECOND 1000.0f*1000.0f
|
||||||
#define TCP_TIMER_STACKSIZE 512
|
#define TCP_TIMER_STACKSIZE 512
|
||||||
#define TCP_SYN_INITIAL_TIMEOUT 6*SECOND
|
#define TCP_SYN_INITIAL_TIMEOUT 6*SECOND
|
||||||
#define TCP_SYN_TIMEOUT 24*SECOND
|
#define TCP_SYN_TIMEOUT 24*SECOND
|
||||||
#define TCP_MAX_SYN_RETRIES 3
|
#define TCP_MAX_SYN_RETRIES 3
|
||||||
#define TCP_INITIAL_ACK_TIMEOUT 3.0f*SECOND // still static, should be calculated via RTT
|
#define TCP_INITIAL_ACK_TIMEOUT 3.0f*SECOND // still static, should be calculated via RTT
|
||||||
#define TCP_ACK_MAX_TIMEOUT 30*SECOND // TODO: Set back to 90 Seconds
|
#define TCP_ACK_MAX_TIMEOUT 30*SECOND // TODO: Set back to 90 Seconds
|
||||||
|
|
||||||
#define TCP_ALPHA 1.0f/8.0f
|
#define TCP_ALPHA 1.0f/8.0f
|
||||||
#define TCP_BETA 1.0f/4.0f
|
#define TCP_BETA 1.0f/4.0f
|
||||||
|
|
||||||
#define TCP_NOT_DEFINED 0
|
#define TCP_NOT_DEFINED 0
|
||||||
#define TCP_RETRY 1
|
#define TCP_RETRY 1
|
||||||
#define TCP_TIMEOUT 2
|
#define TCP_TIMEOUT 2
|
||||||
#define TCP_CONTINUE 3
|
#define TCP_CONTINUE 3
|
||||||
|
|
||||||
void tcp_general_timer(void);
|
void tcp_general_timer(void);
|
||||||
|
|
||||||
char tcp_timer_stack[TCP_TIMER_STACKSIZE];
|
char tcp_timer_stack[TCP_TIMER_STACKSIZE];
|
||||||
|
|
||||||
#endif /* TCP_TIMER_H_ */
|
#endif /* TCP_TIMER_H_ */
|
||||||
|
@ -1,77 +1,77 @@
|
|||||||
/**
|
/**
|
||||||
* Destiny UDP implementation
|
* Destiny UDP implementation
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 INRIA.
|
* Copyright (C) 2013 INRIA.
|
||||||
*
|
*
|
||||||
* This file subject to the terms and conditions of the GNU Lesser General
|
* This file subject to the terms and conditions of the GNU Lesser General
|
||||||
* Public License. See the file LICENSE in the top level directory for more
|
* Public License. See the file LICENSE in the top level directory for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* @ingroup destiny
|
* @ingroup destiny
|
||||||
* @{
|
* @{
|
||||||
* @file udp.c
|
* @file udp.c
|
||||||
* @brief UDP implementation
|
* @brief UDP implementation
|
||||||
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <thread.h>
|
#include <thread.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "udp.h"
|
#include "udp.h"
|
||||||
#include "msg.h"
|
#include "msg.h"
|
||||||
#include "../sixlowpan/sixlowip.h"
|
#include "../sixlowpan/sixlowip.h"
|
||||||
#include "../sixlowpan/sixlowpan.h"
|
#include "../sixlowpan/sixlowpan.h"
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
#include "in.h"
|
#include "in.h"
|
||||||
#include "../net_help/net_help.h"
|
#include "../net_help/net_help.h"
|
||||||
#include "../net_help/msg_help.h"
|
#include "../net_help/msg_help.h"
|
||||||
|
|
||||||
uint16_t udp_csum(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header)
|
uint16_t udp_csum(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header)
|
||||||
{
|
{
|
||||||
uint16_t sum;
|
uint16_t sum;
|
||||||
uint16_t len = udp_header->length;
|
uint16_t len = udp_header->length;
|
||||||
|
|
||||||
sum = len + IPPROTO_UDP;
|
sum = len + IPPROTO_UDP;
|
||||||
sum = csum(sum, (uint8_t *)&ipv6_header->srcaddr, 2 * sizeof(ipv6_addr_t));
|
sum = csum(sum, (uint8_t *)&ipv6_header->srcaddr, 2 * sizeof(ipv6_addr_t));
|
||||||
sum = csum(sum, (uint8_t *)udp_header, len);
|
sum = csum(sum, (uint8_t *)udp_header, len);
|
||||||
return (sum == 0) ? 0xffff : HTONS(sum);
|
return (sum == 0) ? 0xffff : HTONS(sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void udp_packet_handler(void)
|
void udp_packet_handler(void)
|
||||||
{
|
{
|
||||||
msg_t m_recv_ip, m_send_ip, m_recv_udp, m_send_udp;
|
msg_t m_recv_ip, m_send_ip, m_recv_udp, m_send_udp;
|
||||||
ipv6_hdr_t *ipv6_header;
|
ipv6_hdr_t *ipv6_header;
|
||||||
udp_hdr_t *udp_header;
|
udp_hdr_t *udp_header;
|
||||||
uint8_t *payload;
|
uint8_t *payload;
|
||||||
socket_internal_t *udp_socket = NULL;
|
socket_internal_t *udp_socket = NULL;
|
||||||
uint16_t chksum;
|
uint16_t chksum;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
msg_receive(&m_recv_ip);
|
msg_receive(&m_recv_ip);
|
||||||
ipv6_header = ((ipv6_hdr_t *)m_recv_ip.content.ptr);
|
ipv6_header = ((ipv6_hdr_t *)m_recv_ip.content.ptr);
|
||||||
udp_header = ((udp_hdr_t *)(m_recv_ip.content.ptr + IPV6_HDR_LEN));
|
udp_header = ((udp_hdr_t *)(m_recv_ip.content.ptr + IPV6_HDR_LEN));
|
||||||
payload = (uint8_t *)(m_recv_ip.content.ptr + IPV6_HDR_LEN + UDP_HDR_LEN);
|
payload = (uint8_t *)(m_recv_ip.content.ptr + IPV6_HDR_LEN + UDP_HDR_LEN);
|
||||||
|
|
||||||
chksum = udp_csum(ipv6_header, udp_header);
|
chksum = udp_csum(ipv6_header, udp_header);
|
||||||
|
|
||||||
if (chksum == 0xffff) {
|
if (chksum == 0xffff) {
|
||||||
udp_socket = get_udp_socket(ipv6_header, udp_header);
|
udp_socket = get_udp_socket(ipv6_header, udp_header);
|
||||||
|
|
||||||
if (udp_socket != NULL) {
|
if (udp_socket != NULL) {
|
||||||
m_send_udp.content.ptr = (char *)ipv6_header;
|
m_send_udp.content.ptr = (char *)ipv6_header;
|
||||||
msg_send_receive(&m_send_udp, &m_recv_udp, udp_socket->recv_pid);
|
msg_send_receive(&m_send_udp, &m_recv_udp, udp_socket->recv_pid);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("Dropped UDP Message because no thread ID was found for delivery!\n");
|
printf("Dropped UDP Message because no thread ID was found for delivery!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf("Wrong checksum (%x)!\n", chksum);
|
printf("Wrong checksum (%x)!\n", chksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg_reply(&m_recv_ip, &m_send_ip);
|
msg_reply(&m_recv_ip, &m_send_ip);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,44 +1,44 @@
|
|||||||
/**
|
/**
|
||||||
* Destiny TCP header
|
* Destiny TCP header
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 INRIA.
|
* Copyright (C) 2013 INRIA.
|
||||||
*
|
*
|
||||||
* This file subject to the terms and conditions of the GNU Lesser General
|
* This file subject to the terms and conditions of the GNU Lesser General
|
||||||
* Public License. See the file LICENSE in the top level directory for more
|
* Public License. See the file LICENSE in the top level directory for more
|
||||||
* details.
|
* details.
|
||||||
*
|
*
|
||||||
* @ingroup destiny
|
* @ingroup destiny
|
||||||
* @{
|
* @{
|
||||||
* @file udp.c
|
* @file udp.c
|
||||||
* @brief UDP data structs and prototypes
|
* @brief UDP data structs and prototypes
|
||||||
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
* @author Oliver Gesch <oliver.gesch@googlemail.com>
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* udp.h
|
* udp.h
|
||||||
*
|
*
|
||||||
* Created on: 05.09.2011
|
* Created on: 05.09.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef UDP_H_
|
#ifndef UDP_H_
|
||||||
#define UDP_H_
|
#define UDP_H_
|
||||||
|
|
||||||
#define UDP_HDR_LEN 8
|
#define UDP_HDR_LEN 8
|
||||||
|
|
||||||
#define UDP_STACK_SIZE 512
|
#define UDP_STACK_SIZE 512
|
||||||
|
|
||||||
#include "../sixlowpan/sixlowip.h"
|
#include "../sixlowpan/sixlowip.h"
|
||||||
|
|
||||||
typedef struct __attribute__((packed)) udp_h_t {
|
typedef struct __attribute__((packed)) udp_h_t {
|
||||||
uint16_t src_port;
|
uint16_t src_port;
|
||||||
uint16_t dst_port;
|
uint16_t dst_port;
|
||||||
uint16_t length;
|
uint16_t length;
|
||||||
uint16_t checksum;
|
uint16_t checksum;
|
||||||
} udp_hdr_t;
|
} udp_hdr_t;
|
||||||
|
|
||||||
uint16_t udp_csum(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header);
|
uint16_t udp_csum(ipv6_hdr_t *ipv6_header, udp_hdr_t *udp_header);
|
||||||
void udp_packet_handler(void);
|
void udp_packet_handler(void);
|
||||||
|
|
||||||
#endif /* UDP_H_ */
|
#endif /* UDP_H_ */
|
||||||
|
@ -1,44 +1,44 @@
|
|||||||
/*
|
/*
|
||||||
* msg_help.c
|
* msg_help.c
|
||||||
*
|
*
|
||||||
* Created on: 24.11.2011
|
* Created on: 24.11.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <thread.h>
|
#include <thread.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "msg_help.h"
|
#include "msg_help.h"
|
||||||
#include "sys/net/destiny/tcp_timer.h"
|
#include "sys/net/destiny/tcp_timer.h"
|
||||||
|
|
||||||
void block_continue_thread(void)
|
void block_continue_thread(void)
|
||||||
{
|
{
|
||||||
// msg_t recv_m;
|
// msg_t recv_m;
|
||||||
// recv_m.type = TCP_NOT_DEFINED;
|
// recv_m.type = TCP_NOT_DEFINED;
|
||||||
// while (recv_m.type != TCP_CONTINUE)
|
// while (recv_m.type != TCP_CONTINUE)
|
||||||
// {
|
// {
|
||||||
// net_msg_receive(&recv_m);
|
// net_msg_receive(&recv_m);
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_msg_receive(msg_t *m)
|
int net_msg_receive(msg_t *m)
|
||||||
{
|
{
|
||||||
return msg_receive(m);
|
return msg_receive(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_msg_reply(msg_t *m, msg_t *reply, uint16_t message)
|
int net_msg_reply(msg_t *m, msg_t *reply, uint16_t message)
|
||||||
{
|
{
|
||||||
reply->type = message;
|
reply->type = message;
|
||||||
return msg_reply(m, reply);
|
return msg_reply(m, reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_msg_send(msg_t *m, unsigned int pid, bool block, uint16_t message)
|
int net_msg_send(msg_t *m, unsigned int pid, bool block, uint16_t message)
|
||||||
{
|
{
|
||||||
m->type = message;
|
m->type = message;
|
||||||
return msg_send(m, pid, block);
|
return msg_send(m, pid, block);
|
||||||
}
|
}
|
||||||
|
|
||||||
int net_msg_send_recv(msg_t *m, msg_t *reply, unsigned int pid, uint16_t message)
|
int net_msg_send_recv(msg_t *m, msg_t *reply, unsigned int pid, uint16_t message)
|
||||||
{
|
{
|
||||||
m->type = message;
|
m->type = message;
|
||||||
return msg_send_receive(m, reply, pid);;
|
return msg_send_receive(m, reply, pid);;
|
||||||
}
|
}
|
||||||
|
@ -1,35 +1,35 @@
|
|||||||
/*
|
/*
|
||||||
* msg_help.h
|
* msg_help.h
|
||||||
*
|
*
|
||||||
* Created on: 24.11.2011
|
* Created on: 24.11.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MSG_HELP_H_
|
#ifndef MSG_HELP_H_
|
||||||
#define MSG_HELP_H_
|
#define MSG_HELP_H_
|
||||||
|
|
||||||
// Function IDs
|
// Function IDs
|
||||||
#define FID_SIXLOWIP_TCP 0
|
#define FID_SIXLOWIP_TCP 0
|
||||||
#define FID_SIXLOWIP_UDP 1
|
#define FID_SIXLOWIP_UDP 1
|
||||||
#define FID_TCP_PH 2
|
#define FID_TCP_PH 2
|
||||||
#define FID_UDP_PH 3
|
#define FID_UDP_PH 3
|
||||||
#define FID_H_PAYLOAD 4
|
#define FID_H_PAYLOAD 4
|
||||||
#define FID_SOCKET_RECV 5
|
#define FID_SOCKET_RECV 5
|
||||||
#define FID_SOCKET_RECV_FROM 6
|
#define FID_SOCKET_RECV_FROM 6
|
||||||
#define FID_TCP_SYN_ACK 7
|
#define FID_TCP_SYN_ACK 7
|
||||||
#define FID_SOCKET_CONNECT 8
|
#define FID_SOCKET_CONNECT 8
|
||||||
#define FID_SOCKET_HANDLE_NEW_TCP_CON 9
|
#define FID_SOCKET_HANDLE_NEW_TCP_CON 9
|
||||||
#define FID_TCP_ACK 10
|
#define FID_TCP_ACK 10
|
||||||
#define FID_SOCKET_CLOSE 11
|
#define FID_SOCKET_CLOSE 11
|
||||||
#define FID_TCP_CHT 12
|
#define FID_TCP_CHT 12
|
||||||
#define FID_TCP_SHELL 13
|
#define FID_TCP_SHELL 13
|
||||||
|
|
||||||
#define RETURNNOW 4000
|
#define RETURNNOW 4000
|
||||||
|
|
||||||
void block_continue_thread(void);
|
void block_continue_thread(void);
|
||||||
int net_msg_receive(msg_t *m);
|
int net_msg_receive(msg_t *m);
|
||||||
int net_msg_reply(msg_t *m, msg_t *reply, uint16_t message);
|
int net_msg_reply(msg_t *m, msg_t *reply, uint16_t message);
|
||||||
int net_msg_send(msg_t *m, unsigned int pid, bool block, uint16_t message);
|
int net_msg_send(msg_t *m, unsigned int pid, bool block, uint16_t message);
|
||||||
int net_msg_send_recv(msg_t *m, msg_t *reply, unsigned int pid, uint16_t message);
|
int net_msg_send_recv(msg_t *m, msg_t *reply, unsigned int pid, uint16_t message);
|
||||||
|
|
||||||
#endif /* MSG_HELP_H_ */
|
#endif /* MSG_HELP_H_ */
|
||||||
|
@ -1,61 +1,61 @@
|
|||||||
/*
|
/*
|
||||||
* common.c
|
* common.c
|
||||||
*
|
*
|
||||||
* Created on: 05.10.2011
|
* Created on: 05.10.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <thread.h>
|
#include <thread.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "net_help.h"
|
#include "net_help.h"
|
||||||
|
|
||||||
void printArrayRange(uint8_t *array, uint16_t len, char *str)
|
void printArrayRange(uint8_t *array, uint16_t len, char *str)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
printf("-------------%s-------------\n", str);
|
printf("-------------%s-------------\n", str);
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
printf("%#x ", *(array + i));
|
printf("%#x ", *(array + i));
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n-----------%u-------------\n", len);
|
printf("\n-----------%u-------------\n", len);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t csum(uint16_t sum, uint8_t *buf, uint16_t len)
|
uint16_t csum(uint16_t sum, uint8_t *buf, uint16_t len)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
uint16_t carry;
|
uint16_t carry;
|
||||||
|
|
||||||
count = len >> 1;
|
count = len >> 1;
|
||||||
|
|
||||||
if (count) {
|
if (count) {
|
||||||
if (count) {
|
if (count) {
|
||||||
carry = 0;
|
carry = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
uint16_t t = (*buf << 8) + *(buf + 1);
|
uint16_t t = (*buf << 8) + *(buf + 1);
|
||||||
count--;
|
count--;
|
||||||
buf += 2;
|
buf += 2;
|
||||||
sum += carry;
|
sum += carry;
|
||||||
sum += t;
|
sum += t;
|
||||||
carry = (t > sum);
|
carry = (t > sum);
|
||||||
}
|
}
|
||||||
while (count);
|
while (count);
|
||||||
|
|
||||||
sum += carry;
|
sum += carry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (len & 1) {
|
if (len & 1) {
|
||||||
uint16_t u = (*buf << 8);
|
uint16_t u = (*buf << 8);
|
||||||
sum += (*buf << 8);
|
sum += (*buf << 8);
|
||||||
|
|
||||||
if (sum < u) {
|
if (sum < u) {
|
||||||
sum++;
|
sum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
@ -1,27 +1,27 @@
|
|||||||
/*
|
/*
|
||||||
* common.h
|
* common.h
|
||||||
*
|
*
|
||||||
* Created on: 05.10.2011
|
* Created on: 05.10.2011
|
||||||
* Author: Oliver
|
* Author: Oliver
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef COMMON_H_
|
#ifndef COMMON_H_
|
||||||
#define COMMON_H_
|
#define COMMON_H_
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#define BITSET(var,pos) ((var) & (1<<(pos)))
|
#define BITSET(var,pos) ((var) & (1<<(pos)))
|
||||||
#define HTONS(a) ((((uint16_t) (a) >> 8) & 0xff) | ((((uint16_t) (a)) & 0xff) << 8))
|
#define HTONS(a) ((((uint16_t) (a) >> 8) & 0xff) | ((((uint16_t) (a)) & 0xff) << 8))
|
||||||
#define HTONL(a) ((((uint32_t) (a) & 0xff000000) >> 24) | \
|
#define HTONL(a) ((((uint32_t) (a) & 0xff000000) >> 24) | \
|
||||||
(((uint32_t) (a) & 0x00ff0000) >> 8) | \
|
(((uint32_t) (a) & 0x00ff0000) >> 8) | \
|
||||||
(((uint32_t) (a) & 0x0000ff00) << 8) | \
|
(((uint32_t) (a) & 0x0000ff00) << 8) | \
|
||||||
(((uint32_t) (a) & 0x000000ff) << 24))
|
(((uint32_t) (a) & 0x000000ff) << 24))
|
||||||
#define NTOHS HTONS
|
#define NTOHS HTONS
|
||||||
#define NTOHL HTONL
|
#define NTOHL HTONL
|
||||||
|
|
||||||
#define CMP_IPV6_ADDR(a, b) (memcmp(a, b, 16))
|
#define CMP_IPV6_ADDR(a, b) (memcmp(a, b, 16))
|
||||||
|
|
||||||
uint16_t csum(uint16_t sum, uint8_t *buf, uint16_t len);
|
uint16_t csum(uint16_t sum, uint8_t *buf, uint16_t len);
|
||||||
void printArrayRange(uint8_t *array, uint16_t len, char *str);
|
void printArrayRange(uint8_t *array, uint16_t len, char *str);
|
||||||
|
|
||||||
#endif /* COMMON_H_ */
|
#endif /* COMMON_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user