mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2024-11-26 19:39:53 +03:00
Merge pull request #1072 from Evengard/ppp-ipv6
Rewriting the PPP stack
This commit is contained in:
commit
84bd9abb30
@ -497,6 +497,9 @@ typedef struct PPP_OPTION PPP_OPTION;
|
|||||||
typedef struct PPP_LCP PPP_LCP;
|
typedef struct PPP_LCP PPP_LCP;
|
||||||
typedef struct PPP_PACKET PPP_PACKET;
|
typedef struct PPP_PACKET PPP_PACKET;
|
||||||
typedef struct PPP_IPOPTION PPP_IPOPTION;
|
typedef struct PPP_IPOPTION PPP_IPOPTION;
|
||||||
|
typedef struct PPP_IPV6OPTION PPP_IPV6OPTION;
|
||||||
|
typedef struct PPP_REQUEST_RESEND PPP_REQUEST_RESEND;
|
||||||
|
typedef struct PPP_DELAYED_PACKET PPP_DELAYED_PACKET;
|
||||||
|
|
||||||
|
|
||||||
// ==============================================================
|
// ==============================================================
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -13,26 +13,30 @@
|
|||||||
#define PPP_LCP_CODE_IS_NEGATIVE(c) ((c) == PPP_LCP_CODE_NAK || (c) == PPP_LCP_CODE_REJECT || (c) == PPP_LCP_CODE_CODE_REJECT || (c) == PPP_LCP_CODE_PROTOCOL_REJECT)
|
#define PPP_LCP_CODE_IS_NEGATIVE(c) ((c) == PPP_LCP_CODE_NAK || (c) == PPP_LCP_CODE_REJECT || (c) == PPP_LCP_CODE_CODE_REJECT || (c) == PPP_LCP_CODE_PROTOCOL_REJECT)
|
||||||
#define PPP_LCP_CODE_IS_REQUEST(c) ((c) == PPP_LCP_CODE_REQ)
|
#define PPP_LCP_CODE_IS_REQUEST(c) ((c) == PPP_LCP_CODE_REQ)
|
||||||
#define PPP_LCP_CODE_IS_RESPONSE(c) ((c) == PPP_LCP_CODE_ACK || (c) == PPP_LCP_CODE_NAK || (c) == PPP_LCP_CODE_REJECT || (c) == PPP_LCP_CODE_PROTOCOL_REJECT)
|
#define PPP_LCP_CODE_IS_RESPONSE(c) ((c) == PPP_LCP_CODE_ACK || (c) == PPP_LCP_CODE_NAK || (c) == PPP_LCP_CODE_REJECT || (c) == PPP_LCP_CODE_PROTOCOL_REJECT)
|
||||||
#define PPP_LCP_CODE_IS_WITH_OPTION_LIST(c) ((c) == PPP_LCP_CODE_REQ || (c) == PPP_LCP_CODE_ACK || (c) == PPP_LCP_CODE_NAK)
|
#define PPP_LCP_CODE_IS_WITH_OPTION_LIST(c) ((c) == PPP_LCP_CODE_REQ || (c) == PPP_LCP_CODE_ACK || (c) == PPP_LCP_CODE_NAK || (c) == PPP_LCP_CODE_REJECT)
|
||||||
|
|
||||||
#define PPP_PAP_CODE_IS_REQUEST(c) ((c) == PPP_PAP_CODE_REQ)
|
#define PPP_PAP_CODE_IS_REQUEST(c) ((c) == PPP_PAP_CODE_REQ)
|
||||||
#define PPP_PAP_CODE_IS_RESPONSE(c) ((c) == PPP_PAP_CODE_ACK || (c) == PPP_PAP_CODE_NAK)
|
#define PPP_PAP_CODE_IS_RESPONSE(c) ((c) == PPP_PAP_CODE_ACK || (c) == PPP_PAP_CODE_NAK)
|
||||||
|
|
||||||
#define PPP_CODE_IS_RESPONSE(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP) && PPP_LCP_CODE_IS_RESPONSE(c)) || (((protocol) == PPP_PROTOCOL_PAP) && PPP_PAP_CODE_IS_RESPONSE(c)))
|
#define PPP_CHAP_CODE_IS_REQUEST(c) ((c) == PPP_CHAP_CODE_CHALLENGE || (c) == PPP_CHAP_CODE_SUCCESS || (c) == PPP_CHAP_CODE_FAILURE)
|
||||||
#define PPP_CODE_IS_REQUEST(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP) && PPP_LCP_CODE_IS_REQUEST(c)) || (((protocol) == PPP_PROTOCOL_PAP) && PPP_PAP_CODE_IS_REQUEST(c)) || ((protocol) == PPP_PROTOCOL_CHAP))
|
#define PPP_CHAP_CODE_IS_RESPONSE(c) ((c) == PPP_CHAP_CODE_RESPONSE)
|
||||||
#define PPP_CODE_IS_WITH_OPTION_LIST(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP) && PPP_LCP_CODE_IS_WITH_OPTION_LIST(c)) || false)
|
|
||||||
|
|
||||||
#define PPP_IS_SUPPORTED_PROTOCOL(p) ((p) == PPP_PROTOCOL_LCP || (p) == PPP_PROTOCOL_PAP || (p) == PPP_PROTOCOL_CHAP || (p) == PPP_PROTOCOL_IPCP || (p) == PPP_PROTOCOL_IP)
|
#define PPP_CODE_IS_RESPONSE(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP || (protocol) == PPP_PROTOCOL_IPV6CP) && PPP_LCP_CODE_IS_RESPONSE(c)) || (((protocol) == PPP_PROTOCOL_PAP) && PPP_PAP_CODE_IS_RESPONSE(c)) || (((protocol) == PPP_PROTOCOL_CHAP) && PPP_CHAP_CODE_IS_RESPONSE(c)))
|
||||||
|
#define PPP_CODE_IS_REQUEST(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP || (protocol) == PPP_PROTOCOL_IPV6CP) && PPP_LCP_CODE_IS_REQUEST(c)) || (((protocol) == PPP_PROTOCOL_PAP) && PPP_PAP_CODE_IS_REQUEST(c)) || (((protocol) == PPP_PROTOCOL_CHAP) && PPP_CHAP_CODE_IS_REQUEST(c)))
|
||||||
|
#define PPP_CODE_IS_WITH_OPTION_LIST(protocol, c) ((((protocol) == PPP_PROTOCOL_LCP || (protocol) == PPP_PROTOCOL_IPCP || (protocol) == PPP_PROTOCOL_IPV6CP) && PPP_LCP_CODE_IS_WITH_OPTION_LIST(c)) || false)
|
||||||
|
|
||||||
|
#define PPP_IS_SUPPORTED_PROTOCOL(p) ((p) == PPP_PROTOCOL_LCP || (p) == PPP_PROTOCOL_PAP || (p) == PPP_PROTOCOL_CHAP || (p) == PPP_PROTOCOL_IPCP || (p) == PPP_PROTOCOL_IPV6CP || (p) == PPP_PROTOCOL_IP || (p) == PPP_PROTOCOL_IPV6)
|
||||||
|
|
||||||
|
#define PPP_STATUS_IS_UNAVAILABLE(c) ((c) == PPP_STATUS_FAIL || (c) == PPP_STATUS_AUTH_FAIL || (c) == PPP_STATUS_CLOSING || (c) == PPP_STATUS_CLOSING_WAIT || (c) == PPP_STATUS_CLOSED)
|
||||||
|
|
||||||
//// Constants
|
//// Constants
|
||||||
|
|
||||||
// Time-out value
|
// Time-out value
|
||||||
#define PPP_PACKET_RECV_TIMEOUT 10000 // Timeout until the next packet is received
|
#define PPP_PACKET_RECV_TIMEOUT (30 * 1000) // Timeout until the next packet is received
|
||||||
#define PPP_PACKET_RESEND_INTERVAL 1000 // Retransmission interval of the last packet
|
#define PPP_PACKET_RESEND_INTERVAL (5 * 1000) // Retransmission interval of the last packet
|
||||||
#define PPP_TERMINATE_TIMEOUT 2000 // Timeout value to complete disconnection after requesting to disconnect in the PPP
|
#define PPP_TERMINATE_TIMEOUT 2000 // Timeout value to complete disconnection after requesting to disconnect in the PPP
|
||||||
#define PPP_ECHO_SEND_INTERVAL 4792 // Transmission interval of PPP Echo Request
|
#define PPP_ECHO_SEND_INTERVAL 4792 // Transmission interval of PPP Echo Request
|
||||||
#define PPP_DATA_TIMEOUT (20 * 1000) // Communication time-out
|
#define PPP_DATA_TIMEOUT (60 * 1000) // Communication time-out
|
||||||
|
|
||||||
// MRU
|
// MRU
|
||||||
#define PPP_MRU_DEFAULT 1500 // Default value
|
#define PPP_MRU_DEFAULT 1500 // Default value
|
||||||
@ -44,9 +48,11 @@
|
|||||||
#define PPP_PROTOCOL_PAP 0xc023
|
#define PPP_PROTOCOL_PAP 0xc023
|
||||||
#define PPP_PROTOCOL_IPCP 0x8021
|
#define PPP_PROTOCOL_IPCP 0x8021
|
||||||
#define PPP_PROTOCOL_CHAP 0xc223
|
#define PPP_PROTOCOL_CHAP 0xc223
|
||||||
|
#define PPP_PROTOCOL_IPV6CP 0x8057
|
||||||
|
|
||||||
// PPP protocol (for transfer)
|
// PPP protocol (for transfer)
|
||||||
#define PPP_PROTOCOL_IP 0x0021
|
#define PPP_PROTOCOL_IP 0x0021
|
||||||
|
#define PPP_PROTOCOL_IPV6 0x0057
|
||||||
|
|
||||||
// LCP code
|
// LCP code
|
||||||
#define PPP_LCP_CODE_REQ 1
|
#define PPP_LCP_CODE_REQ 1
|
||||||
@ -84,6 +90,9 @@
|
|||||||
#define PPP_IPCP_OPTION_WINS1 130
|
#define PPP_IPCP_OPTION_WINS1 130
|
||||||
#define PPP_IPCP_OPTION_WINS2 132
|
#define PPP_IPCP_OPTION_WINS2 132
|
||||||
|
|
||||||
|
// IPV6CP option type
|
||||||
|
#define PPP_IPV6CP_OPTION_IID 1
|
||||||
|
|
||||||
// Authentication protocol
|
// Authentication protocol
|
||||||
#define PPP_LCP_AUTH_PAP PPP_PROTOCOL_PAP
|
#define PPP_LCP_AUTH_PAP PPP_PROTOCOL_PAP
|
||||||
#define PPP_LCP_AUTH_CHAP PPP_PROTOCOL_CHAP
|
#define PPP_LCP_AUTH_CHAP PPP_PROTOCOL_CHAP
|
||||||
@ -91,6 +100,26 @@
|
|||||||
// Algorithm of CHAP
|
// Algorithm of CHAP
|
||||||
#define PPP_CHAP_ALG_MS_CHAP_V2 0x81
|
#define PPP_CHAP_ALG_MS_CHAP_V2 0x81
|
||||||
|
|
||||||
|
// Link status
|
||||||
|
#define PPP_STATUS_CONNECTED 0x1
|
||||||
|
#define PPP_STATUS_BEFORE_AUTH 0x10
|
||||||
|
#define PPP_STATUS_AUTHENTICATING 0x11
|
||||||
|
#define PPP_STATUS_AUTH_SUCCESS 0x19
|
||||||
|
#define PPP_STATUS_NETWORK_LAYER 0x20
|
||||||
|
#define PPP_STATUS_CLOSING 0x100
|
||||||
|
#define PPP_STATUS_CLOSING_WAIT 0x101
|
||||||
|
#define PPP_STATUS_CLOSED 0x110
|
||||||
|
#define PPP_STATUS_FAIL 0x1000
|
||||||
|
#define PPP_STATUS_AUTH_FAIL 0x1010
|
||||||
|
|
||||||
|
// Protocol status
|
||||||
|
#define PPP_PROTO_STATUS_CLOSED 0x0
|
||||||
|
#define PPP_PROTO_STATUS_CONFIG 0x1
|
||||||
|
#define PPP_PROTO_STATUS_CONFIG_WAIT 0x2
|
||||||
|
#define PPP_PROTO_STATUS_OPENED 0x10
|
||||||
|
#define PPP_PROTO_STATUS_REJECTED 0x100
|
||||||
|
|
||||||
|
#define PPP_UNSPECIFIED 0xFFFF
|
||||||
|
|
||||||
//// Type
|
//// Type
|
||||||
|
|
||||||
@ -135,6 +164,22 @@ struct PPP_OPTION
|
|||||||
UINT AltDataSize; // Alternate data size
|
UINT AltDataSize; // Alternate data size
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// PPP request resend
|
||||||
|
struct PPP_REQUEST_RESEND
|
||||||
|
{
|
||||||
|
PPP_PACKET *Packet;
|
||||||
|
UCHAR Id;
|
||||||
|
UINT64 ResendTime;
|
||||||
|
UINT64 TimeoutTime;
|
||||||
|
};
|
||||||
|
|
||||||
|
// PPP next packet struct
|
||||||
|
struct PPP_DELAYED_PACKET
|
||||||
|
{
|
||||||
|
PPP_PACKET *Packet;
|
||||||
|
UINT DelayTicks;
|
||||||
|
};
|
||||||
|
|
||||||
// PPP session
|
// PPP session
|
||||||
struct PPP_SESSION
|
struct PPP_SESSION
|
||||||
{
|
{
|
||||||
@ -149,7 +194,6 @@ struct PPP_SESSION
|
|||||||
UINT Mru1; // MRU (server -> client)
|
UINT Mru1; // MRU (server -> client)
|
||||||
UINT Mru2; // MRU (client -> server)
|
UINT Mru2; // MRU (client -> server)
|
||||||
LIST *RecvPacketList; // Received packet list
|
LIST *RecvPacketList; // Received packet list
|
||||||
PPP_PACKET *LastStoredPacket; // Packet that is stored at the last
|
|
||||||
bool IsTerminateReceived; // Whether a Terminate has been received
|
bool IsTerminateReceived; // Whether a Terminate has been received
|
||||||
UINT DisconnectCauseCode; // L2TP disconnect cause code
|
UINT DisconnectCauseCode; // L2TP disconnect cause code
|
||||||
UINT DisconnectCauseDirection; // L2TP disconnect cause direction code
|
UINT DisconnectCauseDirection; // L2TP disconnect cause direction code
|
||||||
@ -178,48 +222,104 @@ struct PPP_SESSION
|
|||||||
UCHAR MsChapV2_ClientResponse[24]; // MS-CHAPv2 Client Response
|
UCHAR MsChapV2_ClientResponse[24]; // MS-CHAPv2 Client Response
|
||||||
UCHAR MsChapV2_ServerResponse[20]; // MS-CHAPv2 Server Response
|
UCHAR MsChapV2_ServerResponse[20]; // MS-CHAPv2 Server Response
|
||||||
UINT MsChapV2_ErrorCode; // Authentication failure error code of MS-CHAPv2
|
UINT MsChapV2_ErrorCode; // Authentication failure error code of MS-CHAPv2
|
||||||
|
UINT MsChapV2_PacketId; // MS-CHAPv2 Packet ID
|
||||||
|
|
||||||
bool MsChapV2_UseDoubleMsChapV2; // Use the double-MSCHAPv2 technieue
|
bool MsChapV2_UseDoubleMsChapV2; // Use the double-MSCHAPv2 technique
|
||||||
EAP_CLIENT *EapClient; // EAP client
|
EAP_CLIENT *EapClient; // EAP client
|
||||||
|
|
||||||
|
UCHAR ServerInterfaceId[8]; // Server IPv6CP Interface Identifier
|
||||||
|
UCHAR ClientInterfaceId[8]; // Client IPv6CP Interface Identifier
|
||||||
|
|
||||||
|
UINT PPPStatus;
|
||||||
|
UINT IPv4_State;
|
||||||
|
UINT IPv6_State;
|
||||||
|
|
||||||
|
LIST *SentReqPacketList; // Sent requests list
|
||||||
|
|
||||||
|
PPP_PACKET *CurrentPacket;
|
||||||
|
LIST *DelayedPackets;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Function prototype
|
// Function prototype
|
||||||
THREAD *NewPPPSession(CEDAR *cedar, IP *client_ip, UINT client_port, IP *server_ip, UINT server_port, TUBE *send_tube, TUBE *recv_tube, char *postfix, char *client_software_name, char *client_hostname, char *crypt_name, UINT adjust_mss);
|
|
||||||
|
// Main dataloop
|
||||||
void PPPThread(THREAD *thread, void *param);
|
void PPPThread(THREAD *thread, void *param);
|
||||||
void FreePPPSession(PPP_SESSION *p);
|
|
||||||
void FreePPPOptionList(LIST *o);
|
// Entry point
|
||||||
void FreePPPLCP(PPP_LCP *c);
|
THREAD *NewPPPSession(CEDAR *cedar, IP *client_ip, UINT client_port, IP *server_ip, UINT server_port, TUBE *send_tube, TUBE *recv_tube, char *postfix, char *client_software_name, char *client_hostname, char *crypt_name, UINT adjust_mss);
|
||||||
PPP_LCP *NewPPPLCP(UCHAR code, UCHAR id);
|
|
||||||
PPP_LCP *ParseLCP(USHORT protocol, void *data, UINT size);
|
// PPP processing functions
|
||||||
BUF *BuildLCPData(PPP_LCP *c);
|
bool PPPRejectUnsupportedPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
PPP_OPTION *GetOptionValue(PPP_LCP *c, UCHAR type);
|
bool PPPRejectUnsupportedPacketEx(PPP_SESSION *p, PPP_PACKET *pp, bool force);
|
||||||
PPP_PACKET *ParsePPPPacket(void *data, UINT size);
|
bool PPPProcessRetransmissions(PPP_SESSION *p);
|
||||||
void FreePPPPacket(PPP_PACKET *pp);
|
bool PPPSendEchoRequest(PPP_SESSION *p);
|
||||||
void FreePPPPacketEx(PPP_PACKET *pp, bool no_free_struct);
|
// Response packets
|
||||||
BUF *BuildPPPPacketData(PPP_PACKET *pp);
|
bool PPPProcessResponsePacket(PPP_SESSION *p, PPP_PACKET *pp, PPP_PACKET *req);
|
||||||
PPP_OPTION *NewPPPOption(UCHAR type, void *data, UINT size);
|
bool PPPProcessLCPResponsePacket(PPP_SESSION *p, PPP_PACKET *pp, PPP_PACKET *req);
|
||||||
bool PPPSendPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
bool PPPProcessCHAPResponsePacket(PPP_SESSION *p, PPP_PACKET *pp, PPP_PACKET *req);
|
||||||
|
bool PPPProcessIPCPResponsePacket(PPP_SESSION *p, PPP_PACKET *pp, PPP_PACKET *req);
|
||||||
|
// Request packets
|
||||||
|
bool PPPProcessRequestPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPProcessLCPRequestPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPProcessPAPRequestPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPProcessIPCPRequestPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
|
||||||
|
// LCP option based packets utility
|
||||||
|
bool PPPRejectLCPOptions(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPRejectLCPOptionsEx(PPP_SESSION *p, PPP_PACKET *pp, bool simulate);
|
||||||
|
bool PPPNackLCPOptions(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPNackLCPOptionsEx(PPP_SESSION *p, PPP_PACKET* pp, bool simulate);
|
||||||
|
bool PPPAckLCPOptions(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
|
bool PPPAckLCPOptionsEx(PPP_SESSION *p, PPP_PACKET *pp, bool simulate);
|
||||||
|
|
||||||
|
|
||||||
|
// PPP networking functions
|
||||||
|
// Send packets
|
||||||
|
bool PPPSendAndRetransmitRequest(PPP_SESSION *p, USHORT protocol, PPP_LCP *c);
|
||||||
|
bool PPPSendPacketAndFree(PPP_SESSION *p, PPP_PACKET *pp);
|
||||||
bool PPPSendPacketEx(PPP_SESSION *p, PPP_PACKET *pp, bool no_flush);
|
bool PPPSendPacketEx(PPP_SESSION *p, PPP_PACKET *pp, bool no_flush);
|
||||||
|
// Receive packets
|
||||||
PPP_PACKET *PPPRecvPacket(PPP_SESSION *p, bool async);
|
PPP_PACKET *PPPRecvPacket(PPP_SESSION *p, bool async);
|
||||||
PPP_PACKET *PPPRecvPacketWithLowLayerProcessing(PPP_SESSION *p, bool async);
|
// Helpers for delaying packets
|
||||||
PPP_PACKET *PPPRecvPacketForCommunication(PPP_SESSION *p);
|
PPP_PACKET *PPPGetNextPacket(PPP_SESSION *p);
|
||||||
void PPPStoreLastPacket(PPP_SESSION *p, PPP_PACKET *pp);
|
void PPPAddNextPacket(PPP_SESSION *p, PPP_PACKET *pp, UINT delay);
|
||||||
void PPPCleanTerminate(PPP_SESSION *p);
|
int PPPDelayedPacketsComparator(const void *a, const void *b);
|
||||||
|
char PPPRelatedPacketComparator(PPP_PACKET *a, PPP_PACKET *b);
|
||||||
|
|
||||||
|
// PPP utility functions
|
||||||
|
// Packet structures creation utilities
|
||||||
|
PPP_LCP *NewPPPLCP(UCHAR code, UCHAR id);
|
||||||
|
PPP_OPTION *NewPPPOption(UCHAR type, void *data, UINT size);
|
||||||
|
// Packet parse utilities
|
||||||
|
PPP_PACKET *ParsePPPPacket(void *data, UINT size);
|
||||||
|
PPP_LCP *PPPParseLCP(USHORT protocol, void *data, UINT size);
|
||||||
|
bool PPPParseMSCHAP2ResponsePacket(PPP_SESSION *p, PPP_PACKET *req);
|
||||||
|
// Packet building utilities
|
||||||
|
BUF *BuildPPPPacketData(PPP_PACKET *pp);
|
||||||
|
BUF *BuildLCPData(PPP_LCP *c);
|
||||||
|
PPP_LCP *BuildMSCHAP2ChallengePacket(PPP_SESSION *p);
|
||||||
|
// IPCP packet utilities
|
||||||
bool PPPGetIPOptionFromLCP(PPP_IPOPTION *o, PPP_LCP *c);
|
bool PPPGetIPOptionFromLCP(PPP_IPOPTION *o, PPP_LCP *c);
|
||||||
bool PPPSetIPOptionToLCP(PPP_IPOPTION *o, PPP_LCP *c, bool only_modify);
|
bool PPPSetIPOptionToLCP(PPP_IPOPTION *o, PPP_LCP *c, bool only_modify);
|
||||||
bool PPPGetIPAddressValueFromLCP(PPP_LCP *c, UINT type, IP *ip);
|
bool PPPGetIPAddressValueFromLCP(PPP_LCP *c, UINT type, IP *ip);
|
||||||
bool PPPSetIPAddressValueToLCP(PPP_LCP *c, UINT type, IP *ip, bool only_modify);
|
bool PPPSetIPAddressValueToLCP(PPP_LCP *c, UINT type, IP *ip, bool only_modify);
|
||||||
|
// Other packet utilities
|
||||||
bool PPPSendRequest(PPP_SESSION *p, USHORT protocol, PPP_LCP *c);
|
PPP_OPTION *PPPGetOptionValue(PPP_LCP *c, UCHAR type);
|
||||||
USHORT PPPContinueCurrentProtocolRequestListening(PPP_SESSION *p, USHORT protocol);
|
|
||||||
bool PPPContinueUntilFinishAllLCPOptionRequestsDetermined(PPP_SESSION *p);
|
|
||||||
PPP_PACKET *PPPRecvResponsePacket(PPP_SESSION *p, PPP_PACKET *req, USHORT expected_protocol, USHORT *received_protocol, bool finish_when_all_lcp_acked,
|
|
||||||
bool return_mschapv2_response_with_no_processing);
|
|
||||||
PPP_PACKET *PPPProcessRequestPacket(PPP_SESSION *p, PPP_PACKET *req);
|
|
||||||
void PPPSendEchoRequest(PPP_SESSION *p);
|
|
||||||
bool PPPParseUsername(CEDAR *cedar, char *src, ETHERIP_ID *dst);
|
|
||||||
bool IsHubExistsWithLock(CEDAR *cedar, char *hubname);
|
bool IsHubExistsWithLock(CEDAR *cedar, char *hubname);
|
||||||
|
void PPPSetStatus(PPP_SESSION *p, UINT status);
|
||||||
|
|
||||||
|
// Memory freeing functions
|
||||||
|
void FreePPPSession(PPP_SESSION *p);
|
||||||
|
void FreePPPLCP(PPP_LCP *c);
|
||||||
|
void FreePPPOptionList(LIST *o);
|
||||||
|
void FreePPPPacket(PPP_PACKET *pp);
|
||||||
|
void FreePPPPacketEx(PPP_PACKET *pp, bool no_free_struct);
|
||||||
|
void PPPFreeEapClient(PPP_SESSION *p);
|
||||||
|
|
||||||
|
// Utility functions used not only in PPP stack
|
||||||
|
bool PPPParseUsername(CEDAR *cedar, char *src, ETHERIP_ID *dst);
|
||||||
void GenerateNtPasswordHash(UCHAR *dst, char *password);
|
void GenerateNtPasswordHash(UCHAR *dst, char *password);
|
||||||
void GenerateNtPasswordHashHash(UCHAR *dst_hash, UCHAR *src_hash);
|
void GenerateNtPasswordHashHash(UCHAR *dst_hash, UCHAR *src_hash);
|
||||||
void MsChapV2Server_GenerateChallenge(UCHAR *dst);
|
void MsChapV2Server_GenerateChallenge(UCHAR *dst);
|
||||||
@ -228,6 +328,5 @@ void MsChapV2Client_GenerateResponse(UCHAR *dst, UCHAR *challenge8, UCHAR *nt_pa
|
|||||||
void MsChapV2Server_GenerateResponse(UCHAR *dst, UCHAR *nt_password_hash_hash, UCHAR *client_response, UCHAR *challenge8);
|
void MsChapV2Server_GenerateResponse(UCHAR *dst, UCHAR *nt_password_hash_hash, UCHAR *client_response, UCHAR *challenge8);
|
||||||
bool MsChapV2VerityPassword(IPC_MSCHAP_V2_AUTHINFO *d, char *password);
|
bool MsChapV2VerityPassword(IPC_MSCHAP_V2_AUTHINFO *d, char *password);
|
||||||
char *MsChapV2DoBruteForce(IPC_MSCHAP_V2_AUTHINFO *d, LIST *password_list);
|
char *MsChapV2DoBruteForce(IPC_MSCHAP_V2_AUTHINFO *d, LIST *password_list);
|
||||||
void PPPFreeEapClient(PPP_SESSION *p);
|
|
||||||
|
|
||||||
#endif // PROTO_PPP_H
|
#endif // PROTO_PPP_H
|
||||||
|
@ -7315,9 +7315,9 @@ void SetIP6(IP *ip, UCHAR *value)
|
|||||||
|
|
||||||
Zero(ip, sizeof(IP));
|
Zero(ip, sizeof(IP));
|
||||||
|
|
||||||
ip->addr[0] = 223;
|
ip->addr[0] = 192;
|
||||||
ip->addr[1] = 255;
|
ip->addr[1] = 0;
|
||||||
ip->addr[2] = 255;
|
ip->addr[2] = 2;
|
||||||
ip->addr[3] = 254;
|
ip->addr[3] = 254;
|
||||||
|
|
||||||
if (value != NULL)
|
if (value != NULL)
|
||||||
@ -7340,7 +7340,7 @@ bool IsIP6(IP *ip)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ip->addr[0] == 223 && ip->addr[1] == 255 && ip->addr[2] == 255 && ip->addr[3] == 254)
|
if (ip->addr[0] == 192 && ip->addr[1] == 0 && ip->addr[2] == 2 && ip->addr[3] == 254)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ struct DYN_VALUE
|
|||||||
// IP address
|
// IP address
|
||||||
struct IP
|
struct IP
|
||||||
{
|
{
|
||||||
UCHAR addr[4]; // IPv4 address, (meaning that 223.255.255.254 = IPv6)
|
UCHAR addr[4]; // IPv4 address, (meaning that 192.0.2.254 = IPv6)
|
||||||
UCHAR ipv6_addr[16]; // IPv6 address
|
UCHAR ipv6_addr[16]; // IPv6 address
|
||||||
UINT ipv6_scope_id; // IPv6 scope ID
|
UINT ipv6_scope_id; // IPv6 scope ID
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user