static int unpriv_assign_nic(const char *lxcpath, char *lxcname,
struct lxc_netdev *netdev, pid_t pid)
{
+ int ret;
pid_t child;
int bytes, pipefd[2];
char *token, *saveptr = NULL;
return -1;
}
+ /* fill netdev->veth_attr.pair field */
+ token = strtok_r(NULL, ":", &saveptr);
+ if (!token)
+ return -1;
+
+ ret = lxc_safe_int(token, &netdev->ifindex);
+ if (ret < 0) {
+ ERROR("Failed to parse ifindex for network device \"%s\"", netdev->name);
+ return -1;
+ }
+
return 0;
}
goto again;
}
-static char *lxc_secure_rename_in_ns(int pid, char *oldname, char *newname)
+static char *lxc_secure_rename_in_ns(int pid, char *oldname, char *newname,
+ int *ifidx)
{
int ret;
uid_t ruid, suid, euid;
/* Allocation failure for strdup() is checked below. */
name = strdup(ifname);
string_ret = name;
+ *ifidx = ifindex;
do_full_cleanup:
ret = setresuid(ruid, euid, suid);
int main(int argc, char *argv[])
{
- int fd, n, pid, ret;
+ int fd, ifindex, n, pid, ret;
char *me, *newname;
char *cnic = NULL, *nicname = NULL;
struct alloted_s *alloted = NULL;
}
/* Now rename the link. */
- newname = lxc_secure_rename_in_ns(pid, cnic, args.veth_name);
+ newname = lxc_secure_rename_in_ns(pid, cnic, args.veth_name, &ifindex);
if (!newname) {
usernic_error("%s", "Failed to rename the link\n");
ret = lxc_netdev_delete_by_name(cnic);
}
/* Write the name of the interface pair to the stdout: eth0:veth9MT2L4 */
- fprintf(stdout, "%s:%s\n", newname, nicname);
+ fprintf(stdout, "%s:%s:%d\n", newname, nicname, ifindex);
free(newname);
free(nicname);
exit(EXIT_SUCCESS);