From: Lei Xia Date: Wed, 17 Nov 2010 20:38:27 +0000 (-0600) Subject: More clean on VNET codes X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=107d8f06c7083f58fc96d781efb0226edd82c7d9;p=palacios-OLD.git More clean on VNET codes --- diff --git a/palacios/include/palacios/vmm_vnet.h b/palacios/include/palacios/vmm_vnet.h index b8a2d00..baeb15a 100644 --- a/palacios/include/palacios/vmm_vnet.h +++ b/palacios/include/palacios/vmm_vnet.h @@ -22,12 +22,16 @@ #ifndef __VNET_H__ #define __VNET_H__ -#ifdef __V3VEE__ - #include -typedef enum {MAC_ANY=0, MAC_NOT, MAC_NONE, MAC_ADDR} mac_type_t; //for 'src_mac_qual' and 'dst_mac_qual' -typedef enum {LINK_INTERFACE=0, LINK_EDGE, LINK_ANY} link_type_t; //for 'type' and 'src_type' in struct routing +#define MAC_ANY 0 +#define MAC_NOT 1 +#define MAC_NONE 2 +#define MAC_ADDR 3 + +#define LINK_INTERFACE 0 +#define LINK_EDGE 1 +#define LINK_ANY 2 #define VNET_HASH_SIZE 17 #define ETHERNET_HEADER_LEN 14 @@ -48,11 +52,11 @@ struct v3_vnet_route { uint8_t src_mac_qual; uint8_t dst_mac_qual; - uint32_t dst_id; //link[dest] is the link to be used to send pkt - uint8_t dst_type; //EDGE|INTERFACE|ANY + uint32_t dst_id; + uint8_t dst_type; uint32_t src_id; - uint8_t src_type; //EDGE|INTERFACE|ANY + uint8_t src_type; } __attribute__((packed)); @@ -96,20 +100,19 @@ struct v3_vnet_bridge_ops { void * private_data); }; -int v3_init_vnet(); -int v3_vnet_send_pkt(struct v3_vnet_pkt * pkt, void *private_data); -void v3_vnet_poll(struct v3_vm_info *vm); +int v3_init_vnet(void); +int v3_vnet_send_pkt(struct v3_vnet_pkt * pkt, void * private_data); +void v3_vnet_poll(struct v3_vm_info * vm); int v3_vnet_add_route(struct v3_vnet_route route); int v3_vnet_add_bridge(struct v3_vm_info * vm, - struct v3_vnet_bridge_ops *ops, + struct v3_vnet_bridge_ops * ops, uint8_t type, void * priv_data); -int v3_vnet_add_dev(struct v3_vm_info *info, uint8_t mac[6], - struct v3_vnet_dev_ops *ops, +int v3_vnet_add_dev(struct v3_vm_info * info, uint8_t mac[6], + struct v3_vnet_dev_ops * ops, void * priv_data); -#endif #endif diff --git a/palacios/src/devices/lnx_virtio_nic.c b/palacios/src/devices/lnx_virtio_nic.c index 3ef9509..acbce0d 100644 --- a/palacios/src/devices/lnx_virtio_nic.c +++ b/palacios/src/devices/lnx_virtio_nic.c @@ -150,7 +150,7 @@ static int virtio_init_state(struct virtio_net_state * virtio) virtio->virtio_cfg.host_features = 0; // (1 << VIRTIO_NET_F_MAC); if ((v3_lock_init(&(virtio->rx_lock)) == -1) || - (v3_lock_init(&(virtio->tx_lock)) == -1)){ + (v3_lock_init(&(virtio->tx_lock)) == -1)){ PrintError("Virtio NIC: Failure to init locks for net_state\n"); } @@ -160,7 +160,10 @@ static int virtio_init_state(struct virtio_net_state * virtio) return 0; } -static int pkt_tx(struct guest_info * core, struct virtio_net_state * virtio, struct vring_desc * buf_desc) +static int +pkt_tx(struct guest_info * core, + struct virtio_net_state * virtio, + struct vring_desc * buf_desc) { uint8_t * buf = NULL; uint32_t len = buf_desc->length; @@ -174,12 +177,13 @@ static int pkt_tx(struct guest_info * core, struct virtio_net_state * virtio, st } -static int copy_data_to_desc(struct guest_info * core, - struct virtio_net_state * virtio_state, - struct vring_desc * desc, - uchar_t * buf, - uint_t buf_len, - uint_t offset) +static int +copy_data_to_desc(struct guest_info * core, + struct virtio_net_state * virtio_state, + struct vring_desc * desc, + uchar_t * buf, + uint_t buf_len, + uint_t offset) { uint32_t len; uint8_t * desc_buf = NULL; @@ -225,7 +229,8 @@ static inline void notify_guest(struct virtio_net_state * virtio){ /* guest free some pkts from rx queue */ -static int handle_rx_kick(struct guest_info *core, struct virtio_net_state * virtio) +static int handle_rx_kick(struct guest_info *core, + struct virtio_net_state * virtio) { unsigned long flags; @@ -240,12 +245,14 @@ static int handle_rx_kick(struct guest_info *core, struct virtio_net_state * vir } -static int handle_ctrl(struct guest_info *core, struct virtio_net_state * virtio) { +static int handle_ctrl(struct guest_info *core, + struct virtio_net_state * virtio) { return 0; } -static int handle_pkt_tx(struct guest_info *core, struct virtio_net_state * virtio_state) +static int handle_pkt_tx(struct guest_info *core, + struct virtio_net_state * virtio_state) { struct virtio_queue * q = &(virtio_state->tx_vq); struct virtio_net_hdr * hdr = NULL; @@ -322,10 +329,9 @@ exit_error: static int virtio_setup_queue(struct guest_info *core, - struct virtio_net_state * virtio_state, - struct virtio_queue * queue, - addr_t pfn, - addr_t page_addr) { + struct virtio_net_state * virtio_state, + struct virtio_queue * queue, + addr_t pfn, addr_t page_addr) { queue->pfn = pfn; queue->ring_desc_addr = page_addr; @@ -362,7 +368,9 @@ static int virtio_setup_queue(struct guest_info *core, return 0; } -static int virtio_io_write(struct guest_info *core, uint16_t port, void * src, uint_t length, void * private_data) +static int virtio_io_write(struct guest_info *core, + uint16_t port, void * src, + uint_t length, void * private_data) { struct virtio_net_state * virtio = (struct virtio_net_state *)private_data; int port_idx = port % virtio->io_range_size; @@ -457,7 +465,9 @@ static int virtio_io_write(struct guest_info *core, uint16_t port, void * src, u return length; } -static int virtio_io_read(struct guest_info *core, uint16_t port, void * dst, uint_t length, void * private_data) +static int virtio_io_read(struct guest_info *core, + uint16_t port, void * dst, + uint_t length, void * private_data) { struct virtio_net_state * virtio = (struct virtio_net_state *)private_data; int port_idx = port % virtio->io_range_size; @@ -685,7 +695,8 @@ static void virtio_stop_tx(void * data){ -static int register_dev(struct virtio_dev_state * virtio, struct virtio_net_state * net_state) +static int register_dev(struct virtio_dev_state * virtio, + struct virtio_net_state * net_state) { struct pci_device * pci_dev = NULL; struct v3_pci_bar bars[6]; diff --git a/palacios/src/devices/lnx_virtio_vnet.c b/palacios/src/devices/lnx_virtio_vnet.c index f164855..984f9b0 100644 --- a/palacios/src/devices/lnx_virtio_vnet.c +++ b/palacios/src/devices/lnx_virtio_vnet.c @@ -125,7 +125,8 @@ static int get_desc_count(struct virtio_queue * q, int index) { -static int handle_cmd_kick(struct guest_info * core, struct virtio_vnet_state * vnet_state) { +static int handle_cmd_kick(struct guest_info * core, + struct virtio_vnet_state * vnet_state) { struct virtio_queue * q = &(vnet_state->queue[0]); PrintDebug("VNET Bridge: Handling command queue\n"); @@ -223,8 +224,8 @@ static int handle_cmd_kick(struct guest_info * core, struct virtio_vnet_state * static int vnet_pkt_input_cb(struct v3_vm_info * vm, - struct v3_vnet_pkt * pkt, - void * private_data){ + struct v3_vnet_pkt * pkt, + void * private_data){ struct virtio_vnet_state * vnet_state = (struct virtio_vnet_state *)private_data; struct virtio_queue * q = &(vnet_state->queue[RECV_QUEUE]); int ret_val = -1; @@ -281,7 +282,8 @@ exit: return ret_val; } -static int handle_pkt_kick(struct guest_info *core, struct virtio_vnet_state * vnet_state) +static int handle_pkt_kick(struct guest_info * core, + struct virtio_vnet_state * vnet_state) { struct virtio_queue * q = &(vnet_state->queue[XMIT_QUEUE]); int recvd = 0; @@ -337,7 +339,7 @@ static int handle_pkt_kick(struct guest_info *core, struct virtio_vnet_state * v return 0; } -static void vnet_virtio_poll(struct v3_vm_info * vm, void *private_data){ +static void vnet_virtio_poll(struct v3_vm_info * vm, void * private_data){ struct virtio_vnet_state * vnet_state = (struct virtio_vnet_state *)private_data; if(vm == vnet_state->vm){ @@ -345,14 +347,17 @@ static void vnet_virtio_poll(struct v3_vm_info * vm, void *private_data){ } } -static int handle_rx_kick(struct guest_info *core, struct virtio_vnet_state * vnet_state) +static int handle_rx_kick(struct guest_info *core, + struct virtio_vnet_state * vnet_state) { //v3_vnet_enable_bridge(); return 0; } -static int vnet_virtio_io_write(struct guest_info * core, uint16_t port, void * src, uint_t length, void * private_data) { +static int vnet_virtio_io_write(struct guest_info * core, + uint16_t port, void * src, + uint_t length, void * private_data) { struct virtio_vnet_state * vnet_state = (struct virtio_vnet_state *)private_data; int port_idx = port % vnet_state->io_range_size; @@ -486,7 +491,9 @@ static int vnet_virtio_io_write(struct guest_info * core, uint16_t port, void * } -static int vnet_virtio_io_read(struct guest_info * core, uint16_t port, void * dst, uint_t length, void * private_data) { +static int vnet_virtio_io_read(struct guest_info * core, + uint16_t port, void * dst, + uint_t length, void * private_data) { struct virtio_vnet_state * vnet_state = (struct virtio_vnet_state *)private_data; int port_idx = port % vnet_state->io_range_size; diff --git a/palacios/src/devices/vnet_nic.c b/palacios/src/devices/vnet_nic.c index 8e7d026..c24eed7 100644 --- a/palacios/src/devices/vnet_nic.c +++ b/palacios/src/devices/vnet_nic.c @@ -58,8 +58,8 @@ static void stop_rx(void * private_data){ /* called by frontend, send pkt to VNET */ static int vnet_nic_send(uint8_t * buf, uint32_t len, - void * private_data, - struct vm_device * dest_dev){ + void * private_data, + struct vm_device * dest_dev){ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data; struct v3_vnet_pkt pkt; @@ -83,8 +83,8 @@ static int vnet_nic_send(uint8_t * buf, uint32_t len, /* send pkt to frontend device */ static int virtio_input(struct v3_vm_info * info, - struct v3_vnet_pkt * pkt, - void * private_data){ + struct v3_vnet_pkt * pkt, + void * private_data){ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data; return vnetnic->net_ops.recv(pkt->data, @@ -94,7 +94,7 @@ static int virtio_input(struct v3_vm_info * info, /* tell frontend device to poll data from guest */ static void virtio_poll(struct v3_vm_info * info, - void * private_data){ + void * private_data){ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data; vnetnic->net_ops.poll(info, vnetnic->net_ops.frontend_data); @@ -102,14 +102,14 @@ static void virtio_poll(struct v3_vm_info * info, /* tell the frontend to start sending pkt to VNET*/ -static void start_tx(void *private_data){ +static void start_tx(void * private_data){ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data; vnetnic->net_ops.start_tx(vnetnic->net_ops.frontend_data); } /* tell the frontend device to stop sending pkt to VNET*/ -static void stop_tx(void *private_data){ +static void stop_tx(void * private_data){ struct vnet_nic_state *vnetnic = (struct vnet_nic_state *)private_data; vnetnic->net_ops.stop_tx(vnetnic->net_ops.frontend_data); @@ -136,9 +136,8 @@ static struct v3_vnet_dev_ops vnet_dev_ops = { static int register_to_vnet(struct v3_vm_info * vm, - struct vnet_nic_state *vnet_nic, - char *dev_name, - uchar_t mac[6]) { + struct vnet_nic_state * vnet_nic, + char * dev_name, uchar_t mac[6]) { PrintDebug("Vnet-nic: register Vnet-nic device %s, state %p to VNET\n", dev_name, vnet_nic); @@ -146,7 +145,7 @@ static int register_to_vnet(struct v3_vm_info * vm, } -static int str2mac(char *macstr, char mac[6]){ +static int str2mac(char * macstr, char mac[6]){ char hex[2], *s = macstr; int i = 0; @@ -201,7 +200,7 @@ static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { } PrintDebug("Vnet-nic: Connect %s to frontend %s\n", - name, v3_cfg_val(frontend_cfg, "tag")); + name, v3_cfg_val(frontend_cfg, "tag")); if ((vnet_dev_id = register_to_vnet(vm, vnetnic, name, vnetnic->mac)) == -1) { PrintError("Vnet-nic device %s (mac: %s) fails to registered to VNET\n", name, macstr); @@ -209,7 +208,7 @@ static int vnet_nic_init(struct v3_vm_info * vm, v3_cfg_tree_t * cfg) { vnetnic->vnet_dev_id = vnet_dev_id; PrintDebug("Vnet-nic device %s (mac: %s, %ld) registered to VNET\n", - name, macstr, *((ulong_t *)vnetnic->mac)); + name, macstr, *((ulong_t *)vnetnic->mac)); //for temporary hack for vnet bridge test diff --git a/palacios/src/palacios/vmm_vnet_core.c b/palacios/src/palacios/vmm_vnet_core.c index 3726c41..5a4275f 100644 --- a/palacios/src/palacios/vmm_vnet_core.c +++ b/palacios/src/palacios/vmm_vnet_core.c @@ -105,27 +105,27 @@ static inline void mac_to_string(char mac[6], char * buf) { mac[3], mac[4], mac[5]); } -static void print_route(struct vnet_route_info *route){ +static void print_route(struct vnet_route_info * route){ char str[50]; mac_to_string(route->route_def.src_mac, str); PrintDebug("Src Mac (%s), src_qual (%d)\n", - str, route->route_def.src_mac_qual); + str, route->route_def.src_mac_qual); mac_to_string(route->route_def.dst_mac, str); PrintDebug("Dst Mac (%s), dst_qual (%d)\n", - str, route->route_def.dst_mac_qual); + str, route->route_def.dst_mac_qual); PrintDebug("Src dev id (%d), src type (%d)", - route->route_def.src_id, - route->route_def.src_type); + route->route_def.src_id, + route->route_def.src_type); PrintDebug("Dst dev id (%d), dst type (%d)\n", - route->route_def.dst_id, - route->route_def.dst_type); + route->route_def.dst_id, + route->route_def.dst_type); if (route->route_def.dst_type == LINK_INTERFACE) { PrintDebug("dst_dev (%p), dst_dev_id (%d), dst_dev_ops(%p), dst_dev_data (%p)\n", - route->dst_dev, - route->dst_dev->dev_id, - (void *)&(route->dst_dev->dev_ops), - route->dst_dev->private_data); + route->dst_dev, + route->dst_dev->dev_id, + (void *)&(route->dst_dev->dev_ops), + route->dst_dev->private_data); } } @@ -135,9 +135,9 @@ static void dump_routes(){ int i = 0; PrintDebug("\n========Dump routes starts ============\n"); list_for_each_entry(route, &(vnet_state.routes), node) { - PrintDebug("\nroute %d:\n", ++i); + PrintDebug("\nroute %d:\n", ++i); - print_route(route); + print_route(route); } PrintDebug("\n========Dump routes end ============\n"); } @@ -467,7 +467,7 @@ int v3_vnet_send_pkt(struct v3_vnet_pkt * pkt, void * private_data) { return 0; } -int v3_vnet_add_dev(struct v3_vm_info *vm, uint8_t mac[6], +int v3_vnet_add_dev(struct v3_vm_info * vm, uint8_t mac[6], struct v3_vnet_dev_ops *ops, void * priv_data){ struct vnet_dev * new_dev = NULL;