From 41ff538fb43e7c5c64bc00eabc5d388179f4662a Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Sat, 22 Feb 2014 23:07:41 +0100 Subject: [PATCH] gtp-rtnl: add gtp_dev_destroy This function allows you to destroy the gtpX device. --- include/libgtpnl/gtpnl.h | 1 + src/gtp-rtnl.c | 18 ++++++++++++++++++ src/libgtpnl.map | 3 +++ 3 files changed, 22 insertions(+) diff --git a/include/libgtpnl/gtpnl.h b/include/libgtpnl/gtpnl.h index 1685a17..3c2c624 100644 --- a/include/libgtpnl/gtpnl.h +++ b/include/libgtpnl/gtpnl.h @@ -15,6 +15,7 @@ int genl_socket_talk(struct mnl_socket *nl, struct nlmsghdr *nlh, uint32_t seq, int genl_lookup_family(struct mnl_socket *nl, const char *family); int gtp_dev_create(const char *ifname); +int gtp_dev_destroy(const char *ifname); struct gtp_tunnel; diff --git a/src/gtp-rtnl.c b/src/gtp-rtnl.c index 72a2870..48dbdf0 100644 --- a/src/gtp-rtnl.c +++ b/src/gtp-rtnl.c @@ -98,3 +98,21 @@ int gtp_dev_create(const char *ifname) return gtp_dev_talk(nlh, seq); } EXPORT_SYMBOL(gtp_dev_create); + +int gtp_dev_destroy(const char *ifname) +{ + char buf[MNL_SOCKET_BUFFER_SIZE]; + struct nlmsghdr *nlh; + struct ifinfomsg *ifm; + unsigned int seq = time(NULL); + + nlh = gtp_put_nlmsg(buf, RTM_DELLINK, NLM_F_ACK, seq); + ifm = mnl_nlmsg_put_extra_header(nlh, sizeof(*ifm)); + ifm->ifi_family = AF_INET; + ifm->ifi_change |= IFF_UP; + ifm->ifi_flags &= ~IFF_UP; + ifm->ifi_index = if_nametoindex(ifname); + + return gtp_dev_talk(nlh, seq); +} +EXPORT_SYMBOL(gtp_dev_destroy); diff --git a/src/libgtpnl.map b/src/libgtpnl.map index b38785c..326bf17 100644 --- a/src/libgtpnl.map +++ b/src/libgtpnl.map @@ -4,7 +4,10 @@ global: genl_nlmsg_build_hdr; genl_socket_talk; genl_lookup_family; + gtp_dev_create; + gtp_dev_destroy; + gtp_add_tunnel; gtp_del_tunnel; gtp_list_tunnel;