Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


added network server files
[palacios.git] / misc / network_servers / vtl / vtl_model.h
diff --git a/misc/network_servers/vtl/vtl_model.h b/misc/network_servers/vtl/vtl_model.h
new file mode 100644 (file)
index 0000000..f776eae
--- /dev/null
@@ -0,0 +1,153 @@
+#ifndef __VTL_MODEL_H
+#define __VTL_MODEL_H
+
+
+#include "vtl_util.h"
+
+#define INVALID_PKT 0
+#define OUTBOUND_PKT 1
+#define INBOUND_PKT 2
+
+typedef enum tcp_state { CLOSED,
+                        LISTEN,
+                        SYN_RCVD,
+                        SYN_SENT,
+                        ESTABLISHED,
+                        CLOSE_WAIT,
+                        LAST_ACK,
+                        FIN_WAIT1,
+                        FIN_WAIT2,
+                        CLOSING,
+                        TIME_WAIT } tcp_state_t;
+
+
+/* State Models */
+/*#define ETHERNET_MODEL 0
+#define IP_MODEL 1
+#define TCP_MODEL 2
+#define UDP_MODEL 3
+*/
+
+typedef enum model_type{ETHERNET_MODEL, 
+                       IP_MODEL, 
+                       TCP_MODEL, 
+                       UDP_MODEL } model_type_t;
+
+typedef struct ethernet_host_state {
+  char addr[6];
+
+} ethernet_host_state_t;
+
+typedef struct ethernet_model {
+  ethernet_host_state_t src;
+  ethernet_host_state_t dst;
+  unsigned short type;
+} ethernet_model_t;
+
+typedef struct ip_host_state {
+  unsigned short ip_id;
+  unsigned long addr;
+
+  unsigned char ttl;
+
+} ip_host_state_t;
+
+typedef struct ip_model {
+  ip_host_state_t src;
+  ip_host_state_t dst;
+
+  char version;
+  unsigned char proto;
+  ethernet_model_t ethernet;
+} ip_model_t;
+
+typedef struct tcp_host_state {
+  unsigned short port;
+  unsigned long seq_num;
+  unsigned long last_ack;
+  unsigned short win;
+
+  unsigned long ts;
+  unsigned short mss;
+
+  tcp_state_t state;
+
+} tcp_host_state_t;
+
+typedef struct tcp_model {
+  tcp_host_state_t src;
+  tcp_host_state_t dst;
+
+  ip_model_t ip;
+} tcp_model_t;
+
+typedef struct udp_host_state {
+  unsigned short port;
+} udp_host_state_t;
+
+typedef struct udp_model {
+  udp_host_state_t src;
+  udp_host_state_t dst;
+
+  ip_model_t ip;
+} udp_model_t;
+
+
+typedef struct vtl_model {
+  union model_u {
+    ethernet_model_t ethernet_model;
+    ip_model_t ip_model;
+    tcp_model_t tcp_model;
+    udp_model_t udp_model;
+  } model;
+  model_type_t type;
+} vtl_model_t;
+
+
+
+udp_model_t * new_udp_model();
+tcp_model_t * new_tcp_model();
+ip_model_t * new_ip_model();
+ethernet_model_t * new_ethernet_model();
+vtl_model_t * new_vtl_model(model_type_t type);
+
+int initialize_ip_model(ip_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int initialize_tcp_model(tcp_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int initialize_udp_model(udp_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int initialize_model(vtl_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+
+int sync_ip_model(ip_model_t * model, RawEthernetPacket * pkt);
+int sync_tcp_model(tcp_model_t * model, RawEthernetPacket * pkt);
+int sync_udp_model(udp_model_t * model, RawEthernetPacket * pkt);
+int sync_model(vtl_model_t * model, RawEthernetPacket * pkt);
+
+int is_udp_model_pkt(udp_model_t * model, RawEthernetPacket * pkt);
+int is_tcp_model_pkt(tcp_model_t * model, RawEthernetPacket * pkt);
+int is_ip_model_pkt(ip_model_t * model, RawEthernetPacket * pkt);
+int is_ethernet_model_pkt(ethernet_model_t * model, RawEthernetPacket * pkt);
+int is_model_pkt(vtl_model_t * model, RawEthernetPacket * pkt);
+
+
+
+int create_empty_ethernet_pkt(ethernet_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int create_empty_ip_pkt(ip_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int create_empty_tcp_pkt(tcp_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int create_empty_udp_pkt(udp_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+int create_empty_pkt(vtl_model_t * model, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+
+// User must track tcp state changes
+//tcp_state_t get_tcp_state(tcp_state_t current_state, RawEthernetPacket * pkt, int dir = OUTBOUND_PKT);
+
+
+void dbg_dump_eth_model(ethernet_model_t * model);
+void dbg_dump_ip_model(ip_model_t * model);
+void dbg_dump_tcp_model(tcp_model_t * model);
+void dbg_dump_udp_model(udp_model_t * model);
+void dbg_dump_model(vtl_model_t * model);
+
+
+
+
+
+
+#endif // ! __VTL_MODEL_H