1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2024-11-26 11:29:53 +03:00
This commit is contained in:
hiura2023 2024-04-26 06:40:04 +00:00 committed by GitHub
commit 18d38779fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9710,36 +9710,40 @@ void VirtualDhcpServer(VH *v, PKT *p)
} }
else else
{ {
// There is no IP address that can be provided // Reply of DHCP_REQUEST must be either DHCP_ACK or DHCP_NAK.
DHCP_OPTION_LIST ret; if (opt->Opcode == DHCP_REQUEST)
LIST *o;
Zero(&ret, sizeof(ret));
ret.Opcode = DHCP_NACK;
ret.ServerAddress = v->HostIP;
StrCpy(ret.DomainName, sizeof(ret.DomainName), v->DhcpDomain);
ret.SubnetMask = v->DhcpMask;
// Build the DHCP option
o = BuildDhcpOption(&ret);
if (o != NULL)
{ {
BUF *b = BuildDhcpOptionsBuf(o); // There is no IP address that can be provided
if (b != NULL) DHCP_OPTION_LIST ret;
{ LIST *o;
UINT dest_ip = p->L3.IPv4Header->SrcIP; Zero(&ret, sizeof(ret));
if (dest_ip == 0)
{
dest_ip = 0xffffffff;
}
// Transmission
VirtualDhcpSend(v, tran_id, dest_ip, Endian16(p->L4.UDPHeader->SrcPort),
ip, dhcp->ClientMacAddress, b, dhcp->HardwareType, dhcp->HardwareAddressSize);
// Release the memory ret.Opcode = DHCP_NACK;
FreeBuf(b); ret.ServerAddress = v->HostIP;
StrCpy(ret.DomainName, sizeof(ret.DomainName), v->DhcpDomain);
ret.SubnetMask = v->DhcpMask;
// Build the DHCP option
o = BuildDhcpOption(&ret);
if (o != NULL)
{
BUF *b = BuildDhcpOptionsBuf(o);
if (b != NULL)
{
UINT dest_ip = p->L3.IPv4Header->SrcIP;
if (dest_ip == 0)
{
dest_ip = 0xffffffff;
}
// Transmission
VirtualDhcpSend(v, tran_id, dest_ip, Endian16(p->L4.UDPHeader->SrcPort),
ip, dhcp->ClientMacAddress, b, dhcp->HardwareType, dhcp->HardwareAddressSize);
// Release the memory
FreeBuf(b);
}
FreeDhcpOptions(o);
} }
FreeDhcpOptions(o);
} }
} }
} }