@@ -43,21 +43,19 @@
{
ctx->es = c->es;
}
- ctx->gc = gc_new();
-
return 0;
}
void
net_ctx_reset(openvpn_net_ctx_t *ctx)
{
- gc_reset(&ctx->gc);
+ (void)ctx;
}
void
net_ctx_free(openvpn_net_ctx_t *ctx)
{
- gc_free(&ctx->gc);
+ (void)ctx;
}
int
@@ -147,13 +145,15 @@
net_addr_v4_add(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen)
{
struct argv argv = argv_new();
+ struct gc_arena gc = gc_new();
- const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc);
+ const char *addr_str = print_in_addr_t(*addr, 0, &gc);
argv_printf(&argv, "%s addr add dev %s %s/%d broadcast +", iproute_path, iface, addr_str, prefixlen);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip addr add failed");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -164,12 +164,15 @@
int prefixlen)
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+
+ char *addr_str = (char *)print_in6_addr(*addr, 0, &gc);
argv_printf(&argv, "%s -6 addr add %s/%d dev %s", iproute_path, addr_str, prefixlen, iface);
argv_msg(M_INFO, &argv);
openvpn_execve_check(&argv, ctx->es, S_FATAL, "Linux ip -6 addr add failed");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -179,13 +182,16 @@
net_addr_v4_del(openvpn_net_ctx_t *ctx, const char *iface, const in_addr_t *addr, int prefixlen)
{
struct argv argv = argv_new();
- const char *addr_str = print_in_addr_t(*addr, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+
+ const char *addr_str = print_in_addr_t(*addr, 0, &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");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -196,12 +202,15 @@
int prefixlen)
{
struct argv argv = argv_new();
- char *addr_str = (char *)print_in6_addr(*addr, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+
+ char *addr_str = (char *)print_in6_addr(*addr, 0, &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");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -212,14 +221,16 @@
const in_addr_t *remote)
{
struct argv argv = argv_new();
- const char *local_str = print_in_addr_t(*local, 0, &ctx->gc);
- const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ const char *local_str = print_in_addr_t(*local, 0, &gc);
+ const char *remote_str = print_in_addr_t(*remote, 0, &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");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -230,14 +241,16 @@
const in_addr_t *remote)
{
struct argv argv = argv_new();
- const char *local_str = print_in_addr_t(*local, 0, &ctx->gc);
- const char *remote_str = print_in_addr_t(*remote, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ const char *local_str = print_in_addr_t(*local, 0, &gc);
+ const char *remote_str = print_in_addr_t(*remote, 0, &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");
+ gc_free(&gc);
argv_free(&argv);
return 0;
@@ -248,7 +261,8 @@
const char *iface, uint32_t table, int metric)
{
struct argv argv = argv_new();
- const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ const char *dst_str = print_in_addr_t(*dst, 0, &gc);
int ret = 0;
argv_printf(&argv, "%s route add %s/%d", iproute_path, dst_str, prefixlen);
@@ -265,7 +279,7 @@
if (gw)
{
- const char *gw_str = print_in_addr_t(*gw, 0, &ctx->gc);
+ const char *gw_str = print_in_addr_t(*gw, 0, &gc);
argv_printf_cat(&argv, "via %s", gw_str);
}
@@ -276,6 +290,7 @@
ret = -1;
}
+ gc_free(&gc);
argv_free(&argv);
return ret;
@@ -286,14 +301,15 @@
const struct in6_addr *gw, const char *iface, uint32_t table, int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ char *dst_str = (char *)print_in6_addr(*dst, 0, &gc);
int ret = 0;
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, &ctx->gc);
+ char *gw_str = (char *)print_in6_addr(*gw, 0, &gc);
argv_printf_cat(&argv, "via %s", gw_str);
}
@@ -309,6 +325,7 @@
ret = -1;
}
+ gc_free(&gc);
argv_free(&argv);
return ret;
@@ -319,7 +336,8 @@
const char *iface, uint32_t table, int metric)
{
struct argv argv = argv_new();
- const char *dst_str = print_in_addr_t(*dst, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ const char *dst_str = print_in_addr_t(*dst, 0, &gc);
int ret = 0;
argv_printf(&argv, "%s route del %s/%d", iproute_path, dst_str, prefixlen);
@@ -335,6 +353,7 @@
ret = -1;
}
+ gc_free(&gc);
argv_free(&argv);
return ret;
@@ -345,14 +364,15 @@
const struct in6_addr *gw, const char *iface, uint32_t table, int metric)
{
struct argv argv = argv_new();
- char *dst_str = (char *)print_in6_addr(*dst, 0, &ctx->gc);
+ struct gc_arena gc = gc_new();
+ char *dst_str = (char *)print_in6_addr(*dst, 0, &gc);
int ret = 0;
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, &ctx->gc);
+ char *gw_str = (char *)print_in6_addr(*gw, 0, &gc);
argv_printf_cat(&argv, "via %s", gw_str);
}
@@ -368,6 +388,7 @@
ret = -1;
}
+ gc_free(&gc);
argv_free(&argv);
return ret;
@@ -28,7 +28,6 @@
struct openvpn_net_ctx
{
struct env_set *es;
- struct gc_arena gc;
};
typedef struct openvpn_net_ctx openvpn_net_ctx_t;