Attention is currently required from: plaisthos.
Hello plaisthos,
I'd like you to do a code review.
Please visit
http://gerrit.openvpn.net/c/openvpn/+/1735?usp=email
to review the following change.
Change subject: init: create and destroy Linux DCO devices with --mktun/--rmtun
......................................................................
init: create and destroy Linux DCO devices with --mktun/--rmtun
When DCO is enabled on Linux, make --mktun create an ovpn interface
instead of falling back to a TUN device. Set the ovpn interface mode
from --mode, using MP for server mode and P2P otherwise. Handle --rmtun
in the same branch by deleting the ovpn interface through the networking
backend.
Users can still request the old userspace TUN behavior with
--disable-dco.
Change-Id: Ic8c83132a4de64f27e6453ddb90ebcf137500db2
Signed-off-by: Ralf Lici <[email protected]>
---
M src/openvpn/init.c
1 file changed, 32 insertions(+), 8 deletions(-)
git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/35/1735/1
diff --git a/src/openvpn/init.c b/src/openvpn/init.c
index caaa769..c71081f 100644
--- a/src/openvpn/init.c
+++ b/src/openvpn/init.c
@@ -1109,19 +1109,43 @@
}
#if defined(ENABLE_DCO)
- if (dco_enabled(options))
+ if (dco_enabled(options) && dev_type_enum(options->dev, options->dev_type)
== DEV_TYPE_TUN)
{
- /* creating a DCO interface via --mktun is not supported as it does not
- * make much sense. Since DCO is enabled by default, people may run
into
- * this without knowing, therefore this case should be properly
handled.
+#if defined(TARGET_LINUX)
+ if (options->persist_mode)
+ {
+ struct tuntap *tt;
+
+ ALLOC_OBJ_CLEAR(tt, struct tuntap);
+ tt->type = DEV_TYPE_TUN;
+ tt->backend_driver = DRIVER_DCO;
+ tt->dco.ifmode = options->mode == MODE_SERVER ? OVPN_MODE_MP :
OVPN_MODE_P2P;
+
+ open_tun(options->dev, options->dev_type, options->dev_node, tt,
ctx);
+ free(tt->actual_name);
+ free(tt);
+ msg(M_INFO, "Created DCO device %s in %s mode", options->dev,
options->mode == MODE_SERVER ? "server" : "p2p");
+ }
+ else
+ {
+ int ret = net_iface_del(ctx, options->dev);
+ if (ret < 0)
+ {
+ msg(M_FATAL, "Cannot remove DCO device %s: %s (%d)",
options->dev, strerror(-ret), ret);
+ }
+ msg(M_INFO, "Deleted DCO device %s", options->dev);
+ }
+ return true;
+#endif /* defined(TARGET_LINUX) */
+ /* creating a non-Linux DCO interface via --mktun is not supported as
it
+ * does not make much sense. Since DCO is enabled by default, people
may
+ * run into this without knowing, therefore this case should be
properly
+ * handled.
*
* Disable DCO if --mktun was provided and print a message to let
* user know.
*/
- if (dev_type_enum(options->dev, options->dev_type) == DEV_TYPE_TUN)
- {
- msg(M_WARN, "Note: --mktun does not support DCO. Creating TUN
interface.");
- }
+ msg(M_WARN, "Note: --mktun does not support DCO. Creating TUN
interface.");
options->disable_dco = true;
}
--
To view, visit http://gerrit.openvpn.net/c/openvpn/+/1735?usp=email
To unsubscribe, or for help writing mail filters, visit
http://gerrit.openvpn.net/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: Ic8c83132a4de64f27e6453ddb90ebcf137500db2
Gerrit-Change-Number: 1735
Gerrit-PatchSet: 1
Gerrit-Owner: ralf_lici <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel