📄 pppncprx.c
字号:
PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { M_BLK_ID contiguousPacket = packet; NCP_PACKET *sptr_ipcp_rx_packet; USHORT number_of_bytes_rxed; NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData; USHORT number_of_bytes_without_options; if (packet == NULL) return; sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *); /* option processing expects a contiguous buffer */ if (packet->mBlkHdr.mNext != NULL) { number_of_bytes_rxed = packet->mBlkPktHdr.len; contiguousPacket = m_pullup (packet, ntohs(sptr_ipcp_rx_packet->ncp_header.length)); if (contiguousPacket == NULL) return; } else number_of_bytes_rxed = packet->mBlkHdr.mLen; number_of_bytes_without_options = sizeof (PPP_HEADER) + sizeof (NCP_HEADER); if (number_of_bytes_rxed > number_of_bytes_without_options) { process_ncp_configuration_nak_options (pluginState, &pStackData->option_lists,contiguousPacket); } else { printf ("PPP:IPCP Configuration NAK Received with no NAK options in it \ for stack: 0x%x\n", (UINT32)pluginState->stackObj); netMblkClChainFree (contiguousPacket); return; } if (pStackData->last_txed_ncp_configuration_request_packet != NULL) { netMblkClChainFree ( pStackData->last_txed_ncp_configuration_request_packet); pStackData->last_txed_ncp_configuration_request_packet = NULL; } netMblkClChainFree (contiguousPacket); execute_ppp_state_machine (pluginState, PPP_RECEIVE_CONFIGURE_NAK_EVENT, NULL); }/********************************************************************************* ncp_configure_reject_received - */LOCAL void ncp_configure_reject_received ( PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { M_BLK_ID contiguousPacket = packet; NCP_PACKET *sptr_ipcp_rx_packet; USHORT number_of_bytes_rxed; NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData; USHORT number_of_bytes_without_options; USHORT length_of_options_to_be_processed; if (packet == NULL) return; sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *); /* option processing expects a contiguous buffer */ if (packet->mBlkHdr.mNext != NULL) { number_of_bytes_rxed = packet->mBlkPktHdr.len; contiguousPacket = m_pullup (packet, ntohs(sptr_ipcp_rx_packet->ncp_header.length)); if (contiguousPacket == NULL) return; } else number_of_bytes_rxed = packet->mBlkHdr.mLen; sptr_ipcp_rx_packet = mtod(contiguousPacket, NCP_PACKET *); if (sptr_ipcp_rx_packet->ncp_header.id == pStackData->last_request_id) { /* strip NCP header */ contiguousPacket->mBlkHdr.mLen -= sizeof(NCP_PACKET); contiguousPacket->mBlkHdr.mData += sizeof(NCP_PACKET); number_of_bytes_without_options = sizeof (PPP_HEADER) + sizeof (NCP_HEADER); length_of_options_to_be_processed = (USHORT) (number_of_bytes_rxed - number_of_bytes_without_options); if (length_of_options_to_be_processed > 0x0000) { if (parse_ppp_options_from_reject_configure ( pluginState->pluginObj->pfwObj, &pStackData->option_lists, contiguousPacket) == SOME_OPTIONS_ARE_REJECTED) { execute_ppp_state_machine (pluginState, PPP_CLOSE_EVENT, NULL); netMblkClChainFree(contiguousPacket); return; } } contiguousPacket->mBlkHdr.mLen += sizeof(NCP_PACKET); contiguousPacket->mBlkHdr.mData -= sizeof(NCP_PACKET); if (pStackData->last_txed_ncp_configuration_request_packet != NULL) { netMblkClChainFree ( pStackData->last_txed_ncp_configuration_request_packet); pStackData->last_txed_ncp_configuration_request_packet = NULL; } execute_ppp_state_machine (pluginState, PPP_RECEIVE_CONFIGURE_REJECT_EVENT,NULL); } netMblkClChainFree(contiguousPacket); }/********************************************************************************* ncp_termination_request_received -*/LOCAL void ncp_termination_request_received ( PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { M_BLK_ID contiguousPacket = packet; NCP_PACKET *sptr_ipcp_rx_packet; USHORT number_of_bytes_rxed; NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData; NCP_PROFILE_DATA *pProfileData = (NCP_PROFILE_DATA *) pluginState->profileData; sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *); /* option processing expects a contiguous buffer */ if (packet->mBlkHdr.mNext != NULL) { number_of_bytes_rxed = packet->mBlkPktHdr.len; contiguousPacket = m_pullup (packet, ntohs(sptr_ipcp_rx_packet->ncp_header.length)); if (contiguousPacket == NULL) return; } else number_of_bytes_rxed = packet->mBlkHdr.mLen; netMblkClChainFree (contiguousPacket); execute_ppp_state_machine (pluginState, PPP_RECEIVE_TERMINATE_REQUEST_EVENT, NULL); /* wait 1 cycle for other side to terminate the link before trying to * reset so we can come back up. rfc 1661 sect. 3.7 */ pStackData->number_of_ncp_termination_requests = (USHORT) pProfileData->maximum_number_of_termination_requests; pStackData->termination_request_send_interval = 0x00000000L; }/********************************************************************************* ncp_termination_ack_received -*/LOCAL void ncp_termination_ack_received ( PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { M_BLK_ID contiguousPacket = packet; NCP_PACKET *sptr_ipcp_rx_packet; sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *); /* option processing expects a contiguous buffer */ if (packet->mBlkHdr.mNext != NULL) { contiguousPacket = m_pullup(packet, ntohs(sptr_ipcp_rx_packet->ncp_header.length)); if (contiguousPacket == NULL) return; } netMblkClChainFree (contiguousPacket); execute_ppp_state_machine (pluginState, PPP_RECEIVE_TERMINATE_ACK_EVENT, NULL); }/********************************************************************************* ncp_code_reject_received -*/LOCAL void ncp_code_reject_received ( PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { M_BLK_ID contiguousPacket = packet; NCP_CODE_REJECT_PACKET *sptr_ipcp_rx_packet; sptr_ipcp_rx_packet = mtod(packet, NCP_CODE_REJECT_PACKET *); /* option processing expects a contiguous buffer */ if (packet->mBlkHdr.mNext != NULL) { contiguousPacket = m_pullup(packet, ntohs(sptr_ipcp_rx_packet->ncp_header.length)); if (contiguousPacket == NULL) return; } netMblkClChainFree (contiguousPacket); execute_ppp_state_machine (pluginState, PPP_RECEIVE_CODE_REJECT_PERMITTED_EVENT, NULL); }/********************************************************************************* process_ncp_configuration_options -*/LOCAL TEST process_ncp_configuration_options ( PFW_PLUGIN_OBJ_STATE * pluginState, OPTION_LISTS *sptr_option_lists, /* option lists */ M_BLK_ID mblk_rx_packet ) { OPTION_PARSE_RESULT parse_result; NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData; /* Strip NCP header */ mblk_rx_packet->mBlkHdr.mLen -= NCP_PACKET_HEADER_SIZE; mblk_rx_packet->mBlkHdr.mData += NCP_PACKET_HEADER_SIZE; parse_result = parse_ppp_options_from_configure_request ( pluginState->pluginObj->pfwObj, sptr_option_lists, mblk_rx_packet,pluginState); mblk_rx_packet->mBlkHdr.mLen += NCP_PACKET_HEADER_SIZE; mblk_rx_packet->mBlkHdr.mData -= NCP_PACKET_HEADER_SIZE; if (parse_result == OPTION_PARSING_ERROR) { printf ("NCP: received bad Configure Request\n"); netMblkClChainFree (mblk_rx_packet); pStackData->last_rxed_ncp_configuration_request_packet = NULL; return (FAIL); } if (parse_result == SOME_OPTIONS_ARE_REJECTED) { execute_ppp_state_machine (pluginState, PPP_RECEIVE_CONFIG_REQUEST_BAD_OPTION_EVENT, NULL); return (FAIL); } else if (parse_result == SOME_OPTIONS_ARE_NACKED) { execute_ppp_state_machine (pluginState, PPP_RECEIVE_CONFIGURE_REQUEST_BAD_EVENT, NULL); return (FAIL); } else { return (PASS); } }/********************************************************************************* illegal_ncp_code_received -*/LOCAL void illegal_ncp_code_received ( PFW_PLUGIN_OBJ_STATE * pluginState, M_BLK_ID packet ) { execute_ppp_state_machine (pluginState, PPP_RECEIVE_UNKNOWN_CODE_EVENT, packet); }/********************************************************************************* process_ncp_configuration_nak_options -*/LOCAL TEST process_ncp_configuration_nak_options ( PFW_PLUGIN_OBJ_STATE * pluginState, OPTION_LISTS * sptr_option_lists, /* option lists */ M_BLK_ID mblk_rx_packet ) { mblk_rx_packet->mBlkHdr.mLen -= NCP_PACKET_HEADER_SIZE; mblk_rx_packet->mBlkHdr.mData += NCP_PACKET_HEADER_SIZE; parse_ppp_options_from_nak_configure (pluginState->pluginObj->pfwObj, sptr_option_lists, mblk_rx_packet, pluginState); mblk_rx_packet->mBlkHdr.mLen += NCP_PACKET_HEADER_SIZE; mblk_rx_packet->mBlkHdr.mData -= NCP_PACKET_HEADER_SIZE; return (PASS); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -