Eric W. Biederman wrote: > Stephen it looks like you weren't cc'd on the latest version > of the veth support. So this patchset first reverts the old
He was. The latest version looks completely different from what is reversed in this patch. > version of the veth support you merged. Then merges a tested > version of the veth support. > > This reverts commit 4ed390ce43d1ec7c881721f312260df901d8390d. > > Conflicts: > > ip/ip.c > --- > ip/Makefile | 2 +- > ip/ip.c | 4 +- > ip/veth.c | 196 > ----------------------------------------------------------- > ip/veth.h | 17 ----- > 4 files changed, 2 insertions(+), 217 deletions(-) > delete mode 100644 ip/veth.c > delete mode 100644 ip/veth.h > > diff --git a/ip/Makefile b/ip/Makefile > index 209c5c8..9a5bfe3 100644 > --- a/ip/Makefile > +++ b/ip/Makefile > @@ -1,7 +1,7 @@ > IPOBJ=ip.o ipaddress.o iproute.o iprule.o \ > rtm_map.o iptunnel.o ip6tunnel.o tunnel.o ipneigh.o ipntable.o iplink.o \ > ipmaddr.o ipmonitor.o ipmroute.o ipprefix.o \ > - ipxfrm.o xfrm_state.o xfrm_policy.o xfrm_monitor.o veth.o > + ipxfrm.o xfrm_state.o xfrm_policy.o xfrm_monitor.o > > RTMONOBJ=rtmon.o > > diff --git a/ip/ip.c b/ip/ip.c > index 829fc64..4bdb83b 100644 > --- a/ip/ip.c > +++ b/ip/ip.c > @@ -27,7 +27,6 @@ > #include "SNAPSHOT.h" > #include "utils.h" > #include "ip_common.h" > -#include "veth.h" > > int preferred_family = AF_UNSPEC; > int show_stats = 0; > @@ -48,7 +47,7 @@ static void usage(void) > "Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }\n" > " ip [ -force ] [-batch filename\n" > "where OBJECT := { link | addr | route | rule | neigh | ntable | tunnel |\n" > -" maddr | mroute | monitor | xfrm | veth }\n" > +" maddr | mroute | monitor | xfrm }\n" > " OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] > |\n" > " -f[amily] { inet | inet6 | ipx | dnet | link } |\n" > " -o[neline] | -t[imestamp] }\n"); > @@ -78,7 +77,6 @@ static const struct cmd { > { "monitor", do_ipmonitor }, > { "xfrm", do_xfrm }, > { "mroute", do_multiroute }, > - { "veth", do_veth }, > { "help", do_help }, > { 0 } > }; > diff --git a/ip/veth.c b/ip/veth.c > deleted file mode 100644 > index d4eecc8..0000000 > --- a/ip/veth.c > +++ /dev/null > @@ -1,196 +0,0 @@ > -/* > - * veth.c "ethernet tunnel" > - * > - * 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, <[EMAIL PROTECTED]> > - * > - */ > - > -#include <stdio.h> > -#include <string.h> > -#include <unistd.h> > -#include <sys/types.h> > -#include <sys/socket.h> > -#include <linux/genetlink.h> > - > -#include "utils.h" > -#include "veth.h" > - > -#define GENLMSG_DATA(glh) ((void *)(NLMSG_DATA(glh) + GENL_HDRLEN)) > -#define NLA_DATA(na) ((void *)((char*)(na) + NLA_HDRLEN)) > - > -static int do_veth_help(void) > -{ > - fprintf(stderr, "Usage: ip veth add DEVICE PEER_NAME\n"); > - fprintf(stderr, " del DEVICE\n"); > - exit(-1); > -} > - > -static int genl_ctrl_resolve_family(const char *family) > -{ > - struct rtnl_handle rth; > - struct nlmsghdr *nlh; > - struct genlmsghdr *ghdr; > - int ret = 0; > - struct { > - struct nlmsghdr n; > - char buf[4096]; > - } req; > - > - memset(&req, 0, sizeof(req)); > - > - nlh = &req.n; > - nlh->nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN); > - nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; > - nlh->nlmsg_type = GENL_ID_CTRL; > - > - ghdr = NLMSG_DATA(&req.n); > - ghdr->cmd = CTRL_CMD_GETFAMILY; > - > - if (rtnl_open_byproto(&rth, 0, NETLINK_GENERIC) < 0) { > - fprintf(stderr, "Cannot open generic netlink socket\n"); > - exit(1); > - } > - > - addattr_l(nlh, 128, CTRL_ATTR_FAMILY_NAME, family, strlen(family) + 1); > - > - if (rtnl_talk(&rth, nlh, 0, 0, nlh, NULL, NULL) < 0) { > - fprintf(stderr, "Error talking to the kernel\n"); > - goto errout; > - } > - > - { > - struct rtattr *tb[CTRL_ATTR_MAX + 1]; > - struct genlmsghdr *ghdr = NLMSG_DATA(nlh); > - int len = nlh->nlmsg_len; > - struct rtattr *attrs; > - > - if (nlh->nlmsg_type != GENL_ID_CTRL) { > - fprintf(stderr, "Not a controller message, nlmsg_len=%d > " > - "nlmsg_type=0x%x\n", nlh->nlmsg_len, > nlh->nlmsg_type); > - goto errout; > - } > - > - if (ghdr->cmd != CTRL_CMD_NEWFAMILY) { > - fprintf(stderr, "Unkown controller command %d\n", > ghdr->cmd); > - goto errout; > - } > - > - len -= NLMSG_LENGTH(GENL_HDRLEN); > - > - if (len < 0) { > - fprintf(stderr, "wrong controller message len %d\n", > len); > - return -1; > - } > - > - attrs = (struct rtattr *) ((char *) ghdr + GENL_HDRLEN); > - parse_rtattr(tb, CTRL_ATTR_MAX, attrs, len); > - > - if (tb[CTRL_ATTR_FAMILY_ID] == NULL) { > - fprintf(stderr, "Missing family id TLV\n"); > - goto errout; > - } > - > - ret = *(__u16 *) RTA_DATA(tb[CTRL_ATTR_FAMILY_ID]); > - } > - > -errout: > - rtnl_close(&rth); > - return ret; > -} > - > -static int do_veth_operate(char *dev, char *peer, int cmd) > -{ > - struct rtnl_handle rth; > - struct nlmsghdr *nlh; > - struct genlmsghdr *ghdr; > - struct nlattr *attr; > - struct { > - struct nlmsghdr n; > - struct genlmsghdr h; > - char bug[1024]; > - } req; > - int family, len; > - int err = 0; > - > - family = genl_ctrl_resolve_family("veth"); > - if (family == 0) { > - fprintf(stderr, "veth: Can't resolve family\n"); > - exit(1); > - } > - > - if (rtnl_open_byproto(&rth, 0, NETLINK_GENERIC) < 0) > - exit(1); > - > - nlh = &req.n; > - nlh->nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN); > - nlh->nlmsg_flags = NLM_F_REQUEST; > - nlh->nlmsg_type = family; > - nlh->nlmsg_seq = 0; > - > - ghdr = &req.h; > - ghdr->cmd = cmd; > - > - attr = (struct nlattr *) GENLMSG_DATA(&req); > - len = strlen(dev); > - attr->nla_type = VETH_ATTR_DEVNAME; > - attr->nla_len = len + 1 + NLA_HDRLEN; > - memcpy(NLA_DATA(attr), dev, len); > - nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len); > - > - if (peer) { > - attr = (struct nlattr *)((char *)attr + > - NLMSG_ALIGN(attr->nla_len)); > - len = strlen(peer); > - attr->nla_type = VETH_ATTR_PEERNAME; > - attr->nla_len = len + 1 + NLA_HDRLEN; > - memcpy(NLA_DATA(attr), peer, len); > - nlh->nlmsg_len += NLMSG_ALIGN(attr->nla_len); > - } > - > - if (rtnl_send(&rth, (char *) &req, nlh->nlmsg_len) < 0) { > - err = -1; > - fprintf(stderr, "Error talking to the kernel (add)\n"); > - } > - > - rtnl_close(&rth); > - return err; > -} > - > -static int do_veth_add(int argc, char **argv) > -{ > - if (argc < 2) > - return do_veth_help(); > - > - return do_veth_operate(argv[0], argv[1], VETH_CMD_ADD); > -} > - > -static int do_veth_del(int argc, char **argv) > -{ > - char *name; > - > - if (argc < 1) > - return do_veth_help(); > - > - return do_veth_operate(argv[0], NULL, VETH_CMD_DEL); > -} > - > -int do_veth(int argc, char **argv) > -{ > - if (argc == 0) > - return do_veth_help(); > - > - if (strcmp(*argv, "add") == 0 || strcmp(*argv, "a") == 0) > - return do_veth_add(argc - 1, argv + 1); > - if (strcmp(*argv, "del") == 0 || strcmp(*argv, "d") == 0) > - return do_veth_del(argc - 1, argv + 1); > - if (strcmp(*argv, "help") == 0) > - return do_veth_help(); > - > - fprintf(stderr, "Command \"%s\" is unknown, try \"ip veth help\".\n", > *argv); > - exit(-1); > -} > diff --git a/ip/veth.h b/ip/veth.h > deleted file mode 100644 > index 4d7b357..0000000 > --- a/ip/veth.h > +++ /dev/null > @@ -1,17 +0,0 @@ > -int do_veth(int argc, char **argv); > - > -enum { > - VETH_CMD_UNSPEC, > - VETH_CMD_ADD, > - VETH_CMD_DEL, > - > - VETH_CMD_MAX > -}; > - > -enum { > - VETH_ATTR_UNSPEC, > - VETH_ATTR_DEVNAME, > - VETH_ATTR_PEERNAME, > - > - VETH_ATTR_MAX > -}; - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html