aboutgitcodebugslistschat
path: root/merd.h
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2020-07-20 16:27:43 +0200
committerStefano Brivio <sbrivio@redhat.com>2021-02-16 07:57:57 +0100
commitb439984641edaf4e781dc424d4c8a574461d3540 (patch)
treeecdd49d889bc5e566e59c390e58ade3804d0a7f4 /merd.h
parentfa2d20908d061fc7a4c56e793487da861af58aca (diff)
downloadpasst-b439984641edaf4e781dc424d4c8a574461d3540.tar
passt-b439984641edaf4e781dc424d4c8a574461d3540.tar.gz
passt-b439984641edaf4e781dc424d4c8a574461d3540.tar.bz2
passt-b439984641edaf4e781dc424d4c8a574461d3540.tar.lz
passt-b439984641edaf4e781dc424d4c8a574461d3540.tar.xz
passt-b439984641edaf4e781dc424d4c8a574461d3540.tar.zst
passt-b439984641edaf4e781dc424d4c8a574461d3540.zip
merd: ARP and DHCP handlers, connection tracking fixes
With this, merd provides a fully functional IPv4 environment to guests, requiring a single capability, CAP_NET_RAW. Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'merd.h')
-rw-r--r--merd.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/merd.h b/merd.h
new file mode 100644
index 0000000..78e3c0b
--- /dev/null
+++ b/merd.h
@@ -0,0 +1,47 @@
+#define CT_SIZE 4096
+#define UNIX_SOCK_PATH "/tmp/merd.socket"
+
+/**
+ * struct ct4 - IPv4 connection tracking entry
+ * @p: IANA protocol number
+ * @sa: Source address (as seen from tap interface)
+ * @da: Destination address
+ * @sp: Source port, network order
+ * @dp: Destination port, network order
+ * @hd: Destination MAC address
+ * @hs: Source MAC address
+ * @fd: File descriptor for corresponding AF_INET socket
+ */
+struct ct4 {
+ uint8_t p;
+ uint32_t sa;
+ uint32_t da;
+ uint16_t sp;
+ uint16_t dp;
+ unsigned char hd[ETH_ALEN];
+ unsigned char hs[ETH_ALEN];
+ int fd;
+};
+
+/**
+ * struct ctx - Execution context
+ * @epollfd: file descriptor for epoll instance
+ * @fd_unix: AF_UNIX socket for tap file descriptor
+ * @map4: Connection tracking table
+ * @addr4: IPv4 address for external, routable interface
+ * @mask4: IPv4 netmask, network order
+ * @gw4: Default IPv4 gateway, network order
+ * @dns4: IPv4 DNS address, network order
+ * @ifn: Name of routable interface
+ */
+struct ctx {
+ int epollfd;
+ int fd_unix;
+ struct ct4 map4[CT_SIZE];
+ unsigned char mac[ETH_ALEN];
+ unsigned long addr4;
+ unsigned long mask4;
+ unsigned long gw4;
+ unsigned long dns4;
+ char ifn[IF_NAMESIZE];
+};