[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 11/21] linux-user: Added IP_(UN)BLOCK_SOURCE/IP_(ADD
From: |
riku . voipio |
Subject: |
[Qemu-devel] [PATCH 11/21] linux-user: Added IP_(UN)BLOCK_SOURCE/IP_(ADD|DROP)_SOURCE_MEMBERSHIP flags to setsockopt |
Date: |
Fri, 12 Jun 2009 16:50:21 +0300 |
From: Lionel Landwerlin <address@hidden>
linux-user: Added IP_(UN)BLOCK_SOURCE/IP_(ADD|DROP)_SOURCE_MEMBERSHIP flags to
setsockopt
From: Lionel Landwerlin <address@hidden>
Signed-off-by: Lionel Landwerlin <address@hidden>
Signed-off-by: Riku Voipio <address@hidden>
---
linux-user/syscall.c | 13 +++++++++++++
linux-user/syscall_defs.h | 7 +++++++
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 7648126..674942c 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1137,6 +1137,7 @@ static abi_long do_setsockopt(int sockfd, int level, int
optname,
abi_long ret;
int val;
struct ip_mreqn *ip_mreq;
+ struct ip_mreq_source *ip_mreq_source;
switch(level) {
case SOL_TCP:
@@ -1186,6 +1187,18 @@ static abi_long do_setsockopt(int sockfd, int level, int
optname,
ret = get_errno(setsockopt(sockfd, level, optname, ip_mreq,
optlen));
break;
+ case IP_BLOCK_SOURCE:
+ case IP_UNBLOCK_SOURCE:
+ case IP_ADD_SOURCE_MEMBERSHIP:
+ case IP_DROP_SOURCE_MEMBERSHIP:
+ if (optlen != sizeof (struct target_ip_mreq_source))
+ return -TARGET_EINVAL;
+
+ ip_mreq_source = lock_user(VERIFY_READ, optval_addr, optlen, 1);
+ ret = get_errno(setsockopt(sockfd, level, optname, ip_mreq_source,
optlen));
+ unlock_user (ip_mreq_source, optval_addr, 0);
+ break;
+
default:
goto unimplemented;
}
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 6e68c91..89b73b8 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -126,6 +126,13 @@ struct target_ip_mreqn {
abi_long imr_ifindex;
};
+struct target_ip_mreq_source {
+ /* big endian */
+ uint32_t imr_multiaddr;
+ uint32_t imr_interface;
+ uint32_t imr_sourceaddr;
+};
+
struct target_timeval {
abi_long tv_sec;
abi_long tv_usec;
--
1.6.2.1
- [Qemu-devel] [PATCH 00/21] Pending linux-user patches, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 01/21] export mmap_find_vma for shmat, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 11/21] linux-user: Added IP_(UN)BLOCK_SOURCE/IP_(ADD|DROP)_SOURCE_MEMBERSHIP flags to setsockopt,
riku . voipio <=
- [Qemu-devel] [PATCH 03/21] linux-user: implemented ELF coredump support for ARM target, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 18/21] RFC: fix fcntl support in linux-user - new try, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 05/21] linux-user: strace now handles guest strings correctly [v2], riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 09/21] Return EOPNOTSUPP instead of ENOSYS for *xattr* syscalls, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 04/21] linux-user: added x86 and x86_64 support for ELF coredump, riku . voipio, 2009/06/12
- [Qemu-devel] [PATCH 19/21] linux-user: initialize mmap_mutex properly, riku . voipio, 2009/06/12