Hi!

On 13:49 Mon 02 Mar     , Daniel Baluta wrote:
> Hello ,
> 
> What is the difference between those two functions?
> 
> I've looked through the source code and i found this:
> 
> 
>  int sock_create(int family, int type, int protocol, struct socket **res)
> {
>          return __sock_create(current->nsproxy->net_ns, family, type,
> protocol, res, 0);
> }
> 
> int sock_create_kern(int family, int type, int protocol, struct socket **res)
> {
>          return __sock_create(&init_net, family, type, protocol, res, 1);
> }
> 
> Any ideas?

Let's see...

- current refers to the task_struct as defined in include/linux/sched.h
- current->nsproxy->net_ns points to the network namespace "struct net" of
  the running process as defined in include/net/net_namespace.h
- the last parameter of "__sock_create" is "int kern"

My guess is that you use the first one if you in a system call and you are
creating a socket for the process - and the second one if you are anywhere in
the kernel and want to create a socket, because you have some client or server
running in kernel mode (e.g. nfs). I think interrupts have to be enabled when
calling any of these functions.

        -Michi
-- 
programing a layer 3+4 network protocol for mesh networks
see http://michaelblizek.twilightparadox.com


--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to