From: Jeroen Leenarts Date: Mon, 27 Aug 2018 11:52:02 +0000 (+0200) Subject: Select correct IP version identifier based on packet contents. X-Git-Tag: 0.0.20181104-1~342 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c3a36078e2450df9a10baaecfa65eafd9357ebb;p=thirdparty%2Fwireguard-apple.git Select correct IP version identifier based on packet contents. Signed-off-by: Jason A. Donenfeld --- diff --git a/WireGuardNetworkExtension/WireGuardGoWrapper.m b/WireGuardNetworkExtension/WireGuardGoWrapper.m index 7631365..17c549e 100644 --- a/WireGuardNetworkExtension/WireGuardGoWrapper.m +++ b/WireGuardNetworkExtension/WireGuardGoWrapper.m @@ -171,9 +171,19 @@ static ssize_t do_write(const void *ctx, const unsigned char *buf, size_t len) os_log_debug([WireGuardGoWrapper log], "do_write - start"); WireGuardGoWrapper *wrapper = (__bridge WireGuardGoWrapper *)ctx; - //TODO: determine IPv4 or IPv6 status. + + //determine IPv4 or IPv6 status. + NSInteger ipVersionBits = (buf[0] & 0xf0) >> 4; + NSNumber *ipVersion = NSDecimalNumber.zero; + if (ipVersionBits == 4) { + ipVersion = @AF_INET; + } else if (ipVersionBits == 6) { + ipVersion = @AF_INET6; + } else { + return 0; + } NSData *packet = [[NSData alloc] initWithBytes:buf length:len]; - [wrapper.packetFlow writePackets:@[packet] withProtocols:@[@AF_INET]]; + [wrapper.packetFlow writePackets:@[packet] withProtocols:@[ipVersion]]; return len; } }