]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
delete network devices by index
authorDaniel Lezcano <daniel.lezcano@free.fr>
Thu, 25 Feb 2010 09:24:12 +0000 (10:24 +0100)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Thu, 25 Feb 2010 09:24:12 +0000 (10:24 +0100)
Add a function to delete the network device by its index.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/network.c
src/lxc/network.h

index c56794be0223f7424914f1d5420a7422552dbcad..8a5861e50e1dfc206c75aca5715da4fa8ac52c48 100644 (file)
@@ -170,6 +170,42 @@ out:
        return err;
 }
 
+int lxc_device_delete_index(int ifindex)
+{
+       struct nl_handler nlh;
+       struct nlmsg *nlmsg = NULL, *answer = NULL;
+       struct link_req *link_req;
+       int err = -1;
+
+       if (netlink_open(&nlh, NETLINK_ROUTE))
+               return -1;
+
+       nlmsg = nlmsg_alloc(NLMSG_GOOD_SIZE);
+       if (!nlmsg)
+               goto out;
+
+       answer = nlmsg_alloc(NLMSG_GOOD_SIZE);
+       if (!answer)
+               goto out;
+
+       link_req = (struct link_req *)nlmsg;
+       link_req->ifinfomsg.ifi_family = AF_UNSPEC;
+       link_req->ifinfomsg.ifi_index = ifindex;
+       nlmsg->nlmsghdr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
+       nlmsg->nlmsghdr.nlmsg_flags = NLM_F_ACK|NLM_F_REQUEST;
+       nlmsg->nlmsghdr.nlmsg_type = RTM_DELLINK;
+
+       if (netlink_transaction(&nlh, nlmsg, answer))
+               goto out;
+
+       err = 0;
+out:
+       netlink_close(&nlh);
+       nlmsg_free(answer);
+       nlmsg_free(nlmsg);
+       return err;
+}
+
 static int device_set_flag(const char *name, int flag)
 {
        struct nl_handler nlh;
index 7bac5ee5ef4dadda4925bbc290d0330121f6eb2a..59f2a4180b4f59d7cd896bf66b91d0f68928900f 100644 (file)
@@ -38,6 +38,11 @@ extern int lxc_device_move(int ifindex, pid_t pid);
  */
 extern int lxc_device_delete(const char *name);
 
+/*
+ * Delete a network device by the index
+ */
+extern int lxc_device_delete_index(int ifindex);
+
 /*
  * Set the device network up
  */