mirror_iproute2/ip/link_veth.c
Vlad Dogaru db02608b6f iproute2: support device group semantics
Add the group keyword to ip link set, which has the following meaning:
If both a group and a device name are pressent, we change the device's
group to the specified one. If only a group is present, then the
operation specified by the rest of the command should apply on an entire
group, not a single device.

So, to set eth0 to the default group, one would use
	ip link set dev eth0 group default

Conversely, to set all the devices in the default group down, use
	ip link set group default down

Signed-off-by: Vlad Dogaru <ddvlad@rosedu.org>
2011-02-25 12:43:14 -08:00

65 lines
1.4 KiB
C

/*
* link_veth.c veth driver module
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*
* Authors: Pavel Emelianov <xemul@openvz.org>
*
*/
#include <string.h>
#include <net/if.h>
#include <linux/veth.h>
#include "utils.h"
#include "ip_common.h"
static void usage(void)
{
printf("Usage: ip link <options> type veth "
"[peer <options>]\nTo get <options> type "
"'ip link add help'\n");
}
static int veth_parse_opt(struct link_util *lu, int argc, char **argv,
struct nlmsghdr *hdr)
{
char *name, *type, *link, *dev;
int err, len;
struct rtattr * data;
int group;
if (strcmp(argv[0], "peer") != 0) {
usage();
return -1;
}
data = NLMSG_TAIL(hdr);
addattr_l(hdr, 1024, VETH_INFO_PEER, NULL, 0);
hdr->nlmsg_len += sizeof(struct ifinfomsg);
err = iplink_parse(argc - 1, argv + 1, (struct iplink_req *)hdr,
&name, &type, &link, &dev, &group);
if (err < 0)
return err;
if (name) {
len = strlen(name) + 1;
if (len > IFNAMSIZ)
invarg("\"name\" too long\n", *argv);
addattr_l(hdr, 1024, IFLA_IFNAME, name, len);
}
data->rta_len = (void *)NLMSG_TAIL(hdr) - (void *)data;
return argc - 1 - err;
}
struct link_util veth_link_util = {
.id = "veth",
.parse_opt = veth_parse_opt,
};