aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-11-07 12:40:14 +1100
committerStefano Brivio <sbrivio@redhat.com>2023-11-07 09:53:38 +0100
commit125c5e52a5c963ead98b175c440314b4c9071143 (patch)
treef370685539af23aac80fdf26747d18632b89b5c4
parent0d73fa222534954af252a46ed5f7b6e95af21714 (diff)
downloadpasst-125c5e52a5c963ead98b175c440314b4c9071143.tar
passt-125c5e52a5c963ead98b175c440314b4c9071143.tar.gz
passt-125c5e52a5c963ead98b175c440314b4c9071143.tar.bz2
passt-125c5e52a5c963ead98b175c440314b4c9071143.tar.lz
passt-125c5e52a5c963ead98b175c440314b4c9071143.tar.xz
passt-125c5e52a5c963ead98b175c440314b4c9071143.tar.zst
passt-125c5e52a5c963ead98b175c440314b4c9071143.zip
pif: Introduce notion of passt/pasta interface
We have several possible ways of communicating with other entities. We use sockets to communicate with the host and other network sites, but also in a different context to communicate "spliced" channels to a namespace. We also use a tuntap device or a qemu socket to communicate with the namespace or guest. For the time being these are just defined implicitly by how we structure things. However, there are other communication channels we want to use in future (e.g. virtio-user), and we want to allow more flexible forwarding between those. To accomplish that we're going to want a specific way of referring to those channels. Introduce the concept of a "passt/pasta interface" or "pif" representing a specific channel to communicate network data. Each pif is assumed to be associated with a specific network namespace in the broad sense (that is as a place where IP addresses have a consistent meaning - not the Linux specific sense). But there could be multiple pifs communicating with the same namespace (e.g. the spliced and tap interfaces in pasta). Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--Makefile2
-rw-r--r--pif.h27
2 files changed, 28 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 0324fdd..55972b1 100644
--- a/Makefile
+++ b/Makefile
@@ -53,7 +53,7 @@ MANPAGES = passt.1 pasta.1 qrap.1
PASST_HEADERS = arch.h arp.h checksum.h conf.h dhcp.h dhcpv6.h icmp.h \
inany.h isolation.h lineread.h log.h ndp.h netlink.h packet.h passt.h \
- pasta.h pcap.h port_fwd.h siphash.h tap.h tcp.h tcp_conn.h \
+ pasta.h pcap.h pif.h port_fwd.h siphash.h tap.h tcp.h tcp_conn.h \
tcp_splice.h udp.h util.h
HEADERS = $(PASST_HEADERS) seccomp.h
diff --git a/pif.h b/pif.h
new file mode 100644
index 0000000..a705f2c
--- /dev/null
+++ b/pif.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright Red Hat
+ * Author: David Gibson <david@gibson.dropbear.id.au>
+ *
+ * Passt/pasta interface types and IDs
+ */
+#ifndef PIF_H
+#define PIF_H
+
+/**
+ * enum pif_type - Type of passt/pasta interface ("pif")
+ *
+ * pifs can be an L4 level channel (sockets) or an L2 level channel (tap device
+ * or qemu socket).
+ */
+enum pif_type {
+ /* Invalid or not present pif */
+ PIF_NONE = 0,
+ /* Host socket interface */
+ PIF_HOST,
+ /* Qemu socket or namespace tuntap interface */
+ PIF_TAP,
+ /* Namespace socket interface for splicing */
+ PIF_SPLICE,
+};
+
+#endif /* PIF_H */