chiark / gitweb /
remove unused includes
[elogind.git] / src / network / networkd-network-bus.c
index a167857e77aef951b4d331cc6f99f4c85e0896e5..b5f8f5cfb2c36d977d3108d89e1dddc747a646a5 100644 (file)
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
-#include "bus-util.h"
-#include "bus-label.h"
 #include "strv.h"
 
 #include "networkd.h"
 
+static int property_get_ether_addrs(
+                sd_bus *bus,
+                const char *path,
+                const char *interface,
+                const char *property,
+                sd_bus_message *reply,
+                void *userdata,
+                sd_bus_error *error) {
+
+        Network *n = userdata;
+        const char *ether = NULL;
+        int r;
+
+        assert(bus);
+        assert(reply);
+        assert(n);
+
+        if (n->match_mac)
+                ether = ether_ntoa(n->match_mac);
+
+        r = sd_bus_message_open_container(reply, 'a', "s");
+        if (r < 0)
+                return r;
+
+        if (ether) {
+                r = sd_bus_message_append(reply, "s", strempty(ether));
+                if (r < 0)
+                        return r;
+        }
+
+        r = sd_bus_message_close_container(reply);
+        if (r < 0)
+                return r;
+
+        return 1;
+}
+
 const sd_bus_vtable network_vtable[] = {
         SD_BUS_VTABLE_START(0),
 
         SD_BUS_PROPERTY("Description", "s", NULL, offsetof(Network, description), SD_BUS_VTABLE_PROPERTY_CONST),
         SD_BUS_PROPERTY("SourcePath", "s", NULL, offsetof(Network, filename), SD_BUS_VTABLE_PROPERTY_CONST),
-/*        SD_BUS_PROPERTY("MatchMAC", "s", NULL TODO, offsetof(Network, match_mac), SD_BUS_VTABLE_PROPERTY_CONST), */
-        SD_BUS_PROPERTY("MatchPath", "s", NULL, offsetof(Network, match_path), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("MatchDriver", "s", NULL, offsetof(Network, match_driver), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("MatchType", "s", NULL, offsetof(Network, match_type), SD_BUS_VTABLE_PROPERTY_CONST),
-        SD_BUS_PROPERTY("MatchName", "s", NULL, offsetof(Network, match_name), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchMAC", "as", property_get_ether_addrs, offsetof(Network, match_mac), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchPath", "as", NULL, offsetof(Network, match_path), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchDriver", "as", NULL, offsetof(Network, match_driver), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchType", "as", NULL, offsetof(Network, match_type), SD_BUS_VTABLE_PROPERTY_CONST),
+        SD_BUS_PROPERTY("MatchName", "as", NULL, offsetof(Network, match_name), SD_BUS_VTABLE_PROPERTY_CONST),
 
         SD_BUS_VTABLE_END
 };
 
 static char *network_bus_path(Network *network) {
-        _cleanup_free_ char *e = NULL;
         _cleanup_free_ char *name = NULL;
-        char *networkname;
-        char *d;
+        char *networkname, *d, *path;
+        int r;
 
         assert(network);
         assert(network->filename);
@@ -62,11 +96,11 @@ static char *network_bus_path(Network *network) {
 
         *d = '\0';
 
-        e = bus_label_escape(networkname);
-        if (!e)
+        r = sd_bus_path_encode("/org/freedesktop/network1/network", networkname, &path);
+        if (r < 0)
                 return NULL;
 
-        return strappend("/org/freedesktop/network1/network/", e);
+        return path;
 }
 
 int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error) {
@@ -102,7 +136,6 @@ int network_object_find(sd_bus *bus, const char *path, const char *interface, vo
         Manager *m = userdata;
         Network *network;
         _cleanup_free_ char *name = NULL;
-        _cleanup_free_ char *e = NULL;
         int r;
 
         assert(bus);
@@ -111,14 +144,11 @@ int network_object_find(sd_bus *bus, const char *path, const char *interface, vo
         assert(m);
         assert(found);
 
-        if (sscanf(path, "/org/freedesktop/network1/network/%ms", &name) != 1)
+        r = sd_bus_path_decode(path, "/org/freedesktop/network1/network", &name);
+        if (r < 0)
                 return 0;
 
-        e = bus_label_unescape(name);
-        if (!e)
-                return -ENOMEM;
-
-        r = network_get_by_name(m, e, &network);
+        r = network_get_by_name(m, name, &network);
         if (r < 0)
                 return 0;