mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
Initial s390-tools-2.0.0 import
This commit is based on the s390-tools-1.39.0 version. Changes on top of s390-tools-1.39.0: - Add MIT license to all source files - Add LICENSE file - Transform REAMDE to README.md (markdown) - Add AUTHORS.md file - Add CONTRIBUTING.md file - Move changelog from README to CHANGELOG.md file Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com> Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
This commit is contained in:
129
zdev/include/namespace.h
Normal file
129
zdev/include/namespace.h
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* 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 5
|
||||
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 */
|
||||
Reference in New Issue
Block a user