2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2010, Lei Xia <lxia@northwestern.edu>
11 * Copyright (c) 2009, Yuan Tang <ytang@northwestern.edu>
12 * Copyright (c) 2010, The V3VEE Project <http://www.v3vee.org>
13 * All rights reserved.
15 * Author: Lei Xia <lxia@northwestern.edu>
16 * Yuan Tang <ytang@northwestern.edu>
18 * This is free software. You are permitted to use,
19 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
25 #include <palacios/vmm.h>
32 #define LINK_INTERFACE 0
36 #define VNET_HASH_SIZE 17
37 #define ETHERNET_HEADER_LEN 14
38 #define ETHERNET_MTU 1500
39 #define ETHERNET_PACKET_LEN (ETHERNET_HEADER_LEN + ETHERNET_MTU)
42 #define GUEST_DRIVERN 0
44 #define HOST_LNX_BRIDGE 1
45 #define CTL_VM_BRIDGE 2
48 struct v3_vnet_route {
60 } __attribute__((packed));
70 * IMPORTANT The next three fields must be grouped and packed together
71 * They are used to generate a hash value
74 uint8_t hash_buf[VNET_HASH_SIZE];
78 uint8_t header[ETHERNET_HEADER_LEN];
80 } __attribute__((packed));
81 } __attribute__((packed));
82 } __attribute__((packed));
85 struct v3_vnet_dev_ops {
86 int (*input)(struct v3_vm_info * vm,
87 struct v3_vnet_pkt * pkt,
89 void (*poll) (struct v3_vm_info * vm, void * dev_data);
91 void (*start_tx)(void * dev_data);
92 void (*stop_tx)(void * dev_data);
95 struct v3_vnet_bridge_ops {
96 int (*input)(struct v3_vm_info * vm,
97 struct v3_vnet_pkt * pkt,
99 void (*poll)(struct v3_vm_info * vm,
100 void * private_data);
103 int v3_init_vnet(void);
104 void v3_deinit_vnet(void);
106 int v3_vnet_send_pkt(struct v3_vnet_pkt * pkt, void * private_data);
108 void v3_vnet_poll(struct v3_vm_info * vm);
110 int v3_vnet_add_route(struct v3_vnet_route route);
111 int v3_vnet_add_bridge(struct v3_vm_info * vm,
112 struct v3_vnet_bridge_ops * ops,
117 int v3_vnet_add_dev(struct v3_vm_info * info, uint8_t mac[6],
118 struct v3_vnet_dev_ops * ops,
120 int v3_vnet_del_dev(int dev_id);