ctx->es = NULL;
if (c)
ctx->es = c->es;
+ ctx->gc = gc_new();
return 0;
}
+void
+net_ctx_reset(openvpn_net_ctx_t *ctx)
+{
+ gc_reset(&ctx->gc);
+}
+
+void
+net_ctx_free(openvpn_net_ctx_t *ctx)
+{
+ gc_free(&ctx->gc);
+}
+
int
net_iface_up(openvpn_net_ctx_t *ctx, const char *iface, bool up)
{
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in_addr_t(*addr, 0, NULL);
- char *brd_str = (char *)print_in_addr_t(*broadcast, 0, NULL);
+ const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc);
+ const char *brd_str = print_in_addr_t(*broadcast, 0, &ctx->gc);
argv_printf(&argv, "%s addr add dev %s %s/%d broadcast %s", iproute_path,
iface, addr_str, prefixlen, brd_str);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed");
- free(addr_str);
- free(brd_str);
-
argv_reset(&argv);
return 0;
const struct in6_addr *addr, int prefixlen)
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in6_addr(*addr, 0, NULL);
+ char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc);
argv_printf(&argv, "%s -6 addr add %s/%d dev %s", iproute_path, addr_str,
prefixlen, iface);
openvpn_execve_check(&argv, ctx->es, S_FATAL,
"Linux ip -6 addr add failed");
- free(addr_str);
-
argv_reset(&argv);
return 0;
const in_addr_t *addr, int prefixlen)
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in_addr_t(*addr, 0, NULL);
+ const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc);
argv_printf(&argv, "%s addr del dev %s %s/%d", iproute_path, iface,
addr_str, prefixlen);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed");
- free(addr_str);
-
argv_reset(&argv);
return 0;
const struct in6_addr *addr, int prefixlen)
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in6_addr(*addr, 0, NULL);
+ char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc);
argv_printf(&argv, "%s -6 addr del %s/%d dev %s", iproute_path,
addr_str, prefixlen, iface);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "Linux ip -6 addr del failed");
- free(addr_str);
-
argv_reset(&argv);
return 0;
const in_addr_t *local, const in_addr_t *remote)
{
struct argv argv = argv_new();
- char *local_str = (char *)print_in_addr_t(*local, 0, NULL);
- char *remote_str = (char *)print_in_addr_t(*remote, 0, NULL);
+ const char *local_str = print_in_addr_t(*local, 0, &ctx->gc);
+ const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc);
argv_printf(&argv, "%s addr add dev %s local %s peer %s", iproute_path,
iface, local_str, remote_str);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed");
- free(local_str);
- free(remote_str);
-
argv_reset(&argv);
return 0;
const in_addr_t *local, const in_addr_t *remote)
{
struct argv argv = argv_new();
- char *local_str = (char *)print_in_addr_t(*local, 0, NULL);
- char *remote_str = (char *)print_in_addr_t(*remote, 0, NULL);
+ const char *local_str = print_in_addr_t(*local, 0, &ctx->gc);
+ const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc);
argv_printf(&argv, "%s addr del dev %s local %s peer %s", iproute_path,
iface, local_str, remote_str);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "Linux ip addr del failed");
- free(local_str);
- free(remote_str);
-
argv_reset(&argv);
return 0;
int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in_addr_t(*dst, 0, NULL);
+ const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc);
argv_printf(&argv, "%s route add %s/%d", iproute_path, dst_str, prefixlen);
if (gw)
{
- char *gw_str = (char *)print_in_addr_t(*gw, 0, NULL);
+ const char *gw_str = print_in_addr_t(*gw, 0, &ctx->gc);
argv_printf_cat(&argv, "via %s", gw_str);
-
- free(gw_str);
}
argv_msg(D_ROUTE, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "ERROR: Linux route add command failed");
- free(dst_str);
-
argv_reset(&argv);
return 0;
uint32_t table, int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in6_addr(*dst, 0, NULL);
+ char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc);
argv_printf(&argv, "%s -6 route add %s/%d dev %s", iproute_path, dst_str,
prefixlen, iface);
if (gw)
{
- char *gw_str = (char *)print_in6_addr(*gw, 0, NULL);
+ char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc);
argv_printf_cat(&argv, "via %s", gw_str);
-
- free(gw_str);
}
if (metric > 0)
argv_msg(D_ROUTE, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "ERROR: Linux route -6 add command failed");
- free(dst_str);
-
argv_reset(&argv);
return 0;
int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in_addr_t(*dst, 0, NULL);
+ const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc);
argv_printf(&argv, "%s route del %s/%d", iproute_path, dst_str, prefixlen);
argv_msg(D_ROUTE, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "ERROR: Linux route delete command failed");
- free(dst_str);
-
argv_reset(&argv);
return 0;
uint32_t table, int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in6_addr(*dst, 0, NULL);
+ char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc);
argv_printf(&argv, "%s -6 route del %s/%d dev %s", iproute_path, dst_str,
prefixlen, iface);
if (gw)
{
- char *gw_str = (char *)print_in6_addr(*gw, 0, NULL);
+ char *gw_str = (char *)print_in6_addr(*gw, 0, &ctx->gc);
argv_printf_cat(&argv, "via %s", gw_str);
-
- free(gw_str);
}
if (metric > 0)
argv_msg(D_ROUTE, &argv);
openvpn_execve_check(&argv, ctx->es, 0, "ERROR: Linux route -6 del command failed");
- free(dst_str);
-
argv_reset(&argv);
return 0;