mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-22 17:39:53 +03:00
Merge PR #706: BridgeUnix.c: add TAP local bridge support for FreeBSD
This commit is contained in:
commit
f73d435302
@ -1651,19 +1651,47 @@ CANCEL *EthGetCancel(ETH *e)
|
|||||||
// Read a packet
|
// Read a packet
|
||||||
UINT EthGetPacket(ETH *e, void **data)
|
UINT EthGetPacket(ETH *e, void **data)
|
||||||
{
|
{
|
||||||
UINT ret = 0;
|
// Validate arguments
|
||||||
|
if (e == NULL || data == NULL)
|
||||||
|
{
|
||||||
|
return INFINITE;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(UNIX_LINUX)
|
#ifdef UNIX_LINUX
|
||||||
ret = EthGetPacketLinux(e, data);
|
if (e->IsRawIpMode)
|
||||||
#elif defined(UNIX_SOLARIS)
|
{
|
||||||
ret = EthGetPacketSolaris(e, data);
|
return EthGetPacketLinuxIpRaw(e, data);
|
||||||
#elif defined(BRIDGE_PCAP)
|
}
|
||||||
ret = EthGetPacketPcap(e, data);
|
|
||||||
#elif defined(BRIDGE_BPF)
|
|
||||||
ret = EthGetPacketBpf(e, data);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
if (e->Tap != NULL)
|
||||||
|
{
|
||||||
|
#ifndef NO_VLAN
|
||||||
|
// TAP mode
|
||||||
|
void *buf;
|
||||||
|
UINT size;
|
||||||
|
|
||||||
|
if (VLanGetNextPacket(e->Tap, &buf, &size) == false)
|
||||||
|
{
|
||||||
|
return INFINITE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*data = buf;
|
||||||
|
return size;
|
||||||
|
#else
|
||||||
|
return INFINITE;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(UNIX_LINUX)
|
||||||
|
return EthGetPacketLinux(e, data);
|
||||||
|
#elif defined(UNIX_SOLARIS)
|
||||||
|
return EthGetPacketSolaris(e, data);
|
||||||
|
#elif defined(BRIDGE_PCAP)
|
||||||
|
return EthGetPacketPcap(e, data);
|
||||||
|
#elif defined(BRIDGE_BPF)
|
||||||
|
return EthGetPacketBpf(e, data);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef UNIX_LINUX
|
#ifdef UNIX_LINUX
|
||||||
@ -1680,35 +1708,6 @@ UINT EthGetPacketLinux(ETH *e, void **data)
|
|||||||
struct cmsghdr cmsg;
|
struct cmsghdr cmsg;
|
||||||
char buf[CMSG_SPACE(sizeof(struct my_tpacket_auxdata))];
|
char buf[CMSG_SPACE(sizeof(struct my_tpacket_auxdata))];
|
||||||
} cmsg_buf;
|
} cmsg_buf;
|
||||||
// Validate arguments
|
|
||||||
if (e == NULL || data == NULL)
|
|
||||||
{
|
|
||||||
return INFINITE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e->IsRawIpMode)
|
|
||||||
{
|
|
||||||
return EthGetPacketLinuxIpRaw(e, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e->Tap != NULL)
|
|
||||||
{
|
|
||||||
#ifndef NO_VLAN
|
|
||||||
// tap mode
|
|
||||||
void *buf;
|
|
||||||
UINT size;
|
|
||||||
|
|
||||||
if (VLanGetNextPacket(e->Tap, &buf, &size) == false)
|
|
||||||
{
|
|
||||||
return INFINITE;
|
|
||||||
}
|
|
||||||
|
|
||||||
*data = buf;
|
|
||||||
return size;
|
|
||||||
#else // NO_VLAN
|
|
||||||
return INFINITE;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
s = e->Socket;
|
s = e->Socket;
|
||||||
|
|
||||||
@ -1839,11 +1838,6 @@ UINT EthGetPacketSolaris(ETH *e, void **data)
|
|||||||
int s;
|
int s;
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
int ret;
|
int ret;
|
||||||
// Validate arguments
|
|
||||||
if (e == NULL || data == NULL)
|
|
||||||
{
|
|
||||||
return INFINITE;
|
|
||||||
}
|
|
||||||
|
|
||||||
s = e->Socket;
|
s = e->Socket;
|
||||||
if (s == INVALID_SOCKET)
|
if (s == INVALID_SOCKET)
|
||||||
@ -2066,9 +2060,6 @@ void EthPutPacket(ETH *e, void *data, UINT size)
|
|||||||
Free(data);
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Open ETH by using IP raw packets
|
// Open ETH by using IP raw packets
|
||||||
ETH *OpenEthLinuxIpRaw()
|
ETH *OpenEthLinuxIpRaw()
|
||||||
{
|
{
|
||||||
@ -2806,5 +2797,3 @@ void EthPutPacketLinuxIpRaw(ETH *e, void *data, UINT size)
|
|||||||
|
|
||||||
|
|
||||||
#endif // BRIDGE_C
|
#endif // BRIDGE_C
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user