X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fmachine%2Fmachine-dbus.c;h=89c93779d37337d461912cc73c3c4694c982bc73;hp=3741485a7b33cdc2602cd6db79c4c1190781c9e5;hb=e70bc43cdf75b36e7ad3d29e9a6f8ee1461e7d5e;hpb=496a5a69707653b231fbb350c0d8d837762248bb diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c index 3741485a7..89c93779d 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -83,6 +83,31 @@ static int property_get_state( return 1; } +static int property_get_netif( + sd_bus *bus, + const char *path, + const char *interface, + const char *property, + sd_bus_message *reply, + void *userdata, + sd_bus_error *error) { + + Machine *m = userdata; + int r; + + assert(bus); + assert(reply); + assert(m); + + assert_cc(sizeof(int) == sizeof(int32_t)); + + r = sd_bus_message_append_array(reply, 'i', m->netif, m->n_netif * sizeof(int)); + if (r < 0) + return r; + + return 1; +} + static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_class, machine_class, MachineClass); int bus_machine_method_terminate(sd_bus *bus, sd_bus_message *message, void *userdata, sd_bus_error *error) { @@ -189,7 +214,7 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void for (a = addresses, i = 0; i < n; a++, i++) { struct iovec iov[2] = { { .iov_base = &a->family, .iov_len = sizeof(a->family) }, - { .iov_base = &a->address, .iov_len = PROTO_ADDRESS_SIZE(a->family) }, + { .iov_base = &a->address, .iov_len = FAMILY_ADDRESS_SIZE(a->family) }, }; r = writev(pair[1], iov, 2); @@ -208,12 +233,12 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void if (r < 0) return sd_bus_error_set_errno(error, r); - r = sd_bus_message_open_container(reply, 'a', "(yay)"); + r = sd_bus_message_open_container(reply, 'a', "(iay)"); if (r < 0) return sd_bus_error_set_errno(error, r); for (;;) { - unsigned char family; + int family; ssize_t n; union in_addr_union in_addr; struct iovec iov[2]; @@ -231,11 +256,11 @@ int bus_machine_method_get_addresses(sd_bus *bus, sd_bus_message *message, void if ((size_t) n < sizeof(family)) break; - r = sd_bus_message_open_container(reply, 'r', "yay"); + r = sd_bus_message_open_container(reply, 'r', "iay"); if (r < 0) return sd_bus_error_set_errno(error, r); - r = sd_bus_message_append(reply, "y", family); + r = sd_bus_message_append(reply, "i", family); if (r < 0) return sd_bus_error_set_errno(error, r); @@ -376,10 +401,11 @@ const sd_bus_vtable machine_vtable[] = { SD_BUS_PROPERTY("Leader", "u", NULL, offsetof(Machine, leader), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Class", "s", property_get_class, offsetof(Machine, class), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("RootDirectory", "s", NULL, offsetof(Machine, root_directory), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("NetworkInterfaces", "ai", property_get_netif, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("State", "s", property_get_state, 0, 0), SD_BUS_METHOD("Terminate", NULL, NULL, bus_machine_method_terminate, SD_BUS_VTABLE_CAPABILITY(CAP_KILL)), SD_BUS_METHOD("Kill", "si", NULL, bus_machine_method_kill, SD_BUS_VTABLE_CAPABILITY(CAP_KILL)), - SD_BUS_METHOD("GetAddresses", NULL, "a(yay)", bus_machine_method_get_addresses, SD_BUS_VTABLE_UNPRIVILEGED), + SD_BUS_METHOD("GetAddresses", NULL, "a(iay)", bus_machine_method_get_addresses, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_METHOD("GetOSRelease", NULL, "a{ss}", bus_machine_method_get_os_release, SD_BUS_VTABLE_UNPRIVILEGED), SD_BUS_VTABLE_END };