blob: 91c0a717ae448a49174f1bb93ea39886be85df03 [file] [log] [blame]
/* 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);