aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2021-03-08 11:15:03 +0100
committerAleksander Morgado <aleksander@aleksander.es>2021-03-09 11:03:07 +0000
commite5f865a637cfa3d419d382e8f3835306a26ee5d9 (patch)
tree94fb94b1c4ed212445beb3c32d9250ba1c49da12
parentcece9c4266604b98e21c7060b4503138b3b39a1b (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.h7
-rw-r--r--src/qmicli/qmicli-link-management.c36
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);