From d8cb5bdcd7c3cb060f84a2eb96dcc1400ead1d7f Mon Sep 17 00:00:00 2001 From: Erik Ekman Date: Sat, 7 Mar 2009 00:01:00 +0000 Subject: [PATCH] Set Dont-Fragment for various os --- src/common.c | 4 ++++ src/common.h | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/common.c b/src/common.c index abd847b..a2d23f8 100644 --- a/src/common.c +++ b/src/common.c @@ -130,6 +130,10 @@ open_dns(int localport, in_addr_t listen_ip) setsockopt(fd, IPPROTO_IP, DSTADDR_SOCKOPT, (const void*) &flag, sizeof(flag)); #endif + /* Set dont-fragment ip header flag */ + flag = DONT_FRAG_VALUE; + setsockopt(fd, IPPROTO_IP, IP_OPT_DONT_FRAG, (const void*) &flag, sizeof(flag)); + if(bind(fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) err(1, "bind"); diff --git a/src/common.h b/src/common.h index 5daef40..a6d1137 100644 --- a/src/common.h +++ b/src/common.h @@ -19,7 +19,6 @@ #ifdef WINDOWS32 #include "windows.h" -#include #else #include #include @@ -45,6 +44,20 @@ # define dstaddr(x) (&(((struct in_pktinfo *)(CMSG_DATA(x)))->ipi_addr)) #endif +#if defined IP_MTUDISC +# define IP_OPT_DONT_FRAG IP_MTUDISC +# define DONT_FRAG_VALUE 1 +#elif defined IP_MTU_DISCOVER +# define IP_OPT_DONT_FRAG IP_MTU_DISCOVER +# define DONT_FRAG_VALUE IP_PMTUDISC_DO +#elif defined IP_DONTFRAG +# define IP_OPT_DONT_FRAG IP_DONTFRAG +# define DONT_FRAG_VALUE 1 +#elif defined IP_DONTFRAGMENT +# define IP_OPT_DONT_FRAG IP_DONTFRAGMENT +# define DONT_FRAG_VALUE 1 +#endif + struct packet { int len; /* Total packet length */