Free (GPLv2) TCP/IP stack developed by TASS Belgium
Fork of PicoTCP by
modules/pico_tcp.h@1:cfe8984a32b4, 2013-05-17 (annotated)
- Committer:
- tass
- Date:
- Fri May 17 12:09:59 2013 +0000
- Revision:
- 1:cfe8984a32b4
- Parent:
- libraries/picotcp/modules/pico_tcp.h@0:d7f2341ab245
Update for smaller SOCKETQ
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
daniele | 0:d7f2341ab245 | 1 | /********************************************************************* |
daniele | 0:d7f2341ab245 | 2 | PicoTCP. Copyright (c) 2012 TASS Belgium NV. Some rights reserved. |
daniele | 0:d7f2341ab245 | 3 | See LICENSE and COPYING for usage. |
daniele | 0:d7f2341ab245 | 4 | |
daniele | 0:d7f2341ab245 | 5 | . |
daniele | 0:d7f2341ab245 | 6 | |
daniele | 0:d7f2341ab245 | 7 | *********************************************************************/ |
daniele | 0:d7f2341ab245 | 8 | #ifndef _INCLUDE_PICO_TCP |
daniele | 0:d7f2341ab245 | 9 | #define _INCLUDE_PICO_TCP |
daniele | 0:d7f2341ab245 | 10 | #include "pico_addressing.h" |
daniele | 0:d7f2341ab245 | 11 | #include "pico_protocol.h" |
daniele | 0:d7f2341ab245 | 12 | #include "pico_socket.h" |
daniele | 0:d7f2341ab245 | 13 | |
daniele | 0:d7f2341ab245 | 14 | extern struct pico_protocol pico_proto_tcp; |
daniele | 0:d7f2341ab245 | 15 | |
daniele | 0:d7f2341ab245 | 16 | struct __attribute__((packed)) pico_tcp_hdr { |
daniele | 0:d7f2341ab245 | 17 | struct pico_trans trans; |
daniele | 0:d7f2341ab245 | 18 | uint32_t seq; |
daniele | 0:d7f2341ab245 | 19 | uint32_t ack; |
daniele | 0:d7f2341ab245 | 20 | uint8_t len; |
daniele | 0:d7f2341ab245 | 21 | uint8_t flags; |
daniele | 0:d7f2341ab245 | 22 | uint16_t rwnd; |
daniele | 0:d7f2341ab245 | 23 | uint16_t crc; |
daniele | 0:d7f2341ab245 | 24 | uint16_t urgent; |
daniele | 0:d7f2341ab245 | 25 | }; |
daniele | 0:d7f2341ab245 | 26 | |
daniele | 0:d7f2341ab245 | 27 | struct __attribute__((packed)) tcp_pseudo_hdr_ipv4 |
daniele | 0:d7f2341ab245 | 28 | { |
daniele | 0:d7f2341ab245 | 29 | struct pico_ip4 src; |
daniele | 0:d7f2341ab245 | 30 | struct pico_ip4 dst; |
daniele | 0:d7f2341ab245 | 31 | uint16_t tcp_len; |
daniele | 0:d7f2341ab245 | 32 | uint8_t res; |
daniele | 0:d7f2341ab245 | 33 | uint8_t proto; |
daniele | 0:d7f2341ab245 | 34 | }; |
daniele | 0:d7f2341ab245 | 35 | |
daniele | 0:d7f2341ab245 | 36 | #define PICO_TCPHDR_SIZE 20 |
daniele | 0:d7f2341ab245 | 37 | #define PICO_SIZE_TCPOPT_SYN 20 |
daniele | 0:d7f2341ab245 | 38 | #define PICO_SIZE_TCPHDR (sizeof(struct pico_tcp_hdr)) |
daniele | 0:d7f2341ab245 | 39 | |
daniele | 0:d7f2341ab245 | 40 | #define PICO_TCP_DEFAULT_MSS 1444 |
daniele | 0:d7f2341ab245 | 41 | |
daniele | 0:d7f2341ab245 | 42 | |
daniele | 0:d7f2341ab245 | 43 | |
daniele | 0:d7f2341ab245 | 44 | /* TCP options */ |
daniele | 0:d7f2341ab245 | 45 | #define PICO_TCP_OPTION_END 0x00 |
daniele | 0:d7f2341ab245 | 46 | #define PICO_TCPOPTLEN_END 1 |
daniele | 0:d7f2341ab245 | 47 | #define PICO_TCP_OPTION_NOOP 0x01 |
daniele | 0:d7f2341ab245 | 48 | #define PICO_TCPOPTLEN_NOOP 1 |
daniele | 0:d7f2341ab245 | 49 | #define PICO_TCP_OPTION_MSS 0x02 |
daniele | 0:d7f2341ab245 | 50 | #define PICO_TCPOPTLEN_MSS 4 |
daniele | 0:d7f2341ab245 | 51 | #define PICO_TCP_OPTION_WS 0x03 |
daniele | 0:d7f2341ab245 | 52 | #define PICO_TCPOPTLEN_WS 3 |
daniele | 0:d7f2341ab245 | 53 | #define PICO_TCP_OPTION_SACK_OK 0x04 |
daniele | 0:d7f2341ab245 | 54 | #define PICO_TCPOPTLEN_SACK_OK 2 |
daniele | 0:d7f2341ab245 | 55 | #define PICO_TCP_OPTION_SACK 0x05 |
daniele | 0:d7f2341ab245 | 56 | #define PICO_TCPOPTLEN_SACK 2 /* Plus the block */ |
daniele | 0:d7f2341ab245 | 57 | #define PICO_TCP_OPTION_TIMESTAMP 0x08 |
daniele | 0:d7f2341ab245 | 58 | #define PICO_TCPOPTLEN_TIMESTAMP 10 |
daniele | 0:d7f2341ab245 | 59 | |
daniele | 0:d7f2341ab245 | 60 | /* TCP flags */ |
daniele | 0:d7f2341ab245 | 61 | #define PICO_TCP_FIN 0x01 |
daniele | 0:d7f2341ab245 | 62 | #define PICO_TCP_SYN 0x02 |
daniele | 0:d7f2341ab245 | 63 | #define PICO_TCP_RST 0x04 |
daniele | 0:d7f2341ab245 | 64 | #define PICO_TCP_PSH 0x08 |
daniele | 0:d7f2341ab245 | 65 | #define PICO_TCP_ACK 0x10 |
daniele | 0:d7f2341ab245 | 66 | #define PICO_TCP_URG 0x20 |
daniele | 0:d7f2341ab245 | 67 | #define PICO_TCP_ECN 0x40 |
daniele | 0:d7f2341ab245 | 68 | #define PICO_TCP_CWR 0x80 |
daniele | 0:d7f2341ab245 | 69 | |
daniele | 0:d7f2341ab245 | 70 | |
daniele | 0:d7f2341ab245 | 71 | |
daniele | 0:d7f2341ab245 | 72 | struct __attribute__((packed)) pico_tcp_option |
daniele | 0:d7f2341ab245 | 73 | { |
daniele | 0:d7f2341ab245 | 74 | uint8_t kind; |
daniele | 0:d7f2341ab245 | 75 | uint8_t len; |
daniele | 0:d7f2341ab245 | 76 | #if 0 |
daniele | 0:d7f2341ab245 | 77 | union { |
daniele | 0:d7f2341ab245 | 78 | uint16_t mss; |
daniele | 0:d7f2341ab245 | 79 | uint8_t wshift; |
daniele | 0:d7f2341ab245 | 80 | struct { |
daniele | 0:d7f2341ab245 | 81 | uint32_t tsval; |
daniele | 0:d7f2341ab245 | 82 | uint32_t tsecr; |
daniele | 0:d7f2341ab245 | 83 | } timestamp; |
daniele | 0:d7f2341ab245 | 84 | } data; |
daniele | 0:d7f2341ab245 | 85 | #endif |
daniele | 0:d7f2341ab245 | 86 | }; |
daniele | 0:d7f2341ab245 | 87 | |
daniele | 0:d7f2341ab245 | 88 | struct pico_socket *pico_tcp_open(void); |
daniele | 0:d7f2341ab245 | 89 | int pico_tcp_read(struct pico_socket *s, void *buf, int len); |
daniele | 0:d7f2341ab245 | 90 | int pico_tcp_initconn(struct pico_socket *s); |
daniele | 0:d7f2341ab245 | 91 | int pico_tcp_input(struct pico_socket *s, struct pico_frame *f); |
daniele | 0:d7f2341ab245 | 92 | uint16_t pico_tcp_checksum_ipv4(struct pico_frame *f); |
daniele | 0:d7f2341ab245 | 93 | int pico_tcp_overhead(struct pico_socket *s); |
daniele | 0:d7f2341ab245 | 94 | int pico_tcp_output(struct pico_socket *s, int loop_score); |
daniele | 0:d7f2341ab245 | 95 | int pico_tcp_queue_in_is_empty(struct pico_socket *s); |
daniele | 0:d7f2341ab245 | 96 | int pico_tcp_reply_rst(struct pico_frame *f); |
daniele | 0:d7f2341ab245 | 97 | |
daniele | 0:d7f2341ab245 | 98 | #endif |