/* * Match modem devices */ static ni_bool_t ni_objectmodel_modem_match_attr(const ni_dbus_object_t *object, const char *name, const char *match) { ni_modem_t *modem; const char *value = NULL; if (!(modem = ni_objectmodel_unwrap_modem(object, NULL))) return FALSE; if (!strcmp(name, "equipment-id")) value = modem->identify.equipment; else if (!strcmp(name, "device")) value = modem->identify.device; else if (!strcmp(name, "manufacturer")) value = modem->identify.manufacturer; else if (!strcmp(name, "model")) value = modem->identify.model; else if (!strcmp(name, "version")) value = modem->identify.version; else { ni_warn("%s: unsupported query attribute %s", __func__, name); return FALSE; } ni_trace("%s(%s): match=\"%s\", value=\"%s\"", __func__, name, match, value); return ni_string_eq_nocase(match, value); }
/* * Support for PPP over serial */ static inline ni_netdev_t * __ni_objectmodel_ppp_device_arg(const ni_dbus_variant_t *dict, DBusError *error) { ni_netdev_t *ppp_dev; const char *device_path; ni_dbus_object_t *device_object; ni_ppp_t *ppp; ni_modem_t *modem; if (!(ppp_dev = ni_objectmodel_get_netif_argument(dict, NI_IFTYPE_PPP, &ni_objectmodel_ppp_service))) { dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "Error unwrapping PPP device configuration"); return NULL; } ppp = ni_netdev_get_ppp(ppp_dev); if (!ni_ppp_check_config(ppp) || !(device_path = ppp->config->device.object_path)) { dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "No or incomplete PPP device configuration"); return NULL; } device_object = ni_objectmodel_object_by_path(device_path); if (device_object == NULL) { dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "PPP device configuration references unknown object path \"%s\"", device_path); return NULL; } modem = ni_objectmodel_unwrap_modem(device_object, error); if (modem == NULL) { dbus_set_error(error, DBUS_ERROR_INVALID_ARGS, "PPP device configuration references incompatible object (expected a modem)"); return NULL; } ppp->config->device.modem = ni_modem_hold(modem); ni_string_dup(&ppp->config->device.name, modem->device); return ppp_dev; }