| udev.h | | udev.h | |
| | | | |
| skipping to change at line 27 | | skipping to change at line 27 | |
| * with this program; if not, write to the Free Software Foundation, In
c., | | * with this program; if not, write to the Free Software Foundation, In
c., | |
| * 675 Mass Ave, Cambridge, MA 02139, USA. | | * 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | | * | |
| */ | | */ | |
| | | | |
| #ifndef _UDEV_H_ | | #ifndef _UDEV_H_ | |
| #define _UDEV_H_ | | #define _UDEV_H_ | |
| | | | |
| #include <sys/types.h> | | #include <sys/types.h> | |
| #include <sys/param.h> | | #include <sys/param.h> | |
|
| #include "libsysfs/sysfs/libsysfs.h" | | | |
| #include "list.h" | | #include "list.h" | |
|
| | | #include "logging.h" | |
| | | #include "udev_libc_wrapper.h" | |
| | | #include "udev_version.h" | |
| | | | |
|
| #define COMMENT_CHARACTER '#' | | #define COMMENT_CHARACTER '#' | |
| #define PATH_TO_NAME_CHAR '@' | | #define PATH_TO_NAME_CHAR '@' | |
| #define LINE_SIZE 512 | | #define LINE_SIZE 512 | |
| #define NAME_SIZE 128 | | #define NAME_SIZE 128 | |
| #define PATH_SIZE 256 | | #define PATH_SIZE 256 | |
| #define USER_SIZE 32 | | #define USER_SIZE 32 | |
| #define SEQNUM_SIZE 32 | | #define SEQNUM_SIZE 32 | |
| #define VALUE_SIZE 128 | | #define VALUE_SIZE 128 | |
| | | | |
|
| #define DEFAULT_PARTITIONS_COUNT 15 | | #define DEFAULT_PARTITIONS_COUNT 15 | |
| #define UDEV_ALARM_TIMEOUT 180 | | #define UDEV_ALARM_TIMEOUT 180 | |
| | | | |
|
| #define DB_DIR ".udev/db" | | #define UDEV_MAX(a,b) ((a) > (b) ? (a) : (b)) | |
| | | | |
| | | /* pipes */ | |
| | | #define READ_END 0 | |
| | | #define WRITE_END 1 | |
| | | | |
| | | #define DB_DIR ".udev/db" | |
| | | | |
| struct udev_rules; | | struct udev_rules; | |
| | | | |
|
| enum device_type { | | struct sysfs_device { | |
| DEV_UNKNOWN, | | struct list_head node; /* for device cache */ | |
| DEV_CLASS, | | struct sysfs_device *parent; /* already cached parent*/ | |
| DEV_BLOCK, | | char devpath[PATH_SIZE]; | |
| DEV_NET, | | char subsystem[NAME_SIZE]; /* $class/$bus/"drivers" */ | |
| DEV_DEVICE, | | char kernel_name[NAME_SIZE]; /* device instance name */ | |
| | | char kernel_number[NAME_SIZE]; | |
| | | char driver[NAME_SIZE]; /* device driver name */ | |
| }; | | }; | |
| | | | |
| struct udevice { | | struct udevice { | |
|
| char devpath[PATH_SIZE]; | | /* device event */ | |
| char subsystem[NAME_SIZE]; | | struct sysfs_device *dev; /* points to dev_local by de | |
| | | fault */ | |
| | | struct sysfs_device dev_local; | |
| | | struct sysfs_device *dev_parent; /* current parent device use | |
| | | d for matching */ | |
| char action[NAME_SIZE]; | | char action[NAME_SIZE]; | |
| | | | |
|
| enum device_type type; | | /* node */ | |
| char name[PATH_SIZE]; | | char name[PATH_SIZE]; | |
| struct list_head symlink_list; | | struct list_head symlink_list; | |
| int symlink_final; | | int symlink_final; | |
| char owner[USER_SIZE]; | | char owner[USER_SIZE]; | |
| int owner_final; | | int owner_final; | |
| char group[USER_SIZE]; | | char group[USER_SIZE]; | |
| int group_final; | | int group_final; | |
| mode_t mode; | | mode_t mode; | |
| int mode_final; | | int mode_final; | |
| dev_t devt; | | dev_t devt; | |
|
| | | | |
| | | /* event processing */ | |
| struct list_head run_list; | | struct list_head run_list; | |
| int run_final; | | int run_final; | |
| struct list_head env_list; | | struct list_head env_list; | |
|
| | | | |
| char tmp_node[PATH_SIZE]; | | char tmp_node[PATH_SIZE]; | |
| int partitions; | | int partitions; | |
| int ignore_device; | | int ignore_device; | |
| int ignore_remove; | | int ignore_remove; | |
|
| char bus_id[NAME_SIZE]; | | | |
| char program_result[PATH_SIZE]; | | char program_result[PATH_SIZE]; | |
|
| char kernel_number[NAME_SIZE]; | | | |
| char kernel_name[NAME_SIZE]; | | | |
| int test_run; | | int test_run; | |
| }; | | }; | |
| | | | |
|
| extern int udev_init_device(struct udevice *udev, const char* devpath, cons | | /* udev_config.c */ | |
| t char *subsystem, const char *action); | | extern char udev_root[PATH_SIZE]; | |
| extern void udev_cleanup_device(struct udevice *udev); | | extern char udev_config_filename[PATH_SIZE]; | |
| extern dev_t get_devt(struct sysfs_class_device *class_dev); | | extern char udev_rules_filename[PATH_SIZE]; | |
| extern int udev_process_event(struct udev_rules *rules, struct udevice *ude | | extern int udev_log_priority; | |
| v); | | extern int udev_run; | |
| extern int udev_add_device(struct udevice *udev, struct sysfs_class_device | | extern void udev_config_init(void); | |
| *class_dev); | | | |
| extern int udev_remove_device(struct udevice *udev); | | /* udev_device.c */ | |
| extern void udev_init_config(void); | | extern struct udevice *udev_device_init(void); | |
| extern int udev_start(void); | | extern void udev_device_cleanup(struct udevice *udev); | |
| extern int udev_make_node(struct udevice *udev, const char *file, dev_t dev | | extern int udev_device_event(struct udev_rules *rules, struct udevice *udev | |
| t, mode_t mode, uid_t uid, gid_t gid); | | ); | |
| | | extern dev_t udev_device_get_devt(struct udevice *udev); | |
| | | | |
| | | /* udev_sysfs.c */ | |
| | | extern char sysfs_path[PATH_SIZE]; | |
| | | extern int sysfs_init(void); | |
| | | extern void sysfs_cleanup(void); | |
| | | extern void sysfs_device_set_values(struct sysfs_device *dev, const char *d | |
| | | evpath, const char *subsystem); | |
| | | extern struct sysfs_device *sysfs_device_get(const char *devpath); | |
| | | extern struct sysfs_device *sysfs_device_get_parent(struct sysfs_device *de | |
| | | v); | |
| | | extern struct sysfs_device *sysfs_device_get_parent_with_subsystem(struct s | |
| | | ysfs_device *dev, const char *subsystem); | |
| | | extern char *sysfs_attr_get_value(const char *devpath, const char *attr_nam | |
| | | e); | |
| | | | |
|
| | | /* udev_node.c */ | |
| | | extern int udev_node_mknod(struct udevice *udev, const char *file, dev_t de | |
| | | vt, mode_t mode, uid_t uid, gid_t gid); | |
| | | extern int udev_node_add(struct udevice *udev, struct udevice *udev_old); | |
| | | extern void udev_node_remove_symlinks(struct udevice *udev); | |
| | | extern int udev_node_remove(struct udevice *udev); | |
| | | | |
| | | /* udev_db.c */ | |
| extern int udev_db_add_device(struct udevice *dev); | | extern int udev_db_add_device(struct udevice *dev); | |
| extern int udev_db_delete_device(struct udevice *dev); | | extern int udev_db_delete_device(struct udevice *dev); | |
| extern int udev_db_get_device(struct udevice *udev, const char *devpath); | | extern int udev_db_get_device(struct udevice *udev, const char *devpath); | |
| extern int udev_db_lookup_name(const char *name, char *devpath, size_t len)
; | | extern int udev_db_lookup_name(const char *name, char *devpath, size_t len)
; | |
| extern int udev_db_get_all_entries(struct list_head *name_list); | | extern int udev_db_get_all_entries(struct list_head *name_list); | |
| | | | |
|
| extern char sysfs_path[PATH_SIZE]; | | /* udev_utils.c */ | |
| extern char udev_root[PATH_SIZE]; | | struct name_entry { | |
| extern char udev_config_filename[PATH_SIZE]; | | struct list_head node; | |
| extern char udev_rules_filename[PATH_SIZE]; | | char name[PATH_SIZE]; | |
| extern int udev_log_priority; | | }; | |
| extern int udev_run; | | extern int log_priority(const char *priority); | |
| | | extern char *name_list_add(struct list_head *name_list, const char *name, i | |
| | | nt sort); | |
| | | extern char *name_list_key_add(struct list_head *name_list, const char *key | |
| | | , const char *value); | |
| | | extern void name_list_cleanup(struct list_head *name_list); | |
| | | extern int add_matching_files(struct list_head *name_list, const char *dirn | |
| | | ame, const char *suffix); | |
| | | | |
| | | /* udev_utils_string.c */ | |
| | | extern int strcmp_pattern(const char *p, const char *s); | |
| | | extern int string_is_true(const char *str); | |
| | | extern void remove_trailing_chars(char *path, char c); | |
| | | extern int utf8_encoded_valid_unichar(const char *str); | |
| | | extern int replace_untrusted_chars(char *str); | |
| | | | |
| | | /* udev_utils_file.c */ | |
| | | extern int create_path(const char *path); | |
| | | extern int delete_path(const char *path); | |
| | | extern int file_map(const char *filename, char **buf, size_t *bufsize); | |
| | | extern void file_unmap(void *buf, size_t bufsize); | |
| | | extern int unlink_secure(const char *filename); | |
| | | extern size_t buf_get_line(const char *buf, size_t buflen, size_t cur); | |
| | | | |
| | | /* udev_utils_run.c */ | |
| | | extern int pass_env_to_socket(const char *name, const char *devpath, const | |
| | | char *action); | |
| | | extern int run_program(const char *command, const char *subsystem, | |
| | | char *result, size_t ressize, size_t *reslen, int log | |
| | | ); | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 15 change blocks. |
| 44 lines changed or deleted | | 109 lines changed or added | |
|
| udev_libc_wrapper.h | | udev_libc_wrapper.h | |
| | | | |
| skipping to change at line 68 | | skipping to change at line 68 | |
| # define __NR_inotify_add_watch 152 | | # define __NR_inotify_add_watch 152 | |
| # define __NR_inotify_rm_watch 156 | | # define __NR_inotify_rm_watch 156 | |
| #elif defined (__arm__) | | #elif defined (__arm__) | |
| # define __NR_inotify_init 316 | | # define __NR_inotify_init 316 | |
| # define __NR_inotify_add_watch 317 | | # define __NR_inotify_add_watch 317 | |
| # define __NR_inotify_rm_watch 318 | | # define __NR_inotify_rm_watch 318 | |
| #elif defined (__sh__) | | #elif defined (__sh__) | |
| # define __NR_inotify_init 290 | | # define __NR_inotify_init 290 | |
| # define __NR_inotify_add_watch 291 | | # define __NR_inotify_add_watch 291 | |
| # define __NR_inotify_rm_watch 292 | | # define __NR_inotify_rm_watch 292 | |
|
| | | #elif defined (__hppa__) | |
| | | # define __NR_inotify_init 269 | |
| | | # define __NR_inotify_add_watch 270 | |
| | | # define __NR_inotify_rm_watch 271 | |
| | | #elif defined (__mips__) | |
| | | # include <sgidefs.h> | |
| | | # if _MIPS_SIM == _MIPS_SIM_ABI32 | |
| | | # define __NR_Linux 4000 | |
| | | # define __NR_inotify_init (__NR_Linux + 284) | |
| | | # define __NR_inotify_add_watch (__NR_Linux + 285) | |
| | | # define __NR_inotify_rm_watch (__NR_Linux + 286) | |
| | | # elif _MIPS_SIM == _MIPS_SIM_ABI64 | |
| | | # define __NR_Linux 5000 | |
| | | # define __NR_inotify_init (__NR_Linux + 243) | |
| | | # define __NR_inotify_add_watch (__NR_Linux + 244) | |
| | | # define __NR_inotify_rm_watch (__NR_Linux + 245) | |
| | | # elif _MIPS_SIM == _MIPS_SIM_NABI32 | |
| | | # define __NR_Linux 6000 | |
| | | # define __NR_inotify_init (__NR_Linux + 247) | |
| | | # define __NR_inotify_add_watch (__NR_Linux + 248) | |
| | | # define __NR_inotify_rm_watch (__NR_Linux + 249) | |
| | | # endif | |
| #else | | #else | |
| #warning "inotify unsupported on this architecture!" | | #warning "inotify unsupported on this architecture!" | |
| #endif | | #endif | |
| #endif /* __NR_inotify_init */ | | #endif /* __NR_inotify_init */ | |
| | | | |
| /* dummy if we don't have the syscalls defined */ | | /* dummy if we don't have the syscalls defined */ | |
| #ifndef __NR_inotify_init | | #ifndef __NR_inotify_init | |
| static inline int inotify_init(void) | | static inline int inotify_init(void) | |
| { | | { | |
| return -1; | | return -1; | |
| | | | |
| skipping to change at line 138 | | skipping to change at line 160 | |
| #ifndef __FD_ZERO | | #ifndef __FD_ZERO | |
| #define __FD_ZERO(set) ((void) memset ((void*) (set), 0, sizeof (fd_set))) | | #define __FD_ZERO(set) ((void) memset ((void*) (set), 0, sizeof (fd_set))) | |
| #endif | | #endif | |
| | | | |
| /* missing in some lazy distros */ | | /* missing in some lazy distros */ | |
| #ifndef NETLINK_KOBJECT_UEVENT | | #ifndef NETLINK_KOBJECT_UEVENT | |
| #define NETLINK_KOBJECT_UEVENT 15 | | #define NETLINK_KOBJECT_UEVENT 15 | |
| #endif | | #endif | |
| | | | |
| #ifndef SO_RCVBUFFORCE | | #ifndef SO_RCVBUFFORCE | |
|
| | | #if defined(__alpha__) || defined(__hppa__) || defined(__sparc__) || define | |
| | | d(__sparc_v9__) | |
| | | #define SO_RCVBUFFORCE 0x100b | |
| | | #else | |
| #define SO_RCVBUFFORCE 33 | | #define SO_RCVBUFFORCE 33 | |
| #endif | | #endif | |
|
| | | #endif | |
| | | | |
| extern uid_t lookup_user(const char *user); | | extern uid_t lookup_user(const char *user); | |
| extern gid_t lookup_group(const char *group); | | extern gid_t lookup_group(const char *group); | |
| | | | |
| extern size_t strlcpy(char *dst, const char *src, size_t size); | | extern size_t strlcpy(char *dst, const char *src, size_t size); | |
| extern size_t strlcat(char *dst, const char *src, size_t size); | | extern size_t strlcat(char *dst, const char *src, size_t size); | |
| | | | |
| #endif /* _UDEV_LIBC_WRAPPER_H_ */ | | #endif /* _UDEV_LIBC_WRAPPER_H_ */ | |
| | | | |
End of changes. 3 change blocks. |
| 0 lines changed or deleted | | 27 lines changed or added | |
|
| udev_rules.h | | udev_rules.h | |
| | | | |
| skipping to change at line 25 | | skipping to change at line 25 | |
| * | | * | |
| * You should have received a copy of the GNU General Public License al
ong | | * You should have received a copy of the GNU General Public License al
ong | |
| * with this program; if not, write to the Free Software Foundation, In
c., | | * with this program; if not, write to the Free Software Foundation, In
c., | |
| * 675 Mass Ave, Cambridge, MA 02139, USA. | | * 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | | * | |
| */ | | */ | |
| | | | |
| #ifndef UDEV_RULES_H | | #ifndef UDEV_RULES_H | |
| #define UDEV_RULES_H | | #define UDEV_RULES_H | |
| | | | |
|
| #include "libsysfs/sysfs/libsysfs.h" | | | |
| #include "udev.h" | | #include "udev.h" | |
| #include "list.h" | | #include "list.h" | |
| | | | |
| #define PAIRS_MAX 5 | | #define PAIRS_MAX 5 | |
| #define RULEFILE_SUFFIX ".rules" | | #define RULEFILE_SUFFIX ".rules" | |
| | | | |
| enum key_operation { | | enum key_operation { | |
| KEY_OP_UNSET, | | KEY_OP_UNSET, | |
| KEY_OP_MATCH, | | KEY_OP_MATCH, | |
| KEY_OP_NOMATCH, | | KEY_OP_NOMATCH, | |
| | | | |
| skipping to change at line 107 | | skipping to change at line 106 | |
| }; | | }; | |
| | | | |
| struct udev_rules { | | struct udev_rules { | |
| char *buf; | | char *buf; | |
| size_t bufsize; | | size_t bufsize; | |
| size_t current; | | size_t current; | |
| int resolve_names; | | int resolve_names; | |
| }; | | }; | |
| | | | |
| extern int udev_rules_init(struct udev_rules *rules, int resolve_names); | | extern int udev_rules_init(struct udev_rules *rules, int resolve_names); | |
|
| extern void udev_rules_close(struct udev_rules *rules); | | extern void udev_rules_cleanup(struct udev_rules *rules); | |
| | | | |
| extern void udev_apply_format(struct udevice *udev, char *string, size_t ma | | | |
| xsize, | | | |
| struct sysfs_class_device *class_dev, struct s | | | |
| ysfs_device *sysfs_device); | | | |
| | | | |
| extern void udev_rules_iter_init(struct udev_rules *rules); | | extern void udev_rules_iter_init(struct udev_rules *rules); | |
| extern struct udev_rule *udev_rules_iter_next(struct udev_rules *rules); | | extern struct udev_rule *udev_rules_iter_next(struct udev_rules *rules); | |
| extern struct udev_rule *udev_rules_iter_label(struct udev_rules *rules, co
nst char *label); | | extern struct udev_rule *udev_rules_iter_label(struct udev_rules *rules, co
nst char *label); | |
| | | | |
|
| extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *ud | | extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *ud | |
| ev, | | ev); | |
| struct sysfs_class_device *class_dev); | | extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *ude | |
| extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *ude | | v); | |
| v, | | | |
| struct sysfs_class_device *class_dev, struct s | | extern void udev_rules_apply_format(struct udevice *udev, char *string, siz | |
| ysfs_device *sysfs_dev); | | e_t maxsize); | |
| | | | |
| #endif | | #endif | |
| | | | |
End of changes. 3 change blocks. |
| 14 lines changed or deleted | | 8 lines changed or added | |
|
| udevd.h | | udevd.h | |
| | | | |
| skipping to change at line 34 | | skipping to change at line 34 | |
| #define UDEV_MAGIC "udevd_" UDEV_VERSION | | #define UDEV_MAGIC "udevd_" UDEV_VERSION | |
| #define UDEVD_SOCK_PATH "/org/kernel/udev/udevd" | | #define UDEVD_SOCK_PATH "/org/kernel/udev/udevd" | |
| #define UDEVSEND_WAIT_MAX_SECONDS 3 | | #define UDEVSEND_WAIT_MAX_SECONDS 3 | |
| #define UDEVSEND_WAIT_LOOP_PER_SECOND 10 | | #define UDEVSEND_WAIT_LOOP_PER_SECOND 10 | |
| | | | |
| #define UDEVD_PRIORITY -4 | | #define UDEVD_PRIORITY -4 | |
| #define UDEV_PRIORITY -2 | | #define UDEV_PRIORITY -2 | |
| | | | |
| #define EVENT_QUEUE_DIR ".udev/queue" | | #define EVENT_QUEUE_DIR ".udev/queue" | |
| #define EVENT_FAILED_DIR ".udev/failed" | | #define EVENT_FAILED_DIR ".udev/failed" | |
|
| | | #define EVENT_SEQNUM ".udev/uevent_seqnum" | |
| | | | |
|
| /* maximum limit of runnig childs */ | | /* maximum limit of forked childs */ | |
| #define UDEVD_MAX_CHILDS 64 | | #define UDEVD_MAX_CHILDS 64 | |
| /* start to throttle forking if maximum number of running childs in our ses
sion is reached */ | | /* start to throttle forking if maximum number of running childs in our ses
sion is reached */ | |
| #define UDEVD_MAX_CHILDS_RUNNING 16 | | #define UDEVD_MAX_CHILDS_RUNNING 16 | |
| | | | |
| /* environment buffer, should match the kernel's size in lib/kobject_uevent
.h */ | | /* environment buffer, should match the kernel's size in lib/kobject_uevent
.h */ | |
|
| #define UEVENT_BUFFER_SIZE 1024 | | #define UEVENT_BUFFER_SIZE 2048 | |
| #define UEVENT_NUM_ENVP 32 | | #define UEVENT_NUM_ENVP 64 | |
| | | | |
| enum udevd_msg_type { | | enum udevd_msg_type { | |
| UDEVD_UNKNOWN, | | UDEVD_UNKNOWN, | |
| UDEVD_UEVENT_UDEVSEND, | | UDEVD_UEVENT_UDEVSEND, | |
|
| UDEVD_UEVENT_INITSEND, | | | |
| UDEVD_UEVENT_NETLINK, | | UDEVD_UEVENT_NETLINK, | |
| UDEVD_STOP_EXEC_QUEUE, | | UDEVD_STOP_EXEC_QUEUE, | |
| UDEVD_START_EXEC_QUEUE, | | UDEVD_START_EXEC_QUEUE, | |
| UDEVD_SET_LOG_LEVEL, | | UDEVD_SET_LOG_LEVEL, | |
| UDEVD_SET_MAX_CHILDS, | | UDEVD_SET_MAX_CHILDS, | |
| UDEVD_RELOAD_RULES, | | UDEVD_RELOAD_RULES, | |
| }; | | }; | |
| | | | |
| struct udevd_msg { | | struct udevd_msg { | |
| char magic[32]; | | char magic[32]; | |
| | | | |
End of changes. 4 change blocks. |
| 4 lines changed or deleted | | 4 lines changed or added | |
|