X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Finclude%2Fdevices%2Fvnet.h;h=91cde553feaf6e36da903a7c8e4ccef9e370edbc;hp=2984519f937bc2d1586ef73270fd71beb0d84f44;hb=062b88a9cfd1a538782ebcd67c65f59a1a5a8d56;hpb=a5347db03b69dc64ce283e67b624f63baa0c364e diff --git a/palacios/include/devices/vnet.h b/palacios/include/devices/vnet.h index 2984519..91cde55 100644 --- a/palacios/include/devices/vnet.h +++ b/palacios/include/devices/vnet.h @@ -7,36 +7,133 @@ * and the University of New Mexico. You can find out more at * http://www.v3vee.org * - * Copyright (c) 2008, Jack Lange - * Copyright (c) 2008, The V3VEE Project + * Copyright (c) 2009, Lei Xia + * Copyright (c) 2009, Yuan Tang + * Copyright (c) 2009, Jack Lange + * Copyright (c) 2009, Peter Dinda * All rights reserved. * - * Author: Jack Lange + * Author: Lei Xia + * Yuan Tang + * Jack Lange + * Peter Dinda +#include +#include +#include +#include +#include -#ifdef __V3VEE__ -#include +#define ETHERNET_HEADER_LEN 14 +#define ETHERNET_DATA_MIN 46 +#define ETHERNET_DATA_MAX 1500 +#define ETHERNET_PACKET_LEN (ETHERNET_HEADER_LEN + ETHERNET_DATA_MAX) + +//the routing entry +struct routing { + char src_mac[6]; + char dest_mac[6]; + + int src_mac_qual; + int dest_mac_qual; + + int dest; + int type; //EDGE_TYPE|INTERFACE_TYPE + + int src; + int src_type; -struct v3_vnet { - int vnet_sock; - void * private_data; + int use; + + int next; + int prev; }; -int v3_init_vnet(struct v3_vnet * vnet, - int (*rx_pkt)(), //Fix this... - uint32_t ip, uint16_t port, - void * private_data); + //This is the structure that stores the topology +struct topology { + SOCK link_sock; -int v3_send_vnet_pkt(struct v3_vnet * vnet, uchar_t * pkt, uint_t pkt_len); + unsigned long dest; -#endif + // Port for UDP + unsigned short remote_port; + + // LINK OR GATEWAY + // int link_class; + + int use; + int type; //TCP=0, UDP=1,VTP=2, can be extended so on + + int next; + int prev; +}; + +struct sock_list { + SOCK sock; + + int next; + int prev; +}; + + +#define GENERAL_NIC 0 + +struct vnet_if_device { + char name[50]; + struct ethAddr device_addr; + + int (*input)(uchar_t * pkt, uint_t size); + + void * data; +}; + + +struct device_list { + struct vnet_if_device *device; + + int use; + int type; + + int next; + int prev; +}; + +// 14 (ethernet frame) + 20 bytes +struct HEADERS { + char ethernetdest[6]; + char ethernetsrc[6]; + unsigned char ethernettype[2]; // indicates layer 3 protocol type + char ip[20]; +}; + +#define FOREACH(iter, list, start) for (iter = start; iter != -1; iter = list[iter].next) +#define FOREACH_SOCK(iter, socks, start) FOREACH(iter, socks, start) +#define FOREACH_LINK(iter, links, start) FOREACH(iter, links, start) +#define FOREACH_ROUTE(iter, routes, start) FOREACH(iter, routes, start) +#define FOREACH_DEVICE(iter, devices, start) FOREACH(iter, devices, start) + + +int V3_Send_pkt(uchar_t *buf, int length); +int V3_Register_pkt_event(int (*netif_input)(uchar_t * pkt, uint_t size)); + + +int vnet_send_pkt(char *buf, int length); +int vnet_register_pkt_event(char *dev_name, int (*netif_input)(uchar_t * pkt, uint_t size), void *data); + +int vnet_pkt_process(); + +void vnet_init(); #endif + +