158
static int config_network_flags(const char *key, char *value, struct lxc_conf *lxc_conf)
160
struct lxc_list *networks = &lxc_conf->networks;
161
struct lxc_network *network;
162
struct lxc_netdev *netdev;
164
if (lxc_list_empty(networks)) {
165
ERROR("network is not created for '%s' option", value);
169
network = lxc_list_first_elem(networks);
171
ERROR("no network defined for '%s' option", value);
175
netdev = lxc_list_first_elem(&network->netdev);
137
static int config_ip_prefix(struct in_addr *addr)
139
if (IN_CLASSA(addr->s_addr))
140
return 32 - IN_CLASSA_NSHIFT;
141
if (IN_CLASSB(addr->s_addr))
142
return 32 - IN_CLASSB_NSHIFT;
143
if (IN_CLASSC(addr->s_addr))
144
return 32 - IN_CLASSC_NSHIFT;
149
static struct lxc_netdev *network_netdev(const char *key, const char *value,
150
struct lxc_list *network)
152
struct lxc_netdev *netdev;
154
if (lxc_list_empty(network)) {
155
ERROR("network is not created for '%s' = '%s' option",
160
netdev = lxc_list_first_elem(network);
162
ERROR("no network device defined for '%s' = '%s' option",
170
static int network_ifname(char **valuep, char *value)
172
if (strlen(value) > IFNAMSIZ) {
173
ERROR("invalid interface name: %s", value);
177
*valuep = strdup(value);
179
ERROR("failed to dup string '%s'", value);
186
static int config_network_flags(const char *key, char *value,
187
struct lxc_conf *lxc_conf)
189
struct lxc_netdev *netdev;
191
netdev = network_netdev(key, value, &lxc_conf->network);
176
195
netdev->flags |= IFF_UP;
180
static int config_network_link(const char *key, char *value, struct lxc_conf *lxc_conf)
182
struct lxc_list *networks = &lxc_conf->networks;
183
struct lxc_network *network;
184
struct lxc_netdev *netdev;
186
if (lxc_list_empty(networks)) {
187
ERROR("network is not created for %s", value);
191
network = lxc_list_first_elem(networks);
193
ERROR("no network defined for %s", value);
197
if (strlen(value) > IFNAMSIZ) {
198
ERROR("invalid interface name: %s", value);
202
netdev = lxc_list_first_elem(&network->netdev);
203
netdev->ifname = strdup(value);
207
static int config_network_name(const char *key, char *value, struct lxc_conf *lxc_conf)
209
struct lxc_list *networks = &lxc_conf->networks;
210
struct lxc_network *network;
211
struct lxc_netdev *netdev;
213
if (lxc_list_empty(networks)) {
214
ERROR("network is not created for %s", value);
218
network = lxc_list_first_elem(networks);
220
ERROR("no network defined for %s", value);
224
if (strlen(value) > IFNAMSIZ) {
225
ERROR("invalid interface name: %s", value);
229
netdev = lxc_list_first_elem(&network->netdev);
230
netdev->newname = strdup(value);
234
static int config_network_hwaddr(const char *key, char *value, struct lxc_conf *lxc_conf)
236
struct lxc_list *networks = &lxc_conf->networks;
237
struct lxc_network *network;
238
struct lxc_netdev *netdev;
240
if (lxc_list_empty(networks)) {
241
ERROR("network is not created for %s", value);
245
network = lxc_list_first_elem(networks);
247
ERROR("no network defined for %s", value);
251
netdev = lxc_list_first_elem(&network->netdev);
200
static int config_network_link(const char *key, char *value,
201
struct lxc_conf *lxc_conf)
203
struct lxc_netdev *netdev;
205
netdev = network_netdev(key, value, &lxc_conf->network);
209
return network_ifname(&netdev->link, value);
212
static int config_network_name(const char *key, char *value,
213
struct lxc_conf *lxc_conf)
215
struct lxc_netdev *netdev;
217
netdev = network_netdev(key, value, &lxc_conf->network);
221
return network_ifname(&netdev->name, value);
224
static int config_network_hwaddr(const char *key, char *value,
225
struct lxc_conf *lxc_conf)
227
struct lxc_netdev *netdev;
229
netdev = network_netdev(key, value, &lxc_conf->network);
252
233
netdev->hwaddr = strdup(value);
234
if (!netdev->hwaddr) {
235
SYSERROR("failed to dup string '%s'", value);
256
static int config_network_mtu(const char *key, char *value, struct lxc_conf *lxc_conf)
242
static int config_network_mtu(const char *key, char *value,
243
struct lxc_conf *lxc_conf)
258
struct lxc_list *networks = &lxc_conf->networks;
259
struct lxc_network *network;
260
245
struct lxc_netdev *netdev;
262
if (lxc_list_empty(networks)) {
263
ERROR("network is not created for %s", value);
267
network = lxc_list_first_elem(networks);
269
ERROR("no network defined for %s", value);
273
netdev = lxc_list_first_elem(&network->netdev);
247
netdev = network_netdev(key, value, &lxc_conf->network);
274
251
netdev->mtu = strdup(value);
253
SYSERROR("failed to dup string '%s'", value);
278
static int config_network_ipv4(const char *key, char *value, struct lxc_conf *lxc_conf)
260
static int config_network_ipv4(const char *key, char *value,
261
struct lxc_conf *lxc_conf)
280
struct lxc_list *networks = &lxc_conf->networks;
281
struct lxc_network *network;
263
struct lxc_netdev *netdev;
282
264
struct lxc_inetdev *inetdev;
283
struct lxc_netdev *netdev;
284
265
struct lxc_list *list;
285
266
char *cursor, *slash, *addr = NULL, *bcast = NULL, *prefix = NULL;
287
if (lxc_list_empty(networks)) {
288
ERROR("network is not created for '%s'", value);
292
network = lxc_list_first_elem(networks);
294
ERROR("no network defined for '%s'", value);
298
netdev = lxc_list_first_elem(&network->netdev);
300
ERROR("no netdev defined for '%s'", value);
268
netdev = network_netdev(key, value, &lxc_conf->network);
303
272
inetdev = malloc(sizeof(*inetdev));