void RTCSLOG_enable ( uint32_t logtype /* [IN] the type of log entry to enable */ ) { /* Body */ RTCS_DATA_PTR rtcs = RTCS_get_data(); if (rtcs) { rtcs->RTCS_LOG_CONTROL |= logtype; RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_IFTYPE (IPIFTYPE_ETHERNET) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_IFTYPE (IPIFTYPE_PPP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_IFTYPE (IPIFTYPE_LOOPBACK) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_ARP (IPIFTYPE_ETHERNET) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_ICMP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_IGMP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_IP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_TCP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_UDP) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PROTO (IPPROTO_OSPF) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PORT (IPPORT_BOOTPC) ); RTCSLOG_enable_prot(logtype, RTCS_LOGCTRL_PORT (IPPORT_RIP) ); } } /* Endbody */
uint_32 IPCP_send ( IP_IF_PTR if_ptr, /* [IN] the IP interface structure */ RTCSPCB_PTR pcb, /* [IN] the packet to send */ _ip_address src, /* [IN] the next-hop source address */ _ip_address dest, /* [IN] the next-hop destination address */ pointer data /* [IN] unused */ ) { /* Body */ IPCP_CFG_STRUCT_PTR ipcp_ptr = if_ptr->HANDLE; _ppp_handle handle = ipcp_ptr->HANDLE; uint_32 error; IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_TX_TOTAL++); IF_IPIF_STATS_ENABLED(if_ptr->STATS.ST_TX_OCTETS += RTCSPCB_SIZE(pcb)); IF_IPIF_STATS_ENABLED(if_ptr->STATS.ST_TX_UNICAST++); RTCSLOG_PCB_WRITE(pcb, RTCS_LOGCTRL_IFTYPE(IPIFTYPE_PPP), 0); error = RTCSPCB_insert_header(pcb, 2); if (error) { IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_TX_ERRORS++); IF_IPIF_STATS_ENABLED(RTCS_seterror(&if_ptr->STATS.ERR_TX, error, (uint_32)pcb)); RTCSLOG_PCB_FREE(pcb, error); RTCSPCB_free(pcb); return error; } /* Endif */ pcb->PCBPTR->FRAG[0].LENGTH = pcb->HEADER_FRAG_USED; pcb->PCBPTR->FRAG[0].FRAGMENT = RTCSPCB_DATA(pcb); error = PPP_send(handle, PPP_PROT_IP, pcb->PCBPTR); RTCSLOG_PCB_FREE(pcb, error); if (error) { IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_TX_ERRORS++); IF_IPIF_STATS_ENABLED(RTCS_seterror(&if_ptr->STATS.ERR_TX, error, (uint_32)pcb)); } /* Endif */ return error; } /* Endbody */
void IPCP_recv ( PCB_PTR pcb, /* [IN] received packet */ pointer handle /* [IN] IPCP configuration */ ) { /* Body */ IP_IF_PTR if_ptr = handle; RTCSPCB_PTR packet; uint_32 error; IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_RX_TOTAL++); IF_IPIF_STATS_ENABLED(if_ptr->STATS.ST_RX_OCTETS += pcb->FRAG[0].LENGTH); IF_IPIF_STATS_ENABLED(if_ptr->STATS.ST_RX_UNICAST++); packet = RTCSPCB_alloc_recv(pcb); if (packet == NULL) { IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_RX_MISSED++); PCB_free(pcb); return; } /* Endif */ //RTCSLOG_PCB_ALLOC(packet); error = RTCSPCB_next(packet, 2); if (error) { IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_RX_ERRORS++); IF_IPIF_STATS_ENABLED(RTCS_seterror(&if_ptr->STATS.ERR_RX, error, (uint_32)packet)); RTCSLOG_PCB_FREE(packet, error); RTCSPCB_free(packet); return; } /* Endif */ RTCSLOG_PCB_READ(packet, RTCS_LOGCTRL_IFTYPE(IPIFTYPE_PPP), 0); packet->TYPE = RTCSPCB_TYPE_ONLYCAST; packet->IFSRC = if_ptr; if (!RTCSCMD_service(packet, IP_service)) { IF_IPIF_STATS_ENABLED(if_ptr->STATS.COMMON.ST_RX_MISSED++); RTCSLOG_PCB_FREE(packet, RTCS_OK); RTCSPCB_free(packet); } /* Endif */ } /* Endbody */