Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср сен 20, 2017 10:40 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 61 сообщение ]  На страницу Пред. 1 2 3 4 5 След.
Автор Сообщение
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Ср окт 26, 2016 11:33 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
hidnplayr, can you explain what it does mean in description of function 76
Цитата:
common subfunctions:
0 - Read # packets sent
1 - Read # packets received
but the eth_api.table has only one function .read_mac.


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Чт окт 27, 2016 2:32 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Common subfunctions for all protocols, except ethernet. Probably, the indent should be removed...


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пт окт 28, 2016 11:57 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
Pathoswithin писал(а):
Probably, the indent should be removed...
Yes, the indent may confuse someone.
Also, it seems the .read_mac function yet not complete.


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пт окт 28, 2016 12:35 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
Can't find
Цитата:
2 - ICMP:
3 - enable/disable ICMP echo reply
In source only this
Код:
icmp_api:
 
        movzx   eax, bh
        shl     eax, 2
 
        test    bl, bl
        jz      .packets_tx     ; 0
        dec     bl
        jz      .packets_rx     ; 1
 
  .error:
        mov     eax, -1
        ret


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Сб окт 29, 2016 12:07 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
It seems that the description of SysFn76 is not complete .
For example, 5-Remove ARP entry
How do you determine which entry will be removed?


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Вс окт 30, 2016 3:36 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
I have improved the documentation for sysfn 76.

PS: Thanks for reminding me, you are doing very useful work..

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пн окт 31, 2016 6:11 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
hidnplayr, thanx for the improved documentation. :)
I also doing wrappers for my KolibriOS library(260 functions). As about network part then this is it:
Спойлер: Показать
Код:
(* -------------------------------------------------------- *)
{74.-1}   Function  GetActiveNetworkDevices: Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, -1
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.0}    Function  GetNetworkDeviceType(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.1}    Function  GetNetworkDeviceName(Device: Byte; Buffer: Pointer): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 1
                  mov    bh, Device
                  mov    ecx, Buffer
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.2}    Function  ResetNetworkDevice(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 2
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.3}    Function  StopNetworkDevice(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 3
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.4}    Function  GetNetworkDevicePointer(Device: Byte): Pointer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 4
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.5}    {UNDEFINED}
(* -------------------------------------------------------- *)
{74.6}    Function  GetSentPackets(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 6
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.7}    Function  GetReceivedPackets(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 7
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.8}    Function  GetSentBytes(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 8
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.9}    Function  GetReceivedBytes(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 9
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{74.10}   Function  GetLinkStatus(Device: Byte): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 74
                  mov    bl, 10
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.0}    Function  OpenSocket(Domain, Kind, Protocol: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  push   esi
                  mov    eax, 75
                  mov    bl, 0
                  mov    ecx, Domain
                  mov    edx, Kind
                  mov    esi, Protocol
                  int    64
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.1}    Function  CloseSocket(Socket: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 75
                  mov    bl, 1
                  mov    ecx, Socket
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.2}    Function  SocketBind(Socket: Dword; SockAddr: Pointer; Size: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  push   esi
                  mov    eax, 75
                  mov    bl, 2
                  mov    ecx, Socket
                  mov    edx, SockAddr
                  mov    esi, Size
                  int    64
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.3}    Function  SocketListen(Socket: Dword; BackLog: Pointer): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 75
                  mov    bl, 3
                  mov    ecx, Socket
                  mov    edx, BackLog
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.4}    Function  SocketConnect(Socket: Dword; SockAddr: Pointer; Size: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  push   esi
                  mov    eax, 75
                  mov    bl, 4
                  mov    ecx, Socket
                  mov    edx, SockAddr
                  mov    esi, Size
                  int    64
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.5}    Function  SocketAccept(Socket: Dword; SockAddr: Pointer; Size: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  push   esi
                  mov    eax, 75
                  mov    bl, 5
                  mov    ecx, Socket
                  mov    edx, SockAddr
                  mov    esi, Size
                  int    64
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.6}    Function  SocketSend(Socket: Dword; Buffer: Pointer; Size, Flags: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  push   esi
                  push   edi
                  mov    eax, 75
                  mov    bl, 6
                  mov    ecx, Socket
                  mov    edx, Buffer
                  mov    esi, Size
                  mov    edi, Flags
                  int    64
                  pop    edi
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.7}    Function  SocketReceive(Socket: Dword; Buffer: Pointer; Size, Flags: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  push   esi
                  push   edi
                  mov    eax, 75
                  mov    bl, 7
                  mov    ecx, Socket
                  mov    edx, Buffer
                  mov    esi, Size
                  mov    edi, Flags
                  int    64
                  pop    edi
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.8}    Function  SetSocketOptions(Socket: Dword; OptStruct: Pointer): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 75
                  mov    bl, 8
                  mov    ecx, Socket
                  mov    edx, OptStruct
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.9}    Function  GetSocketOptions(Socket: Dword; OptStruct: Pointer): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 75
                  mov    bl, 9
                  mov    ecx, Socket
                  mov    edx, OptStruct
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{75.10}   Function  GetSocketPair(Var Socket1, Socket2: Dword): Integer; StdCall;
          Asm
                  push   ebx
                  mov    eax, 75
                  mov    bl, 10                 
                  int    64
                  mov    ecx, Socket1
                  mov    edx, Socket2
                  mov    [ecx], eax
                  mov    [edx], ebx
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.0.0}  Function  GetMAC(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00000000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.0}  Function  GetIPv4SentPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.1}  Function  GetIPv4ReceivedPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 1
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.2}  Function  GetIPv4IP(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 2
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.3}  Function  SetIPv4IP(Device: Byte; IP: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 3
                  mov    bh, Device
                  mov    ecx, IP
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.4}  Function  GetIPv4DNS(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 4
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.5}  Function  SetIPv4DNS(Device: Byte; DNS: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 5
                  mov    bh, Device
                  mov    ecx, DNS
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.6}  Function  GetIPv4Subnet(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 6
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.7}  Function  SetIPv4Subnet(Device: Byte; Subnet: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 7
                  mov    bh, Device
                  mov    ecx, Subnet
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.8}  Function  GetIPv4Gateway(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 8
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.1.9}  Function  SetIPv4Gateway(Device: Byte; Gateway: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00010000
                  mov    bl, 9
                  mov    bh, Device
                  mov    ecx, Gateway
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.2.0}  Function  GetICMPSentPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00020000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.2.1}  Function  GetICMPReceivedPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00020000
                  mov    bl, 1
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.3.0}  Function  GetUDPSentPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00030000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.3.1}  Function  GetUDPReceivedPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00030000
                  mov    bl, 1
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.4.0}  Function  GetTCPSentPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00040000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.4.1}  Function  GetTCPReceivedPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00040000
                  mov    bl, 1
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.0}  Function  GetARPSentPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 0
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.1}  Function  GetARPReceivedPackets(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 1
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.2}  Function  GetARPEntrys(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 2
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.3}  Function  GetARPEntry(Device: Byte; Entry: Dword; Buffer: Pointer): Dword; StdCall;
          Asm
                  push   ebx
                  push   edi
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 3
                  mov    bh, Device
                  mov    ecx, Entry
                  mov    edi, Buffer
                  int    64
                  pop    edi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.4}  Function  AddARPEntry(Device: Byte; Buffer: Pointer): Dword; StdCall;
          Asm
                  push   ebx
                  push   esi
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 4
                  mov    bh, Device
                  mov    esi, Buffer
                  int    64
                  pop    esi
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.5}  Function  RemoveARPEntry(Device: Byte; Entry: Dword): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 5
                  mov    bh, Device
                  mov    ecx, Entry
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.6}  Function  SendARPAnnounce(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 6
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
{76.5.7}  Function  GetARPConflicts(Device: Byte): Dword; StdCall;
          Asm
                  push   ebx
                  mov    eax, 76
                  mov    ebx, $00050000
                  mov    bl, 7
                  mov    bh, Device
                  int    64
                  pop    ebx
          End;
(* -------------------------------------------------------- *)
What do you think about it?


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Вт ноя 01, 2016 12:16 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
0CodErr писал(а):
I also doing wrappers for my KolibriOS library(260 functions).
What do you think about it?

I think it defeats the whole purpose of assembly language application development.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пт ноя 04, 2016 4:42 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
hidnplayr, what is SockAddr structure? Can't find the description.
And also about OptStruct. Currently this is
Код:
Optstruct:
    dd level
    dd optionname
    dd optlength
    db options...
What means the ellipses in 'options...'? What size of structure?


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пт ноя 11, 2016 11:46 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
It seems that
Код:
 db options...
can be treated as "Array Of Byte"
But SockAddr structure is still not clear for me.


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Пт ноя 11, 2016 2:44 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Пт июн 30, 2006 9:01 am
Сообщения: 1223
It is the same as on other platforms.
See for example http://beej.us/guide/bgnet/output/html/ ... inman.html

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Вт июл 11, 2017 12:09 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
Код:
======================================================================
========== Function 74, Subfunction 8, Get TX byte counter. ==========
======================================================================
Parameters:
  * eax = 74 - function number
  * bl = 8 - subfunction number
  * bh = device number
Returned value:
  * eax = Number of bytes sent since device start (lower dword)
                  -1 on error
  * ebx = Number of bytes sent since device start (higher dword)
======================================================================
========== Function 74, Subfunction 9, Get RX byte counter. ==========
======================================================================
Parameters:
  * eax = 74 - function number
  * bl = 9 - subfunction number
  * bh = device number
Returned value:
  * eax = Number of bytes received since device start (lower dword)
                  -1 on error
  * ebx = Number of bytes received since device start (higher dword)
What if number of bytes is for example 0x1ffffffff?

Also the function below may have the same problem.
Код:
======================================================================
==== Function 76, Protocol 0 - Ethernet, Subfunction 0, Read MAC. ====
======================================================================
Parameters:
  * eax = 76 - function number
  * high half of ebx = 0 (Ethernet)
  * bh = device number
  * bl = 0 (Read MAC)
Returned value:
  * eax = -1 on error, otherwise lower bits of MAC
  * bx = upper bits of MAC


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Ср июл 12, 2017 7:50 pm 
Не в сети

Зарегистрирован: Вс авг 09, 2015 3:41 pm
Сообщения: 81
Do you suggest to use different register for the result of the operation?


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Чт июл 13, 2017 5:09 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
I don't know, maybe just set to -1 both registers in case of an error?


Вернуться к началу
 Заголовок сообщения: Re: The new network stack
СообщениеДобавлено: Сб сен 09, 2017 10:37 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
Possible bug:
    click on IPV4tab
    click back to Physical tab
    and click on phantom button
Спойлер: Показать
Вложение:
ns.PNG
ns.PNG [ 35.68 КБ | 60 просмотров ]


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 61 сообщение ]  На страницу Пред. 1 2 3 4 5 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB