diff mbox

[V3,2/3] linux-user: make do_setsockopt support SOL_RAW ICMP_FILTER socket option

Message ID 1342834195-2670-1-git-send-email-jing.huang.pku@gmail.com
State New
Headers show

Commit Message

Jing Huang July 21, 2012, 1:29 a.m. UTC
Signed-off-by: Jing Huang <jing.huang.pku@gmail.com>
---
 linux-user/syscall.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

Comments

Peter Maydell July 20, 2012, 6:07 p.m. UTC | #1
On 21 July 2012 02:29, Jing Huang <jing.huang.pku@gmail.com> wrote:
>
> Signed-off-by: Jing Huang <jing.huang.pku@gmail.com>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

(when you do the next version of this patch series, if you
include that line in the commit message for this patch it
will let me know I've already looked at this patch and don't
need to read it again. You can keep the line as long as you
don't make any further changes to the patch which would mean
I have to re-review it.)

-- PMM
diff mbox

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 82aa83d..2228b1f 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -60,6 +60,7 @@  int __clone2(int (*fn)(void *), void *child_stack_base,
 #include <netinet/ip.h>
 #include <netinet/tcp.h>
 #include <linux/wireless.h>
+#include <linux/icmp.h>
 #include "qemu-common.h"
 #ifdef TARGET_GPROF
 #include <sys/gmon.h>
@@ -1442,6 +1443,24 @@  static abi_long do_setsockopt(int sockfd, int level, int optname,
             goto unimplemented;
         }
         break;
+    case SOL_RAW:
+        switch (optname) {
+        case ICMP_FILTER:
+            /* struct icmp_filter takes an u32 value */
+            if (optlen < sizeof(uint32_t)) {
+                return -TARGET_EINVAL;
+            }
+
+            if (get_user_u32(val, optval_addr)) {
+                return -TARGET_EFAULT;
+            }
+            ret = get_errno(setsockopt(sockfd, level, optname,
+                                                &val, sizeof(val)));
+            break;
+        default:
+            goto unimplemented;
+        }
+        break;
     case TARGET_SOL_SOCKET:
         switch (optname) {
             /* Options with 'int' argument.  */