Hi Frank, Thank you for your feedback. I'll make the changes as per your suggestions and resubmit the patch later. My apologies for not realizing that you were using a formatting check tool. I installed Uncrustify, and it worked perfectly. :-)
I also wanted to ask about the automated tests on GitHub. Should I fork the project and submit the patch there, or should I submit it directly to the main project? What is the recommended approach? Looking forward to your guidance. Best regards, Rafael On Fri, Feb 21, 2025 at 8:58 AM Frank Lichtenheld <fr...@lichtenheld.com> wrote: > On Thu, Feb 20, 2025 at 04:48:27PM -0300, Rafael Gava wrote: > > I believe this feature will be beneficial for many OpenVPN users, > improving > > automation and simplifying VPN gateway configurations. Please find the > > patch inline for review and feedback. > > > > Thanks for your submission. Some general notes about the patch. > (Not a review of the actual change but more about the format of > submission) > > > ---- > > From fbc7045d652b5f11e2aa043aa2af9ca14f36b604 Mon Sep 17 00:00:00 2001 > > From: Rafael Gava <gava...@gmail.com> > > Date: Thu, 20 Feb 2025 19:19:39 +0000 > > Subject: [PATCH] Added the localhost token to the client-nat network > option, > > enabling the application to dynamically use the client IP provided by > the > > server. > > The subject line should be concise and make sense on its own. The rest > of the commit message should be the longer description. You can achieve > this > by adding an empty line after the first one. > > > Signed-off-by: Rafael Gava <gava...@gmail.com> > > --- > > src/openvpn/clinat.c | 47 +++++++++++++++++++++++++++++++++++++++---- > > src/openvpn/clinat.h | 3 +++ > > src/openvpn/init.c | 2 ++ > > src/openvpn/options.c | 1 + > > 4 files changed, 49 insertions(+), 4 deletions(-) > > > > diff --git a/src/openvpn/clinat.c b/src/openvpn/clinat.c > > index 2d3b359f..1c79b20d 100644 > > --- a/src/openvpn/clinat.c > > +++ b/src/openvpn/clinat.c > > @@ -127,12 +127,19 @@ add_client_nat_to_option_list(struct > > client_nat_option_list *dest, > > return; > > } > > > > - e.network = getaddr(0, network, 0, &ok, NULL); > > - if (!ok) > > + if (network && !strcmp(network, "localhost")) > > { > > - msg(msglevel, "client-nat: bad network: %s", network); > > - return; > > + msg (M_INFO, "*** client-nat localhost detected..."); > > + e.network = 0xFFFFFFFF; > > + } else { > > This is not in line with our usual formatting. We always format > like this > > } > else > { > > There is an uncrustify config in dev-tools/uncrustify.conf that can > help to check the formatting. Or you submit the patch in Github or > Gerrit which can do automated checks of the formatting. > > > + e.network = getaddr(0, network, 0, &ok, NULL); > > + if (!ok) > > + { > > + msg(msglevel, "client-nat: bad network: %s", network); > > + return; > > + } > > } > > + > > e.netmask = getaddr(0, netmask, 0, &ok, NULL); > > if (!ok) > > { > > @@ -274,3 +281,35 @@ client_nat_transform(const struct > > client_nat_option_list *list, > > } > > } > > } > > + > > +/* > > +* Replaces the localhost token with the IP received from OpenVPN > > +*/ > > +bool > > +update_localhost_nat(struct client_nat_option_list *dest, in_addr_t > > local_ip) > > +{ > > + int i; > > + bool ret = false; > > + > > + if (!dest) { > > + return ret; > > + } > > + > > + for (i=0; i <= dest->n; i++) > > + { > > + struct client_nat_entry *nat_entry = &dest->entries[i]; > > + if (nat_entry && nat_entry->network == 0xFFFFFFFF) > > + { > > + struct in_addr addr; > > + > > + nat_entry->network = ntohl(local_ip); > > + addr.s_addr = nat_entry->network; > > + char *dot_ip = inet_ntoa(addr); > > + > > + msg (M_INFO, "CNAT - Updating NAT table from localhost to: > > %s", dot_ip); > > + ret = true; > > + } > > + } > > + > > + return ret; > > +} > > diff --git a/src/openvpn/clinat.h b/src/openvpn/clinat.h > > index 94141f51..06afa3b4 100644 > > --- a/src/openvpn/clinat.h > > +++ b/src/openvpn/clinat.h > > @@ -64,4 +64,7 @@ void client_nat_transform(const struct > > client_nat_option_list *list, > > struct buffer *ipbuf, > > const int direction); > > > > +bool update_localhost_nat(struct client_nat_option_list *dest, in_addr_t > > local_ip); > > + > > + > > #endif /* if !defined(CLINAT_H) */ > > diff --git a/src/openvpn/init.c b/src/openvpn/init.c > > index b57e5f8a..dadc10dc 100644 > > --- a/src/openvpn/init.c > > +++ b/src/openvpn/init.c > > @@ -2052,6 +2052,8 @@ do_open_tun(struct context *c, int *error_flags) > > *error_flags |= (status ? 0 : ISC_ROUTE_ERRORS); > > } > > > > + update_localhost_nat(c->options.client_nat, > c->c1.tuntap->local); > > + > > ret = true; > > static_context = c; > > } > > diff --git a/src/openvpn/options.c b/src/openvpn/options.c > > index 6b2dfa58..f7161931 100644 > > --- a/src/openvpn/options.c > > +++ b/src/openvpn/options.c > > @@ -254,6 +254,7 @@ static const char usage_message[] = > > " (Server) Instead of forwarding IPv6 packets > send\n" > > " ICMPv6 host unreachable packets to the > client.\n" > > "--client-nat snat|dnat network netmask alias : on client add 1-to-1 > > NAT rule.\n" > > + " set the network to 'localhost' to use the client > ip > > received from the server.\n" > > Please also include an update to the documentation in > doc/man-sections/client-options.rst > > > "--push-peer-info : (client only) push client info to server.\n" > > "--setenv name value : Set a custom environmental variable to pass > to > > script.\n" > > "--setenv FORWARD_COMPATIBLE 1 : Relax config file syntax checking > to > > allow\n" > > -- > > 2.39.5 > > Regards, > -- > Frank Lichtenheld >
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel