]> sjero.net Git - dccp2tcp/blobdiff - dccp2tcp.h
Cleanup types throughout code
[dccp2tcp] / dccp2tcp.h
index 2a1dbfa18458f2f8c71a3db423b07e975fb88cd3..23b5af0f3be0410633930458603bd15b49dc5c80 100644 (file)
@@ -1,18 +1,28 @@
 /******************************************************************************
-Author: Samuel Jero
+Utility to convert a DCCP flow to a TCP flow for DCCP analysis via
+               tcptrace.
 
-Date: 7/2011
+Copyright (C) 2013  Samuel Jero <sj323707@ohio.edu>
 
-Description: Header file for program to convert a DCCP flow to a TCP flow for DCCP
-                analysis via tcptrace.
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Author: Samuel Jero <sj323707@ohio.edu>
+Date: 02/2013
 
 Notes:
-       1)CCID2 ONLY
-       2)DCCP MUST use 48 bit sequence numbers
-       3)Checksums are not computed (they are zeroed)
-       4)Only implements those packet types normally used in a session
-       5)DCCP Ack packets show up as TCP packets containing one byte
-       6)Very little error checking of packet headers
+       1)DCCP MUST use 48 bit sequence numbers
+       2)DCCP Ack packets show up as TCP packets containing one byte
 ******************************************************************************/
 #ifndef _DCCP2TCP_H
 #define _DCCP2TCP_H
@@ -40,21 +50,26 @@ Notes:
 #include <ctype.h>
 #include <pcap.h>
 #include <linux/dccp.h>
+#include "checksums.h"
 
 
 #define MAX_PACKET     1600    /*Maximum size of TCP packet */
 #define        TBL_SZ          40000   /*Size of Sequence Number Table*/
 
 
-
+#define TRUE 1
+#define FALSE 0
+typedef __be16 dccp_port;
+typedef __be32 d_seq_num;
 
 /*Packet structure*/
 struct packet{
        struct pcap_pkthdr      *h;             /*libpcap header*/
        u_char                          *data;  /*Packet Data*/
        int                                     length; /*Packet length*/
-       uint32_t                        src_id; /*Source ID of packet*/
-       uint32_t                        dest_id; /*Destination ID of packet*/
+       int                                     id_len; /*Length of IDs*/
+       u_char                          *src_id; /*Source ID of packet*/
+       u_char                          *dest_id;/*Destination ID of packet*/
 };
 
 /*Constant Packet structure*/
@@ -62,8 +77,9 @@ struct const_packet{
        const struct pcap_pkthdr *h;    /*libpcap header*/
        const u_char                    *data;  /*Packet Data*/
        int                                             length; /*Packet length*/
-       uint32_t                                src_id; /*Source ID of packet*/
-       uint32_t                                dest_id;/*Destination ID of packet*/
+       int                                             id_len; /*Length of IDs*/
+       u_char                                  *src_id; /*Source ID of packet*/
+       u_char                                  *dest_id;/*Destination ID of packet*/
 };
 
 /*Connection states*/
@@ -71,28 +87,40 @@ enum con_state{
        INIT,
        OPEN,
        CLOSE,
+       DEAD,
+       IGNORE,
 };
 
-/*Host---half of a connection*/
-struct host{
-       uint32_t                        id;             /*Host ID*/
-       __be16                          port;   /*Host DCCP port*/
+/*Connection Types (i.e. CCID)*/
+enum con_type{
+       UNKNOWN,
+       CCID2,
+       CCID3,
+};
+
+/*Half Connection structure*/
+struct hcon{
+       int                                     id_len; /*Length of ID*/
+       u_char                          *id;    /*Host ID*/
+       dccp_port                       port;   /*Host DCCP port*/
        struct tbl                      *table; /*Host Sequence Number Table*/
        int                                     size;   /*Size of Sequence Number Table*/
        int                                     cur;    /*Current TCP Sequence Number*/
+       int                                     high_ack;/*Highest ACK seen*/
        enum con_state          state;  /*Connection state*/
+       enum con_type           type;   /*Connection type*/
 };
 
 /*Connection structure*/
 struct connection{
        struct connection       *next;  /*List pointer*/
-       struct host                     A;              /*Host A*/
-       struct host                     B;              /*Host B*/
+       struct hcon                     A;              /*Host A*/
+       struct hcon                     B;              /*Host B*/
 };
 
 /*sequence number table structure */
 struct tbl{
-       __be32                          old;    /*DCCP sequence number */
+       d_seq_num                       old;    /*DCCP sequence number */
        u_int32_t                       new;    /*TCP sequence number */
        int                                     size;   /*packet size*/
        enum dccp_pkt_type      type;   /*packet type*/
@@ -106,7 +134,6 @@ extern int sack;            /*add TCP SACKS*/
 
 extern struct connection *chead;/*connection list*/
 
-
 /*debug printf
  * Levels:
  *     0) Always print even if debug isn't specified
@@ -119,8 +146,18 @@ void dbgprintf(int level, const char *fmt, ...);
 int do_encap(int link, struct packet *new, const struct const_packet *old);
 
 /*Connection functions*/
-int get_host(uint32_t src_id, uint32_t dest_id, int src_port, int dest_port, struct host **fwd, struct host **rev);
-struct connection *add_connection(uint32_t src_id, uint32_t dest_id, int src_port, int dest_port);
-int update_state(struct host* hst, enum con_state st);
+int get_host(u_char *src_id, u_char* dest_id, int id_len, int src_port, int dest_port,
+               enum dccp_pkt_type pkt_type, struct hcon **fwd, struct hcon **rev);
+struct connection *add_connection(u_char *src_id, u_char* dest_id, int id_len,
+               int src_port, int dest_port);
+int update_state(struct hcon* hst, enum con_state st);
+void cleanup_connections();
+
+/*Half Connection/Sequence number functions*/
+u_int32_t initialize_hcon(struct hcon *hcn, d_seq_num initial);
+u_int32_t add_new_seq(struct hcon *hcn, d_seq_num num, int size, enum dccp_pkt_type type);
+u_int32_t convert_ack(struct hcon *hcn, d_seq_num num, struct hcon *o_hcn);
+int acked_packet_size(struct hcon *hcn, d_seq_num num);
+unsigned int interp_ack_vect(u_char* hdr);
 
 #endif