#include <limits.h>
#include <netinet/in.h>
#include <sys/uio.h>
#include "vfer_datagram.h"
#include "vfer.h"
Go to the source code of this file.
Data Structures | |
| struct | ccack_pack |
| congestion control ack packet type More... | |
| struct | close_pack |
| close packet type More... | |
| struct | data_pack |
| data packet type More... | |
| struct | packet |
| generic vfer packet type More... | |
| struct | request_pack |
| request packet type More... | |
| struct | response_pack |
| response packet type More... | |
Defines | |
| #define | CCACK_LENGTH CCACKH_LENGTH + TOPH_LENGTH |
| #define | CCACKH_LENGTH 22 |
| #define | CLOSE_LENGTH CLOSEH_LENGTH + TOPH_LENGTH |
| #define | CLOSEH_LENGTH 0 |
| #define | DATA_LENGTH DATAH_LENGTH + TOPH_LENGTH |
| #define | DATAACK_LENGTH DATAACKH_LENGTH + TOPH_LENGTH |
| #define | DATAACKH_LENGTH DATAH_LENGTH + SYNCH_LENGTH |
| #define | DATAH_LENGTH 10 |
| #define | REQUEST_LENGTH REQUESTH_LENGTH + TOPH_LENGTH |
| #define | REQUESTH_LENGTH 14 |
| #define | RESPONSE_LENGTH RESPONSEH_LENGTH + TOPH_LENGTH |
| #define | RESPONSEH_LENGTH 20 |
| #define | TOPH_LENGTH 16 |
Enumerations | |
| enum | packet_opt { OPT_FRAME_LEN = 1, OPT_SYNC = 2, OPT_VEC = 4 } |
| enum | packet_type { REQUEST = 16, RESPONSE = 32, DATA = 48, CC_ACK = 64, DATA_ACK = 96, CLOSE = 112 } |
Functions | |
| packet * | Packet_Form_CCAck (uint32_t opts, uint32_t seq_num, uint32_t last_seq_received, uint16_t packets_lost, uint16_t oldest_frame, uint16_t newest_frame, int32_t delay_delta, int32_t delay, uint32_t bytes_total, uint16_t intervals_frame_num, intervals_t *intervals) |
| packet * | Packet_Form_Close (uint32_t opts, uint32_t seq_num) |
| packet * | Packet_Form_Data (uint32_t opts, uint32_t seq_num, uint16_t frame_num, uint32_t data_offset, uint32_t frame_len, void *data, int data_len) |
| packet * | Packet_Form_Request (uint32_t opts, uint32_t init_seq_num, uint32_t max_frame_size, uint32_t recv_buf_size, uint32_t send_buf_size, uint16_t init_frame_num) |
| packet * | Packet_Form_Response (uint32_t opts, uint32_t init_seq_num, uint16_t init_frame_num, uint16_t connection_port, uint32_t max_frame_size, uint32_t recv_buf_size, uint32_t send_buf_size, int32_t request_delay) |
| uint16_t | Packet_Gen_FrameNum () |
| uint32_t | Packet_Gen_SeqNum () |
| void | Packet_Print (packet *p) |
| int | Packet_Read (int fd, packet **p, struct sockaddr *addr, socklen_t *addr_len) |
| int | Packet_Read_ICMP (int icmp_fd, void *pmtu) |
| void | Packet_Set_Seq (packet *p, uint32_t seq) |
| char * | Packet_Str (packet *p) |
| char * | Packet_Str_Type (packet *p) |
| int | Packet_Translate_CCAck (packet *p) |
| int | Packet_Translate_Close (packet *p) |
| int | Packet_Translate_Data (packet *p) |
| int | Packet_Translate_Request (packet *p) |
| int | Packet_Translate_Response (packet *p) |
| int | Packet_Write (packet *p, int fd, struct sockaddr *addr, socklen_t addr_len) |
Variables | |
| char | pack_buf [65536] |
Definition in file vfer_packet.h.
| #define CCACK_LENGTH CCACKH_LENGTH + TOPH_LENGTH |
Definition at line 47 of file vfer_packet.h.
| #define CCACKH_LENGTH 22 |
Definition at line 37 of file vfer_packet.h.
| #define CLOSE_LENGTH CLOSEH_LENGTH + TOPH_LENGTH |
Definition at line 48 of file vfer_packet.h.
| #define CLOSEH_LENGTH 0 |
Definition at line 38 of file vfer_packet.h.
| #define DATA_LENGTH DATAH_LENGTH + TOPH_LENGTH |
Definition at line 45 of file vfer_packet.h.
| #define DATAACK_LENGTH DATAACKH_LENGTH + TOPH_LENGTH |
Definition at line 46 of file vfer_packet.h.
| #define DATAACKH_LENGTH DATAH_LENGTH + SYNCH_LENGTH |
Definition at line 40 of file vfer_packet.h.
| #define DATAH_LENGTH 10 |
Definition at line 36 of file vfer_packet.h.
| #define REQUEST_LENGTH REQUESTH_LENGTH + TOPH_LENGTH |
Definition at line 43 of file vfer_packet.h.
| #define REQUESTH_LENGTH 14 |
Definition at line 34 of file vfer_packet.h.
| #define RESPONSE_LENGTH RESPONSEH_LENGTH + TOPH_LENGTH |
Definition at line 44 of file vfer_packet.h.
| #define RESPONSEH_LENGTH 20 |
Definition at line 35 of file vfer_packet.h.
| #define TOPH_LENGTH 16 |
Definition at line 31 of file vfer_packet.h.
| enum packet_opt |
| enum packet_type |
Definition at line 139 of file vfer_packet.h.
| packet* Packet_Form_CCAck | ( | uint32_t | opts, | |
| uint32_t | seq_num, | |||
| uint32_t | last_seq_received, | |||
| uint16_t | packets_lost, | |||
| uint16_t | oldest_frame, | |||
| uint16_t | newest_frame, | |||
| int32_t | delay_delta, | |||
| int32_t | delay, | |||
| uint32_t | bytes_total, | |||
| uint16_t | intervals_frame_num, | |||
| intervals_t * | intervals | |||
| ) |
Forms a CC Ack packet
| opts | options for the generic header of the packet | |
| seq_num | sequence number for the generic header of the packet | |
| last_seq_received | last sequence number received by this connection | |
| packets_lost | estimated lost number of frags | |
| oldest_frame | oldest frame the received of this packet should resend | |
| newest_frame | oldest frame the received of this packet should resend | |
| delay_delta | current delay on the reverse path (not the path of this ack) | |
| delay | current delay for the reverse path | |
| bytes_total | total data bytes received by the endpoint | |
| intervals_frame_num | the frame number corresponding to the missing data intervals | |
| intervals | intervals structure (defined in datagram.h) If intervals->head == 0 then no intervals will be sent in the ack packet |
Definition at line 304 of file vfer_packet.c.
| packet* Packet_Form_Close | ( | uint32_t | opts, | |
| uint32_t | seq_num | |||
| ) |
Forms a Close packet
| opts | options for the generic header of the packet | |
| seq_num | sequence number for the generic header of the packet |
Definition at line 417 of file vfer_packet.c.
| packet* Packet_Form_Data | ( | uint32_t | opts, | |
| uint32_t | seq_num, | |||
| uint16_t | frame_num, | |||
| uint32_t | data_offset, | |||
| uint32_t | frame_len, | |||
| void * | data, | |||
| int | data_len | |||
| ) |
Forms a Data packet
| opts | options for the generic header of the packet | |
| seq_num | sequence number for the generic header of the packet | |
| frame_num | frame number this data packet carries a frag for | |
| data_offset | offset of the data in the frame | |
| frame_len | either -1 (do not include in the data header) (opts will be set and send accordingly) or is not -1, in which case it is included in the data header | |
| data | data buffer to send in the body of the data packet | |
| data_len | tells us how the span of the data buffer pointed to by the data arg |
Definition at line 240 of file vfer_packet.c.
| packet* Packet_Form_Request | ( | uint32_t | opts, | |
| uint32_t | init_seq_num, | |||
| uint32_t | max_frame_size, | |||
| uint32_t | recv_buf_size, | |||
| uint32_t | send_buf_size, | |||
| uint16_t | init_frame_num | |||
| ) |
Forms a Request packet
| opts | options for the generic header of the packet | |
| init_seq_num | initial sequence number for the sender's half of connection | |
| max_frame_size | maximum frame size the sender is willing to receive | |
| recv_buf_size | receive buffer size at the sender | |
| send_buf_size | sending buffer size at the sender | |
| init_frame_num | initial frame number for the sender's half of connection |
Definition at line 134 of file vfer_packet.c.
| packet* Packet_Form_Response | ( | uint32_t | opts, | |
| uint32_t | init_seq_num, | |||
| uint16_t | init_frame_num, | |||
| uint16_t | connection_port, | |||
| uint32_t | max_frame_size, | |||
| uint32_t | recv_buf_size, | |||
| uint32_t | send_buf_size, | |||
| int32_t | request_delay | |||
| ) |
Forms a Response packet
| opts | options for the generic header of the packet | |
| init_seq_num | initial sequence number for the sender's half of connection | |
| init_frame_num | initial frame number for the sender's half of connection | |
| connection_port | the connection port to which the sender should connect and use for the remained of this connection | |
| max_frame_size | maximum frame size the sender is willing to receive | |
| recv_buf_size | receive buffer size at the sender | |
| send_buf_size | sending buffer size at the sender | |
| request_delay | the delay computed for the request packet |
Definition at line 183 of file vfer_packet.c.
| uint16_t Packet_Gen_FrameNum | ( | ) | [inline] |
Generates a random (2 bytes) frame number
Definition at line 1037 of file vfer_packet.c.
| uint32_t Packet_Gen_SeqNum | ( | ) | [inline] |
Generates a random (4 byte) sequence number.
Definition at line 1048 of file vfer_packet.c.
| void Packet_Print | ( | packet * | p | ) |
Prints a description of the packet onto stdout
| p | packet pointer |
Definition at line 107 of file vfer_packet.c.
| int Packet_Read | ( | int | fd, | |
| packet ** | p, | |||
| struct sockaddr * | addr, | |||
| socklen_t * | addr_len | |||
| ) |
Reads from a file descriptor into an iov buffer.
Does minor validation of the generic header. Returns either an error or the packet_type of the received packet. Set iov as return by reference.
| fd | file descriptor to which to write the buffer | |
| p | packet strucutre to read the packet into | |
| addr | pointer that is either NULL or address to which we send the iov | |
| addr_len | pointer to be set by reference to length of addr param |
Definition at line 789 of file vfer_packet.c.
| int Packet_Read_ICMP | ( | int | icmp_fd, | |
| void * | pmtu | |||
| ) |
Reads ICMP packets and makes any necessary adjustments to the path MTU.
| icmp_fd | file descriptor of icmp socket | |
| pmtu | pmtu structure to modify if we read an ICMP packet |
Definition at line 913 of file vfer_packet.c.
| void Packet_Set_Seq | ( | packet * | p, | |
| uint32_t | seq | |||
| ) | [inline] |
Sets the sequence number in the packet header
| p | pointer to the packet in which to set the header | |
| seq | sequence number to set in the header |
Definition at line 618 of file vfer_packet.c.
| char* Packet_Str | ( | packet * | p | ) |
Create a string description of the packet
| p | packet pointer |
Definition at line 75 of file vfer_packet.c.
| char* Packet_Str_Type | ( | packet * | p | ) |
String type of packet
| p | packet pointer |
Definition at line 53 of file vfer_packet.c.
| int Packet_Translate_CCAck | ( | packet * | p | ) |
Fills in the cc_ack union memeber with values from a raw packet
| p | packet pointer to traslate |
Definition at line 543 of file vfer_packet.c.
| int Packet_Translate_Close | ( | packet * | p | ) |
Fills in the close union memeber with values from a raw packet
| p | packet pointer to traslate |
Definition at line 601 of file vfer_packet.c.
| int Packet_Translate_Data | ( | packet * | p | ) |
Fills in the data union memeber with values from a raw packet
| p | packet pointer to traslate |
Definition at line 502 of file vfer_packet.c.
| int Packet_Translate_Request | ( | packet * | p | ) |
Fills in the request union memeber with values from a raw packet
| p | packet pointer to traslate |
Definition at line 437 of file vfer_packet.c.
| int Packet_Translate_Response | ( | packet * | p | ) |
Fills in the response union memeber with values from a raw packet
| p | packet pointer to traslate |
Definition at line 466 of file vfer_packet.c.
| int Packet_Write | ( | packet * | p, | |
| int | fd, | |||
| struct sockaddr * | addr, | |||
| socklen_t | addr_len | |||
| ) |
Writes a packet of a certain length to a file descriptor.
| p | packet structure containing the packet to write out | |
| fd | file descriptor to which to write the buffer | |
| addr | is the address to send the packet to (eg. for unconnected sockets - used in server.c Server_Accept() ) | |
| addr_len | is the length of the addr param |
Definition at line 956 of file vfer_packet.c.
| char pack_buf[65536] |
Definition at line 192 of file vfer_packet.h.
1.4.7