A couple of minor comments inline.
However this patch can't go in as-is, since it requires changes to the
library (network_status) which are presumably in the following patch.
Patches can build on each other, but they can't require elements of a
future patch. Can you refactor it please?
On Mon, Dec 6, 2010 at 8:23 PM, Adam Stokes <astokes(a)fedoraproject.org> wrote:
- Also removed any references to netcf
- Update network section of the schema to remove support for network
destroy/describe method
- Added 2 new methods to net schema
- get_ip_address
- get_mac_address
---
src/CMakeLists.txt | 7 ---
src/net/matahari-net.cpp | 100 ++++++++++++++++++++--------------------------
src/schema.xml | 14 +++----
3 files changed, 49 insertions(+), 72 deletions(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d026c9c..d2d5708 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -115,13 +115,6 @@ else(pcre_FOUND)
message(FATAL_ERROR "PCRE header/library not found.")
endif(pcre_FOUND)
-if(netcf_FOUND)
- target_link_libraries(${M_NET} ${netcf_LIBRARIES})
- include_directories(${netcf_INCLUDE_DIRS})
-else(netcf_FOUND)
- message(FATAL_ERROR "NETCF header/library not found.")
-endif(netcf_FOUND)
-
if(glib_FOUND)
include_directories(${glib_INCLUDE_DIRS})
foreach(daemon ${DAEMONS})
diff --git a/src/net/matahari-net.cpp b/src/net/matahari-net.cpp
index b9fa0cd..8faae03 100644
--- a/src/net/matahari-net.cpp
+++ b/src/net/matahari-net.cpp
@@ -1,4 +1,4 @@
-/* netagent.cpp - Copyright (C) 2010 Red Hat, Inc.
+/* matahari-net.cpp - Copyright (C) 2010 Red Hat, Inc.
* Written by Adam Stokes <astokes(a)fedoraproject.org>
*
* This program is free software; you can redistribute it and/or
@@ -27,14 +27,21 @@
#include "qmf/org/matahariproject/ArgsNetworkStop.h"
#include "qmf/org/matahariproject/ArgsNetworkStart.h"
#include "qmf/org/matahariproject/ArgsNetworkStatus.h"
-#include "qmf/org/matahariproject/ArgsNetworkDescribe.h"
-#include "qmf/org/matahariproject/ArgsNetworkDestroy.h"
+#include "qmf/org/matahariproject/ArgsNetworkGet_ip_address.h"
+#include "qmf/org/matahariproject/ArgsNetworkGet_mac_address.h"
+
+#include <qpid/agent/ManagementAgent.h>
extern "C" {
-#include <netcf.h>
#include <stdlib.h>
#include <string.h>
+#include <glib.h>
+#include <glib/gprintf.h>
#include "matahari/logging.h"
+#include "matahari/network.h"
+#include "matahari/host.h"
+#include <sigar.h>
+#include <sigar_format.h>
};
class NetAgent : public MatahariAgent
@@ -60,30 +67,23 @@ main(int argc, char **argv)
return rc;
}
-struct netcf *ncf;
-static int interface_status(struct netcf_if *nif)
+static int interface_status(const char *iface)
{
- unsigned int flags = 0;
- if(nif == NULL) {
+ uint64_t flags = 0;
+ if(iface == NULL)
return 3;
- } else if(ncf_if_status(nif, &flags) < 0) {
- return 4;
+ network_status(iface, &flags);
- } else if(flags & NETCF_IFACE_ACTIVE) {
+ if(flags & SIGAR_IFF_UP) {
return 0;
}
return 1; /* Inactive */
}
-
int
NetAgent::setup(ManagementAgent* agent)
{
- if (ncf_init(&ncf, NULL) < 0) {
- return -1;
- }
-
this->_agent = agent;
this->_management_object = new _qmf::Network(agent, this);
this->_management_object->set_hostname(get_hostname());
@@ -95,29 +95,19 @@ NetAgent::setup(ManagementAgent* agent)
Manageable::status_t
NetAgent::ManagementMethod(uint32_t method, Args& arguments, string& text)
{
- struct netcf_if *nif;
-
- if( ncf == NULL) {
- return Manageable::STATUS_NOT_IMPLEMENTED;
- }
-
switch(method)
{
case _qmf::Network::METHOD_LIST:
{
- _qmf::ArgsNetworkList& ioArgs = (_qmf::ArgsNetworkList&)
arguments;
- uint32_t lpc = 0;
- char **iface_list = NULL;
- ioArgs.o_max = ncf_num_of_interfaces(ncf,
NETCF_IFACE_ACTIVE|NETCF_IFACE_INACTIVE);
+ GList *list = NULL;
+ GList *plist;
+ sigar_net_interface_config_t *ifconfig;
I'd feel much more comfortable if pointers were always initialized to NULL.
- iface_list = (char**)calloc(ioArgs.o_max+1, sizeof(char*));
- if(ncf_list_interfaces(ncf, ioArgs.o_max, iface_list,
NETCF_IFACE_ACTIVE|NETCF_IFACE_INACTIVE) < 0) {
- ioArgs.o_max = 0;
- }
-
- for(lpc = 0; lpc < ioArgs.o_max; lpc++) {
- nif = ncf_lookup_by_name(ncf, iface_list[lpc]);
- ioArgs.o_iface_map.push_back(iface_list[lpc]);
+ _qmf::ArgsNetworkList& ioArgs = (_qmf::ArgsNetworkList&)
arguments;
+ list = network_get_interfaces();
a slightly more imaginary variable name might be better here :-)
+ for(plist = g_list_first(list); plist; plist =
g_list_next(plist)) {
+ ifconfig = (sigar_net_interface_config_t *)plist->data;
+ ioArgs.o_iface_map.push_back(ifconfig->name);
}
}
return Manageable::STATUS_OK;
@@ -125,11 +115,10 @@ NetAgent::ManagementMethod(uint32_t method, Args& arguments,
string& text)
case _qmf::Network::METHOD_START:
{
_qmf::ArgsNetworkStart& ioArgs = (_qmf::ArgsNetworkStart&)
arguments;
- nif = ncf_lookup_by_name(ncf, ioArgs.i_iface.c_str());
- ioArgs.o_status = interface_status(nif);
- if(ioArgs.o_status == 1) {
- ncf_if_up(nif);
- ioArgs.o_status = interface_status(nif);
+ ioArgs.o_status = interface_status(ioArgs.i_iface.c_str());
+ if((ioArgs.o_status) == 1) {
+ network_start(ioArgs.i_iface.c_str());
+ ioArgs.o_status = interface_status(ioArgs.i_iface.c_str());
}
}
return Manageable::STATUS_OK;
@@ -137,11 +126,10 @@ NetAgent::ManagementMethod(uint32_t method, Args& arguments,
string& text)
case _qmf::Network::METHOD_STOP:
{
_qmf::ArgsNetworkStop& ioArgs = (_qmf::ArgsNetworkStop&)
arguments;
- nif = ncf_lookup_by_name(ncf, ioArgs.i_iface.c_str());
- ioArgs.o_status = interface_status(nif);
+ ioArgs.o_status = interface_status(ioArgs.i_iface.c_str());
if(ioArgs.o_status == 0) {
- ncf_if_down(nif);
- ioArgs.o_status = interface_status(nif);
+ network_stop(ioArgs.i_iface.c_str());
+ ioArgs.o_status = interface_status(ioArgs.i_iface.c_str());
}
}
return Manageable::STATUS_OK;
@@ -149,28 +137,26 @@ NetAgent::ManagementMethod(uint32_t method, Args& arguments,
string& text)
case _qmf::Network::METHOD_STATUS:
{
_qmf::ArgsNetworkStatus& ioArgs = (_qmf::ArgsNetworkStatus&)
arguments;
- nif = ncf_lookup_by_name(ncf, ioArgs.i_iface.c_str());
- ioArgs.o_status = interface_status(nif);
+ ioArgs.o_status = interface_status(ioArgs.i_iface.c_str());
+
}
return Manageable::STATUS_OK;
- case _qmf::Network::METHOD_DESCRIBE:
+ case _qmf::Network::METHOD_GET_IP_ADDRESS:
{
- _qmf::ArgsNetworkDescribe& ioArgs = (_qmf::ArgsNetworkDescribe&)
arguments;
- nif = ncf_lookup_by_name(ncf, ioArgs.i_iface.c_str());
- if(nif != NULL) {
- ioArgs.o_xml = ncf_if_xml_desc(nif);
- }
+ _qmf::ArgsNetworkGet_ip_address& ioArgs =
(_qmf::ArgsNetworkGet_ip_address&) arguments;
+
+ ioArgs.o_ip =
g_strdup((network_get_ip_address(ioArgs.i_iface.c_str())));
}
return Manageable::STATUS_OK;
- case _qmf::Network::METHOD_DESTROY:
+ case _qmf::Network::METHOD_GET_MAC_ADDRESS:
{
- _qmf::ArgsNetworkDestroy& ioArgs = (_qmf::ArgsNetworkDestroy&)
arguments;
- nif = ncf_lookup_by_name(ncf, ioArgs.i_iface.c_str());
- if(nif != NULL) {
- ncf_if_undefine(nif);
- }
+ const gchar *mac_str;
+ _qmf::ArgsNetworkGet_mac_address& ioArgs =
(_qmf::ArgsNetworkGet_mac_address&) arguments;
+
+ mac_str = network_get_mac_address(ioArgs.i_iface.c_str());
+ ioArgs.o_mac = g_strdup(mac_str);
}
return Manageable::STATUS_OK;
}
diff --git a/src/schema.xml b/src/schema.xml
index bb34a3c..0559916 100644
--- a/src/schema.xml
+++ b/src/schema.xml
@@ -70,14 +70,8 @@
</method-->
<method name="list" desc="List IP addresses">
- <arg name="max" dir="O" type="uint32"
/>
<arg name="iface_map" dir="O" type="list"
/>
</method>
-
- <method name="destroy" desc="Remove network
interface">
- <arg name="iface" dir="I" type="sstr"
/>
- </method>
-
<method name="start" desc="Start a network
interface">
<arg name="iface" dir="I" type="sstr"
/>
<arg name="status" dir="O" type="uint32"
/>
@@ -90,9 +84,13 @@
<arg name="iface" dir="I" type="sstr"
/>
<arg name="status" dir="O" type="uint32"
/>
</method>
- <method name="describe" desc="Obtain XML description of a
network interface status">
+ <method name="get_ip_address" desc="Obtain ip addressof a network
interface">
<arg name="iface" dir="I" type="sstr"
/>
- <arg name="xml" dir="O" type="sstr"
/>
+ <arg name="ip" dir="O" type="sstr"
/>
+ </method>
+ <method name="get_mac_address" desc="Obtain mac address of network
interface">
+ <arg name="iface" dir="I" type="sstr"
/>
+ <arg name="mac" dir="O" type="sstr"
/>
</method>
</class>
--
1.7.2.3
_______________________________________________
Matahari mailing list
Matahari(a)lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/matahari