aboutgitcodebugslistschat
diff options
context:
space:
mode:
-rw-r--r--fwd.c27
-rw-r--r--fwd.h4
-rw-r--r--tcp.c12
-rw-r--r--tcp.h2
-rw-r--r--udp.c14
-rw-r--r--udp.h2
6 files changed, 31 insertions, 30 deletions
diff --git a/fwd.c b/fwd.c
index 6e248fe..523097b 100644
--- a/fwd.c
+++ b/fwd.c
@@ -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);
}
/**
diff --git a/fwd.h b/fwd.h
index ec7bb3b..7792582 100644
--- a/fwd.h
+++ b/fwd.h
@@ -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);
diff --git a/tcp.c b/tcp.c
index fc1a261..c35c1c3 100644
--- a/tcp.c
+++ b/tcp.c
@@ -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);
- }
}
/**
diff --git a/tcp.h b/tcp.h
index 9cd736d..0082386 100644
--- a/tcp.h
+++ b/tcp.h
@@ -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);
diff --git a/udp.c b/udp.c
index d95ef2f..8cff880 100644
--- a/udp.c
+++ b/udp.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);
- }
}
/**
diff --git a/udp.h b/udp.h
index e3fb78b..f1d83f3 100644
--- a/udp.h
+++ b/udp.h
@@ -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);
/**