aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/network/socket.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2006-06-22 12:57:49 +0000
committerMartin Willi <martin@strongswan.org>2006-06-22 12:57:49 +0000
commit6f51c9f184e0e2fd67bc601fd40bcee42e4a2d3c (patch)
tree8523dec977117c0160ea4befaf37ba108d466398 /src/charon/network/socket.c
parent8d204aa145d60adfa8718e86c3ee6cece7d2b836 (diff)
downloadstrongswan-6f51c9f184e0e2fd67bc601fd40bcee42e4a2d3c.tar.bz2
strongswan-6f51c9f184e0e2fd67bc601fd40bcee42e4a2d3c.tar.xz
added mysterious UDP encapsulation socket option to get encapsulation working
Diffstat (limited to 'src/charon/network/socket.c')
-rw-r--r--src/charon/network/socket.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/charon/network/socket.c b/src/charon/network/socket.c
index dc5aff8d0..0cd57aad3 100644
--- a/src/charon/network/socket.c
+++ b/src/charon/network/socket.c
@@ -60,6 +60,15 @@
#define IP_IPSEC_POLICY 16
#endif /*IP_IPSEC_POLICY*/
+/* from linux/udp.h */
+#ifndef UDP_ENCAP
+#define UDP_ENCAP 100
+#endif /*UDP_ENCAP*/
+
+#ifndef UDP_ENCAP_ESPINUDP
+#define UDP_ENCAP_ESPINUDP 2
+#endif /*UDP_ENCAP_ESPINUDP*/
+
typedef struct private_socket_t private_socket_t;
/**
@@ -380,6 +389,17 @@ static status_t initialize(private_socket_t *this)
{
this->logger->log(this->logger, ERROR, "unable to setup send socket on port %d!", this->natt_port);
return FAILED;
+ } else {
+ int type = UDP_ENCAP_ESPINUDP;
+ if (setsockopt(this->natt_fd, SOL_UDP, UDP_ENCAP, &type, sizeof(type)) < 0
+ && errno == ENOPROTOOPT)
+ {
+ this->logger->log(this->logger, ERROR, "unable to set UDP_ENCAP on natt send socket!");
+ close(this->natt_fd);
+ close(this->send_fd);
+ close(this->raw_fd);
+ return FAILED;
+ }
}
return SUCCESS;