summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2014-01-22 19:09:51 +0100
committerMichael Adam <obnox@samba.org>2014-05-21 14:43:02 +0200
commit54d987e1316e058dea7a01853782677eaccef641 (patch)
treeaebe5e42c00242cb9be0967ca49bcec5ad1e1199 /src
parentae3c84b07bc57be52c3f5d706bfeb62a7fa9ebbc (diff)
downloadsocket_wrapper-54d987e1316e058dea7a01853782677eaccef641.tar.gz
socket_wrapper-54d987e1316e058dea7a01853782677eaccef641.tar.xz
socket_wrapper-54d987e1316e058dea7a01853782677eaccef641.zip
swrap: Add IP_PKTINFO support in setsockopt.
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'src')
-rw-r--r--src/socket_wrapper.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index 4bca746..e1b69fa 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -119,6 +119,12 @@ enum swrap_dbglvl_e {
#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
#endif
+#ifdef IPV6_PKTINFO
+# ifndef IPV6_RECVPKTINFO
+# define IPV6_RECVPKTINFO IPV6_PKTINFO
+# endif /* IPV6_RECVPKTINFO */
+#endif /* IPV6_PKTINFO */
+
#define SWRAP_DLIST_ADD(list,item) do { \
if (!(list)) { \
(item)->prev = NULL; \
@@ -199,6 +205,7 @@ struct socket_info
int is_server;
int connected;
int defer_connect;
+ int pktinfo;
char *tmp_path;
@@ -2872,9 +2879,23 @@ static int swrap_setsockopt(int s, int level, int optname,
switch (si->family) {
case AF_INET:
+ if (level == IPPROTO_IP) {
+#ifdef IP_PKTINFO
+ if (optname == IP_PKTINFO) {
+ si->pktinfo = AF_INET;
+ }
+#endif /* IP_PKTINFO */
+ }
return 0;
#ifdef HAVE_IPV6
case AF_INET6:
+ if (level == IPPROTO_IPV6) {
+#ifdef IPV6_RECVPKTINFO
+ if (optname == IPV6_RECVPKTINFO) {
+ si->pktinfo = AF_INET6;
+ }
+#endif /* IPV6_PKTINFO */
+ }
return 0;
#endif
default: