From ba9ca1ca7d73592268ebfd5a43271303e76f461e Mon Sep 17 00:00:00 2001 From: Gleb Smirnoff Date: Tue, 6 Sep 2022 17:54:39 -0700 Subject: [PATCH] divert(4) socket changes for FreeBSD (#44) * The divert(4) socket in FreeBSD have never supported PF_INET6 as an argument to create a socket. It got IPv6 support in 2011 with FreeBSD commit 812f1d32e7cce15029a7444cb70a46e464b14496, but the creation of the socket remained the same - socket(PF_INET, ...). * Use PF_DIVERT on modern FreeBSD. --- src/bsd/bsdDetour.cpp | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/bsd/bsdDetour.cpp b/src/bsd/bsdDetour.cpp index 5ada6ec..51fdc1d 100755 --- a/src/bsd/bsdDetour.cpp +++ b/src/bsd/bsdDetour.cpp @@ -323,20 +323,6 @@ bool BsdDetour::Open(int hookFlags, PLOG(PL_ERROR, "BsdDetour::Open() error: inconsistent src/dst filter addr families\n"); return false; } - else if (ProtoAddress::IPv4 == srcFilterAddr.GetType()) - - { - domain = AF_INET; - } - else if (ProtoAddress::IPv6 == srcFilterAddr.GetType()) - { - domain = AF_INET6; - } - else - { - PLOG(PL_ERROR, "BsdDetour::Open() error: unspecified filter addr family\n"); - return false; - } // Setup ipfw rule(s) ... // Save parameters for firewall rule removal @@ -358,7 +344,11 @@ bool BsdDetour::Open(int hookFlags, } // Open a divert socket ... - if ((descriptor = socket(domain, SOCK_RAW, IPPROTO_DIVERT)) < 0) +#ifdef PF_DIVERT + if ((descriptor = socket(PF_DIVERT, SOCK_RAW, 0)) < 0) +#else + if ((descriptor = socket(PF_INET, SOCK_RAW, IPPROTO_DIVERT)) < 0) +#endif { PLOG(PL_ERROR, "BsdDetour::Open() socket() error: %s\n", GetErrorString()); Close();