| /* Copyright (c) 2016 Google Inc |
| * Barret Rhoden <brho@cs.berkeley.edu> |
| * See LICENSE for details. |
| * |
| * Networking for VMMs. */ |
| |
| #pragma once |
| |
| #include <sys/uio.h> |
| #include <vmm/vmm.h> |
| #include <vmm/virtio.h> |
| #include <vmm/virtio_net.h> |
| |
| /***** Global control variables */ |
| |
| /* Mirror virtio_net traffic to #srv/snoop-PID, default off. */ |
| extern bool vnet_snoop; |
| |
| /* Style of IP addressing, default off (qemu) |
| * |
| * For qemu-style networking: |
| * guest_ip = 10.0.2.15, mask = 255.255.255.0, router = 10.0.2.2. |
| * For real-addr networking: |
| * guest_ip = host_v4, mask = host_mask, router = host_router |
| * In either case, the guest sees the *real* DNS server. */ |
| extern bool vnet_real_ip_addrs; |
| |
| /* Have "notify 9" print NAT mappings to stderr. Default off. */ |
| extern bool vnet_map_diagnostics; |
| |
| /* Timeout controls when we drop NAT mappings. The value is a minimum, in |
| * seconds. Max is 2 * timeout. E[X] is 1.5 * timeout. Default 200.*/ |
| extern unsigned long vnet_nat_timeout; |
| |
| |
| /***** Functional interface */ |
| |
| /* Control variables must be set before calling vnet_init() */ |
| void vnet_init(struct virtual_machine *vm, struct virtio_vq_dev *vqdev); |
| void vnet_port_forward(char *protocol, char *host_port, char *guest_port); |
| |
| |
| /***** Glue between virtio and NAT */ |
| int vnet_transmit_packet(struct iovec *iov, int iovcnt); |
| int vnet_receive_packet(struct iovec *iov, int iovcnt); |