veth.c (24540535d33f72505807be3e7ef2e94f3726f971) veth.c (81adee47dfb608df3ad0b91d230fb3cef75f0060)
1/*
2 * drivers/net/veth.c
3 *
4 * Copyright (C) 2007 OpenVZ http://openvz.org, SWsoft Inc
5 *
6 * Author: Pavel Emelianov <xemul@openvz.org>
7 * Ethtool interface from: Eric W. Biederman <ebiederm@xmission.com>
8 *

--- 326 unchanged lines hidden (view full) ---

335 if (!is_valid_veth_mtu(nla_get_u32(tb[IFLA_MTU])))
336 return -EINVAL;
337 }
338 return 0;
339}
340
341static struct rtnl_link_ops veth_link_ops;
342
1/*
2 * drivers/net/veth.c
3 *
4 * Copyright (C) 2007 OpenVZ http://openvz.org, SWsoft Inc
5 *
6 * Author: Pavel Emelianov <xemul@openvz.org>
7 * Ethtool interface from: Eric W. Biederman <ebiederm@xmission.com>
8 *

--- 326 unchanged lines hidden (view full) ---

335 if (!is_valid_veth_mtu(nla_get_u32(tb[IFLA_MTU])))
336 return -EINVAL;
337 }
338 return 0;
339}
340
341static struct rtnl_link_ops veth_link_ops;
342
343static int veth_newlink(struct net_device *dev,
343static int veth_newlink(struct net *src_net, struct net_device *dev,
344 struct nlattr *tb[], struct nlattr *data[])
345{
346 int err;
347 struct net_device *peer;
348 struct veth_priv *priv;
349 char ifname[IFNAMSIZ];
350 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp;
344 struct nlattr *tb[], struct nlattr *data[])
345{
346 int err;
347 struct net_device *peer;
348 struct veth_priv *priv;
349 char ifname[IFNAMSIZ];
350 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp;
351 struct net *net;
351
352 /*
353 * create and register peer first
354 *
355 * struct ifinfomsg is at the head of VETH_INFO_PEER, but we
356 * skip it since no info from it is useful yet
357 */
358

--- 16 unchanged lines hidden (view full) ---

375 } else
376 tbp = tb;
377
378 if (tbp[IFLA_IFNAME])
379 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
380 else
381 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
382
352
353 /*
354 * create and register peer first
355 *
356 * struct ifinfomsg is at the head of VETH_INFO_PEER, but we
357 * skip it since no info from it is useful yet
358 */
359

--- 16 unchanged lines hidden (view full) ---

376 } else
377 tbp = tb;
378
379 if (tbp[IFLA_IFNAME])
380 nla_strlcpy(ifname, tbp[IFLA_IFNAME], IFNAMSIZ);
381 else
382 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
383
383 peer = rtnl_create_link(dev_net(dev), ifname, &veth_link_ops, tbp);
384 if (IS_ERR(peer))
384 net = rtnl_link_get_net(src_net, tbp);
385 if (IS_ERR(net))
386 return PTR_ERR(net);
387
388 peer = rtnl_create_link(src_net, net, ifname, &veth_link_ops, tbp);
389 if (IS_ERR(peer)) {
390 put_net(net);
385 return PTR_ERR(peer);
391 return PTR_ERR(peer);
392 }
386
387 if (tbp[IFLA_ADDRESS] == NULL)
388 random_ether_addr(peer->dev_addr);
389
390 err = register_netdevice(peer);
393
394 if (tbp[IFLA_ADDRESS] == NULL)
395 random_ether_addr(peer->dev_addr);
396
397 err = register_netdevice(peer);
398 put_net(net);
399 net = NULL;
391 if (err < 0)
392 goto err_register_peer;
393
394 netif_carrier_off(peer);
395
396 /*
397 * register dev last
398 *

--- 91 unchanged lines hidden ---
400 if (err < 0)
401 goto err_register_peer;
402
403 netif_carrier_off(peer);
404
405 /*
406 * register dev last
407 *

--- 91 unchanged lines hidden ---