Lines Matching full:pcb

73 #include <machine/pcb.h>
106 * Simple accessors for opaque PCB.
109 debugnet_get_gw_mac(const struct debugnet_pcb *pcb) in debugnet_get_gw_mac() argument
111 MPASS(g_debugnet_pcb_inuse && pcb == &g_dnet_pcb && in debugnet_get_gw_mac()
112 pcb->dp_state >= DN_STATE_HAVE_GW_MAC); in debugnet_get_gw_mac()
113 return (pcb->dp_gw_mac.octet); in debugnet_get_gw_mac()
117 debugnet_get_server_addr(const struct debugnet_pcb *pcb) in debugnet_get_server_addr() argument
119 MPASS(g_debugnet_pcb_inuse && pcb == &g_dnet_pcb && in debugnet_get_server_addr()
120 pcb->dp_state >= DN_STATE_GOT_HERALD_PORT); in debugnet_get_server_addr()
121 return (&pcb->dp_server); in debugnet_get_server_addr()
125 debugnet_get_server_port(const struct debugnet_pcb *pcb) in debugnet_get_server_port() argument
127 MPASS(g_debugnet_pcb_inuse && pcb == &g_dnet_pcb && in debugnet_get_server_port()
128 pcb->dp_state >= DN_STATE_GOT_HERALD_PORT); in debugnet_get_server_port()
129 return (pcb->dp_server_port); in debugnet_get_server_port()
183 * pcb The debugnet context block
190 debugnet_udp_output(struct debugnet_pcb *pcb, struct mbuf *m) in debugnet_udp_output() argument
194 MPASS(pcb->dp_state >= DN_STATE_HAVE_GW_MAC); in debugnet_udp_output()
205 udp->uh_sport = htons(pcb->dp_client_port); in debugnet_udp_output()
206 udp->uh_dport = htons(pcb->dp_server_port); in debugnet_udp_output()
210 return (debugnet_ip_output(pcb, m)); in debugnet_udp_output()
214 debugnet_ack_output(struct debugnet_pcb *pcb, uint32_t seqno /* net endian */) in debugnet_ack_output() argument
232 return (debugnet_udp_output(pcb, m)); in debugnet_ack_output()
259 debugnet_send(struct debugnet_pcb *pcb, uint32_t type, const void *data, in debugnet_send() argument
268 if (pcb->dp_state == DN_STATE_REMOTE_CLOSED) in debugnet_send()
272 pcb->dp_rcvd_acks = 0; in debugnet_send()
282 pktlen = min(pktlen, pcb->dp_ifp->if_mtu - in debugnet_send()
289 if ((pcb->dp_rcvd_acks & (1 << i)) != 0) { in debugnet_send()
307 dn_msg_hdr->mh_seqno = htonl(pcb->dp_seqno + i); in debugnet_send()
335 error = debugnet_udp_output(pcb, m); in debugnet_send()
353 while (pcb->dp_rcvd_acks != want_acks) { in debugnet_send()
360 debugnet_network_poll(pcb); in debugnet_send()
362 if (pcb->dp_state == DN_STATE_REMOTE_CLOSED) in debugnet_send()
365 pcb->dp_seqno += i; in debugnet_send()
378 debugnet_handle_rx_msg(struct debugnet_pcb *pcb, struct mbuf **mb) in debugnet_handle_rx_msg() argument
413 pcb->dp_state = DN_STATE_REMOTE_CLOSED; in debugnet_handle_rx_msg()
414 if (pcb->dp_finish_handler != NULL) { in debugnet_handle_rx_msg()
415 pcb->dp_finish_handler(); in debugnet_handle_rx_msg()
431 error = pcb->dp_rx_handler(m); in debugnet_handle_rx_msg()
438 error = debugnet_ack_output(pcb, seqno); in debugnet_handle_rx_msg()
445 debugnet_handle_ack(struct debugnet_pcb *pcb, struct mbuf **mb, uint16_t sport) in debugnet_handle_ack() argument
470 if (pcb->dp_state < DN_STATE_GOT_HERALD_PORT) { in debugnet_handle_ack()
471 pcb->dp_server_port = sport; in debugnet_handle_ack()
472 pcb->dp_state = DN_STATE_GOT_HERALD_PORT; in debugnet_handle_ack()
474 if (rcv_ackno >= pcb->dp_seqno + DEBUGNET_MAX_IN_FLIGHT) in debugnet_handle_ack()
476 else if (rcv_ackno >= pcb->dp_seqno) { in debugnet_handle_ack()
478 pcb->dp_rcvd_acks |= 1 << (rcv_ackno - pcb->dp_seqno); in debugnet_handle_ack()
483 debugnet_handle_udp(struct debugnet_pcb *pcb, struct mbuf **mb) in debugnet_handle_udp() argument
509 if (ntohs(udp->uh_dport) != pcb->dp_client_port) { in debugnet_handle_udp()
527 debugnet_handle_ack(pcb, mb, sport); in debugnet_handle_udp()
531 if (pcb->dp_rx_handler == NULL) { in debugnet_handle_udp()
540 debugnet_handle_rx_msg(pcb, mb); in debugnet_handle_udp()
631 debugnet_network_poll(struct debugnet_pcb *pcb) in debugnet_network_poll() argument
635 ifp = pcb->dp_ifp; in debugnet_network_poll()
643 debugnet_free(struct debugnet_pcb *pcb) in debugnet_free() argument
647 MPASS(pcb == &g_dnet_pcb); in debugnet_free()
648 MPASS(pcb->dp_drv_input == NULL || g_debugnet_pcb_inuse); in debugnet_free()
650 ifp = pcb->dp_ifp; in debugnet_free()
652 if (pcb->dp_drv_input != NULL) in debugnet_free()
653 ifp->if_input = pcb->dp_drv_input; in debugnet_free()
654 if (pcb->dp_event_started) in debugnet_free()
668 struct debugnet_pcb *pcb; in debugnet_connect() local
677 pcb = &g_dnet_pcb; in debugnet_connect()
678 *pcb = (struct debugnet_pcb) { in debugnet_connect()
695 if (pcb->dp_client == INADDR_ANY || pcb->dp_gateway == INADDR_ANY || in debugnet_connect()
696 pcb->dp_ifp == NULL) { in debugnet_connect()
705 .sin_addr.s_addr = pcb->dp_server, in debugnet_connect()
734 if (pcb->dp_client == INADDR_ANY) in debugnet_connect()
735 pcb->dp_client = local_sin->sin_addr.s_addr; in debugnet_connect()
736 if (pcb->dp_gateway == INADDR_ANY && gw_sin != NULL) in debugnet_connect()
737 pcb->dp_gateway = gw_sin->sin_addr.s_addr; in debugnet_connect()
738 if (pcb->dp_ifp == NULL) in debugnet_connect()
739 pcb->dp_ifp = rt_ifp; in debugnet_connect()
742 ifp = pcb->dp_ifp; in debugnet_connect()
747 inet_ntop(AF_INET, &pcb->dp_server, serbuf, sizeof(serbuf)); in debugnet_connect()
748 inet_ntop(AF_INET, &pcb->dp_client, clibuf, sizeof(clibuf)); in debugnet_connect()
749 if (pcb->dp_gateway != INADDR_ANY) in debugnet_connect()
750 inet_ntop(AF_INET, &pcb->dp_gateway, gwbuf, sizeof(gwbuf)); in debugnet_connect()
752 serbuf, pcb->dp_server_port, in debugnet_connect()
753 (pcb->dp_gateway == INADDR_ANY) ? "" : " via ", in debugnet_connect()
754 (pcb->dp_gateway == INADDR_ANY) ? "" : gwbuf, in debugnet_connect()
755 clibuf, pcb->dp_client_port, if_name(ifp)); in debugnet_connect()
773 pcb->dp_event_started = true; in debugnet_connect()
783 pcb->dp_drv_input = ifp->if_input; in debugnet_connect()
789 error = debugnet_arp_gw(pcb); in debugnet_connect()
794 MPASS(pcb->dp_state == DN_STATE_HAVE_GW_MAC); in debugnet_connect()
800 error = debugnet_send(pcb, DEBUGNET_HERALD, dcp->dc_herald_data, in debugnet_connect()
807 *pcb_out = pcb; in debugnet_connect()
811 debugnet_free(pcb); in debugnet_connect()