* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <20081031215900.810348746-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
@ 2008-11-06 13:22 ` Michael Kerrisk
[not found] ` <517f3f820811060522i7b3518aen47907a34b38adee9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Michael Kerrisk @ 2008-11-06 13:22 UTC (permalink / raw)
To: Daniel Lezcano
Cc: ebiederm-aS9lmoZGLiVWk0Htik3J/w,
vivien.chappelier-L+G57L1VLRbR7s880joybQ,
andreas.aaen-546VmZ+UeKYX2WXlbB3fKg,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-api-u79uwXL29TY76Z2rM5mHXA
Hi Daniel,
Please CC linux-api on API/ABI changes.
See Documentation/SubmitChecklist and
http://thread.gmane.org/gmane.linux.ltp/5658.
Thanks,
Michael
On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
> This patch adds the socketat syscall which allows to specify in
> which network namespace we want to create a socket. The network
> namespace destination is referred by a socket fd previously opened
> in the destination network namespace.
>
> Signed-off-by: Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
> ---
> arch/x86/include/asm/unistd_32.h | 1
> arch/x86/include/asm/unistd_64.h | 3 +-
> arch/x86/kernel/syscall_table_32.S | 1
> include/linux/syscalls.h | 1
> kernel/sys_ni.c | 1
> net/socket.c | 45 +++++++++++++++++++++++++++++++++++++
> 6 files changed, 51 insertions(+), 1 deletion(-)
>
> Index: net-next-2.6/arch/x86/include/asm/unistd_32.h
> ===================================================================
> --- net-next-2.6.orig/arch/x86/include/asm/unistd_32.h
> +++ net-next-2.6/arch/x86/include/asm/unistd_32.h
> @@ -338,6 +338,7 @@
> #define __NR_dup3 330
> #define __NR_pipe2 331
> #define __NR_inotify_init1 332
> +#define __NR_socketat 333
>
> #ifdef __KERNEL__
>
> Index: net-next-2.6/arch/x86/include/asm/unistd_64.h
> ===================================================================
> --- net-next-2.6.orig/arch/x86/include/asm/unistd_64.h
> +++ net-next-2.6/arch/x86/include/asm/unistd_64.h
> @@ -653,7 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
> __SYSCALL(__NR_pipe2, sys_pipe2)
> #define __NR_inotify_init1 294
> __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
> -
> +#define __NR_socketat 295
> +__SYSCALL(__NR_socketat, sys_socketat)
>
> #ifndef __NO_STUBS
> #define __ARCH_WANT_OLD_READDIR
> Index: net-next-2.6/arch/x86/kernel/syscall_table_32.S
> ===================================================================
> --- net-next-2.6.orig/arch/x86/kernel/syscall_table_32.S
> +++ net-next-2.6/arch/x86/kernel/syscall_table_32.S
> @@ -332,3 +332,4 @@ ENTRY(sys_call_table)
> .long sys_dup3 /* 330 */
> .long sys_pipe2
> .long sys_inotify_init1
> + .long sys_socketat
> Index: net-next-2.6/net/socket.c
> ===================================================================
> --- net-next-2.6.orig/net/socket.c
> +++ net-next-2.6/net/socket.c
> @@ -1253,6 +1253,51 @@ out_release:
> return retval;
> }
>
> +asmlinkage long sys_socketat(int fd, int family, int type, int protocol)
> +{
> + int retval, fput_needed;
> + struct socket *sock;
> + struct socket *sockat;
> + struct net *net;
> + int flags;
> +
> + /* Check the SOCK_* constants for consistency. */
> + BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
> + BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
> + BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
> + BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
> +
> + flags = type & ~SOCK_TYPE_MASK;
> + if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
> + return -EINVAL;
> + type &= SOCK_TYPE_MASK;
> +
> + if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
> + flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
> +
> + sock = sockfd_lookup_light(fd, &retval, &fput_needed);
> + if (!sock)
> + goto out;
> +
> + net = sock_net(sock->sk);
> +
> + retval = __sock_create(net, family, type, protocol, &sockat, 0);
> + if (retval)
> + goto out_fput;
> +
> + retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
> + if (retval < 0)
> + goto out_release;
> +out_fput:
> + fput_light(sock->file, fput_needed);
> +out:
> + return retval;
> +
> +out_release:
> + sock_release(sockat);
> + goto out;
> +}
> +
> /*
> * Create a pair of connected sockets.
> */
> Index: net-next-2.6/include/linux/syscalls.h
> ===================================================================
> --- net-next-2.6.orig/include/linux/syscalls.h
> +++ net-next-2.6/include/linux/syscalls.h
> @@ -423,6 +423,7 @@ asmlinkage long sys_recvfrom(int, void _
> struct sockaddr __user *, int __user *);
> asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
> asmlinkage long sys_socket(int, int, int);
> +asmlinkage long sys_socketat(int, int, int, int);
> asmlinkage long sys_socketpair(int, int, int, int __user *);
> asmlinkage long sys_socketcall(int call, unsigned long __user *args);
> asmlinkage long sys_listen(int, int);
> Index: net-next-2.6/kernel/sys_ni.c
> ===================================================================
> --- net-next-2.6.orig/kernel/sys_ni.c
> +++ net-next-2.6/kernel/sys_ni.c
> @@ -40,6 +40,7 @@ cond_syscall(sys_send);
> cond_syscall(sys_recvfrom);
> cond_syscall(sys_recv);
> cond_syscall(sys_socket);
> +cond_syscall(sys_socketat);
> cond_syscall(sys_setsockopt);
> cond_syscall(compat_sys_setsockopt);
> cond_syscall(sys_getsockopt);
>
> --
> _______________________________________________
> Containers mailing list
> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
>
--
Michael Kerrisk Linux man-pages maintainer;
http://www.kernel.org/doc/man-pages/ Found a documentation bug?
http://www.kernel.org/doc/man-pages/reporting_bugs.html
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <517f3f820811060522i7b3518aen47907a34b38adee9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2008-11-06 13:27 ` Daniel Lezcano
2008-11-06 15:46 ` Michael Kerrisk
1 sibling, 0 replies; 11+ messages in thread
From: Daniel Lezcano @ 2008-11-06 13:27 UTC (permalink / raw)
To: Michael Kerrisk
Cc: ebiederm-aS9lmoZGLiVWk0Htik3J/w,
vivien.chappelier-L+G57L1VLRbR7s880joybQ,
andreas.aaen-546VmZ+UeKYX2WXlbB3fKg,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-api-u79uwXL29TY76Z2rM5mHXA
Michael Kerrisk wrote:
> Hi Daniel,
>
> Please CC linux-api on API/ABI changes.
>
> See Documentation/SubmitChecklist and
> http://thread.gmane.org/gmane.linux.ltp/5658.
Will do, thanks.
-- Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <517f3f820811060522i7b3518aen47907a34b38adee9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-06 13:27 ` Daniel Lezcano
@ 2008-11-06 15:46 ` Michael Kerrisk
[not found] ` <cfd18e0f0811060746l77fbe6fel83402ba543fccb38-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
1 sibling, 1 reply; 11+ messages in thread
From: Michael Kerrisk @ 2008-11-06 15:46 UTC (permalink / raw)
To: Michael Kerrisk
Cc: Daniel Lezcano, ebiederm-aS9lmoZGLiVWk0Htik3J/w,
vivien.chappelier-L+G57L1VLRbR7s880joybQ,
andreas.aaen-546VmZ+UeKYX2WXlbB3fKg,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-api-u79uwXL29TY76Z2rM5mHXA, Subrata Modak
> On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
>> This patch adds the socketat syscall which allows to specify in
>> which network namespace we want to create a socket. The network
>> namespace destination is referred by a socket fd previously opened
>> in the destination network namespace.
Daniel,
Is there any documentation for this system call, and/or test programs?
Cheers,
Michael
>> Signed-off-by: Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
>> ---
>> arch/x86/include/asm/unistd_32.h | 1
>> arch/x86/include/asm/unistd_64.h | 3 +-
>> arch/x86/kernel/syscall_table_32.S | 1
>> include/linux/syscalls.h | 1
>> kernel/sys_ni.c | 1
>> net/socket.c | 45 +++++++++++++++++++++++++++++++++++++
>> 6 files changed, 51 insertions(+), 1 deletion(-)
>>
>> Index: net-next-2.6/arch/x86/include/asm/unistd_32.h
>> ===================================================================
>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_32.h
>> +++ net-next-2.6/arch/x86/include/asm/unistd_32.h
>> @@ -338,6 +338,7 @@
>> #define __NR_dup3 330
>> #define __NR_pipe2 331
>> #define __NR_inotify_init1 332
>> +#define __NR_socketat 333
>>
>> #ifdef __KERNEL__
>>
>> Index: net-next-2.6/arch/x86/include/asm/unistd_64.h
>> ===================================================================
>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_64.h
>> +++ net-next-2.6/arch/x86/include/asm/unistd_64.h
>> @@ -653,7 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
>> __SYSCALL(__NR_pipe2, sys_pipe2)
>> #define __NR_inotify_init1 294
>> __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
>> -
>> +#define __NR_socketat 295
>> +__SYSCALL(__NR_socketat, sys_socketat)
>>
>> #ifndef __NO_STUBS
>> #define __ARCH_WANT_OLD_READDIR
>> Index: net-next-2.6/arch/x86/kernel/syscall_table_32.S
>> ===================================================================
>> --- net-next-2.6.orig/arch/x86/kernel/syscall_table_32.S
>> +++ net-next-2.6/arch/x86/kernel/syscall_table_32.S
>> @@ -332,3 +332,4 @@ ENTRY(sys_call_table)
>> .long sys_dup3 /* 330 */
>> .long sys_pipe2
>> .long sys_inotify_init1
>> + .long sys_socketat
>> Index: net-next-2.6/net/socket.c
>> ===================================================================
>> --- net-next-2.6.orig/net/socket.c
>> +++ net-next-2.6/net/socket.c
>> @@ -1253,6 +1253,51 @@ out_release:
>> return retval;
>> }
>>
>> +asmlinkage long sys_socketat(int fd, int family, int type, int protocol)
>> +{
>> + int retval, fput_needed;
>> + struct socket *sock;
>> + struct socket *sockat;
>> + struct net *net;
>> + int flags;
>> +
>> + /* Check the SOCK_* constants for consistency. */
>> + BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
>> + BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
>> + BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
>> + BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
>> +
>> + flags = type & ~SOCK_TYPE_MASK;
>> + if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
>> + return -EINVAL;
>> + type &= SOCK_TYPE_MASK;
>> +
>> + if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
>> + flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
>> +
>> + sock = sockfd_lookup_light(fd, &retval, &fput_needed);
>> + if (!sock)
>> + goto out;
>> +
>> + net = sock_net(sock->sk);
>> +
>> + retval = __sock_create(net, family, type, protocol, &sockat, 0);
>> + if (retval)
>> + goto out_fput;
>> +
>> + retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
>> + if (retval < 0)
>> + goto out_release;
>> +out_fput:
>> + fput_light(sock->file, fput_needed);
>> +out:
>> + return retval;
>> +
>> +out_release:
>> + sock_release(sockat);
>> + goto out;
>> +}
>> +
>> /*
>> * Create a pair of connected sockets.
>> */
>> Index: net-next-2.6/include/linux/syscalls.h
>> ===================================================================
>> --- net-next-2.6.orig/include/linux/syscalls.h
>> +++ net-next-2.6/include/linux/syscalls.h
>> @@ -423,6 +423,7 @@ asmlinkage long sys_recvfrom(int, void _
>> struct sockaddr __user *, int __user *);
>> asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
>> asmlinkage long sys_socket(int, int, int);
>> +asmlinkage long sys_socketat(int, int, int, int);
>> asmlinkage long sys_socketpair(int, int, int, int __user *);
>> asmlinkage long sys_socketcall(int call, unsigned long __user *args);
>> asmlinkage long sys_listen(int, int);
>> Index: net-next-2.6/kernel/sys_ni.c
>> ===================================================================
>> --- net-next-2.6.orig/kernel/sys_ni.c
>> +++ net-next-2.6/kernel/sys_ni.c
>> @@ -40,6 +40,7 @@ cond_syscall(sys_send);
>> cond_syscall(sys_recvfrom);
>> cond_syscall(sys_recv);
>> cond_syscall(sys_socket);
>> +cond_syscall(sys_socketat);
>> cond_syscall(sys_setsockopt);
>> cond_syscall(compat_sys_setsockopt);
>> cond_syscall(sys_getsockopt);
>>
>> --
>> _______________________________________________
>> Containers mailing list
>> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
>> https://lists.linux-foundation.org/mailman/listinfo/containers
>>
>
>
>
> --
> Michael Kerrisk Linux man-pages maintainer;
> http://www.kernel.org/doc/man-pages/ Found a documentation bug?
> http://www.kernel.org/doc/man-pages/reporting_bugs.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
git://git.kernel.org/pub/scm/docs/man-pages/man-pages.git
man-pages online: http://www.kernel.org/doc/man-pages/online_pages.html
Found a bug? http://www.kernel.org/doc/man-pages/reporting_bugs.html
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <cfd18e0f0811060746l77fbe6fel83402ba543fccb38-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
@ 2008-11-06 16:18 ` Daniel Lezcano
[not found] ` <491318DC.4000300-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Daniel Lezcano @ 2008-11-06 16:18 UTC (permalink / raw)
To: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w
Cc: ebiederm-aS9lmoZGLiVWk0Htik3J/w,
vivien.chappelier-L+G57L1VLRbR7s880joybQ,
andreas.aaen-546VmZ+UeKYX2WXlbB3fKg,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-api-u79uwXL29TY76Z2rM5mHXA, Subrata Modak
Michael Kerrisk wrote:
>> On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
>>> This patch adds the socketat syscall which allows to specify in
>>> which network namespace we want to create a socket. The network
>>> namespace destination is referred by a socket fd previously opened
>>> in the destination network namespace.
>
> Daniel,
>
> Is there any documentation for this system call, and/or test programs?
Not yet.
This small patch is a proposition to Andreas and Vivien to have a single
process being able to manage several network namespaces.
When a process unshares the network, it creates a socket which is used
as a socket control (it belongs to the network namespace). Each time a
network namespace is created, a socket control is created.
When the process has to create a socket for a specific network
namespace, it can use the socket control to specify it. This is the
purpose of the socketat syscall.
One example for a program in userspace:
int main(int argc, char *argv[])
{
const int maxunshare = 128;
int scs[maxunshare];
int i, fd;
for (i = 0; i < maxunshare; i++) {
scs[i] = socket(PF_INET, SOCK_DGRAM, 0);
unshare(CLONE_NEWNET);
}
....
/* I want to create a socket inside the network namespace #10 */
fd = socketat(scs[10], PF_INET, SOCKET_STREAM, 0);
....
bind, listen, etc ...
}
>>> Signed-off-by: Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
>>> ---
>>> arch/x86/include/asm/unistd_32.h | 1
>>> arch/x86/include/asm/unistd_64.h | 3 +-
>>> arch/x86/kernel/syscall_table_32.S | 1
>>> include/linux/syscalls.h | 1
>>> kernel/sys_ni.c | 1
>>> net/socket.c | 45 +++++++++++++++++++++++++++++++++++++
>>> 6 files changed, 51 insertions(+), 1 deletion(-)
>>>
>>> Index: net-next-2.6/arch/x86/include/asm/unistd_32.h
>>> ===================================================================
>>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_32.h
>>> +++ net-next-2.6/arch/x86/include/asm/unistd_32.h
>>> @@ -338,6 +338,7 @@
>>> #define __NR_dup3 330
>>> #define __NR_pipe2 331
>>> #define __NR_inotify_init1 332
>>> +#define __NR_socketat 333
>>>
>>> #ifdef __KERNEL__
>>>
>>> Index: net-next-2.6/arch/x86/include/asm/unistd_64.h
>>> ===================================================================
>>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_64.h
>>> +++ net-next-2.6/arch/x86/include/asm/unistd_64.h
>>> @@ -653,7 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
>>> __SYSCALL(__NR_pipe2, sys_pipe2)
>>> #define __NR_inotify_init1 294
>>> __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
>>> -
>>> +#define __NR_socketat 295
>>> +__SYSCALL(__NR_socketat, sys_socketat)
>>>
>>> #ifndef __NO_STUBS
>>> #define __ARCH_WANT_OLD_READDIR
>>> Index: net-next-2.6/arch/x86/kernel/syscall_table_32.S
>>> ===================================================================
>>> --- net-next-2.6.orig/arch/x86/kernel/syscall_table_32.S
>>> +++ net-next-2.6/arch/x86/kernel/syscall_table_32.S
>>> @@ -332,3 +332,4 @@ ENTRY(sys_call_table)
>>> .long sys_dup3 /* 330 */
>>> .long sys_pipe2
>>> .long sys_inotify_init1
>>> + .long sys_socketat
>>> Index: net-next-2.6/net/socket.c
>>> ===================================================================
>>> --- net-next-2.6.orig/net/socket.c
>>> +++ net-next-2.6/net/socket.c
>>> @@ -1253,6 +1253,51 @@ out_release:
>>> return retval;
>>> }
>>>
>>> +asmlinkage long sys_socketat(int fd, int family, int type, int protocol)
>>> +{
>>> + int retval, fput_needed;
>>> + struct socket *sock;
>>> + struct socket *sockat;
>>> + struct net *net;
>>> + int flags;
>>> +
>>> + /* Check the SOCK_* constants for consistency. */
>>> + BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
>>> + BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
>>> + BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
>>> + BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
>>> +
>>> + flags = type & ~SOCK_TYPE_MASK;
>>> + if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
>>> + return -EINVAL;
>>> + type &= SOCK_TYPE_MASK;
>>> +
>>> + if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
>>> + flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
>>> +
>>> + sock = sockfd_lookup_light(fd, &retval, &fput_needed);
>>> + if (!sock)
>>> + goto out;
>>> +
>>> + net = sock_net(sock->sk);
>>> +
>>> + retval = __sock_create(net, family, type, protocol, &sockat, 0);
>>> + if (retval)
>>> + goto out_fput;
>>> +
>>> + retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
>>> + if (retval < 0)
>>> + goto out_release;
>>> +out_fput:
>>> + fput_light(sock->file, fput_needed);
>>> +out:
>>> + return retval;
>>> +
>>> +out_release:
>>> + sock_release(sockat);
>>> + goto out;
>>> +}
>>> +
>>> /*
>>> * Create a pair of connected sockets.
>>> */
>>> Index: net-next-2.6/include/linux/syscalls.h
>>> ===================================================================
>>> --- net-next-2.6.orig/include/linux/syscalls.h
>>> +++ net-next-2.6/include/linux/syscalls.h
>>> @@ -423,6 +423,7 @@ asmlinkage long sys_recvfrom(int, void _
>>> struct sockaddr __user *, int __user *);
>>> asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
>>> asmlinkage long sys_socket(int, int, int);
>>> +asmlinkage long sys_socketat(int, int, int, int);
>>> asmlinkage long sys_socketpair(int, int, int, int __user *);
>>> asmlinkage long sys_socketcall(int call, unsigned long __user *args);
>>> asmlinkage long sys_listen(int, int);
>>> Index: net-next-2.6/kernel/sys_ni.c
>>> ===================================================================
>>> --- net-next-2.6.orig/kernel/sys_ni.c
>>> +++ net-next-2.6/kernel/sys_ni.c
>>> @@ -40,6 +40,7 @@ cond_syscall(sys_send);
>>> cond_syscall(sys_recvfrom);
>>> cond_syscall(sys_recv);
>>> cond_syscall(sys_socket);
>>> +cond_syscall(sys_socketat);
>>> cond_syscall(sys_setsockopt);
>>> cond_syscall(compat_sys_setsockopt);
>>> cond_syscall(sys_getsockopt);
>>>
>>> --
>>> _______________________________________________
>>> Containers mailing list
>>> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
>>> https://lists.linux-foundation.org/mailman/listinfo/containers
>>>
>>
>>
>> --
>> Michael Kerrisk Linux man-pages maintainer;
>> http://www.kernel.org/doc/man-pages/ Found a documentation bug?
>> http://www.kernel.org/doc/man-pages/reporting_bugs.html
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-api" in
>> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
>
>
>
--
Sauf indication contraire ci-dessus:
Compagnie IBM France
Siège Social : Tour Descartes, 2, avenue Gambetta, La Défense 5, 92400
Courbevoie
RCS Nanterre 552 118 465
Forme Sociale : S.A.S.
Capital Social : 542.737.118 ?
SIREN/SIRET : 552 118 465 02430
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <491318DC.4000300-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
@ 2008-11-07 9:45 ` Subrata Modak
2008-11-07 12:19 ` Cedric Le Goater
1 sibling, 0 replies; 11+ messages in thread
From: Subrata Modak @ 2008-11-07 9:45 UTC (permalink / raw)
To: Daniel Lezcano
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
ebiederm-aS9lmoZGLiVWk0Htik3J/w,
vivien.chappelier-L+G57L1VLRbR7s880joybQ,
andreas.aaen-546VmZ+UeKYX2WXlbB3fKg,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
linux-api-u79uwXL29TY76Z2rM5mHXA, ltp-list, Veerendra,
sudhirkumarmalik, Gowrishankar
Thanks Daniel/Michael,
Adding Veerendra, Sudhir & Gowri as they are handling NS tests now and
they may include it in their Plan.
Regards--
Subrata
On Thu, 2008-11-06 at 17:18 +0100, Daniel Lezcano wrote:
> Michael Kerrisk wrote:
> >> On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
> >>> This patch adds the socketat syscall which allows to specify in
> >>> which network namespace we want to create a socket. The network
> >>> namespace destination is referred by a socket fd previously opened
> >>> in the destination network namespace.
> >
> > Daniel,
> >
> > Is there any documentation for this system call, and/or test programs?
>
> Not yet.
>
> This small patch is a proposition to Andreas and Vivien to have a single
> process being able to manage several network namespaces.
>
> When a process unshares the network, it creates a socket which is used
> as a socket control (it belongs to the network namespace). Each time a
> network namespace is created, a socket control is created.
>
> When the process has to create a socket for a specific network
> namespace, it can use the socket control to specify it. This is the
> purpose of the socketat syscall.
>
> One example for a program in userspace:
>
> int main(int argc, char *argv[])
> {
> const int maxunshare = 128;
> int scs[maxunshare];
> int i, fd;
>
> for (i = 0; i < maxunshare; i++) {
> scs[i] = socket(PF_INET, SOCK_DGRAM, 0);
> unshare(CLONE_NEWNET);
> }
>
> ....
>
> /* I want to create a socket inside the network namespace #10 */
>
> fd = socketat(scs[10], PF_INET, SOCKET_STREAM, 0);
>
> ....
>
> bind, listen, etc ...
> }
>
> >>> Signed-off-by: Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
> >>> ---
> >>> arch/x86/include/asm/unistd_32.h | 1
> >>> arch/x86/include/asm/unistd_64.h | 3 +-
> >>> arch/x86/kernel/syscall_table_32.S | 1
> >>> include/linux/syscalls.h | 1
> >>> kernel/sys_ni.c | 1
> >>> net/socket.c | 45 +++++++++++++++++++++++++++++++++++++
> >>> 6 files changed, 51 insertions(+), 1 deletion(-)
> >>>
> >>> Index: net-next-2.6/arch/x86/include/asm/unistd_32.h
> >>> ===================================================================
> >>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_32.h
> >>> +++ net-next-2.6/arch/x86/include/asm/unistd_32.h
> >>> @@ -338,6 +338,7 @@
> >>> #define __NR_dup3 330
> >>> #define __NR_pipe2 331
> >>> #define __NR_inotify_init1 332
> >>> +#define __NR_socketat 333
> >>>
> >>> #ifdef __KERNEL__
> >>>
> >>> Index: net-next-2.6/arch/x86/include/asm/unistd_64.h
> >>> ===================================================================
> >>> --- net-next-2.6.orig/arch/x86/include/asm/unistd_64.h
> >>> +++ net-next-2.6/arch/x86/include/asm/unistd_64.h
> >>> @@ -653,7 +653,8 @@ __SYSCALL(__NR_dup3, sys_dup3)
> >>> __SYSCALL(__NR_pipe2, sys_pipe2)
> >>> #define __NR_inotify_init1 294
> >>> __SYSCALL(__NR_inotify_init1, sys_inotify_init1)
> >>> -
> >>> +#define __NR_socketat 295
> >>> +__SYSCALL(__NR_socketat, sys_socketat)
> >>>
> >>> #ifndef __NO_STUBS
> >>> #define __ARCH_WANT_OLD_READDIR
> >>> Index: net-next-2.6/arch/x86/kernel/syscall_table_32.S
> >>> ===================================================================
> >>> --- net-next-2.6.orig/arch/x86/kernel/syscall_table_32.S
> >>> +++ net-next-2.6/arch/x86/kernel/syscall_table_32.S
> >>> @@ -332,3 +332,4 @@ ENTRY(sys_call_table)
> >>> .long sys_dup3 /* 330 */
> >>> .long sys_pipe2
> >>> .long sys_inotify_init1
> >>> + .long sys_socketat
> >>> Index: net-next-2.6/net/socket.c
> >>> ===================================================================
> >>> --- net-next-2.6.orig/net/socket.c
> >>> +++ net-next-2.6/net/socket.c
> >>> @@ -1253,6 +1253,51 @@ out_release:
> >>> return retval;
> >>> }
> >>>
> >>> +asmlinkage long sys_socketat(int fd, int family, int type, int protocol)
> >>> +{
> >>> + int retval, fput_needed;
> >>> + struct socket *sock;
> >>> + struct socket *sockat;
> >>> + struct net *net;
> >>> + int flags;
> >>> +
> >>> + /* Check the SOCK_* constants for consistency. */
> >>> + BUILD_BUG_ON(SOCK_CLOEXEC != O_CLOEXEC);
> >>> + BUILD_BUG_ON((SOCK_MAX | SOCK_TYPE_MASK) != SOCK_TYPE_MASK);
> >>> + BUILD_BUG_ON(SOCK_CLOEXEC & SOCK_TYPE_MASK);
> >>> + BUILD_BUG_ON(SOCK_NONBLOCK & SOCK_TYPE_MASK);
> >>> +
> >>> + flags = type & ~SOCK_TYPE_MASK;
> >>> + if (flags & ~(SOCK_CLOEXEC | SOCK_NONBLOCK))
> >>> + return -EINVAL;
> >>> + type &= SOCK_TYPE_MASK;
> >>> +
> >>> + if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK))
> >>> + flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK;
> >>> +
> >>> + sock = sockfd_lookup_light(fd, &retval, &fput_needed);
> >>> + if (!sock)
> >>> + goto out;
> >>> +
> >>> + net = sock_net(sock->sk);
> >>> +
> >>> + retval = __sock_create(net, family, type, protocol, &sockat, 0);
> >>> + if (retval)
> >>> + goto out_fput;
> >>> +
> >>> + retval = sock_map_fd(sock, flags & (O_CLOEXEC | O_NONBLOCK));
> >>> + if (retval < 0)
> >>> + goto out_release;
> >>> +out_fput:
> >>> + fput_light(sock->file, fput_needed);
> >>> +out:
> >>> + return retval;
> >>> +
> >>> +out_release:
> >>> + sock_release(sockat);
> >>> + goto out;
> >>> +}
> >>> +
> >>> /*
> >>> * Create a pair of connected sockets.
> >>> */
> >>> Index: net-next-2.6/include/linux/syscalls.h
> >>> ===================================================================
> >>> --- net-next-2.6.orig/include/linux/syscalls.h
> >>> +++ net-next-2.6/include/linux/syscalls.h
> >>> @@ -423,6 +423,7 @@ asmlinkage long sys_recvfrom(int, void _
> >>> struct sockaddr __user *, int __user *);
> >>> asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags);
> >>> asmlinkage long sys_socket(int, int, int);
> >>> +asmlinkage long sys_socketat(int, int, int, int);
> >>> asmlinkage long sys_socketpair(int, int, int, int __user *);
> >>> asmlinkage long sys_socketcall(int call, unsigned long __user *args);
> >>> asmlinkage long sys_listen(int, int);
> >>> Index: net-next-2.6/kernel/sys_ni.c
> >>> ===================================================================
> >>> --- net-next-2.6.orig/kernel/sys_ni.c
> >>> +++ net-next-2.6/kernel/sys_ni.c
> >>> @@ -40,6 +40,7 @@ cond_syscall(sys_send);
> >>> cond_syscall(sys_recvfrom);
> >>> cond_syscall(sys_recv);
> >>> cond_syscall(sys_socket);
> >>> +cond_syscall(sys_socketat);
> >>> cond_syscall(sys_setsockopt);
> >>> cond_syscall(compat_sys_setsockopt);
> >>> cond_syscall(sys_getsockopt);
> >>>
> >>> --
> >>> _______________________________________________
> >>> Containers mailing list
> >>> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> >>> https://lists.linux-foundation.org/mailman/listinfo/containers
> >>>
> >>
> >>
> >> --
> >> Michael Kerrisk Linux man-pages maintainer;
> >> http://www.kernel.org/doc/man-pages/ Found a documentation bug?
> >> http://www.kernel.org/doc/man-pages/reporting_bugs.html
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> >> the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
> >>
> >
> >
> >
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <491318DC.4000300-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-07 9:45 ` Subrata Modak
@ 2008-11-07 12:19 ` Cedric Le Goater
[not found] ` <49143263.1040604-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
1 sibling, 1 reply; 11+ messages in thread
From: Cedric Le Goater @ 2008-11-07 12:19 UTC (permalink / raw)
To: Daniel Lezcano
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, Subrata Modak
Daniel Lezcano wrote:
> Michael Kerrisk wrote:
>>> On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
>>>> This patch adds the socketat syscall which allows to specify in
>>>> which network namespace we want to create a socket. The network
>>>> namespace destination is referred by a socket fd previously opened
>>>> in the destination network namespace.
>> Daniel,
>>
>> Is there any documentation for this system call, and/or test programs?
>
> Not yet.
>
> This small patch is a proposition to Andreas and Vivien to have a single
> process being able to manage several network namespaces.
>
> When a process unshares the network, it creates a socket which is used
> as a socket control (it belongs to the network namespace). Each time a
> network namespace is created, a socket control is created.
>
> When the process has to create a socket for a specific network
> namespace, it can use the socket control to specify it. This is the
> purpose of the socketat syscall.
what about eric's proposal of adding an fd argument to sys_socket() ? was it
dropped ?
C.
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <49143263.1040604-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
@ 2008-11-07 12:33 ` Daniel Lezcano
[not found] ` <49143594.8030109-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Daniel Lezcano @ 2008-11-07 12:33 UTC (permalink / raw)
To: Cedric Le Goater
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, Subrata Modak, Vivien Chappelier,
Andreas B Aaen
Cedric Le Goater wrote:
> Daniel Lezcano wrote:
>> Michael Kerrisk wrote:
>>>> On Fri, Oct 31, 2008 at 4:56 PM, Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> wrote:
>>>>> This patch adds the socketat syscall which allows to specify in
>>>>> which network namespace we want to create a socket. The network
>>>>> namespace destination is referred by a socket fd previously opened
>>>>> in the destination network namespace.
>>> Daniel,
>>>
>>> Is there any documentation for this system call, and/or test programs?
>> Not yet.
>>
>> This small patch is a proposition to Andreas and Vivien to have a single
>> process being able to manage several network namespaces.
>>
>> When a process unshares the network, it creates a socket which is used
>> as a socket control (it belongs to the network namespace). Each time a
>> network namespace is created, a socket control is created.
>>
>> When the process has to create a socket for a specific network
>> namespace, it can use the socket control to specify it. This is the
>> purpose of the socketat syscall.
>
> what about eric's proposal of adding an fd argument to sys_socket() ? was it
> dropped ?
AFAIU, the Eric's proposal in case a new syscall was not accepted. IMHO
a new syscall, with the man pages is better than adding an extra obscure
argument to a well known API. But if there is a reason to not add a new
syscall, we can consider Eric's approach as a good alternative I think.
But before sending anything, I am still waiting for Vivien and Andreas
answer about this approach. If it helps them to migrate their project to
the network namespace, I will send something more formal.
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <49143594.8030109-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
@ 2008-11-07 16:09 ` Eric W. Biederman
2008-11-12 10:33 ` Vivien Chappelier
1 sibling, 0 replies; 11+ messages in thread
From: Eric W. Biederman @ 2008-11-07 16:09 UTC (permalink / raw)
To: Daniel Lezcano
Cc: Cedric Le Goater, mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Subrata Modak, Vivien Chappelier, Andreas B Aaen
Daniel Lezcano <dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> writes:
> AFAIU, the Eric's proposal in case a new syscall was not accepted. IMHO a new
> syscall, with the man pages is better than adding an extra obscure argument to a
> well known API. But if there is a reason to not add a new syscall, we can
> consider Eric's approach as a good alternative I think.
>
> But before sending anything, I am still waiting for Vivien and Andreas answer
> about this approach. If it helps them to migrate their project to the network
> namespace, I will send something more formal.
In my queue I have some preliminary patches. For both the syscall
thing and a filesystem that will pin the namespace. I trying
to get my pile down so I can actually test it.
Ultimately to get the full functionality of the current linux-vrf
project we need:
socketat (or some variant thereof) so we can get unprivileged
creation of new sockets in another network namespace.
A fs to pin the network namespace and give it a name.
And ultimately a privileged operation sys_enter(int type, int fd);
To allow the default network namespace to be changed allowing
unprivileged applications to be run in the network namespace.
Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <49143594.8030109-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-07 16:09 ` Eric W. Biederman
@ 2008-11-12 10:33 ` Vivien Chappelier
[not found] ` <491AB112.1030806-L+G57L1VLRbR7s880joybQ@public.gmane.org>
1 sibling, 1 reply; 11+ messages in thread
From: Vivien Chappelier @ 2008-11-12 10:33 UTC (permalink / raw)
To: Daniel Lezcano
Cc: linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Cedric Le Goater, mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
Subrata Modak, ebiederm-aS9lmoZGLiVWk0Htik3J/w
Hi,
The socketat() option is fine but only solves half of the problem. I
also need to be able to change the default namespace of a process to
join an existing network namespace.
My use case is the following (embedded router): I have two separate
networks, one with internet access running standard applications and
routing LAN traffic, one with access to the operator network only and
running dedicated applications such as software upgrade or telephony
software. These two networks have to be totally separate and I need the
ability to run applications and open sockets in any of these networks or
even both. With the current proposal, I could have init or some
additional daemon create the two namespaces and ask it to fork and exec
the applications I want to run so that it can give the open socket to
its child. However this solution is not very practical nor elegant
compared to the chvrf approach.
The fs solution proposed by Eric to name, create, and remove network
namespaces is fine. IMHO using the filesystem to create sockets would be
a bad option as the filename would need to be parsed for every protocol
etc.. So combining the filesystem idea with the socketat() syscall is a
good way of solving both issues. In this case, each namespace would be
represented with a single file and we could also give the fd obtained by
opening this file as the socketat() argument. I also prefer extending
socket() as was suggested previously rather than adding a new syscall,
but this is up to the syscall API maintainers to decide.
regards,
Vivien.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <491AB112.1030806-L+G57L1VLRbR7s880joybQ@public.gmane.org>
@ 2008-11-12 15:24 ` Eric W. Biederman
[not found] ` <m1vdutotky.fsf-B27657KtZYmhTnVgQlOflh2eb7JE58TQ@public.gmane.org>
0 siblings, 1 reply; 11+ messages in thread
From: Eric W. Biederman @ 2008-11-12 15:24 UTC (permalink / raw)
To: Vivien Chappelier
Cc: Daniel Lezcano, Cedric Le Goater,
mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, Subrata Modak, Andreas B Aaen
Vivien Chappelier <vivien.chappelier-L+G57L1VLRbR7s880joybQ@public.gmane.org> writes:
> Hi,
>
> The socketat() option is fine but only solves half of the problem. I also need
> to be able to change the default namespace of a process to join an existing
> network namespace.
I'm trying to get a feel. What kind of applications do you have for which
you are changing the default network namespace aka chvrf?
Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [patch 1/2][RFC] add socketat syscall
[not found] ` <m1vdutotky.fsf-B27657KtZYmhTnVgQlOflh2eb7JE58TQ@public.gmane.org>
@ 2008-11-12 15:59 ` Vivien Chappelier
0 siblings, 0 replies; 11+ messages in thread
From: Vivien Chappelier @ 2008-11-12 15:59 UTC (permalink / raw)
To: Eric W. Biederman
Cc: Daniel Lezcano, Cedric Le Goater,
mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w,
linux-api-u79uwXL29TY76Z2rM5mHXA,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
Subrata Modak, Andreas B Aaen
Hi,
> I'm trying to get a feel. What kind of applications do you have for which
> you are changing the default network namespace aka chvrf?
>
No problem to detail a bit more. We are working on products for
telephony operators that generally need both a classical 'user' access
to the internet and a priviledged 'services' access to the operator network.
My first example is a cable modem (CM), IP phone (eMTA) and router.
The DOCSIS and PacketCable standards require this product to have
separate networks for each of these features, bridged together at the
MAC level, so that it behaves exactly as three separate boxes from the
operator's network point of view. So we have:
- default network namespace '0' for the router and standard Linux
applications that need internet access.
- network namespace '1' for the CM
- network namespace '2' for the eMTA
- a bridge connecting the CM interface, eMTA interface and router
WAN-side interface together
Basically, the CM application is run in a chvrf context and performs
its DHCP and TFTP requests on the operator network using the CM MAC
address. The same way, the eMTA application is run in its own network
for its DHCP, TFTP and all the VOIP related traffic (MGCP signaling and
RTP voice traffic) using the eMTA MAC address. The CM network is also
used for firmware upgrade.
A second example is a product mixing an internet browser and a set
top box-like access to the operator's TV network. In this case, the
operator's network for internet and TV use separate VLANs and DHCP
requests on each network may provide IP addresses in the same subnet. So
in this case, one DHCP client and the TV player are run in chvrf context.
I hope it clarifies our use case a bit more and why we need and use
the VRF feature.
regards,
Vivien.
--
To unsubscribe from this list: send the line "unsubscribe linux-api" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2008-11-12 15:59 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20081031215602.655672481@fr.ibm.com>
[not found] ` <20081031215900.810348746@fr.ibm.com>
[not found] ` <20081031215900.810348746-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-06 13:22 ` [patch 1/2][RFC] add socketat syscall Michael Kerrisk
[not found] ` <517f3f820811060522i7b3518aen47907a34b38adee9-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-06 13:27 ` Daniel Lezcano
2008-11-06 15:46 ` Michael Kerrisk
[not found] ` <cfd18e0f0811060746l77fbe6fel83402ba543fccb38-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-11-06 16:18 ` Daniel Lezcano
[not found] ` <491318DC.4000300-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-07 9:45 ` Subrata Modak
2008-11-07 12:19 ` Cedric Le Goater
[not found] ` <49143263.1040604-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-07 12:33 ` Daniel Lezcano
[not found] ` <49143594.8030109-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2008-11-07 16:09 ` Eric W. Biederman
2008-11-12 10:33 ` Vivien Chappelier
[not found] ` <491AB112.1030806-L+G57L1VLRbR7s880joybQ@public.gmane.org>
2008-11-12 15:24 ` Eric W. Biederman
[not found] ` <m1vdutotky.fsf-B27657KtZYmhTnVgQlOflh2eb7JE58TQ@public.gmane.org>
2008-11-12 15:59 ` Vivien Chappelier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).