1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-26 03:22:00 +03:00
systemd/udev/udev_rules.h

135 lines
3.0 KiB
C
Raw Normal View History

/*
* Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
2008-09-10 04:40:42 +04:00
* Copyright (C) 2004-2008 Kay Sievers <kay.sievers@vrfy.org>
*
2008-09-10 04:40:42 +04:00
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
2008-09-10 04:40:42 +04:00
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UDEV_RULES_H
#define UDEV_RULES_H
[PATCH] udevdb prototype Here's an "idea" of what I had in mind for udevdb. Let me preface the code with a few remarks: 1) I was expecting to write this udevdb for udev to keep track of devices. I was planning an external package that depends upon udev to provide an external API to the udevdb database. The calls for the interface would be read only access. Not sure how you want to do packaging, if having a separate package is ok or having it included in udev. 2) I created it as it is because udev isn't a daemon. So, the open database call doesn't take any parameters. My plan was to create a udevdb_init function that took arguments for initializing the db to start, where you could specify in memory only or a file location. This can all be filled in. 3) I hacked the Makefile to get it to work. Not sure how you'd want that in the future. 4) This assumes TDB has been installed elsewhere, you would need to edit your Makefile and point it to the header and library locations. How do you want to do TDB in udev? Do you want to just reference it and make udev dependent on that package being installed. Or should we do what samba does and include a limited tdb version in udev? 5) Again, I hacked udev into your existing code. In the future, I'd probably make a function around the filling out the udevice before calling the store command. Didn't know if you wanted to change your add device function to use struct udevice rather than having everything separate. 6) Not sure what we should include in the udevice structure that's stored by udev. I made a stab at a first shot - we can add and remove of course, this was a first pass. I've come to realize - with you including libsysfs in udev, the "external" interface that references udevdb could make use of getting information from through libsysfs from sysfs and doesn't need to be in udevdb. 7) I could write a namedevdb for namedev's device management if you wanted.
2003-08-06 10:57:23 +04:00
#include "udev.h"
#define PAIRS_MAX 5
enum key_operation {
KEY_OP_UNSET,
KEY_OP_MATCH,
KEY_OP_NOMATCH,
KEY_OP_ADD,
KEY_OP_ASSIGN,
KEY_OP_ASSIGN_FINAL,
};
struct key {
enum key_operation operation;
size_t val_off;
};
struct key_pair {
struct key key;
size_t key_name_off;
};
struct key_pairs {
int count;
struct key_pair keys[PAIRS_MAX];
};
enum import_type {
IMPORT_UNSET,
IMPORT_PROGRAM,
IMPORT_FILE,
IMPORT_PARENT,
};
enum escape_type {
ESCAPE_UNSET,
ESCAPE_NONE,
ESCAPE_REPLACE,
};
struct udev_rule {
struct key action;
struct key devpath;
struct key kernel;
struct key subsystem;
struct key driver;
struct key_pairs attr;
struct key kernels;
struct key subsystems;
struct key drivers;
struct key_pairs attrs;
struct key_pairs env;
struct key program;
struct key result;
struct key import;
enum import_type import_type;
2007-06-03 02:01:46 +04:00
struct key test;
mode_t test_mode_mask;
struct key run;
struct key wait_for;
struct key label;
struct key goto_label;
size_t goto_rule_off;
struct key name;
struct key symlink;
2007-07-16 15:29:28 +04:00
struct key symlink_match;
struct key owner;
struct key group;
2008-04-18 23:07:29 +04:00
struct key mode;
enum escape_type string_escape;
unsigned int link_priority;
2008-04-21 21:00:54 +04:00
int event_timeout;
unsigned int partitions;
unsigned int last_rule:1,
run_ignore_error:1,
ignore_device:1,
ignore_remove:1;
size_t bufsize;
char buf[];
};
struct udev_rules {
struct udev *udev;
char *buf;
size_t bufsize;
int resolve_names;
};
struct udev_rules_iter {
struct udev_rules *rules;
size_t current;
};
extern int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_names);
extern void udev_rules_cleanup(struct udev_rules *rules);
extern void udev_rules_iter_init(struct udev_rules_iter *iter, struct udev_rules *rules);
extern struct udev_rule *udev_rules_iter_next(struct udev_rules_iter *iter);
extern struct udev_rule *udev_rules_iter_goto(struct udev_rules_iter *iter, size_t rule_off);
extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev);
extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev);
extern int udev_rules_run(struct udevice *udev);
extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize);
#endif