summaryrefslogtreecommitdiff
path: root/udev/udev-rules.h
diff options
context:
space:
mode:
Diffstat (limited to 'udev/udev-rules.h')
-rw-r--r--udev/udev-rules.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/udev/udev-rules.h b/udev/udev-rules.h
new file mode 100644
index 0000000000..d8f2f367c9
--- /dev/null
+++ b/udev/udev-rules.h
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (C) 2004-2008 Kay Sievers <kay.sievers@vrfy.org>
+ *
+ * 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.
+ *
+ * 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
+
+#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;
+ 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;
+ struct key symlink_match;
+ struct key owner;
+ struct key group;
+ struct key mode;
+ enum escape_type string_escape;
+
+ unsigned int link_priority;
+ 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 udev_event *event);
+extern int udev_rules_get_run(struct udev_rules *rules, struct udev_event *event);
+extern int udev_rules_run(struct udev_event *event);
+
+extern void udev_rules_apply_format(struct udev_event *event, char *string, size_t maxsize);
+
+#endif