summaryrefslogtreecommitdiffstats
path: root/LogReceiver/routemanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'LogReceiver/routemanager.cpp')
-rw-r--r--LogReceiver/routemanager.cpp49
1 files changed, 47 insertions, 2 deletions
diff --git a/LogReceiver/routemanager.cpp b/LogReceiver/routemanager.cpp
index 98ce2ad..ceb9b28 100644
--- a/LogReceiver/routemanager.cpp
+++ b/LogReceiver/routemanager.cpp
@@ -56,7 +56,7 @@ int routemanager::replaceDefaultRoute(QString ifname, QString gateway,
qDebug() << "---doRoute() gwaddr" << gwaddr;
if (!(gw = nl_addr_parse(gwaddr, af))) {
- printf("Invalid router address given: %s\n", gwaddr);
+ qDebug() << "Invalid router address given: %s\n", gwaddr;
return -1;
}
@@ -64,7 +64,7 @@ int routemanager::replaceDefaultRoute(QString ifname, QString gateway,
nl_connect(rtsock, NETLINK_ROUTE);
if ((cache = rtnl_link_alloc_cache(rtsock)) == NULL) {
- printf("error with link cache alloc \n");
+ qDebug() << "error with link cache alloc \n";
}
iface_idx = rtnl_link_name2i(cache, ifn);
@@ -88,6 +88,51 @@ int routemanager::replaceDefaultRoute(QString ifname, QString gateway,
return retval;
}
+int routemanager::bringInterfaceUpDown(QString ifname, bool up) {
+ struct nl_cache *cache;
+ struct nl_handle* rtsock;
+ struct rtnl_link* request = NULL;
+ struct rtnl_link* old = NULL;
+ int retval;
+
+ QByteArray ba_ifn = ifname.toAscii();
+ char * ifn = ba_ifn.data();
+
+ if(!(request = rtnl_link_alloc())) {
+ qDebug() << "error. couldn't allocate a rtnl link";
+ return -1;
+ }
+
+ rtsock = nl_handle_alloc();
+ nl_connect(rtsock, NETLINK_ROUTE);
+
+ if(up) {
+ rtnl_link_set_flags(request,IFF_UP);
+ } else {
+ rtnl_link_unset_flags(request, IFF_UP);
+ }
+
+ if ((cache = rtnl_link_alloc_cache(rtsock)) == NULL) {
+ qDebug() << "error with link cache alloc ";
+ }
+
+ old = rtnl_link_get_by_name(cache,ifn);
+ if (old) {
+ qDebug() << "change link";
+ rtnl_link_change(rtsock, old, request, 0);
+ } else {
+ qDebug() << "change failed";
+ }
+
+ retval = 0;
+
+ rtnl_link_put(old);
+ rtnl_link_put(request);
+ nl_handle_destroy(rtsock);
+
+ return retval;
+}
+
/**
* This method adds or deletes a route.
* This method adds or deletes a route. According to the action,