diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2020-07-20 16:27:43 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2021-02-16 07:57:57 +0100 |
commit | b439984641edaf4e781dc424d4c8a574461d3540 (patch) | |
tree | ecdd49d889bc5e566e59c390e58ade3804d0a7f4 /merd.h | |
parent | fa2d20908d061fc7a4c56e793487da861af58aca (diff) | |
download | passt-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.h | 47 |
1 files changed, 47 insertions, 0 deletions
@@ -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]; +}; |