int udp_port_unreach(in_addr_t __faddr, uint16_t __fport, in_addr_t __laddr, uint16_t __lport) { struct udp_pcb * up; up = (struct udp_pcb *)pcb_wildlookup(__faddr, __fport, __laddr, __lport, &__udp__.active); if (up == NULL) { DCC_LOG4(LOG_TRACE, "not found: %I:%d > %I:%d", __laddr, ntohs(__lport), __faddr, ntohs(__lport)); return -1; } /* set the error flag */ up->u_icmp_err = 1; /* unconnect the PCB */ up->u_faddr = INADDR_ANY; up->u_fport = 0; /* notify the application */ __os_cond_signal(up->u_rcv_cond); return 0; }
inline struct tcp_listen_pcb * tcp_listen_lookup(in_addr_t __faddr, uint16_t __fport, in_addr_t __laddr, uint16_t __lport) { return (struct tcp_listen_pcb *)pcb_wildlookup(__faddr, __fport, __laddr, __lport, &__tcp__.listen); }