conf.set('DEFAULT_HIERARCHY', 'CGROUP_UNIFIED_ALL')
endif
+extra_net_naming_schemes = []
+extra_net_naming_map = []
+foreach scheme: get_option('extra-net-naming-schemes').split(',')
+ if scheme != ''
+ name = scheme.split('=')[0]
+ value = scheme.split('=')[1]
+ NAME = name.underscorify().to_upper()
+ VALUE = []
+ foreach field: value.split('+')
+ VALUE += 'NAMING_' + field.underscorify().to_upper()
+ endforeach
+ extra_net_naming_schemes += 'NAMING_@0@ = @1@,'.format(NAME, '|'.join(VALUE))
+ extra_net_naming_map += '{ "@0@", NAMING_@1@ },'.format(name, NAME)
+ endif
+endforeach
+conf.set('EXTRA_NET_NAMING_SCHEMES', ' '.join(extra_net_naming_schemes))
+conf.set('EXTRA_NET_NAMING_MAP', ' '.join(extra_net_naming_map))
+
default_net_naming_scheme = get_option('default-net-naming-scheme')
conf.set_quoted('DEFAULT_NET_NAMING_SCHEME', default_net_naming_scheme)
if default_net_naming_scheme != 'latest'
option('default-hierarchy', type : 'combo',
choices : ['legacy', 'hybrid', 'unified'], value : 'unified',
description : 'default cgroup hierarchy')
+option('extra-net-naming-schemes', type : 'string',
+ description : 'comma-separated list of extra net.naming-scheme= definitions')
option('default-net-naming-scheme', type : 'string', value : 'latest',
description : 'default net.naming-scheme= value')
option('status-unit-format-default', type : 'combo',
{ "v247", NAMING_V247 },
{ "v249", NAMING_V249 },
/* … add more schemes here, as the logic to name devices is updated … */
+
+ EXTRA_NET_NAMING_MAP
};
const NamingScheme* naming_scheme_from_name(const char *name) {
- if (streq(name, "latest"))
- return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
+ /* "latest" may either be defined explicitly by the extra map, in which case we we will find it in
+ * the table like any other name. After iterating through the table, we check for "latest" again,
+ * which means that if not mapped explicitly, it maps to the last defined entry, whatever that is. */
for (size_t i = 0; i < ELEMENTSOF(naming_schemes); i++)
if (streq(naming_schemes[i].name, name))
return naming_schemes + i;
+ if (streq(name, "latest"))
+ return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
+
return NULL;
}
NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT,
NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
+ EXTRA_NET_NAMING_SCHEMES
+
_NAMING_SCHEME_FLAGS_INVALID = -EINVAL,
} NamingSchemeFlags;