#endif // USES_NETLINK
#include "mDNSUNP.h"
#include "GenLinkedList.h"
+#ifdef TARGET_OS_LINUX
+#include <sys/utsname.h> // Check Linux Kernel Version with uname()
+#endif
// ***************************************************************************
// Structures
num_pkts_rejected = 0;
}
+// Check Linux kernel version supports REUSEPORT
+mDNSlocal int IsAbleToReusePort()
+{
+#ifndef TARGET_OS_LINUX
+ return 0; // I just do not have any idea. (Not Linux)
+#else /* TARGET_OS_LINUX == defined */
+ /*
+ * 0 : unknown (probe it!)
+ * 1 : yes (Linux >= 3.9)
+ * -1 : no (Linux < 3.9)
+ */
+ static int mayUse = 0;
+
+ if (__builtin_expect(mayUse != 0, 1)) {
+ return (mayUse > 0);
+ } else {
+ struct utsname buf;
+ int ret = uname(&buf);
+ int major, minor;
+ char *tok;
+
+
+ if (ret < 0)
+ return 0;
+
+ major = atoi(buf.release); /* First digits before '.' */
+
+
+ if (major < 3) {
+ mayUse = -1;
+ return mayUse;
+ }
+ if (major > 3) {
+ mayUse = 1;
+ return mayUse;
+ }
+
+ tok = strtok(buf.release, ".");
+ if (tok != NULL) {
+ tok = strtok(NULL, ".");
+ minor = atoi(tok);
+ } else {
+ minor = 0;
+ }
+
+ if (minor >= 9)
+ mayUse = 1;
+ else
+ mayUse = -1;
+ }
+
+ return mayUse;
+#endif /* TARGET_OS_LINUX */
+}
+
// Sets up a send/receive socket.
// If mDNSIPPort port is non-zero, then it's a multicast socket on the specified interface
// If mDNSIPPort port is zero, then it's a randomly assigned port number, used for sending unicast queries
// ... with a shared UDP port, if it's for multicast receiving
if (err == 0 && port.NotAnInteger)
{
- #if defined(SO_REUSEPORT) && !defined(CONFIG_DISABLE_REUSEPORT)
- err = setsockopt(*sktPtr, SOL_SOCKET, SO_REUSEPORT, &kOn, sizeof(kOn));
+ #if defined(SO_REUSEPORT)
+ if (IsAbleToReusePort() > 0) {
+ err = setsockopt(*sktPtr, SOL_SOCKET, SO_REUSEPORT, &kOn, sizeof(kOn));
+ }
#elif defined(SO_REUSEADDR)
err = setsockopt(*sktPtr, SOL_SOCKET, SO_REUSEADDR, &kOn, sizeof(kOn));
#else
CONFIG_TIZEN_64BIT=y; export CONFIG_TIZEN_64BIT
%endif
-%if "%{profile}" == "wearable"
-CONFIG_DISABLE_REUSEPORT=y; export CONFIG_DISABLE_REUSEPORT
-%endif
-
-%if "%{profile}" == "tv"
-CONFIG_DISABLE_REUSEPORT=y; export CONFIG_DISABLE_REUSEPORT
-%endif
-
-%if "%{?TIZEN_PRODUCT_TV}" == "1"
-CONFIG_DISABLE_REUSEPORT=y; export CONFIG_DISABLE_REUSEPORT
-%endif
-
cd mDNSPosix
make os=tizen %{?_smp_mflags}