#include "includes.h"
Funciones | |
WORD | tcp_get_dlength (BYTE *rxtx_buffer) |
Devuelve el largo de datos de un paq. TCP . | |
BYTE | tcp_get_hlength (BYTE *rxtx_buffer) |
Devuelve el largo del encabezado de un paq. TCP . | |
WORD | tcp_puts_data_p (BYTE *rxtx_buffer, PGM_P data, WORD offset) |
Coloca datos de program memory en un paq. TCP Los coloca con un OFFSET respecto al inicio del campo de datos . | |
WORD | tcp_puts_data (BYTE *rxtx_buffer, BYTE *data, WORD offset) |
Coloca datos de RAM en un paq. TCP Los coloca con un OFFSET respecto al inicio del campo de datos . | |
void | tcp_send_packet (BYTE *rxtx_buffer, WORD_BYTES dest_port, WORD_BYTES src_port, BYTE flags, BYTE max_segment_size, BYTE clear_seqack, WORD next_ack_num, WORD dlength, BYTE *dest_mac, BYTE *dest_ip) |
Envio de paquetes TCP . | |
Variables | |
static BYTE | seqnum = 0xa |
Devuelve el largo de datos de un paq. TCP
.
rxtx_buffer | puntero al paquete TCP. |
Devuelve el largo del encabezado de un paq. TCP
.
rxtx_buffer | puntero al paquete TCP. |
Coloca datos de RAM en un paq. TCP
Los coloca con un OFFSET respecto al inicio del campo de datos
.
rxtx_buffer | el puntero al paquete en que se colocaran los datos. | |
data | el puntero a los datos a colocar | |
offset | el OFFSET respecto al origen del campo de datos |
Coloca datos de program memory en un paq. TCP
Los coloca con un OFFSET respecto al inicio del campo de datos
.
rxtx_buffer | el puntero al paquete en que se colocaran los datos. | |
data | el puntero a los datos a colocar | |
offset | el OFFSET respecto al origen del campo de datos |
void tcp_send_packet | ( | BYTE * | rxtx_buffer, | |
WORD_BYTES | dest_port, | |||
WORD_BYTES | src_port, | |||
BYTE | flags, | |||
BYTE | max_segment_size, | |||
BYTE | clear_seqack, | |||
WORD | next_ack_num, | |||
WORD | dlength, | |||
BYTE * | dest_mac, | |||
BYTE * | dest_ip | |||
) |
Envio de paquetes TCP
.
Conexion normal:
1) envio SYN con SEQ=n
2)me responden SYN con SEQ=m y ACK n+1
3)retorno SEQ=n+1 ACK m+1
con esto quedan inicializadas las conexiones de ambos lados. Es importante definir quien es el que establece y corta la conexion.
rxtx_buffer | puntero al buffer | |
dest_port | puerto de destino | |
src_port | puerto de origen | |
flags | ||
max_segment_size | ||
clear_seqack | indica si se limpia o no seq. ack. | |
next_ack_num | siguiente numero a ser reconocido | |
dlength | largo del campo de datos | |
dest_mac | MAC de destino | |
dest_ip | IP de destino |
generate ethernet header
sequence numbers: add the rel ack num to SEQACK
copy the acknum sent to us into the sequence number
initial tcp sequence number setup maximum segment size require to setup first packet is receive or transmit only
initial sequence number
setup maximum segment size
setup tcp header length 24 bytes: 6*32/8 = 24
generate ip header and checksum
clear sequence ack number before send tcp SYN packet
setup tcp flags
setup destination port
setup source port
setup maximum windows size
setup urgend pointer (not used -> 0)
clear old checksum and calculate new checksum
send packet to ethernet media