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.


Update host dev and keyed stream user to reflect changes in ioctl define locations
[palacios.git] / linux_module / palacios-vnet-brg.c
index a45ead0..4efbb86 100644 (file)
@@ -1,22 +1,7 @@
-/*
- * This file is part of the Palacios Virtual Machine Monitor developed
- * by the V3VEE Project with funding from the United States National
- * Science Foundation and the Department of Energy.
- *
- * The V3VEE Project is a joint project between Northwestern University
- * and the University of New Mexico.  You can find out more at
- * http://www.v3vee.org
- *
- * Copyright (c) 2011, Lei Xia <lxia@northwestern.edu>
- * Copyright (c) 2011, The V3VEE Project <http://www.v3vee.org>
- * All rights reserved.
- *
- * This is free software.  You are permitted to use, redistribute,
- * and modify it under the terms of the GNU General Public License
- * Version 2 (GPLv2).  The accompanying COPYING file contains the
- * full text of the license.
- */
-/* Palacios VNET Host Bridge */
+/* 
+ * Palacios VNET Host Bridge
+ * (c) Lei Xia  2010
+ */ 
 
 #include <linux/spinlock.h>
 #include <linux/seq_file.h>
@@ -37,6 +22,7 @@
 #include <vnet/vnet.h>
 #include <vnet/vnet_hashtable.h>
 #include "palacios-vnet.h"
+#include "palacios.h"
 
 #define VNET_SERVER_PORT 9000
 
@@ -115,7 +101,7 @@ static void _delete_link(struct vnet_link * link){
     vnet_brg_s.num_links --;
     spin_unlock_irqrestore(&(vnet_brg_s.lock), flags);
 
-    printk("VNET Bridge: Link deleted, ip 0x%x, port: %d, idx: %d\n", 
+    INFO("VNET Bridge: Link deleted, ip 0x%x, port: %d, idx: %d\n", 
           link->dst_ip, 
           link->dst_port, 
           link->idx);
@@ -133,9 +119,9 @@ void vnet_brg_delete_link(uint32_t idx){
 }
 
 static void deinit_links_list(void){
-    struct vnet_link * link;
+    struct vnet_link * link, * tmp_link;
 
-    list_for_each_entry(link, &(vnet_brg_s.link_list), node) {
+    list_for_each_entry_safe(link, tmp_link, &(vnet_brg_s.link_list), node) {
        _delete_link(link);
     }
 }
@@ -154,12 +140,12 @@ static uint32_t _create_link(struct vnet_link * link) {
            break;
 
        default:
-           printk("Unsupported VNET Server Protocol\n");
+           WARNING("Unsupported VNET Server Protocol\n");
            return -1;
     }
    
     if ((err = sock_create(AF_INET, SOCK_DGRAM, protocol, &link->sock)) < 0) {
-       printk("Could not create socket for VNET Link, error %d\n", err);
+       WARNING("Could not create socket for VNET Link, error %d\n", err);
        return -1;
     }
 
@@ -170,7 +156,7 @@ static uint32_t _create_link(struct vnet_link * link) {
     link->sock_addr.sin_port = htons(link->dst_port);
 
     if ((err = link->sock->ops->connect(link->sock, (struct sockaddr *)&(link->sock_addr), sizeof(struct sockaddr), 0) < 0)) {
-       printk("Could not connect to remote VNET Server, error %d\n", err);
+       WARNING("Could not connect to remote VNET Server, error %d\n", err);
        return -1;
     }
 
@@ -181,7 +167,7 @@ static uint32_t _create_link(struct vnet_link * link) {
     vnet_htable_insert(vnet_brg_s.ip2link, (addr_t)&(link->dst_ip), (addr_t)link);
     spin_unlock_irqrestore(&(vnet_brg_s.lock), flags);
 
-    printk("VNET Bridge: Link created, ip 0x%x, port: %d, idx: %d, link: %p, protocol: %s\n", 
+    INFO("VNET Bridge: Link created, ip 0x%x, port: %d, idx: %d, link: %p, protocol: %s\n", 
           link->dst_ip, 
           link->dst_port, 
           link->idx, 
@@ -208,7 +194,7 @@ uint32_t vnet_brg_add_link(uint32_t ip, uint16_t port, vnet_brg_proto_t proto){
 
      idx = _create_link(new_link);
      if (idx < 0) {
-       printk("Could not create link\n");
+       WARNING("Could not create link\n");
        kfree(new_link);
        return -1;
      }
@@ -314,7 +300,7 @@ send_to_palacios(unsigned char * buf,
     pkt.data = buf;
 
     if(net_debug >= 2){
-       printk("VNET Lnx Bridge: send pkt to VNET core (size: %d, src_id: %d, src_type: %d)\n", 
+       DEBUG("VNET Lnx Bridge: send pkt to VNET core (size: %d, src_id: %d, src_type: %d)\n", 
                        pkt.size,  pkt.src_id, pkt.src_type);
        if(net_debug >= 4){
            print_hex_dump(NULL, "pkt_data: ", 0, 20, 20, pkt.data, pkt.size, 0);
@@ -323,7 +309,7 @@ send_to_palacios(unsigned char * buf,
 
     vnet_brg_s.stats.pkt_to_vmm ++;
 
-    return v3_vnet_send_pkt(&pkt, NULL, 1);
+    return v3_vnet_send_pkt(&pkt, NULL);
 }
 
 
@@ -335,7 +321,7 @@ bridge_send_pkt(struct v3_vm_info * vm,
     struct vnet_link * link;
 
     if(net_debug >= 2){
-       printk("VNET Lnx Host Bridge: packet received from VNET Core ... pkt size: %d, link: %d\n",
+       DEBUG("VNET Lnx Host Bridge: packet received from VNET Core ... pkt size: %d, link: %d\n",
                        pkt->size,
                        pkt->dst_id);
        if(net_debug >= 4){
@@ -357,13 +343,13 @@ bridge_send_pkt(struct v3_vm_info * vm,
                break;  
 
            default:
-               printk("VNET Server: Invalid Link Protocol\n");
+               WARNING("VNET Server: Invalid Link Protocol\n");
                vnet_brg_s.stats.pkt_drop_vmm ++;
        }
        link->stats.tx_bytes += pkt->size;
        link->stats.tx_pkts ++;
     } else {
-       printk("VNET Bridge Linux Host: wrong dst link, idx: %d, discards the packet\n", pkt->dst_id);
+       INFO("VNET Bridge Linux Host: wrong dst link, idx: %d, discards the packet\n", pkt->dst_id);
        vnet_brg_s.stats.pkt_drop_vmm ++;
     }
 
@@ -384,12 +370,12 @@ static int init_vnet_serv(void) {
            break;
 
        default:
-           printk("Unsupported VNET Server Protocol\n");
+           WARNING("Unsupported VNET Server Protocol\n");
            return -1;
     }
         
     if ((err = sock_create(AF_INET, SOCK_DGRAM, protocol, &vnet_brg_s.serv_sock)) < 0) {
-       printk("Could not create VNET server socket, error: %d\n", err);
+       WARNING("Could not create VNET server socket, error: %d\n", err);
        return -1;
     }
 
@@ -400,15 +386,15 @@ static int init_vnet_serv(void) {
     vnet_brg_s.serv_addr.sin_port = htons(VNET_SERVER_PORT);
 
     if ((err = vnet_brg_s.serv_sock->ops->bind(vnet_brg_s.serv_sock, (struct sockaddr *)&(vnet_brg_s.serv_addr), sizeof(struct sockaddr))) < 0) {
-       printk("Could not bind VNET server socket to port %d, error: %d\n", VNET_SERVER_PORT, err);
+       WARNING("Could not bind VNET server socket to port %d, error: %d\n", VNET_SERVER_PORT, err);
        return -1;
     }
 
-    printk("VNET server bind to port: %d\n", VNET_SERVER_PORT);
+    INFO("VNET server bind to port: %d\n", VNET_SERVER_PORT);
 
     if(vnet_brg_s.serv_proto == TCP){
        if((err = vnet_brg_s.serv_sock->ops->listen(vnet_brg_s.serv_sock, 32)) < 0){
-           printk("VNET Server error listening on port %d, error %d\n", VNET_SERVER_PORT, err);
+           WARNING("VNET Server error listening on port %d, error %d\n", VNET_SERVER_PORT, err);
            return -1;
        }
     }
@@ -422,20 +408,20 @@ static int _udp_server(void * arg) {
     struct vnet_link * link = NULL;
     int len;
 
-    printk("Palacios VNET Bridge: UDP receiving server ..... \n");
+    INFO("Palacios VNET Bridge: UDP receiving server ..... \n");
 
     pkt = kmalloc(MAX_PACKET_LEN, GFP_KERNEL);
     while (!kthread_should_stop()) {
        
        len = _udp_recv(vnet_brg_s.serv_sock, &pkt_addr, pkt, MAX_PACKET_LEN); 
        if(len < 0) {
-           printk("Receive error: Could not get packet, error %d\n", len);
+           WARNING("Receive error: Could not get packet, error %d\n", len);
            continue;
        }
 
        link = _link_by_ip(pkt_addr.sin_addr.s_addr);
        if (link == NULL){
-           printk("VNET Server: No VNET Link match the src IP\n");
+           WARNING("VNET Server: No VNET Link match the src IP\n");
            vnet_brg_s.stats.pkt_drop_phy ++;
            continue;
        }
@@ -462,7 +448,7 @@ static int _rx_server(void * arg) {
        //use select to receive pkt from physical network
        //or create new kthread to handle each connection?
     }else {
-       printk ("VNET Server: Unsupported Protocol\n");
+       WARNING ("VNET Server: Unsupported Protocol\n");
        return -1;
     }
 
@@ -495,25 +481,25 @@ int vnet_bridge_init(void) {
 
     vnet_brg_s.ip2link = vnet_create_htable(10, hash_fn, hash_eq);
     if(vnet_brg_s.ip2link == NULL){
-       printk("Failure to initiate VNET link hashtable\n");
+       WARNING("Failure to initiate VNET link hashtable\n");
        return -1;
     }
        
     if(init_vnet_serv() < 0){
-       printk("Failure to initiate VNET server\n");
+       WARNING("Failure to initiate VNET server\n");
        return -1;
     }
 
-    vnet_brg_s.serv_thread = kthread_run(_rx_server, NULL, "vnet-server");
+    vnet_brg_s.serv_thread = kthread_run(_rx_server, NULL, "vnet_brgd");
 
     bridge_ops.input = bridge_send_pkt;
     bridge_ops.poll = NULL;
        
     if( v3_vnet_add_bridge(NULL, &bridge_ops, HOST_LNX_BRIDGE, NULL) < 0){
-       printk("VNET LNX Bridge: Fails to register bridge to VNET core");
+       WARNING("VNET LNX Bridge: Fails to register bridge to VNET core");
     }
 
-    printk("VNET Linux Bridge initiated\n");
+    INFO("VNET Linux Bridge initiated\n");
 
     return 0;
 }