Blame view

include/linux/kmod.h 3.12 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  #ifndef __LINUX_KMOD_H__
  #define __LINUX_KMOD_H__
  
  /*
   *	include/linux/kmod.h
   *
   *      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, write to the Free Software
   *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
7888e7ff4   David Howells   [PATCH] Keys: Pas...
21
  #include <linux/stddef.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  #include <linux/errno.h>
  #include <linux/compiler.h>
  
  #define KMOD_PATH_LEN 256
  
  #ifdef CONFIG_KMOD
  /* modprobe exit status on success, -ve on error.  Return value
   * usually useless though. */
  extern int request_module(const char * name, ...) __attribute__ ((format (printf, 1, 2)));
  #else
  static inline int request_module(const char * name, ...) { return -ENOSYS; }
  #endif
  
  #define try_then_request_module(x, mod...) ((x) ?: (request_module(mod), (x)))
7888e7ff4   David Howells   [PATCH] Keys: Pas...
36
37
  
  struct key;
0ab4dc922   Jeremy Fitzhardinge   usermodehelper: s...
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  struct file;
  struct subprocess_info;
  
  /* Allocate a subprocess_info structure */
  struct subprocess_info *call_usermodehelper_setup(char *path,
  						  char **argv, char **envp);
  
  /* Set various pieces of state into the subprocess_info structure */
  void call_usermodehelper_setkeys(struct subprocess_info *info,
  				 struct key *session_keyring);
  int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info,
  				  struct file **filp);
  void call_usermodehelper_setcleanup(struct subprocess_info *info,
  				    void (*cleanup)(char **argv, char **envp));
86313c488   Jeremy Fitzhardinge   usermodehelper: T...
52
53
54
55
56
  enum umh_wait {
  	UMH_NO_WAIT = -1,	/* don't wait at all */
  	UMH_WAIT_EXEC = 0,	/* wait for the exec, but not the process */
  	UMH_WAIT_PROC = 1,	/* wait for the process to complete */
  };
0ab4dc922   Jeremy Fitzhardinge   usermodehelper: s...
57
  /* Actually execute the sub-process */
86313c488   Jeremy Fitzhardinge   usermodehelper: T...
58
  int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait);
0ab4dc922   Jeremy Fitzhardinge   usermodehelper: s...
59
60
61
62
  
  /* Free the subprocess_info. This is only needed if you're not going
     to call call_usermodehelper_exec */
  void call_usermodehelper_freeinfo(struct subprocess_info *info);
7888e7ff4   David Howells   [PATCH] Keys: Pas...
63
64
  
  static inline int
86313c488   Jeremy Fitzhardinge   usermodehelper: T...
65
  call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait)
7888e7ff4   David Howells   [PATCH] Keys: Pas...
66
  {
0ab4dc922   Jeremy Fitzhardinge   usermodehelper: s...
67
68
69
70
71
72
73
74
75
76
  	struct subprocess_info *info;
  
  	info = call_usermodehelper_setup(path, argv, envp);
  	if (info == NULL)
  		return -ENOMEM;
  	return call_usermodehelper_exec(info, wait);
  }
  
  static inline int
  call_usermodehelper_keys(char *path, char **argv, char **envp,
86313c488   Jeremy Fitzhardinge   usermodehelper: T...
77
  			 struct key *session_keyring, enum umh_wait wait)
0ab4dc922   Jeremy Fitzhardinge   usermodehelper: s...
78
79
80
81
82
83
84
85
86
  {
  	struct subprocess_info *info;
  
  	info = call_usermodehelper_setup(path, argv, envp);
  	if (info == NULL)
  		return -ENOMEM;
  
  	call_usermodehelper_setkeys(info, session_keyring);
  	return call_usermodehelper_exec(info, wait);
7888e7ff4   David Howells   [PATCH] Keys: Pas...
87
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
  extern void usermodehelper_init(void);
e239ca540   Andi Kleen   [PATCH] Create ca...
89
90
91
  struct file;
  extern int call_usermodehelper_pipe(char *path, char *argv[], char *envp[],
  				    struct file **filp);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
  #endif /* __LINUX_KMOD_H__ */