1#ifndef __LINUX_KMOD_H__
2#define __LINUX_KMOD_H__
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/stddef.h>
23#include <linux/errno.h>
24#include <linux/compiler.h>
25
26#define KMOD_PATH_LEN 256
27
28#ifdef CONFIG_KMOD
29
30
31extern int request_module(const char * name, ...) __attribute__ ((format (printf, 1, 2)));
32#else
33static inline int request_module(const char * name, ...) { return -ENOSYS; }
34#endif
35
36#define try_then_request_module(x, mod...) ((x) ?: (request_module(mod), (x)))
37
38struct key;
39struct file;
40struct subprocess_info;
41
42
43struct subprocess_info *call_usermodehelper_setup(char *path,
44 char **argv, char **envp);
45
46
47void call_usermodehelper_setkeys(struct subprocess_info *info,
48 struct key *session_keyring);
49int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info,
50 struct file **filp);
51void call_usermodehelper_setcleanup(struct subprocess_info *info,
52 void (*cleanup)(char **argv, char **envp));
53
54enum umh_wait {
55 UMH_NO_WAIT = -1,
56 UMH_WAIT_EXEC = 0,
57 UMH_WAIT_PROC = 1,
58};
59
60
61int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait);
62
63
64
65void call_usermodehelper_freeinfo(struct subprocess_info *info);
66
67static inline int
68call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait)
69{
70 struct subprocess_info *info;
71
72 info = call_usermodehelper_setup(path, argv, envp);
73 if (info == NULL)
74 return -ENOMEM;
75 return call_usermodehelper_exec(info, wait);
76}
77
78static inline int
79call_usermodehelper_keys(char *path, char **argv, char **envp,
80 struct key *session_keyring, enum umh_wait wait)
81{
82 struct subprocess_info *info;
83
84 info = call_usermodehelper_setup(path, argv, envp);
85 if (info == NULL)
86 return -ENOMEM;
87
88 call_usermodehelper_setkeys(info, session_keyring);
89 return call_usermodehelper_exec(info, wait);
90}
91
92extern void usermodehelper_init(void);
93
94struct file;
95extern int call_usermodehelper_pipe(char *path, char *argv[], char *envp[],
96 struct file **filp);
97
98#endif
99