Lines Matching defs:pxping

85 struct pxping {
145 * Desired slot in pxping::timeout_list. See pxping_timer().
150 * Chaining for pxping::timeout_list
156 * Chaining for pxping::pcbs
171 * netif (from pxping).
175 struct pxping *pxping;
189 struct pxping *pxping;
197 static int pxping_init_windows(struct pxping *pxping);
203 static void pxping_timer_needed(struct pxping *pxping);
205 static struct ping_pcb *pxping_pcb_for_request(struct pxping *pxping,
209 static struct ping_pcb *pxping_pcb_for_reply(struct pxping *pxping, int is_ipv6,
213 static struct ping_pcb *pxping_pcb_allocate(struct pxping *pxping);
214 static void pxping_pcb_register(struct pxping *pxping, struct ping_pcb *pcb);
215 static void pxping_pcb_deregister(struct pxping *pxping, struct ping_pcb *pcb);
216 static void pxping_pcb_delete(struct pxping *pxping, struct ping_pcb *pcb);
217 static void pxping_timeout_add(struct pxping *pxping, struct ping_pcb *pcb);
218 static void pxping_timeout_del(struct pxping *pxping, struct ping_pcb *pcb);
222 static void pxping_pmgr_icmp4(struct pxping *pxping);
223 static void pxping_pmgr_icmp4_echo(struct pxping *pxping,
225 static void pxping_pmgr_icmp4_error(struct pxping *pxping,
227 static void pxping_pmgr_icmp6(struct pxping *pxping);
228 static void pxping_pmgr_icmp6_echo(struct pxping *pxping,
231 static void pxping_pmgr_icmp6_error(struct pxping *pxping,
235 static void pxping_pmgr_forward_inbound(struct pxping *pxping, u16_t iplen);
238 static void pxping_pmgr_forward_inbound6(struct pxping *pxping,
258 static struct pxping g_pxping;
357 pxping_init_windows(struct pxping *pxping)
363 pxping->pfWSARecvMsg6 = NULL;
364 status = WSAIoctl(pxping->sock6,
367 &pxping->pfWSARecvMsg6, sizeof(pxping->pfWSARecvMsg6),
446 struct pxping *pxping = (struct pxping *)arg;
468 pcb = pxping_pcb_for_request(pxping, 0,
506 if (df != pxping->hdrincl) {
507 status = setsockopt(pxping->sock4, IPPROTO_IP, IP_HDRINCL,
510 pxping->hdrincl = df;
517 if (pxping->hdrincl) {
552 else /* !pxping->hdrincl */
568 if (df != pxping->df) {
569 status = setsockopt(pxping->sock4, IPPROTO_IP, dfopt,
572 pxping->df = df;
580 if (ttl != pxping->ttl) {
581 status = setsockopt(pxping->sock4, IPPROTO_IP, IP_TTL,
584 pxping->ttl = ttl;
592 if (tos != pxping->tos) {
593 status = setsockopt(pxping->sock4, IPPROTO_IP, IP_TOS,
596 pxping->tos = tos;
611 status = proxy_sendto(pxping->sock4, p,
618 if (pxping->hdrincl) {
672 struct pxping *pxping = (struct pxping *)arg;
689 pcb = pxping_pcb_for_request(pxping, 1,
725 if (hopl != pxping->hopl) {
726 status = setsockopt(pxping->sock6, IPPROTO_IPV6, IPV6_UNICAST_HOPS,
729 pxping->hopl = hopl;
736 status = proxy_sendto(pxping->sock6, p,
823 pxping_pcb_allocate(struct pxping *pxping)
827 if (pxping->npcbs >= PXPING_MAX_PCBS) {
836 ++pxping->npcbs;
842 pxping_pcb_delete(struct pxping *pxping, struct ping_pcb *pcb)
844 LWIP_ASSERT1(pxping->npcbs > 0);
850 --pxping->npcbs;
856 pxping_timeout_add(struct pxping *pxping, struct ping_pcb *pcb)
862 chain = &pxping->timeout_list[pcb->timeout_slot];
872 pxping_timeout_del(struct pxping *pxping, struct ping_pcb *pcb)
874 LWIP_UNUSED_ARG(pxping);
887 pxping_pcb_register(struct pxping *pxping, struct ping_pcb *pcb)
889 pcb->next = pxping->pcbs;
890 pxping->pcbs = pcb;
892 pxping_timeout_add(pxping, pcb);
897 pxping_pcb_deregister(struct pxping *pxping, struct ping_pcb *pcb)
901 for (p = &pxping->pcbs; *p != NULL; p = &(*p)->next) {
909 pxping_timeout_del(pxping, pcb);
914 pxping_pcb_for_request(struct pxping *pxping,
921 for (pcb = pxping->pcbs; pcb != NULL; pcb = pcb->next) {
934 pcb = pxping_pcb_allocate(pxping);
980 pcb->timeout_slot = pxping->timeout_slot;
982 sys_mutex_lock(&pxping->lock);
983 pxping_pcb_register(pxping, pcb);
984 sys_mutex_unlock(&pxping->lock);
988 pxping_timer_needed(pxping);
995 (unsigned int)pxping->timeout_slot));
996 pcb->timeout_slot = pxping->timeout_slot;
1009 pxping_pcb_for_reply(struct pxping *pxping,
1014 for (pcb = pxping->pcbs; pcb != NULL; pcb = pcb->next) {
1031 struct pxping *pxping = (struct pxping *)arg;
1034 pxping->timer_active = 0;
1039 LWIP_ASSERT1(pxping->timeout_slot < TIMEOUT);
1040 if (++pxping->timeout_slot == TIMEOUT) {
1041 pxping->timeout_slot = 0;
1044 chain = &pxping->timeout_list[pxping->timeout_slot];
1048 sys_mutex_lock(&pxping->lock);
1054 if (xpcb->timeout_slot == pxping->timeout_slot) {
1056 pxping_pcb_deregister(pxping, xpcb);
1057 pxping_pcb_delete(pxping, xpcb);
1064 pxping_timeout_del(pxping, xpcb); /* from current slot */
1065 pxping_timeout_add(pxping, xpcb); /* to new slot */
1069 sys_mutex_unlock(&pxping->lock);
1070 pxping_timer_needed(pxping);
1075 pxping_timer_needed(struct pxping *pxping)
1077 if (!pxping->timer_active && pxping->pcbs != NULL) {
1078 pxping->timer_active = 1;
1079 sys_timeout(1 * 1000, pxping_timer, pxping);
1087 struct pxping *pxping;
1089 pxping = (struct pxping *)handler->data;
1090 LWIP_ASSERT1(fd == pxping->sock4 || fd == pxping->sock6);
1118 if (fd == pxping->sock4) {
1119 pxping_pmgr_icmp4(pxping);
1121 else /* fd == pxping->sock6 */ {
1122 pxping_pmgr_icmp6(pxping);
1134 pxping_pmgr_icmp4(struct pxping *pxping)
1149 nread = recvfrom(pxping->sock4, pollmgr_udpbuf, sizeof(pollmgr_udpbuf), 0,
1219 pxping_pmgr_icmp4_echo(pxping, iplen, &sin);
1222 pxping_pmgr_icmp4_error(pxping, iplen, &sin);
1237 pxping_pmgr_icmp4_echo(struct pxping *pxping,
1273 sys_mutex_lock(&pxping->lock);
1274 pcb = pxping_pcb_for_reply(pxping, 0, ip_2_ipX(&target_ip), id);
1276 sys_mutex_unlock(&pxping->lock);
1287 sys_mutex_unlock(&pxping->lock);
1329 pxping_pmgr_forward_inbound(pxping, iplen);
1338 pxping_pmgr_icmp4_error(struct pxping *pxping,
1427 sys_mutex_lock(&pxping->lock);
1428 pcb = pxping_pcb_for_reply(pxping, 0, ip_2_ipX(&target_ip), id);
1430 sys_mutex_unlock(&pxping->lock);
1441 sys_mutex_unlock(&pxping->lock);
1492 pxping_pmgr_forward_inbound(pxping, iplen);
1501 pxping_pmgr_icmp6(struct pxping *pxping)
1537 nread = recvmsg(pxping->sock6, &mh, 0);
1551 status = (*pxping->pfWSARecvMsg6)(pxping->sock6, &mh, &nread, NULL, NULL);
1633 pxping_pmgr_icmp6_echo(pxping,
1639 pxping_pmgr_icmp6_error(pxping,
1652 pxping_pmgr_icmp6_echo(struct pxping *pxping,
1679 sys_mutex_lock(&pxping->lock);
1680 pcb = pxping_pcb_for_reply(pxping, 1, ip6_2_ipX(&target_ip), id);
1682 sys_mutex_unlock(&pxping->lock);
1693 sys_mutex_unlock(&pxping->lock);
1705 pxping_pmgr_forward_inbound6(pxping,
1717 pxping_pmgr_icmp6_error(struct pxping *pxping,
1802 sys_mutex_lock(&pxping->lock);
1803 pcb = pxping_pcb_for_reply(pxping, 1, ip6_2_ipX(&target_ip), oicmph->id);
1805 sys_mutex_unlock(&pxping->lock);
1816 sys_mutex_unlock(&pxping->lock);
1855 pxping_pmgr_forward_inbound6(pxping,
1871 pxping_pmgr_forward_inbound(struct pxping *pxping, u16_t iplen)
1903 msg->pxping = pxping;
1917 LWIP_ASSERT1(msg->pxping != NULL);
1920 error = ip_raw_output_if(msg->p, msg->pxping->netif);
1931 pxping_pmgr_forward_inbound6(struct pxping *pxping,
1967 msg->pxping = pxping;
1985 LWIP_ASSERT1(msg->pxping != NULL);
1990 IP6_NEXTH_ICMP6, msg->pxping->netif);