Subversion Repositories Kolibri OS

Rev

Rev 4740 | Rev 4781 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                                 ;;
  3. ;; Copyright (C) KolibriOS team 2010-2014. All rights reserved.    ;;
  4. ;; Distributed under terms of the GNU General Public License       ;;
  5. ;;                                                                 ;;
  6. ;;  netstat.asm - Network Status Tool for KolibriOS                ;;
  7. ;;                                                                 ;;
  8. ;;  Written by hidnplayr@kolibrios.org                             ;;
  9. ;;                                                                 ;;
  10. ;;          GNU GENERAL PUBLIC LICENSE                             ;;
  11. ;;             Version 2, June 1991                                ;;
  12. ;;                                                                 ;;
  13. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  14.  
  15. format binary as ""
  16.  
  17. use32
  18.  
  19.         org    0x0
  20.  
  21.         db     'MENUET01'       ; 8 byte id
  22.         dd     0x01             ; header version
  23.         dd     START            ; start of code
  24.         dd     I_END            ; size of image
  25.         dd     (I_END+0x1000)   ; memory for app
  26.         dd     (I_END+0x1000)   ; esp
  27.         dd     0, 0             ; I_Param , I_Path
  28.  
  29. include '../../macros.inc'
  30. include '../../network.inc'
  31.  
  32.  
  33. macro DrawRectangle x, y, w, h, color
  34. {
  35.         mcall 13, x shl 16 + w,     y shl 16 + 1,     color   ; top
  36.         mcall   , x shl 16 + 1,     y shl 16 + h,     color   ; left
  37.         mcall   , (x+w) shl 16 +1,  y shl 16 + (h+1), color   ; right
  38.         mcall   , x shl 16 + w,   (y+h) shl 16 + 1,   color   ; bottom
  39. }
  40.  
  41.  
  42. START:
  43.         mcall   40, EVM_REDRAW + EVM_BUTTON + EVM_STACK2 + EVM_KEY
  44.  
  45. window_redraw:
  46.         mcall   12, 1
  47.         mcall   0, 100 shl 16 + 600, 100 shl 16 + 240, 0x34E1E1E1, , name       ; draw window
  48.         DrawRectangle 0, 25, 400, 180, 0x777777
  49.  
  50. redraw:
  51.         mcall   13, 1 shl 16 + 399, 26 shl 16 + 179, 0x00F3F3F3
  52.         call    draw_interfaces
  53.  
  54.         xor     ebx, ebx
  55.         mov     bh, [device]
  56.         mcall   74
  57.         mov     [device_type], eax
  58.  
  59.         mov     edx, 101
  60.         mov     esi, 0x00BBBbbb
  61.         mov     edi, 0x0081BBFF
  62.  
  63.         cmp     dl, [mode]
  64.         cmove   esi, edi
  65.         mcall   8, 5 shl 16 + 55, 5 shl 16 + 20
  66.   .morebuttons:
  67.         inc     edx
  68.         add     ebx, 60 shl 16
  69.         mov     esi, 0x00BBBbbb
  70.  
  71.         cmp     dl, [mode]
  72.         cmove   esi, edi
  73.         mcall
  74.  
  75.         cmp     edx, 105
  76.         jle     .morebuttons
  77.  
  78.         mcall   4, 9 shl 16 + 12, 0x80000000, modes
  79.  
  80.         cmp     [mode], 101
  81.         jne     .no_eth
  82.  
  83.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  84.         add     ebx, 18
  85.         mov     edx, str_packets_rx
  86.         mcall
  87.         add     ebx, 18
  88.         mov     edx, str_bytes_tx
  89.         mcall
  90.         add     ebx, 18
  91.         mov     edx, str_bytes_rx
  92.         mcall
  93.         add     ebx, 18
  94.         mov     edx, str_link
  95.         mcall
  96.  
  97.         cmp     [device_type], 1
  98.         jne     end_of_draw
  99.  
  100.         add     ebx, 18
  101.         mov     edx, str_MAC
  102.         mcall
  103.  
  104.         mov     ebx, API_ETH
  105.         mov     bh, [device]
  106.         mcall   76
  107.         push    eax
  108.         push    bx
  109.  
  110.         mov     edx, 134 shl 16 + 35 + 5*18
  111.         call    draw_mac
  112.         jmp     end_of_draw
  113.  
  114.  .no_eth:
  115.  
  116.         cmp     [mode], 102
  117.         jne     .no_ip
  118.  
  119.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  120.         add     ebx, 18
  121.         mov     edx, str_packets_rx
  122.         mcall
  123.         add     ebx, 18
  124.         mov     edx, str_ip
  125.         mcall
  126.         add     ebx, 18
  127.         mov     edx, str_dns
  128.         mcall
  129.         add     ebx, 18
  130.         mov     edx, str_subnet
  131.         mcall
  132.         add     ebx, 18
  133.         mov     edx, str_gateway
  134.         mcall
  135.  
  136.  
  137.         mov     ebx, API_IPv4 + 8
  138.         mov     bh, [device]
  139.         mcall   76
  140.         push    eax
  141.  
  142.         dec     bl
  143.         dec     bl
  144.         mcall   76
  145.         push    eax
  146.  
  147.         dec     bl
  148.         dec     bl
  149.         mcall   76
  150.         push    eax
  151.  
  152.         dec     bl
  153.         dec     bl
  154.         mcall   76
  155.         push    eax
  156.  
  157.         mov     edx, 134 shl 16 + 35 + 2*18
  158.         call    draw_ip
  159.  
  160.         add     edx, 18
  161.         call    draw_ip
  162.  
  163.         add     edx, 18
  164.         call    draw_ip
  165.  
  166.         add     edx, 18
  167.         call    draw_ip
  168.  
  169.         jmp     end_of_draw
  170.  
  171.  .no_ip:
  172.  
  173.         cmp     [mode], 103
  174.         jne     .no_arp
  175.  
  176.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  177.         add     ebx, 18
  178.         mov     edx, str_packets_rx
  179.         mcall
  180.         add     ebx, 18
  181.         mov     edx, str_arp
  182.         mcall
  183.         add     ebx, 18
  184.         mov     edx, str_conflicts
  185.         mcall
  186.  
  187.         mcall   4, 8 shl 16 + 130, 0x80000000, str_ARP_legend
  188.  
  189.         jmp     end_of_draw
  190.  
  191.  .no_arp:
  192.  
  193.         mcall   4, 8 shl 16 + 35, 0x80000000, str_packets_tx
  194.  
  195.         add     ebx, 18
  196.         mov     edx, str_packets_rx
  197.         mcall
  198.  
  199.         cmp     [mode], 106
  200.         jne     end_of_draw
  201.  
  202.         add     ebx, 18
  203.         mov     edx, str_missed
  204.         mcall
  205.  
  206.         add     ebx, 18
  207.         mov     edx, str_dumped
  208.         mcall
  209.  
  210. end_of_draw:
  211.  
  212.         mcall   12, 2
  213.  
  214. draw_stats:
  215.  
  216.         cmp     [mode], 101
  217.         jne     not_101
  218.  
  219.         mov     ebx, API_ETH
  220.         mov     bh, [device]
  221.         mov     bl, 6
  222.   @@:
  223.         push    ebx
  224.         mcall   74
  225.         pop     ebx
  226.         push    eax
  227.         inc     bl
  228.         cmp     bl, 10
  229.         jbe     @r
  230.  
  231.         mov     ebx, 0x000a0000
  232.         pop     ecx
  233.         mov     edx, 134 shl 16 + 35 + 4*18
  234.         mov     esi, 0x40000000
  235.         mov     edi, 0x00F3F3F3
  236.         mcall   47
  237.  
  238.         sub     edx, 18
  239.         pop     ecx
  240.         mcall
  241.  
  242.         sub     edx, 18
  243.         pop     ecx
  244.         mcall
  245.  
  246.         sub     edx, 18
  247.         pop     ecx
  248.         mcall
  249.  
  250.         sub     edx, 18
  251.         pop     ecx
  252.         mcall
  253.  
  254.         jmp     mainloop
  255.  
  256.  
  257. not_101:
  258.  
  259.         cmp     [mode], 102
  260.         jne     not_102
  261.  
  262.         mov     ebx, API_IPv4
  263.         mov     bh, [device]
  264.         push    ebx
  265.         mcall   76
  266.         pop     ebx
  267.         push    eax
  268.  
  269.         inc     bl
  270.         push    ebx
  271.         mcall   76
  272.         pop     ebx
  273.         push    eax
  274.  
  275.  
  276.         mov     ebx, 0x000a0000
  277.         pop     ecx
  278.         mov     edx, 134 shl 16 + 35 + 18
  279.         mov     esi, 0x40000000
  280.         mov     edi, 0x00F3F3F3
  281.         mcall   47
  282.  
  283.         sub     edx, 18
  284.         pop     ecx
  285.         mcall
  286.  
  287.         jmp     mainloop
  288.  
  289.  
  290. not_102:
  291.  
  292.         cmp     [mode], 103
  293.         jne     not_103
  294.  
  295.         mov     ebx, API_ARP
  296.         mov     bh, [device]
  297.         push    ebx
  298.         mcall   76      ; tx
  299.         pop     ebx
  300.         push    eax
  301.  
  302.         inc     bl
  303.         push    ebx
  304.         mcall   76      ; rx
  305.         pop     ebx
  306.         push    eax
  307.  
  308.         inc     bl
  309.         push    ebx
  310.         mcall   76      ; entries
  311.         pop     ebx
  312.         push    eax
  313.  
  314.         mov     bl, 7
  315.         push    ebx
  316.         mcall   76
  317.         pop     ebx
  318.         push    eax
  319.  
  320.         mov     ebx, 0x000a0000
  321.         pop     ecx
  322.         mov     edx, 134 shl 16 + 35 + 3*18
  323.         mov     esi, 0x40000000
  324.         mov     edi, 0x00F3F3F3
  325.         mcall   47
  326.  
  327.         sub     edx, 18
  328.         pop     ecx
  329.         mcall
  330.  
  331.         sub     edx, 18
  332.         pop     ecx
  333.         mcall
  334.  
  335.         sub     edx, 18
  336.         pop     ecx
  337.         mcall
  338.  
  339. ;        mov     edx, 50 shl 16 + 150
  340.         mov     [last], 0
  341.  
  342.   .arp_loop:
  343.         mov     ebx, API_ARP + 3                ; read ARP entry
  344.         mov     bh, [device]
  345.         mcall   76, ,[last], , , arp_buf
  346.         cmp     eax, -1
  347.         je      mainloop
  348.  
  349.         mov     ebx, [last]
  350.         imul    ebx, 16
  351.         add     ebx, 8 shl 16 + 140
  352.         mcall   4, , 0x80000000, str_ARP_entry
  353.         mov     edx, ebx
  354.  
  355.         mov     eax, 47
  356.         mov     ebx, 0x00030000
  357.         mov     esi, 0x40000000
  358.         mov     edi, 0x00F3F3F3
  359.         xor     ecx, ecx
  360.  
  361.         mov     cl, byte[arp_buf.IP+0]
  362.         mcall
  363.  
  364.         mov     cl, byte[arp_buf.IP+1]
  365.         add     edx, 24 shl 16
  366.         mcall
  367.  
  368.         mov     cl, byte[arp_buf.IP+2]
  369.         add     edx, 24 shl 16
  370.         mcall
  371.  
  372.         mov     cl, byte[arp_buf.IP+3]
  373.         add     edx, 24 shl 16
  374.         mcall
  375.  
  376.  
  377.         mov     ebx, 0x00020100
  378.         mov     cl, byte[arp_buf.MAC+0]
  379.         add     edx, 36 shl 16
  380.         mcall
  381.  
  382.         mov     cl, byte[arp_buf.MAC+1]
  383.         add     edx, 18 shl 16
  384.         mcall
  385.  
  386.         mov     cl, byte[arp_buf.MAC+2]
  387.         add     edx, 18 shl 16
  388.         mcall
  389.  
  390.         mov     cl, byte[arp_buf.MAC+3]
  391.         add     edx, 18 shl 16
  392.         mcall
  393.  
  394.         mov     cl, byte[arp_buf.MAC+4]
  395.         add     edx, 18 shl 16
  396.         mcall
  397.  
  398.         mov     cl, byte[arp_buf.MAC+5]
  399.         add     edx, 18 shl 16
  400.         mcall
  401.  
  402.         mov     ebx, 0x00040000
  403.         mov     cx, [arp_buf.status]
  404.         add     edx, 30 shl 16
  405.         mcall
  406.  
  407.         mov     cx, [arp_buf.TTL]
  408.         add     edx, 60 shl 16
  409.         mcall
  410.  
  411.         add     dx, 18
  412.         rol     edx, 16
  413.         mov     dx, 8
  414.         rol     edx, 16
  415.         inc     [last]
  416.  
  417.         jmp     .arp_loop
  418.  
  419. not_103:
  420.  
  421.         cmp     [mode], 104
  422.         jne     not_104
  423.  
  424.         mov     ebx, API_ICMP
  425.         mov     bh, [device]
  426.         push    ebx
  427.         mcall   76
  428.         pop     ebx
  429.         push    eax
  430.  
  431.         inc     bl
  432.         push    ebx
  433.         mcall   76
  434.         pop     ebx
  435.         push    eax
  436.  
  437.         mov     ebx, 0x000a0000
  438.         pop     ecx
  439.         mov     edx, 134 shl 16 + 35 + 18
  440.         mov     esi, 0x40000000
  441.         mov     edi, 0x00F3F3F3
  442.         mcall   47
  443.  
  444.         sub     edx, 18
  445.         pop     ecx
  446.         mcall
  447.  
  448.         jmp     mainloop
  449.  
  450. not_104:
  451.  
  452.         cmp     [mode], 105
  453.         jne     not_105
  454.  
  455.         mov     ebx, API_UDP
  456.         mov     bh, [device]
  457.         push    ebx
  458.         mcall   76
  459.         pop     ebx
  460.         push    eax
  461.  
  462.         inc     bl
  463.         push    ebx
  464.         mcall   76
  465.         pop     ebx
  466.         push    eax
  467.  
  468.         mov     ebx, 0x000a0000
  469.         pop     ecx
  470.         mov     edx, 134 shl 16 + 35 + 18
  471.         mov     esi, 0x40000000
  472.         mov     edi, 0x00F3F3F3
  473.         mcall   47
  474.  
  475.         sub     edx, 18
  476.         pop     ecx
  477.         mcall
  478.  
  479.         jmp     mainloop
  480.  
  481. not_105:
  482.  
  483.         cmp     [mode], 106
  484.         jne     not_106
  485.  
  486.         mov     ebx, API_TCP
  487.         mov     bh, [device]
  488.         push    ebx
  489.         mcall   76
  490.         pop     ebx
  491.         push    eax
  492.  
  493.         inc     bl
  494.         push    ebx
  495.         mcall   76
  496.         pop     ebx
  497.         push    eax
  498.  
  499.         inc     bl
  500.         push    ebx
  501.         mcall   76
  502.         pop     ebx
  503.         push    eax
  504.  
  505.         inc     bl
  506.         push    ebx
  507.         mcall   76
  508.         pop     ebx
  509.         push    eax
  510.  
  511.         mov     ebx, 0x000a0000
  512.         pop     ecx
  513.         mov     edx, 134 shl 16 + 35 + 18*3
  514.         mov     esi, 0x40000000
  515.         mov     edi, 0x00F3F3F3
  516.         mcall   47
  517.  
  518.         sub     edx, 18
  519.         pop     ecx
  520.         mcall
  521.  
  522.         sub     edx, 18
  523.         pop     ecx
  524.         mcall
  525.  
  526.         sub     edx, 18
  527.         pop     ecx
  528.         mcall
  529.  
  530.         jmp     mainloop
  531.  
  532. not_106:
  533.  
  534. mainloop:
  535.  
  536.         mcall   23, 50          ; wait for event with timeout    (0,5 s)
  537.  
  538.         cmp     eax, EV_REDRAW
  539.         je      window_redraw
  540.         cmp     eax, EV_BUTTON
  541.         je      button
  542.         cmp     eax, EV_KEY
  543.         je      key
  544.         cmp     eax, 11
  545.         je      redraw
  546.  
  547.         jmp     draw_stats
  548.  
  549. button:                         ; button
  550.         mcall   17              ; get id
  551.         cmp     ah, 1
  552.         je      exit
  553.         cmp     ah, 0
  554.         je      .interface
  555.         mov     [mode], ah
  556.         jmp     redraw
  557.  
  558.   .interface:
  559.         shr     eax, 16
  560.         mov     [device], al
  561.         jmp     redraw
  562.  
  563. key:
  564.         mcall   2
  565.         cmp     ah, 9
  566.         je      .tab
  567.         cmp     ah, 183
  568.         je      .pgdown
  569.         cmp     ah, 184
  570.         je      .pgup
  571.         jmp     mainloop
  572.  
  573.   .tab:
  574.         inc     [mode]
  575.         cmp     [mode], 106
  576.         jbe     redraw
  577.         mov     [mode], 101
  578.         jmp     redraw
  579.  
  580.   .pgdown:
  581.         inc     [device]
  582.         mov     al, [device]
  583.         cmp     al, [last_device]
  584.         jbe     redraw
  585.         mov     [device], 0
  586.         jmp     redraw
  587.  
  588.   .pgup:
  589.         dec     [device]
  590.         cmp     [device], 0
  591.         jge     redraw
  592.         mov     al, [last_device]
  593.         mov     [device], al
  594.         jmp     redraw
  595.  
  596. exit:
  597.         mcall   -1
  598.  
  599.  
  600.  
  601. draw_mac:
  602.  
  603.         mov     eax, 47
  604.         mov     ebx, 0x00020100
  605.         mov     esi, 0x40000000
  606.         mov     edi, 0x00F3F3F3
  607.  
  608.         mov     cl, [esp+4]
  609.         mcall
  610.  
  611.         mov     cl, [esp+4+1]
  612.         add     edx, 18 shl 16
  613.         mcall
  614.  
  615.         mov     cl, [esp+4+2]
  616.         add     edx, 18 shl 16
  617.         mcall
  618.  
  619.         mov     cl, [esp+4+3]
  620.         add     edx, 18 shl 16
  621.         mcall
  622.  
  623.         mov     cl, [esp+4+4]
  624.         add     edx, 18 shl 16
  625.         mcall
  626.  
  627.         mov     cl, [esp+4+5]
  628.         add     edx, 18 shl 16
  629.         mcall
  630.  
  631.         sub     edx, 5*18 shl 16
  632.  
  633.         ret     6
  634.  
  635.  
  636. draw_ip:
  637.  
  638.         mov     eax, 47
  639.         mov     ebx, 0x00030000
  640.         mov     esi, 0x40000000
  641.         mov     edi, 0x00F3F3F3
  642.  
  643.         xor     ecx, ecx
  644.  
  645.         mov     cl, [esp+4]
  646.         mcall
  647.  
  648.         mov     cl, [esp+4+1]
  649.         add     edx, 24 shl 16
  650.         mcall
  651.  
  652.         mov     cl, [esp+4+2]
  653.         add     edx, 24 shl 16
  654.         mcall
  655.  
  656.         mov     cl, [esp+4+3]
  657.         add     edx, 24 shl 16
  658.         mcall
  659.  
  660.         sub     edx, 3*24 shl 16
  661.         ret     4
  662.  
  663.  
  664. draw_interfaces:
  665.  
  666.         mov     [.btnpos], 5 shl 16 + 20
  667.         mov     [.txtpos], 455 shl 16 + 12
  668.  
  669.         mcall   74, -1          ; get number of active network devices
  670.         mov     ecx, eax
  671.         dec     al
  672.         mov     [last_device], al
  673.  
  674.         xor     ebx, ebx        ; get device type
  675.   .loop:
  676.         mcall   74
  677.         cmp     eax, 1          ; loopback or ethernet?
  678.         jbe     .hit
  679.         inc     bh
  680.         jb      .loop           ; tried all 256?
  681.         ret
  682.  
  683.  
  684.   .hit:
  685.         push    ecx ebx
  686.         movzx   edx, bh
  687.         shl     edx, 8
  688.         mov     esi, 0x00BBBbbb
  689.         cmp     bh, [device]
  690.         cmove   esi, 0x0081BBFF
  691.         mcall   8, 450 shl 16 + 135, [.btnpos]
  692.         mov     ebx, [esp]
  693.         inc     bl
  694.         mov     ecx, namebuf
  695.         mov     edx, namebuf
  696.         mcall   74                              ; get device name
  697.         cmp     eax, -1
  698.         jne     @f
  699.         mov     edx, str_unknown
  700.        @@:
  701.         mcall   4, [.txtpos], 0x80000000        ; print the name
  702.         pop     ebx ecx
  703.  
  704.         inc     bh
  705.  
  706.         add     [.btnpos], 25 shl 16
  707.         add     [.txtpos], 25
  708.  
  709.         dec     ecx
  710.         jnz     .loop
  711.  
  712.         ret
  713.  
  714.   .btnpos       dd ?
  715.   .txtpos       dd ?
  716.  
  717.  
  718. ; DATA AREA
  719.  
  720. name            db 'Network status', 0
  721. mode            db 101
  722. device          db 0
  723. last_device     db 0
  724. device_type     dd 0
  725. last            dd 0
  726. modes           db 'Physical    IPv4       ARP      ICMP      UDP       TCP', 0
  727.  
  728. str_packets_tx  db 'Packets sent:', 0
  729. str_packets_rx  db 'Packets received:', 0
  730. str_bytes_tx    db 'Bytes sent:', 0
  731. str_bytes_rx    db 'Bytes received:', 0
  732. str_MAC         db 'MAC address:           -  -  -  -  -', 0
  733. str_ip          db 'IP address:             .   .   .', 0
  734. str_dns         db 'DNS address:            .   .   .', 0
  735. str_subnet      db 'Subnet mask:            .   .   .', 0
  736. str_gateway     db 'Standard gateway:       .   .   .', 0
  737. str_arp         db 'ARP entrys:', 0
  738. str_conflicts   db 'ARP conflicts:', 0
  739. str_unknown     db 'unknown', 0
  740. str_missed      db 'Packets missed:',0
  741. str_dumped      db 'Packets dumped:',0
  742. str_link        db 'Link state:',0
  743.  
  744. str_ARP_legend  db 'IP-address        MAC-address         Status    TTL', 0
  745. str_ARP_entry   db '   .   .   .        -  -  -  -  -', 0
  746.  
  747. namebuf         rb 64
  748. arp_buf         ARP_entry
  749.  
  750. I_END: