lwip_debug.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. // http://www.apache.org/licenses/LICENSE-2.0
  7. //
  8. // Unless required by applicable law or agreed to in writing, software
  9. // distributed under the License is distributed on an "AS IS" BASIS,
  10. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. // See the License for the specific language governing permissions and
  12. // limitations under the License.
  13. #include "lwip/lwip_debug.h"
  14. #include "lwip/api.h"
  15. #include "lwip/netbuf.h"
  16. #include "lwip/tcp.h"
  17. #include "lwip/udp.h"
  18. #include "lwip/priv/tcp_priv.h"
  19. #include "lwip/stats.h"
  20. #include "lwip/priv/memp_priv.h"
  21. #include "lwip/memp.h"
  22. #define DBG_LWIP_IP_SHOW(info, ip) printf("%s type=%d ip=%x\n", (info), (ip).type, (ip).u_addr.ip4.addr)
  23. #define DBG_LWIP_IP_PCB_SHOW(pcb) \
  24. DBG_LWIP_IP_SHOW("local ip", (pcb)->local_ip);\
  25. DBG_LWIP_IP_SHOW("remote ip", (pcb)->local_ip);\
  26. printf("so_options=%x, tos=%d ttl=%d\n", (pcb)->so_options, (pcb)->tos, (pcb)->ttl)
  27. #define DBG_LWIP_SEG_SHOW(seg) while(seg) { printf("\tseg=%p next=%p pbuf=%p flags=%x\n", (seg), (seg)->next, (seg)->p, (seg)->flags); (seg)=(seg)->next;}
  28. static void dbg_lwip_tcp_pcb_one_show(struct tcp_pcb* pcb)
  29. {
  30. struct tcp_seg *seg = NULL;
  31. if (!pcb) {
  32. return;
  33. }
  34. printf("\npcb=%p next=%p cb_arg=%p\n", pcb, pcb->next, pcb->callback_arg);
  35. DBG_LWIP_IP_PCB_SHOW(pcb);
  36. printf("state=%x\n", pcb->state);
  37. printf("prio=%d\n", pcb->prio);
  38. printf("local_port=%d, remote_port=%d\n", pcb->local_port, pcb->remote_port);
  39. printf("flags=%x\n", pcb->flags);
  40. printf("pooltmr=%d pollinterval=%d, last_tmr=%d tmr=%d rtmer=%d\n", pcb->polltmr, pcb->pollinterval, pcb->last_timer, pcb->tmr, pcb->rtime);
  41. printf("recv_nxt=%d recv_wnd=%d recv_ann_wnd=%d recv_ann_right_edge=%d\n", pcb->rcv_nxt, pcb->rcv_wnd, pcb->rcv_ann_wnd, pcb->rcv_ann_right_edge);
  42. printf("mss=%d\n", pcb->mss);
  43. printf("rttest=%d rtseq=%d sa=%d sv=%d\n", pcb->rttest, pcb->rtseq, pcb->sa, pcb->sv);
  44. printf("rto=%d nrtx=%d\n", pcb->rto, pcb->nrtx);
  45. printf("dupacks=%d lastack=%d\n", pcb->dupacks, pcb->lastack);
  46. #if ESP_PER_SOC_TCP_WND
  47. printf("per_soc_window=%d per_soc_snd_buf=%d\n", pcb->per_soc_tcp_wnd, pcb->per_soc_tcp_snd_buf);
  48. #endif
  49. printf("cwnd=%d ssthreash=%d\n", pcb->cwnd, pcb->ssthresh);
  50. printf("snd_next=%d snd_wl1=%d snd_wl2=%d\n", pcb->snd_nxt, pcb->snd_wl1, pcb->snd_wl2);
  51. printf("snd_lbb=%d snd_wnd=%d snd_wnd_max=%d\n", pcb->snd_lbb, pcb->snd_wnd, pcb->snd_wnd_max);
  52. printf("acked=%d\n", pcb->acked);
  53. printf("snd_buf=%d snd_queuelen=%d\n", pcb->snd_buf, pcb->snd_queuelen);
  54. printf("unsent_oversize=%d\n", pcb->unsent_oversize);
  55. printf("keep_idle=%d keep_intvl=%d keep_cnt=%d\n", pcb->keep_idle, pcb->keep_intvl, pcb->keep_cnt);
  56. printf("persist_cnt=%d persist_backoff=%d\n", pcb->persist_cnt, pcb->persist_backoff);
  57. printf("keep_cnt_sent=%d\n", pcb->keep_cnt_sent);
  58. printf("unsent segments:\n");
  59. seg = pcb->unsent;
  60. DBG_LWIP_SEG_SHOW(seg)
  61. printf("unacked segments:\n");
  62. seg = pcb->unacked;
  63. DBG_LWIP_SEG_SHOW(seg);
  64. printf("ooseg semengts:\n");
  65. seg = pcb->ooseq;
  66. DBG_LWIP_SEG_SHOW(seg);
  67. printf("refused data=%p\n", pcb->refused_data);
  68. }
  69. static void dbg_lwip_tcp_pcb_list_show(struct tcp_pcb* pcb)
  70. {
  71. while(pcb){
  72. dbg_lwip_tcp_pcb_one_show(pcb);
  73. pcb = pcb->next;
  74. }
  75. }
  76. extern struct tcp_pcb *tcp_bound_pcbs;
  77. extern struct tcp_pcb *tcp_active_pcbs;
  78. extern struct tcp_pcb *tcp_tw_pcbs;
  79. void dbg_lwip_tcp_pcb_show(void)
  80. {
  81. printf("-------------active pcbs------------\n");
  82. dbg_lwip_tcp_pcb_list_show(tcp_active_pcbs);
  83. printf("-------------bound pcbs-------------\n");
  84. dbg_lwip_tcp_pcb_list_show(tcp_bound_pcbs);
  85. printf("-------------tw pcbs------------\n");
  86. dbg_lwip_tcp_pcb_list_show(tcp_tw_pcbs);
  87. }
  88. void dbg_lwip_udp_pcb_one_show(struct udp_pcb *pcb)
  89. {
  90. printf("pcb=%p next=%p\n", pcb, (void*)pcb->next);
  91. DBG_LWIP_IP_PCB_SHOW(pcb);
  92. printf("flags=%x\n", pcb->flags);
  93. printf("local_port=%d remote_port=%d\n", pcb->local_port, pcb->remote_port);
  94. printf("recv cb=%p recv_arg=%p\n", pcb->recv, pcb->recv_arg);
  95. }
  96. extern struct udp_pcb *udp_pcbs;
  97. void dbg_lwip_udp_pcb_show(void)
  98. {
  99. struct udp_pcb *pcb = udp_pcbs;
  100. while (pcb){
  101. dbg_lwip_udp_pcb_one_show(pcb);
  102. pcb = pcb->next;
  103. }
  104. }
  105. void dbg_lwip_tcp_rxtx_show(void)
  106. {
  107. printf("TBC\n");
  108. }
  109. void dbg_lwip_udp_rxtx_show(void)
  110. {
  111. printf("TBC\n");
  112. }
  113. void dbg_lwip_stats_show(void)
  114. {
  115. TCP_STATS_DISPLAY();
  116. UDP_STATS_DISPLAY();
  117. ICMP_STATS_DISPLAY();
  118. IGMP_STATS_DISPLAY();
  119. IP_STATS_DISPLAY();
  120. IPFRAG_STATS_DISPLAY();
  121. ETHARP_STATS_DISPLAY();
  122. LINK_STATS_DISPLAY();
  123. MEM_STATS_DISPLAY();
  124. SYS_STATS_DISPLAY();
  125. IP6_STATS_DISPLAY();
  126. ICMP6_STATS_DISPLAY();
  127. IP6_FRAG_STATS_DISPLAY();
  128. MLD6_STATS_DISPLAY();
  129. ND6_STATS_DISPLAY();
  130. ESP_STATS_DISPLAY();
  131. }
  132. #if (ESP_CNT_DEBUG == 1)
  133. uint32_t g_lwip_mem_cnt[MEMP_MAX][2];
  134. extern const struct memp_desc * const memp_pools[MEMP_MAX];
  135. void dbg_lwip_cnt_show(void)
  136. {
  137. int i=0;
  138. printf("-----lwip memory counter-----\n");
  139. printf("%6s %8s %8s\n", "index", "alloc", "free");
  140. for (i=0; i<MEMP_MAX; i++){
  141. printf("%6u %8u %8u\n", i, g_lwip_mem_cnt[i][0], g_lwip_mem_cnt[i][1]);
  142. }
  143. }
  144. #endif