qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] Add getsockopt for settable SOL_IPV6 options
@ 2018-12-13 13:06 tom.deseyn
  2018-12-13 13:37 ` [Qemu-devel] [PATCH v2] " tom.deseyn
  2018-12-13 21:28 ` [Qemu-devel] [PATCH] " no-reply
  0 siblings, 2 replies; 12+ messages in thread
From: tom.deseyn @ 2018-12-13 13:06 UTC (permalink / raw)
  To: qemu-devel; +Cc: riku.voipio, laurent, Tom Deseyn

From: Tom Deseyn <tom.deseyn@gmail.com>

Signed-off-by: Tom Deseyn <tom.deseyn@gmail.com>
---
 linux-user/syscall.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 280137da8c..29bac79b61 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -2352,6 +2352,45 @@ static abi_long do_getsockopt(int sockfd, int level, int optname,
             break;
         }
         break;
+    case SOL_IPV6:
+        switch (optname) {
+        case IPV6_MTU_DISCOVER:
+        case IPV6_MTU:
+        case IPV6_V6ONLY:
+        case IPV6_RECVPKTINFO:
+        case IPV6_UNICAST_HOPS:
+        case IPV6_MULTICAST_HOPS:
+        case IPV6_MULTICAST_LOOP:
+        case IPV6_RECVERR:
+        case IPV6_RECVHOPLIMIT:
+        case IPV6_2292HOPLIMIT:
+        case IPV6_CHECKSUM:
+            if (get_user_u32(len, optlen))
+                return -TARGET_EFAULT;
+            if (len < 0)
+                return -TARGET_EINVAL;
+            lv = sizeof(lv);
+            ret = get_errno(getsockopt(sockfd, level, optname, &val, &lv));
+            if (ret < 0)
+                return ret;
+            if (len < sizeof(int) && len > 0 && val >= 0 && val < 255) {
+                len = 1;
+                if (put_user_u32(len, optlen)
+                    || put_user_u8(val, optval_addr))
+                    return -TARGET_EFAULT;
+            } else {
+                if (len > sizeof(int))
+                    len = sizeof(int);
+                if (put_user_u32(len, optlen)
+                    || put_user_u32(val, optval_addr))
+                    return -TARGET_EFAULT;
+            }
+            break;
+        default:
+            ret = -TARGET_ENOPROTOOPT;
+            break;
+        }
+        break;
     default:
     unimplemented:
         gemu_log("getsockopt level=%d optname=%d not yet supported\n",
-- 
2.19.2

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2019-01-07  9:24 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-13 13:06 [Qemu-devel] [PATCH] Add getsockopt for settable SOL_IPV6 options tom.deseyn
2018-12-13 13:37 ` [Qemu-devel] [PATCH v2] " tom.deseyn
2018-12-13 13:57   ` Laurent Vivier
2018-12-14 15:41     ` [Qemu-devel] [PATCH v3] " tom.deseyn
2018-12-23  9:21       ` no-reply
2019-01-07  5:50       ` Tom Deseyn
2019-01-07  7:12         ` Laurent Vivier
2019-01-07  8:27           ` [Qemu-devel] [PATCH v4] " tom.deseyn
2019-01-07  9:14             ` no-reply
2019-01-07  9:24           ` [Qemu-devel] [PATCH v5] " tom.deseyn
2018-12-13 22:11   ` [Qemu-devel] [PATCH v2] " no-reply
2018-12-13 21:28 ` [Qemu-devel] [PATCH] " no-reply

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).