Currently port_fwd.[ch] contains helpers related to port forwarding, particular automatic port forwarding. We're planning to allow much more flexible sorts of forwarding, including both port translation and NAT based on the flow table. This will subsume the existing port forwarding logic, so rename port_fwd.[ch] to fwd.[ch] with matching updates to all the names within. Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au> # Conflicts: # Makefile --- Makefile | 12 ++++++------ conf.c | 8 ++++---- port_fwd.c => fwd.c | 32 ++++++++++++++++---------------- port_fwd.h => fwd.h | 24 ++++++++++++------------ passt.h | 2 +- tcp.c | 4 ++-- tcp.h | 4 ++-- udp.c | 10 +++++----- udp.h | 10 +++++----- 9 files changed, 53 insertions(+), 53 deletions(-) rename port_fwd.c => fwd.c (83%) rename port_fwd.h => fwd.h (62%) diff --git a/Makefile b/Makefile index 1c709229..04c62f9d 100644 --- a/Makefile +++ b/Makefile @@ -44,9 +44,9 @@ FLAGS += -DARCH=\"$(TARGET_ARCH)\" FLAGS += -DVERSION=\"$(VERSION)\" FLAGS += -DDUAL_STACK_SOCKETS=$(DUAL_STACK_SOCKETS) -PASST_SRCS = arch.c arp.c checksum.c conf.c dhcp.c dhcpv6.c flow.c icmp.c \ - igmp.c inany.c isolation.c lineread.c log.c mld.c ndp.c netlink.c \ - packet.c passt.c pasta.c pcap.c pif.c port_fwd.c tap.c tcp.c \ +PASST_SRCS = arch.c arp.c checksum.c conf.c dhcp.c dhcpv6.c flow.c fwd.c \ + icmp.c igmp.c inany.c isolation.c lineread.c log.c mld.c ndp.c \ + netlink.c packet.c passt.c pasta.c pcap.c pif.c tap.c tcp.c \ tcp_splice.c udp.c util.c QRAP_SRCS = qrap.c SRCS = $(PASST_SRCS) $(QRAP_SRCS) @@ -54,9 +54,9 @@ SRCS = $(PASST_SRCS) $(QRAP_SRCS) MANPAGES = passt.1 pasta.1 qrap.1 PASST_HEADERS = arch.h arp.h checksum.h conf.h dhcp.h dhcpv6.h flow.h \ - flow_table.h icmp.h inany.h isolation.h lineread.h log.h ndp.h \ - netlink.h packet.h passt.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 + flow_table.h fwd.h icmp.h inany.h isolation.h lineread.h log.h ndp.h \ + netlink.h packet.h passt.h pasta.h pcap.h pif.h siphash.h tap.h tcp.h \ + tcp_conn.h tcp_splice.h udp.h util.h HEADERS = $(PASST_HEADERS) seccomp.h C := \#include <linux/tcp.h>\nstruct tcp_info x = { .tcpi_snd_wnd = 0 }; diff --git a/conf.c b/conf.c index 5e15b665..7ae8fc9c 100644 --- a/conf.c +++ b/conf.c @@ -109,10 +109,10 @@ static int parse_port_range(const char *s, char **endptr, * @c: Execution context * @optname: Short option name, t, T, u, or U * @optarg: Option argument (port specification) - * @fwd: Pointer to @port_fwd to be updated + * @fwd: Pointer to @fwd_ports to be updated */ static void conf_ports(const struct ctx *c, char optname, const char *optarg, - struct port_fwd *fwd) + struct fwd_ports *fwd) { char addr_buf[sizeof(struct in6_addr)] = { 0 }, *addr = addr_buf; char buf[BUFSIZ], *spec, *ifname = NULL, *p; @@ -1172,7 +1172,7 @@ void conf(struct ctx *c, int argc, char **argv) }; char userns[PATH_MAX] = { 0 }, netns[PATH_MAX] = { 0 }; bool copy_addrs_opt = false, copy_routes_opt = false; - enum port_fwd_mode fwd_default = FWD_NONE; + enum fwd_ports_mode fwd_default = FWD_NONE; bool v4_only = false, v6_only = false; struct in6_addr *dns6 = c->ip6.dns; struct fqdn *dnss = c->dns_search; @@ -1750,7 +1750,7 @@ void conf(struct ctx *c, int argc, char **argv) if (!c->udp.fwd_out.f.mode) c->udp.fwd_out.f.mode = fwd_default; - port_fwd_init(c); + fwd_scan_ports_init(c); if (!c->quiet) conf_print(c); diff --git a/port_fwd.c b/fwd.c similarity index 83% rename from port_fwd.c rename to fwd.c index a7121fe2..09650b26 100644 --- a/port_fwd.c +++ b/fwd.c @@ -6,7 +6,7 @@ * PASTA - Pack A Subtle Tap Abstraction * for network namespace/tap device mode * - * port_fwd.c - Port forwarding helpers + * fwd.c - Port forwarding helpers * * Copyright Red Hat * Author: Stefano Brivio <sbrivio(a)redhat.com> @@ -21,7 +21,7 @@ #include <stdio.h> #include "util.h" -#include "port_fwd.h" +#include "fwd.h" #include "passt.h" #include "lineread.h" @@ -73,11 +73,11 @@ static void procfs_scan_listen(int fd, unsigned int lstate, } /** - * port_fwd_scan_tcp() - Scan /proc to update TCP forwarding map + * fwd_scan_ports_tcp() - Scan /proc to update TCP forwarding map * @fwd: Forwarding information to update * @rev: Forwarding information for the reverse direction */ -void port_fwd_scan_tcp(struct port_fwd *fwd, const struct port_fwd *rev) +void fwd_scan_ports_tcp(struct fwd_ports *fwd, const struct fwd_ports *rev) { memset(fwd->map, 0, PORT_BITMAP_SIZE); procfs_scan_listen(fwd->scan4, TCP_LISTEN, fwd->map, rev->map); @@ -85,15 +85,15 @@ void port_fwd_scan_tcp(struct port_fwd *fwd, const struct port_fwd *rev) } /** - * port_fwd_scan_udp() - Scan /proc to update UDP forwarding map + * fwd_scan_ports_udp() - Scan /proc to update UDP forwarding map * @fwd: Forwarding information to update * @rev: Forwarding information for the reverse direction * @tcp_fwd: Corresponding TCP forwarding information * @tcp_rev: TCP forwarding information for the reverse direction */ -void port_fwd_scan_udp(struct port_fwd *fwd, const struct port_fwd *rev, - const struct port_fwd *tcp_fwd, - const struct port_fwd *tcp_rev) +void fwd_scan_ports_udp(struct fwd_ports *fwd, const struct fwd_ports *rev, + const struct fwd_ports *tcp_fwd, + const struct fwd_ports *tcp_rev) { uint8_t exclude[PORT_BITMAP_SIZE]; @@ -118,10 +118,10 @@ void port_fwd_scan_udp(struct port_fwd *fwd, const struct port_fwd *rev, } /** - * port_fwd_init() - Initial setup for port forwarding + * fwd_scan_ports_init() - Initial setup for automatic port forwarding * @c: Execution context */ -void port_fwd_init(struct ctx *c) +void fwd_scan_ports_init(struct ctx *c) { const int flags = O_RDONLY | O_CLOEXEC; @@ -133,23 +133,23 @@ void port_fwd_init(struct ctx *c) if (c->tcp.fwd_in.mode == FWD_AUTO) { c->tcp.fwd_in.scan4 = open_in_ns(c, "/proc/net/tcp", flags); c->tcp.fwd_in.scan6 = open_in_ns(c, "/proc/net/tcp6", flags); - port_fwd_scan_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); + fwd_scan_ports_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); } if (c->udp.fwd_in.f.mode == FWD_AUTO) { c->udp.fwd_in.f.scan4 = open_in_ns(c, "/proc/net/udp", flags); c->udp.fwd_in.f.scan6 = open_in_ns(c, "/proc/net/udp6", flags); - port_fwd_scan_udp(&c->udp.fwd_in.f, &c->udp.fwd_out.f, - &c->tcp.fwd_in, &c->tcp.fwd_out); + fwd_scan_ports_udp(&c->udp.fwd_in.f, &c->udp.fwd_out.f, + &c->tcp.fwd_in, &c->tcp.fwd_out); } if (c->tcp.fwd_out.mode == FWD_AUTO) { c->tcp.fwd_out.scan4 = open("/proc/net/tcp", flags); c->tcp.fwd_out.scan6 = open("/proc/net/tcp6", flags); - port_fwd_scan_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); + fwd_scan_ports_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); } if (c->udp.fwd_out.f.mode == FWD_AUTO) { c->udp.fwd_out.f.scan4 = open("/proc/net/udp", flags); c->udp.fwd_out.f.scan6 = open("/proc/net/udp6", flags); - port_fwd_scan_udp(&c->udp.fwd_out.f, &c->udp.fwd_in.f, - &c->tcp.fwd_out, &c->tcp.fwd_in); + fwd_scan_ports_udp(&c->udp.fwd_out.f, &c->udp.fwd_in.f, + &c->tcp.fwd_out, &c->tcp.fwd_in); } } diff --git a/port_fwd.h b/fwd.h similarity index 62% rename from port_fwd.h rename to fwd.h index f6bf1b53..23281d90 100644 --- a/port_fwd.h +++ b/fwd.h @@ -4,13 +4,13 @@ * Author: David Gibson <david(a)gibson.dropbear.id.au> */ -#ifndef PORT_FWD_H -#define PORT_FWD_H +#ifndef FWD_H +#define FWD_H /* Number of ports for both TCP and UDP */ #define NUM_PORTS (1U << 16) -enum port_fwd_mode { +enum fwd_ports_mode { FWD_SPEC = 1, FWD_NONE, FWD_AUTO, @@ -20,25 +20,25 @@ enum port_fwd_mode { #define PORT_BITMAP_SIZE DIV_ROUND_UP(NUM_PORTS, 8) /** - * port_fwd - Describes port forwarding for one protocol and direction + * fwd_ports - Describes port forwarding for one protocol and direction * @mode: Overall forwarding mode (all, none, auto, specific ports) * @scan4: /proc/net fd to scan for IPv4 ports when in AUTO mode * @scan6: /proc/net fd to scan for IPv6 ports when in AUTO mode * @map: Bitmap describing which ports are forwarded * @delta: Offset between the original destination and mapped port number */ -struct port_fwd { - enum port_fwd_mode mode; +struct fwd_ports { + enum fwd_ports_mode mode; int scan4; int scan6; uint8_t map[PORT_BITMAP_SIZE]; in_port_t delta[NUM_PORTS]; }; -void port_fwd_scan_tcp(struct port_fwd *fwd, const struct port_fwd *rev); -void port_fwd_scan_udp(struct port_fwd *fwd, const struct port_fwd *rev, - const struct port_fwd *tcp_fwd, - const struct port_fwd *tcp_rev); -void port_fwd_init(struct ctx *c); +void fwd_scan_ports_tcp(struct fwd_ports *fwd, const struct fwd_ports *rev); +void fwd_scan_ports_udp(struct fwd_ports *fwd, const struct fwd_ports *rev, + const struct fwd_ports *tcp_fwd, + const struct fwd_ports *tcp_rev); +void fwd_scan_ports_init(struct ctx *c); -#endif /* PORT_FWD_H */ +#endif /* FWD_H */ diff --git a/passt.h b/passt.h index a9e8f15a..21a2e4f4 100644 --- a/passt.h +++ b/passt.h @@ -39,7 +39,7 @@ union epoll_ref; #include "packet.h" #include "flow.h" #include "icmp.h" -#include "port_fwd.h" +#include "fwd.h" #include "tcp.h" #include "udp.h" diff --git a/tcp.c b/tcp.c index 236a8d23..18298128 100644 --- a/tcp.c +++ b/tcp.c @@ -3216,12 +3216,12 @@ void tcp_timer(struct ctx *c, const struct timespec *now) if (c->mode == MODE_PASTA) { if (c->tcp.fwd_out.mode == FWD_AUTO) { - port_fwd_scan_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); + fwd_scan_ports_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); NS_CALL(tcp_port_rebind_outbound, c); } if (c->tcp.fwd_in.mode == FWD_AUTO) { - port_fwd_scan_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); + fwd_scan_ports_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); tcp_port_rebind(c, false); } } diff --git a/tcp.h b/tcp.h index 5e6756d4..a9b8bf87 100644 --- a/tcp.h +++ b/tcp.h @@ -59,8 +59,8 @@ union tcp_listen_epoll_ref { * @pipe_size: Size of pipes for spliced connections */ struct tcp_ctx { - struct port_fwd fwd_in; - struct port_fwd fwd_out; + struct fwd_ports fwd_in; + struct fwd_ports fwd_out; struct timespec timer_run; #ifdef HAS_SND_WND int kernel_snd_wnd; diff --git a/udp.c b/udp.c index f5b86568..dc2022ac 100644 --- a/udp.c +++ b/udp.c @@ -259,7 +259,7 @@ void udp_portmap_clear(void) * udp_invert_portmap() - Compute reverse port translations for return packets * @fwd: Port forwarding configuration to compute reverse map for */ -static void udp_invert_portmap(struct udp_port_fwd *fwd) +static void udp_invert_portmap(struct udp_fwd_ports *fwd) { int i; @@ -1261,14 +1261,14 @@ void udp_timer(struct ctx *c, const struct timespec *now) if (c->mode == MODE_PASTA) { if (c->udp.fwd_out.f.mode == FWD_AUTO) { - port_fwd_scan_udp(&c->udp.fwd_out.f, &c->udp.fwd_in.f, - &c->tcp.fwd_out, &c->tcp.fwd_in); + fwd_scan_ports_udp(&c->udp.fwd_out.f, &c->udp.fwd_in.f, + &c->tcp.fwd_out, &c->tcp.fwd_in); NS_CALL(udp_port_rebind_outbound, c); } if (c->udp.fwd_in.f.mode == FWD_AUTO) { - port_fwd_scan_udp(&c->udp.fwd_in.f, &c->udp.fwd_out.f, - &c->tcp.fwd_in, &c->tcp.fwd_out); + fwd_scan_ports_udp(&c->udp.fwd_in.f, &c->udp.fwd_out.f, + &c->tcp.fwd_in, &c->tcp.fwd_out); udp_port_rebind(c, false); } } diff --git a/udp.h b/udp.h index f3d5d6d2..9976b623 100644 --- a/udp.h +++ b/udp.h @@ -43,12 +43,12 @@ union udp_epoll_ref { /** - * udp_port_fwd - UDP specific port forwarding configuration + * udp_fwd_ports - UDP specific port forwarding configuration * @f: Generic forwarding configuration * @rdelta: Reversed delta map to translate source ports on return packets */ -struct udp_port_fwd { - struct port_fwd f; +struct udp_fwd_ports { + struct fwd_ports f; in_port_t rdelta[NUM_PORTS]; }; @@ -59,8 +59,8 @@ struct udp_port_fwd { * @timer_run: Timestamp of most recent timer run */ struct udp_ctx { - struct udp_port_fwd fwd_in; - struct udp_port_fwd fwd_out; + struct udp_fwd_ports fwd_in; + struct udp_fwd_ports fwd_out; struct timespec timer_run; }; -- 2.43.0