Thomas Haller 2020-11-17 22:20:50 +01:00
commit 5ce9f0e186
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
7 changed files with 121 additions and 53 deletions

View file

@ -2561,10 +2561,15 @@ static const char *const *_complete_fcn_connection_type(ARGS_COMPLETE_FCN)
for (i = 0, j = 0; i < _NM_META_SETTING_TYPE_NUM; i++) {
const NMMetaSettingInfoEditor *setting_info = &nm_meta_setting_infos_editor[i];
GType gtype = setting_info->general->get_setting_gtype();
const char * v;
if (!setting_info->valid_parts)
if (_nm_setting_type_get_base_type_priority(gtype) == NM_SETTING_PRIORITY_INVALID) {
nm_assert(!setting_info->valid_parts);
continue;
}
nm_assert(setting_info->valid_parts);
v = setting_info->alias;
if (v) {
@ -8149,7 +8154,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
NM_META_SETTING_VALID_PART_ITEM (WIRED, FALSE),
),
),
SETTING_INFO (OVS_DPDK),
SETTING_INFO (OVS_DPDK,
.valid_parts = NM_META_SETTING_VALID_PARTS (
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),
NM_META_SETTING_VALID_PART_ITEM (OVS_DPDK, TRUE),
),
),
SETTING_INFO_EMPTY (OVS_EXTERNAL_IDS),
SETTING_INFO (OVS_INTERFACE,
.valid_parts = NM_META_SETTING_VALID_PARTS (
@ -8163,7 +8173,12 @@ const NMMetaSettingInfoEditor nm_meta_setting_infos_editor[] = {
NM_META_SETTING_VALID_PART_ITEM (ETHTOOL, FALSE),
),
),
SETTING_INFO (OVS_PATCH),
SETTING_INFO (OVS_PATCH,
.valid_parts = NM_META_SETTING_VALID_PARTS (
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),
NM_META_SETTING_VALID_PART_ITEM (OVS_PATCH, TRUE),
),
),
SETTING_INFO (OVS_PORT,
.valid_parts = NM_META_SETTING_VALID_PARTS (
NM_META_SETTING_VALID_PART_ITEM (CONNECTION, TRUE),

View file

@ -53,6 +53,9 @@ test_client_meta_check(void)
for (m = 0; m < _NM_META_SETTING_TYPE_NUM; m++) {
const NMMetaSettingInfoEditor *info = &nm_meta_setting_infos_editor[m];
GType gtype;
NMSettingPriority base_priority;
gboolean is_base_type;
g_assert(info);
g_assert(info->meta_type == &nm_meta_type_setting_info_editor);
@ -97,6 +100,11 @@ test_client_meta_check(void)
} else
g_assert(!info->properties);
gtype = info->general->get_setting_gtype();
base_priority = _nm_setting_type_get_base_type_priority(gtype);
is_base_type = (base_priority != NM_SETTING_PRIORITY_INVALID);
g_assert((!!info->valid_parts) == is_base_type);
if (info->valid_parts) {
gsize i, l;
gs_unref_hashtable GHashTable *dup = g_hash_table_new(nm_direct_hash, NULL);

View file

@ -20,7 +20,6 @@
/*****************************************************************************/
NMSettingPriority _nm_setting_get_base_type_priority(NMSetting *setting);
NMSettingPriority _nm_setting_type_get_base_type_priority(GType type);
int _nm_setting_compare_priority(gconstpointer a, gconstpointer b);
/*****************************************************************************/

View file

@ -57,26 +57,6 @@ static GenData *_gendata_hash(NMSetting *setting, gboolean create_if_necessary);
/*****************************************************************************/
static NMSettingPriority
_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype)
{
/* Historical oddity: PPPoE is a base-type even though it's not
* priority 1. It needs to be sorted *after* lower-level stuff like
* Wi-Fi security or 802.1x for secrets, but it's still allowed as a
* base type.
*/
if (setting_info) {
if (NM_IN_SET(setting_info->setting_priority,
NM_SETTING_PRIORITY_HW_BASE,
NM_SETTING_PRIORITY_HW_NON_BASE)
|| gtype == NM_TYPE_SETTING_PPPOE)
return setting_info->setting_priority;
}
return NM_SETTING_PRIORITY_INVALID;
}
NMSettingPriority
_nm_setting_get_setting_priority(NMSetting *setting)
{
@ -88,19 +68,13 @@ _nm_setting_get_setting_priority(NMSetting *setting)
return setting_info ? setting_info->setting_priority : NM_SETTING_PRIORITY_INVALID;
}
NMSettingPriority
_nm_setting_type_get_base_type_priority(GType type)
{
return _get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type);
}
NMSettingPriority
_nm_setting_get_base_type_priority(NMSetting *setting)
{
g_return_val_if_fail(NM_IS_SETTING(setting), NM_SETTING_PRIORITY_INVALID);
return _get_base_type_priority(NM_SETTING_GET_CLASS(setting)->setting_info,
G_OBJECT_TYPE(setting));
return nm_meta_setting_info_get_base_type_priority(NM_SETTING_GET_CLASS(setting)->setting_info,
G_OBJECT_TYPE(setting));
}
/**

View file

@ -946,30 +946,70 @@
<option>connection.type</option> property (or use the <option>type</option> alias)
to one of known NetworkManager connection types:</para>
<!--
See also: nm_meta_setting_info_get_base_type_priority().
nmcli '-'-complete-args connection add type "" |
sort |
awk '
/^(bond|bridge|team)-slave$/ {
printf " <listitem><para><literal>%s</literal> (deprecated for ethernet with master)</para></listitem>\n", $0;
next;
}
/^(wifi|ethernet|olpc-mash)$/ {
next;
}
{
alias = "";
if ($0 == "802-11-wireless") { alias = "wifi"; }
if ($0 == "802-3-ethernet") { alias = "ethernet"; }
if ($0 == "802-11-olpc-mesh") { alias = "olpc-mesh"; }
if (alias != "") {
printf " <listitem><para><literal>%s</literal> (alias <literal>%s</literal>)</para></listitem>\n", $0, alias;
} else {
printf " <listitem><para><literal>%s</literal></para></listitem>\n", $0;
}
}
'
-->
<itemizedlist spacing='compact'>
<listitem><para><literal>ethernet</literal></para></listitem>
<listitem><para><literal>wifi</literal></para></listitem>
<listitem><para><literal>wimax</literal></para></listitem>
<listitem><para><literal>pppoe</literal></para></listitem>
<listitem><para><literal>gsm</literal></para></listitem>
<listitem><para><literal>cdma</literal></para></listitem>
<listitem><para><literal>infiniband</literal></para></listitem>
<listitem><para><literal>bluetooth</literal></para></listitem>
<listitem><para><literal>vlan</literal></para></listitem>
<listitem><para><literal>bond</literal></para></listitem>
<listitem><para><literal>bond-slave</literal></para></listitem>
<listitem><para><literal>team</literal></para></listitem>
<listitem><para><literal>team-slave</literal></para></listitem>
<listitem><para><literal>bridge</literal></para></listitem>
<listitem><para><literal>bridge-slave</literal></para></listitem>
<listitem><para><literal>vpn</literal></para></listitem>
<listitem><para><literal>olpc-mesh</literal></para></listitem>
<listitem><para><literal>6lowpan</literal></para></listitem>
<listitem><para><literal>802-11-olpc-mesh</literal> (alias <literal>olpc-mesh</literal>)</para></listitem>
<listitem><para><literal>802-11-wireless</literal> (alias <literal>wifi</literal>)</para></listitem>
<listitem><para><literal>802-3-ethernet</literal> (alias <literal>ethernet</literal>)</para></listitem>
<listitem><para><literal>adsl</literal></para></listitem>
<listitem><para><literal>tun</literal></para></listitem>
<listitem><para><literal>ip-tunnel</literal></para></listitem>
<listitem><para><literal>macvlan</literal></para></listitem>
<listitem><para><literal>vxlan</literal></para></listitem>
<listitem><para><literal>bluetooth</literal></para></listitem>
<listitem><para><literal>bond</literal></para></listitem>
<listitem><para><literal>bond-slave</literal> (deprecated for ethernet with master)</para></listitem>
<listitem><para><literal>bridge</literal></para></listitem>
<listitem><para><literal>bridge-slave</literal> (deprecated for ethernet with master)</para></listitem>
<listitem><para><literal>cdma</literal></para></listitem>
<listitem><para><literal>dummy</literal></para></listitem>
<listitem><para><literal>generic</literal></para></listitem>
<listitem><para><literal>gsm</literal></para></listitem>
<listitem><para><literal>infiniband</literal></para></listitem>
<listitem><para><literal>ip-tunnel</literal></para></listitem>
<listitem><para><literal>macsec</literal></para></listitem>
<listitem><para><literal>macvlan</literal></para></listitem>
<listitem><para><literal>olpc-mesh</literal></para></listitem>
<listitem><para><literal>ovs-bridge</literal></para></listitem>
<listitem><para><literal>ovs-dpdk</literal></para></listitem>
<listitem><para><literal>ovs-interface</literal></para></listitem>
<listitem><para><literal>ovs-patch</literal></para></listitem>
<listitem><para><literal>ovs-port</literal></para></listitem>
<listitem><para><literal>pppoe</literal></para></listitem>
<listitem><para><literal>team</literal></para></listitem>
<listitem><para><literal>team-slave</literal> (deprecated for ethernet with master)</para></listitem>
<listitem><para><literal>tun</literal></para></listitem>
<listitem><para><literal>vlan</literal></para></listitem>
<listitem><para><literal>vpn</literal></para></listitem>
<listitem><para><literal>vrf</literal></para></listitem>
<listitem><para><literal>vxlan</literal></para></listitem>
<listitem><para><literal>wifi-p2p</literal></para></listitem>
<listitem><para><literal>wimax</literal></para></listitem>
<listitem><para><literal>wireguard</literal></para></listitem>
<listitem><para><literal>wpan</literal></para></listitem>
</itemizedlist>
<para>The most typical uses are described in the <link linkend='examples' endterm='examples.title' /> section.</para>

View file

@ -606,3 +606,31 @@ out_none:
}
/*****************************************************************************/
NMSettingPriority
nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info, GType gtype)
{
/* Historical oddity: PPPoE is a base-type even though it's not
* priority 1. It needs to be sorted *after* lower-level stuff like
* Wi-Fi security or 802.1x for secrets, but it's still allowed as a
* base type.
*/
if (setting_info) {
if (NM_IN_SET(setting_info->setting_priority,
NM_SETTING_PRIORITY_HW_BASE,
NM_SETTING_PRIORITY_HW_NON_BASE)
|| gtype == NM_TYPE_SETTING_PPPOE)
return setting_info->setting_priority;
}
return NM_SETTING_PRIORITY_INVALID;
}
NMSettingPriority
_nm_setting_type_get_base_type_priority(GType type)
{
return nm_meta_setting_info_get_base_type_priority(nm_meta_setting_infos_by_gtype(type), type);
}
/*****************************************************************************/

View file

@ -208,4 +208,8 @@ const NMMetaSettingInfo *nm_meta_setting_infos_by_gtype(GType gtype);
/*****************************************************************************/
NMSettingPriority nm_meta_setting_info_get_base_type_priority(const NMMetaSettingInfo *setting_info,
GType gtype);
NMSettingPriority _nm_setting_type_get_base_type_priority(GType type);
#endif /* __NM_META_SETTING_H__ */