mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
The AP device type initially allows only the setting of type attributes 'apmask' and 'aqmask'. Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com> Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
130 lines
4.8 KiB
C
130 lines
4.8 KiB
C
/*
|
|
* zdev - Modify and display the persistent configuration of devices
|
|
*
|
|
* Copyright IBM Corp. 2016, 2017
|
|
*
|
|
* s390-tools is free software; you can redistribute it and/or modify
|
|
* it under the terms of the MIT license. See LICENSE for details.
|
|
*/
|
|
|
|
#ifndef NAMESPACE_H
|
|
#define NAMESPACE_H
|
|
|
|
#include "exit_code.h"
|
|
#include "misc.h"
|
|
|
|
struct ns_range_iterator {
|
|
void *devid;
|
|
void *devid_last;
|
|
char *id;
|
|
};
|
|
|
|
/**
|
|
* ns_range_for_each - Loop over all valid IDs in a range
|
|
* @ns: The namespace for the IDs
|
|
* @range: The range in text form
|
|
* @it: The range iterator object. This must be allocated using
|
|
* ns_range_iterator_new(). After the loop it must be freed using
|
|
* ns_range_iterator_free(). During the loop, the ID field of the
|
|
* iterator object contains the current ID as a string.
|
|
*/
|
|
#define ns_range_for_each(ns, range, it) \
|
|
for ((ns)->range_start((it), (range)); (it)->id; \
|
|
(ns)->range_next((it)))
|
|
|
|
struct namespace;
|
|
struct subtype;
|
|
|
|
/* NULL-terminated list of namespaces. */
|
|
#define NUM_NAMESPACES 6
|
|
extern struct namespace *namespaces[NUM_NAMESPACES + 1];
|
|
|
|
/* struct namespace - Definition of a device ID namespace
|
|
* @devname: Short name for devices of this namespace
|
|
* @is_id_valid: Check if string is a valid device ID and print corresponding
|
|
* error messages if requested.
|
|
* @is_id_similar: Optional: Check if an ID looks similar to a namespace ID.
|
|
* ID doesn't have to be a valid ID.
|
|
* @cmp_ids: Compare two device IDs (same return codes as strcmp)
|
|
* @normalize_id: Return a newly allocated string containing a normalized ID
|
|
* @parse_id: Return a newly allocated parsed device ID object. Display
|
|
* warnings for invalid IDs if specified.
|
|
* @cmp_parsed_ids: Compare two parsed device IDs (same return codes as strcmp)
|
|
* @qsort_cmp: Compare two device IDs for strlist_sort_unique
|
|
*
|
|
* @hash_buckets: Optional: Number of hash buckets to use for device ID hashes
|
|
* @hash_parsed_id: Optional: Return hash bucket for specified ID in parsed
|
|
* format
|
|
*
|
|
* @is_id_range_valid: Check if string is a valid range of device IDs
|
|
* @num_ids_in_range: Return the number of device IDs in the specified range
|
|
* @is_id_in_range: Check if the specified ID is within the range
|
|
* @range_start: If the specified range is a valid range in this namespace
|
|
* allocate and return a corresponding range iterator object,
|
|
* otherwise return NULL.
|
|
* @range_next: Move the range iterator to the next device ID in range. If
|
|
* there is no next device ID in range, release the range iterator
|
|
* object and return false.
|
|
*
|
|
* @is_blacklist_active: Optional callback: Check if a blacklist is active.
|
|
* @is_id_blacklisted: Optional callback: Check if specified ID is on the
|
|
* blacklist.
|
|
* @is_id_range_blacklisted: Optional callback: Check if at least one ID of
|
|
* the specified ID range is on the blacklist.
|
|
* @unblacklist_id: Optional callback: Remove specified ID from blacklist.
|
|
* @unblacklist_id_range: Optional callback: Remove specified ID range from
|
|
* blacklist.
|
|
* @blacklist_persist: Optional callback: Persistently remove all configured
|
|
* devices of this namespace from blacklist.
|
|
*/
|
|
struct namespace {
|
|
const char * devname;
|
|
|
|
/* IDs. */
|
|
exit_code_t (*is_id_valid)(const char *, err_t);
|
|
bool (*is_id_similar)(const char *);
|
|
int (*cmp_ids)(const char *, const char *);
|
|
char * (*normalize_id)(const char *);
|
|
void * (*parse_id)(const char *, err_t);
|
|
int (*cmp_parsed_ids)(const void *, const void *);
|
|
int (*qsort_cmp)(const void *, const void *);
|
|
|
|
/* ID Hash. */
|
|
int hash_buckets;
|
|
int (*hash_parsed_id)(const void *);
|
|
|
|
/* Ranges. */
|
|
exit_code_t (*is_id_range_valid)(const char *, err_t);
|
|
unsigned long (*num_ids_in_range)(const char *);
|
|
bool (*is_id_in_range)(const char *, const char *);
|
|
|
|
void (*range_start)(struct ns_range_iterator *,
|
|
const char *);
|
|
void (*range_next)(struct ns_range_iterator *);
|
|
|
|
/* Blacklist. */
|
|
bool (*is_blacklist_active)(void);
|
|
bool (*is_id_blacklisted)(const char *);
|
|
bool (*is_id_range_blacklisted)(const char *);
|
|
void (*unblacklist_id)(const char *);
|
|
void (*unblacklist_id_range)(const char *);
|
|
exit_code_t (*blacklist_persist)(void);
|
|
};
|
|
|
|
exit_code_t namespace_exit(void);
|
|
void namespace_set_modified(struct namespace *);
|
|
|
|
int namespaces_index(struct namespace *);
|
|
bool namespaces_is_id_valid(const char *);
|
|
bool namespaces_is_id_range_valid(const char *);
|
|
bool namespaces_device_exists(struct namespace *, const char *,
|
|
config_t, struct subtype **);
|
|
|
|
struct ns_range_iterator *ns_range_iterator_new(void);
|
|
void ns_range_iterator_free(struct ns_range_iterator *);
|
|
|
|
bool ns_is_id_valid(struct namespace *, const char *);
|
|
bool ns_is_id_range_valid(struct namespace *, const char *);
|
|
|
|
#endif /* NAMESPACE_H */
|