added mysterious UDP encapsulation socket option to get encapsulation working

This commit is contained in:
Martin Willi
2006-06-22 12:57:49 +00:00
parent 8d204aa145
commit 6f51c9f184
+20
View File
@@ -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;