diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2021-03-08 11:15:03 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2021-03-09 11:03:07 +0000 |
commit | e5f865a637cfa3d419d382e8f3835306a26ee5d9 (patch) | |
tree | 94fb94b1c4ed212445beb3c32d9250ba1c49da12 | |
parent | cece9c4266604b98e21c7060b4503138b3b39a1b (diff) |
qmicli: allow new 'flags' setting in --link-add to pass QmiDeviceAddLinkFlags bitmasks
By default flags will be NONE if none specified.
Flags are specified as usual, using nicknames separated by '|', e.g.:
$ sudo qmicli -d /dev/cdc-wdm0 --link-add="mux-id=auto,iface=wwan0,prefix=qmapmux,flags=ingress-map-cksumv4|egress-map-cksumv4"
-rw-r--r-- | src/qmicli/qmicli-helpers.h | 7 | ||||
-rw-r--r-- | src/qmicli/qmicli-link-management.c | 36 |
2 files changed, 28 insertions, 15 deletions
diff --git a/src/qmicli/qmicli-helpers.h b/src/qmicli/qmicli-helpers.h index 4171856..a3a84d4 100644 --- a/src/qmicli/qmicli-helpers.h +++ b/src/qmicli/qmicli-helpers.h @@ -59,9 +59,10 @@ QMICLI_ENUM_LIST #undef QMICLI_ENUM_LIST_ITEM /* Common helpers to read flags from strings */ -#define QMICLI_FLAGS_LIST \ - QMICLI_FLAGS_LIST_ITEM (QmiDeviceOpenFlags, device_open_flags, "device open flags") \ - QMICLI_FLAGS_LIST_ITEM (QmiLocNmeaType, loc_nmea_type, "NMEA type") \ +#define QMICLI_FLAGS_LIST \ + QMICLI_FLAGS_LIST_ITEM (QmiDeviceOpenFlags, device_open_flags, "device open flags") \ + QMICLI_FLAGS_LIST_ITEM (QmiDeviceAddLinkFlags, device_add_link_flags, "device add link flags") \ + QMICLI_FLAGS_LIST_ITEM (QmiLocNmeaType, loc_nmea_type, "NMEA type") \ QMICLI_FLAGS_LIST_ITEM (QmiNasPlmnAccessTechnologyIdentifier, nas_plmn_access_technology_identifier, "PLMN access technology") #define QMICLI_FLAGS_LIST_ITEM(TYPE,TYPE_UNDERSCORE,DESCR) \ diff --git a/src/qmicli/qmicli-link-management.c b/src/qmicli/qmicli-link-management.c index 5a3c006..fb51400 100644 --- a/src/qmicli/qmicli-link-management.c +++ b/src/qmicli/qmicli-link-management.c @@ -47,7 +47,7 @@ static GOptionEntry entries[] = { }, { "link-add", 0, 0, G_OPTION_ARG_STRING, &link_add_str, "Create new network interface link", - "[mux-id=N|auto,iface=IFACE,prefix=PREFIX]" + "[mux-id=N|auto,iface=IFACE,prefix=PREFIX,flags=FLAGS]" }, { "link-delete", 0, 0, G_OPTION_ARG_STRING, &link_delete_str, "Delete a given network interface link", @@ -218,9 +218,10 @@ device_link_delete (QmiDevice *dev, } typedef struct { - guint mux_id; - gchar *iface; - gchar *prefix; + guint mux_id; + gchar *iface; + gchar *prefix; + QmiDeviceAddLinkFlags flags; } AddLinkProperties; static void @@ -231,7 +232,7 @@ link_add_ready (QmiDevice *dev, g_autofree gchar *link_iface = NULL; guint mux_id; - link_iface = qmi_device_add_link_finish (dev, res, &mux_id, &error); + link_iface = qmi_device_add_link_with_flags_finish (dev, res, &mux_id, &error); if (!link_iface) g_printerr ("error: couldn't add link: %s\n", error->message); @@ -271,6 +272,15 @@ add_link_properties_handle (const gchar *key, return TRUE; } + if (g_ascii_strcasecmp (key, "flags") == 0 && !props->flags) { + if (!qmicli_read_device_add_link_flags_from_string (value, &props->flags)) { + g_set_error (error, QMI_CORE_ERROR, QMI_CORE_ERROR_FAILED, + "invalid flags given: '%s'", value); + return FALSE; + } + return TRUE; + } + g_set_error (error, QMI_CORE_ERROR, QMI_CORE_ERROR_FAILED, "unrecognized or duplicate option '%s'", key); return FALSE; @@ -286,6 +296,7 @@ device_link_add (QmiDevice *dev, .mux_id = QMI_DEVICE_MUX_ID_AUTOMATIC, .iface = NULL, .prefix = NULL, + .flags = QMI_DEVICE_ADD_LINK_FLAGS_NONE, }; if (!qmicli_parse_key_value_string (add_settings, @@ -315,13 +326,14 @@ device_link_add (QmiDevice *dev, return; } - qmi_device_add_link (dev, - props.mux_id, - props.iface, - props.prefix, - cancellable, - (GAsyncReadyCallback)link_add_ready, - NULL); + qmi_device_add_link_with_flags (dev, + props.mux_id, + props.iface, + props.prefix, + props.flags, + cancellable, + (GAsyncReadyCallback)link_add_ready, + NULL); g_free (props.iface); g_free (props.prefix); |