From 5da77c0e2c032af52904c9ce4fb9906ac577a35e Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Fri, 9 Mar 2018 18:21:10 +0100 Subject: [PATCH] client: support wpan setting --- clients/cli/connections.c | 6 ++- clients/common/nm-meta-setting-desc.c | 64 ++++++++++++++++++++++++++- clients/common/nm-meta-setting-desc.h | 1 + man/nmcli.xml | 11 +++++ shared/nm-meta-setting.c | 8 +++- shared/nm-meta-setting.h | 3 +- 6 files changed, 88 insertions(+), 5 deletions(-) diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 0daed365e1..f4964b3983 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -660,6 +660,7 @@ const NmcMetaGenericInfo *const metagen_con_active_general[_NMC_GENERIC_INFO_TYP NM_SETTING_MACSEC_SETTING_NAME"," \ NM_SETTING_MACVLAN_SETTING_NAME"," \ NM_SETTING_VXLAN_SETTING_NAME"," \ + NM_SETTING_WPAN_SETTING_NAME","\ NM_SETTING_PROXY_SETTING_NAME"," \ NM_SETTING_TC_CONFIG_SETTING_NAME // NM_SETTING_DUMMY_SETTING_NAME @@ -890,7 +891,10 @@ usage_connection_add (void) " [source-port-min <0-65535>]\n" " [source-port-max <0-65535>]\n" " [destination-port <0-65535>]\n\n" - " dummy: \n\n" + " wpan: [short-addr <0x0000-0xffff>]\n\n" + " [pan-id <0x0000-0xffff>]\n\n" + " [mac ]\n\n" + " dummy:\n\n" " SLAVE_OPTIONS:\n" " bridge: [priority <0-63>]\n" " [path-cost <1-65535>]\n" diff --git a/clients/common/nm-meta-setting-desc.c b/clients/common/nm-meta-setting-desc.c index ebe079ccbb..f6477e57cb 100644 --- a/clients/common/nm-meta-setting-desc.c +++ b/clients/common/nm-meta-setting-desc.c @@ -1200,6 +1200,11 @@ _set_fcn_gobject_mtu (ARGS_SET_FCN) return TRUE; } +/* Ideally we'll be able to get this from a public header. */ +#ifndef IEEE802154_ADDR_LEN +#define IEEE802154_ADDR_LEN 8 +#endif + static gboolean _set_fcn_gobject_mac (ARGS_SET_FCN) { @@ -1211,9 +1216,11 @@ _set_fcn_gobject_mac (ARGS_SET_FCN) else mode = NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT; - if (mode == NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND) + if (mode == NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND) { valid = nm_utils_hwaddr_valid (value, INFINIBAND_ALEN); - else { + } else if (mode == NM_META_PROPERTY_TYPE_MAC_MODE_WPAN) { + valid = nm_utils_hwaddr_valid (value, IEEE802154_ADDR_LEN); + } else { valid = nm_utils_hwaddr_valid (value, ETH_ALEN) || ( mode == NM_META_PROPERTY_TYPE_MAC_MODE_CLONED && NM_CLONED_MAC_IS_SPECIAL (value)); @@ -7435,6 +7442,52 @@ static const NMMetaPropertyInfo *const property_infos_WIRELESS_SECURITY[] = { NULL }; +#undef _CURRENT_NM_META_SETTING_TYPE +#define _CURRENT_NM_META_SETTING_TYPE NM_META_SETTING_TYPE_WPAN +static const NMMetaPropertyInfo *const property_infos_WPAN[] = { + PROPERTY_INFO_WITH_DESC (NM_SETTING_WPAN_MAC_ADDRESS, + .property_type = &_pt_gobject_mac, + .is_cli_option = TRUE, + .property_alias = "mac", + .prompt = N_("MAC [none]"), + .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (mac, + .mode = NM_META_PROPERTY_TYPE_MAC_MODE_WPAN, + ), + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_WPAN_SHORT_ADDRESS, + .is_cli_option = TRUE, + .property_alias = "short-addr", + .prompt = N_("Short address (<0x0000-0xffff>)"), + .property_type = &_pt_gobject_int, + .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, \ + .base = 16, + .value_infos = INT_VALUE_INFOS ( + { + .value = G_MAXUINT16, + .nick = "unset", + } + ), + ), + ), + PROPERTY_INFO_WITH_DESC (NM_SETTING_WPAN_PAN_ID, + .is_cli_option = TRUE, + .inf_flags = NM_META_PROPERTY_INF_FLAG_REQD, + .property_alias = "pan-id", + .prompt = N_("PAN Identifier (<0x0000-0xffff>)"), + .property_type = &_pt_gobject_int, + .property_typ_data = DEFINE_PROPERTY_TYP_DATA_SUBTYPE (gobject_int, \ + .base = 16, + .value_infos = INT_VALUE_INFOS ( + { + .value = G_MAXUINT16, + .nick = "unset", + } + ), + ), + ), + NULL +}; + /*****************************************************************************/ static void @@ -7595,6 +7648,7 @@ _setting_init_fcn_wireless (ARGS_SETTING_INIT_FCN) #define SETTING_PRETTY_NAME_WIRED N_("Wired Ethernet") #define SETTING_PRETTY_NAME_WIRELESS N_("Wi-Fi connection") #define SETTING_PRETTY_NAME_WIRELESS_SECURITY N_("Wi-Fi security settings") +#define SETTING_PRETTY_NAME_WPAN N_("WPAN settings") #define NM_META_SETTING_VALID_PARTS(...) \ ((const NMMetaSettingValidPartItem *const[]) { __VA_ARGS__ NULL }) @@ -7836,6 +7890,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = { SETTING_INFO (WIRELESS_SECURITY, .alias = "wifi-sec", ), + SETTING_INFO (WPAN, + .valid_parts = NM_META_SETTING_VALID_PARTS ( + NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE), + NM_META_SETTING_VALID_PART_ITEM (WPAN, TRUE), + ), + ), }; /*****************************************************************************/ diff --git a/clients/common/nm-meta-setting-desc.h b/clients/common/nm-meta-setting-desc.h index e7ab6e860a..01a823cce2 100644 --- a/clients/common/nm-meta-setting-desc.h +++ b/clients/common/nm-meta-setting-desc.h @@ -163,6 +163,7 @@ typedef enum { NM_META_PROPERTY_TYPE_MAC_MODE_DEFAULT, NM_META_PROPERTY_TYPE_MAC_MODE_CLONED, NM_META_PROPERTY_TYPE_MAC_MODE_INFINIBAND, + NM_META_PROPERTY_TYPE_MAC_MODE_WPAN, } NMMetaPropertyTypeMacMode; typedef struct _NMMetaEnvironment NMMetaEnvironment; diff --git a/man/nmcli.xml b/man/nmcli.xml index 9b951c1985..bb74557f02 100644 --- a/man/nmcli.xml +++ b/man/nmcli.xml @@ -2003,6 +2003,17 @@ It's equivalent to the +bond.options 'option=value' syntax. + WPAN options + + AliasProperty + + + macwpan.mac + short-addrwpan.short-addr + pan-idwpan.pan-id + +
+ IPv4 options AliasPropertyNote diff --git a/shared/nm-meta-setting.c b/shared/nm-meta-setting.c index 8841273919..ef1daee580 100644 --- a/shared/nm-meta-setting.c +++ b/shared/nm-meta-setting.c @@ -16,7 +16,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright 2017 Red Hat, Inc. + * Copyright 2017 - 2018 Red Hat, Inc. */ #include "nm-default.h" @@ -63,6 +63,7 @@ #include "nm-setting-wired.h" #include "nm-setting-wireless.h" #include "nm-setting-wireless-security.h" +#include "nm-setting-wpan.h" /*****************************************************************************/ @@ -340,6 +341,11 @@ const NMMetaSettingInfo nm_meta_setting_infos[] = { .setting_name = NM_SETTING_WIRELESS_SECURITY_SETTING_NAME, .get_setting_gtype = nm_setting_wireless_security_get_type, }, + [NM_META_SETTING_TYPE_WPAN] = { + .meta_type = NM_META_SETTING_TYPE_WPAN, + .setting_name = NM_SETTING_WPAN_SETTING_NAME, + .get_setting_gtype = nm_setting_wpan_get_type, + }, [NM_META_SETTING_TYPE_UNKNOWN] = { .meta_type = NM_META_SETTING_TYPE_UNKNOWN, diff --git a/shared/nm-meta-setting.h b/shared/nm-meta-setting.h index 4333001bff..ca77cfdc23 100644 --- a/shared/nm-meta-setting.h +++ b/shared/nm-meta-setting.h @@ -16,7 +16,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright 2017 Red Hat, Inc. + * Copyright 2017 - 2018 Red Hat, Inc. */ #ifndef __NM_META_SETTING_H__ @@ -95,6 +95,7 @@ typedef enum { NM_META_SETTING_TYPE_WIRED, NM_META_SETTING_TYPE_WIRELESS, NM_META_SETTING_TYPE_WIRELESS_SECURITY, + NM_META_SETTING_TYPE_WPAN, NM_META_SETTING_TYPE_UNKNOWN,