diff options
| -rw-r--r-- | fwd.c | 27 | ||||
| -rw-r--r-- | fwd.h | 4 | ||||
| -rw-r--r-- | tcp.c | 12 | ||||
| -rw-r--r-- | tcp.h | 2 | ||||
| -rw-r--r-- | udp.c | 14 | ||||
| -rw-r--r-- | udp.h | 2 |
6 files changed, 31 insertions, 30 deletions
@@ -365,7 +365,8 @@ static void procfs_scan_listen(int fd, unsigned int lstate, * @fwd: Forwarding information to update * @rev: Forwarding information for the reverse direction */ -void fwd_scan_ports_tcp(struct fwd_ports *fwd, const struct fwd_ports *rev) +static 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); @@ -379,9 +380,10 @@ void fwd_scan_ports_tcp(struct fwd_ports *fwd, const struct fwd_ports *rev) * @tcp_fwd: Corresponding TCP forwarding information * @tcp_rev: TCP forwarding information for the reverse direction */ -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) +static 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]; @@ -460,10 +462,23 @@ void fwd_scan_ports_timer(struct ctx *c, const struct timespec *now) scan_ports_run = *now; + if (c->tcp.fwd_out.mode == FWD_AUTO) + fwd_scan_ports_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); + if (c->tcp.fwd_in.mode == FWD_AUTO) + fwd_scan_ports_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); + if (c->udp.fwd_out.mode == FWD_AUTO) { + fwd_scan_ports_udp(&c->udp.fwd_out, &c->udp.fwd_in, + &c->tcp.fwd_out, &c->tcp.fwd_in); + } + if (c->udp.fwd_in.mode == FWD_AUTO) { + fwd_scan_ports_udp(&c->udp.fwd_in, &c->udp.fwd_out, + &c->tcp.fwd_in, &c->tcp.fwd_out); + } + if (!c->no_tcp) - tcp_scan_ports(c); + tcp_port_rebind_all(c); if (!c->no_udp) - udp_scan_ports(c); + udp_port_rebind_all(c); } /** @@ -44,10 +44,6 @@ struct fwd_ports { #define FWD_PORT_SCAN_INTERVAL 1000 /* ms */ -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); void fwd_scan_ports_timer(struct ctx *c, const struct timespec *now); @@ -2884,22 +2884,18 @@ static int tcp_port_rebind_outbound(void *arg) } /** - * tcp_scan_ports() - Update forwarding maps based on scan of listening ports + * tcp_port_rebind_all() - Rebind ports to match forward maps (in host & ns) * @c: Execution context */ -void tcp_scan_ports(struct ctx *c) +void tcp_port_rebind_all(struct ctx *c) { ASSERT(c->mode == MODE_PASTA && !c->no_tcp); - if (c->tcp.fwd_out.mode == FWD_AUTO) { - fwd_scan_ports_tcp(&c->tcp.fwd_out, &c->tcp.fwd_in); + if (c->tcp.fwd_out.mode == FWD_AUTO) NS_CALL(tcp_port_rebind_outbound, c); - } - if (c->tcp.fwd_in.mode == FWD_AUTO) { - fwd_scan_ports_tcp(&c->tcp.fwd_in, &c->tcp.fwd_out); + if (c->tcp.fwd_in.mode == FWD_AUTO) tcp_port_rebind(c, false); - } } /** @@ -21,7 +21,7 @@ int tcp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, int tcp_sock_init(const struct ctx *c, const union inany_addr *addr, const char *ifname, in_port_t port); int tcp_init(struct ctx *c); -void tcp_scan_ports(struct ctx *c); +void tcp_port_rebind_all(struct ctx *c); void tcp_timer(const struct ctx *c, const struct timespec *now); void tcp_defer_handler(struct ctx *c); @@ -1252,24 +1252,18 @@ static int udp_port_rebind_outbound(void *arg) } /** - * udp_scan_ports() - Update forwarding maps based on scan of listening ports + * udp_port_rebind_all() - Rebind ports to match forward maps (in host & ns) * @c: Execution context */ -void udp_scan_ports(struct ctx *c) +void udp_port_rebind_all(struct ctx *c) { ASSERT(c->mode == MODE_PASTA && !c->no_udp); - if (c->udp.fwd_out.mode == FWD_AUTO) { - fwd_scan_ports_udp(&c->udp.fwd_out, &c->udp.fwd_in, - &c->tcp.fwd_out, &c->tcp.fwd_in); + if (c->udp.fwd_out.mode == FWD_AUTO) NS_CALL(udp_port_rebind_outbound, c); - } - if (c->udp.fwd_in.mode == FWD_AUTO) { - fwd_scan_ports_udp(&c->udp.fwd_in, &c->udp.fwd_out, - &c->tcp.fwd_in, &c->tcp.fwd_out); + if (c->udp.fwd_in.mode == FWD_AUTO) udp_port_rebind(c, false); - } } /** @@ -18,7 +18,7 @@ int udp_tap_handler(const struct ctx *c, uint8_t pif, int udp_sock_init(const struct ctx *c, int ns, const union inany_addr *addr, const char *ifname, in_port_t port); int udp_init(struct ctx *c); -void udp_scan_ports(struct ctx *c); +void udp_port_rebind_all(struct ctx *c); void udp_update_l2_buf(const unsigned char *eth_d); /** |
