68
68
__FILE__, __LINE__, strerror(errno), ##__VA_ARGS__)
69
69
70
70
static const char * const namespaces [] = {NS_SRC , NS_FWD , NS_DST , NULL };
71
+ static struct netns_obj * netns_objs [3 ];
71
72
72
73
static int write_file (const char * path , const char * newval )
73
74
{
@@ -87,27 +88,41 @@ static int write_file(const char *path, const char *newval)
87
88
88
89
static int netns_setup_namespaces (const char * verb )
89
90
{
91
+ struct netns_obj * * ns_obj = netns_objs ;
90
92
const char * const * ns = namespaces ;
91
- char cmd [128 ];
92
93
93
94
while (* ns ) {
94
- snprintf (cmd , sizeof (cmd ), "ip netns %s %s" , verb , * ns );
95
- if (!ASSERT_OK (system (cmd ), cmd ))
96
- return -1 ;
95
+ if (strcmp (verb , "add" ) == 0 ) {
96
+ * ns_obj = netns_new (* ns , false);
97
+ if (!ASSERT_OK_PTR (* ns_obj , "netns_new" ))
98
+ return -1 ;
99
+ } else {
100
+ if (!ASSERT_OK_PTR (* ns_obj , "netns_obj is NULL" ))
101
+ return -1 ;
102
+ netns_free (* ns_obj );
103
+ * ns_obj = NULL ;
104
+ }
97
105
ns ++ ;
106
+ ns_obj ++ ;
98
107
}
99
108
return 0 ;
100
109
}
101
110
102
111
static void netns_setup_namespaces_nofail (const char * verb )
103
112
{
113
+ struct netns_obj * * ns_obj = netns_objs ;
104
114
const char * const * ns = namespaces ;
105
- char cmd [128 ];
106
115
107
116
while (* ns ) {
108
- snprintf (cmd , sizeof (cmd ), "ip netns %s %s > /dev/null 2>&1" , verb , * ns );
109
- system (cmd );
117
+ if (strcmp (verb , "add" ) == 0 ) {
118
+ * ns_obj = netns_new (* ns , false);
119
+ } else {
120
+ if (* ns_obj )
121
+ netns_free (* ns_obj );
122
+ * ns_obj = NULL ;
123
+ }
110
124
ns ++ ;
125
+ ns_obj ++ ;
111
126
}
112
127
}
113
128
0 commit comments