mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-09-21 18:59:21 +03:00
Compare commits
3 Commits
5.2.5188
...
26b29a1ab1
Author | SHA1 | Date | |
---|---|---|---|
26b29a1ab1 | |||
d6d0f2dadd | |||
68b72d8867 |
@ -33,6 +33,7 @@ You need to install the following software to build SoftEther VPN for UNIX.
|
||||
|
||||
```bash
|
||||
sudo yum -y groupinstall "Development Tools"
|
||||
sudo yum -y install epel-release
|
||||
sudo yum -y install cmake ncurses-devel openssl-devel libsodium-devel readline-devel zlib-devel
|
||||
```
|
||||
|
||||
|
@ -2057,15 +2057,43 @@ bool ParsePacketL2Ex(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4_ex
|
||||
|
||||
if (type_id_16 > 1500)
|
||||
{
|
||||
if (type_id_16 == MAC_PROTO_TAGVLAN)
|
||||
// Ordinary Ethernet frame
|
||||
switch (type_id_16)
|
||||
{
|
||||
// Parse VLAN frame
|
||||
return ParsePacketTAGVLAN(p, buf, size, no_l3, no_l3_l4_except_icmpv6);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Parse Ordinary Ethernet frame
|
||||
return ParsePacketL3(p, buf, size, type_id_16, no_l3, no_l3_l4_except_icmpv6);
|
||||
case MAC_PROTO_ARPV4: // ARPv4
|
||||
if (no_l3 || no_l3_l4_except_icmpv6)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketARPv4(p, buf, size);
|
||||
|
||||
case MAC_PROTO_IPV4: // IPv4
|
||||
if (no_l3 || no_l3_l4_except_icmpv6)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketIPv4(p, buf, size);
|
||||
|
||||
case MAC_PROTO_IPV6: // IPv6
|
||||
if (no_l3)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketIPv6(p, buf, size, no_l3_l4_except_icmpv6);
|
||||
|
||||
default: // Unknown
|
||||
if (type_id_16 == p->VlanTypeID)
|
||||
{
|
||||
// VLAN
|
||||
return ParsePacketTAGVLAN(p, buf, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -2100,44 +2128,10 @@ bool ParsePacketL2Ex(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4_ex
|
||||
}
|
||||
}
|
||||
|
||||
bool ParsePacketL3(PKT *p, UCHAR *buf, UINT size, USHORT proto, bool no_l3, bool no_l3_l4_except_icmpv6)
|
||||
{
|
||||
switch (proto)
|
||||
{
|
||||
case MAC_PROTO_ARPV4: // ARPv4
|
||||
if (no_l3 || no_l3_l4_except_icmpv6)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketARPv4(p, buf, size);
|
||||
|
||||
case MAC_PROTO_IPV4: // IPv4
|
||||
if (no_l3 || no_l3_l4_except_icmpv6)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketIPv4(p, buf, size);
|
||||
|
||||
case MAC_PROTO_IPV6: // IPv6
|
||||
if (no_l3)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return ParsePacketIPv6(p, buf, size, no_l3_l4_except_icmpv6);
|
||||
|
||||
default: // Unknown
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// TAG VLAN parsing
|
||||
bool ParsePacketTAGVLAN(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4_except_icmpv6)
|
||||
bool ParsePacketTAGVLAN(PKT *p, UCHAR *buf, UINT size)
|
||||
{
|
||||
USHORT vlan_ushort;
|
||||
USHORT proto_ushort;
|
||||
// Validate arguments
|
||||
if (p == NULL || buf == NULL)
|
||||
{
|
||||
@ -2157,17 +2151,12 @@ bool ParsePacketTAGVLAN(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4
|
||||
buf += sizeof(TAGVLAN_HEADER);
|
||||
size -= sizeof(TAGVLAN_HEADER);
|
||||
|
||||
vlan_ushort = READ_USHORT(p->L3.TagVlanHeader->TagID);
|
||||
vlan_ushort = READ_USHORT(p->L3.TagVlanHeader->Data);
|
||||
vlan_ushort = vlan_ushort & 0xFFF;
|
||||
|
||||
p->VlanId = vlan_ushort;
|
||||
|
||||
proto_ushort = READ_USHORT(p->L3.TagVlanHeader->Protocol);
|
||||
proto_ushort = proto_ushort & 0xFFFF;
|
||||
|
||||
|
||||
// Parse the L3 packet
|
||||
return ParsePacketL3(p, buf, size, proto_ushort, no_l3, no_l3_l4_except_icmpv6);
|
||||
return true;
|
||||
}
|
||||
|
||||
// BPDU Parsing
|
||||
|
@ -87,8 +87,7 @@ struct ARPV4_HEADER
|
||||
// Tagged VLAN header
|
||||
struct TAGVLAN_HEADER
|
||||
{
|
||||
UCHAR TagID[2]; // TagID
|
||||
UCHAR Protocol[2]; // Protocol
|
||||
UCHAR Data[2]; // Data
|
||||
} GCC_PACKED;
|
||||
|
||||
// IPv4 header
|
||||
@ -763,11 +762,10 @@ void FreePacketTCPv4(PKT *p);
|
||||
void FreePacketICMPv4(PKT *p);
|
||||
void FreePacketDHCPv4(PKT *p);
|
||||
bool ParsePacketL2Ex(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4_except_icmpv6);
|
||||
bool ParsePacketL3(PKT *p, UCHAR *buf, UINT size, USHORT proto, bool no_l3, bool no_l3_l4_except_icmpv6);
|
||||
bool ParsePacketARPv4(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParsePacketIPv4(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParsePacketBPDU(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParsePacketTAGVLAN(PKT *p, UCHAR *buf, UINT size, bool no_l3, bool no_l3_l4_except_icmpv6);
|
||||
bool ParsePacketTAGVLAN(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParseICMPv4(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParseICMPv6(PKT *p, UCHAR *buf, UINT size);
|
||||
bool ParseTCP(PKT *p, UCHAR *buf, UINT size);
|
||||
|
Reference in New Issue
Block a user