Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
564b179b
Commit
564b179b
authored
May 17, 2021
by
Pavel Vainerman
Committed by
Pavel Vainerman
Jun 30, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[unet-multicast]: some docs
parent
a8e58a09
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
3 deletions
+51
-3
MulticastTransport.cc
extensions/UNetUDP/MulticastTransport.cc
+1
-0
UNetExchange.h
extensions/UNetUDP/UNetExchange.h
+48
-1
test_unetmulticast.cc
extensions/UNetUDP/tests/test_unetmulticast.cc
+2
-2
No files found.
extensions/UNetUDP/MulticastTransport.cc
View file @
564b179b
...
...
@@ -312,6 +312,7 @@ bool MulticastSendTransport::isConnected() const
void
MulticastSendTransport
::
setTimeToLive
(
int
_ttl
)
{
ttl
=
ttl
;
if
(
udp
)
udp
->
setTimeToLive
(
_ttl
);
}
...
...
extensions/UNetUDP/UNetExchange.h
View file @
564b179b
...
...
@@ -47,6 +47,7 @@ namespace uniset
- \ref pgUNetUDP_Common
- \ref pgUNetUDP_Conf
- \ref pgUNetUDP_ConfMulticast
- \ref pgUNetUDP_Reserv
- \ref pgUNetUDP_SendFactor
- \ref pgUNetUDP_Stat
...
...
@@ -60,13 +61,21 @@ namespace uniset
При этом "получатели" работают на одном(!) потоке с использованием событий libev (см. UNetReceiver).
или каждый на своём потоке. Это определяется параметром \b unet_update_strategy.
В текущей версии поддерживается два протокола для обмена udp и multicast. Какой использовать протокол
определяется в настроечной секции параметром \b unet_transport="udp" или \b unet_transport="multicast".
По умолчанию "udp".
\code
<UNetExchange name=".." unet_transport="udp" />
\endcode
В зависимости от заданного протокола, будут использованы те или иные настройки.
\par
При своём старте процесс считывает из секции \<nodes> список узлов которые необходимо "слушать",
а также параметры своего узла. Открывает по потоку приёма на каждый узел и поток
передачи для своих данных. Помимо этого такие же потоки для резервных каналов, если они включены
(см. \ref pgUNetUDP_Reserv ).
\section pgUNetUDP_Conf Пример конфигурирования
\section pgUNetUDP_Conf Пример конфигурирования
(UDP)
По умолчанию при считывании используется \b unet_broadcast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта.
Но можно переопределять эти параметры, при помощи указания \b unet_port и/или \b unet_broadcast_ip,
...
...
@@ -91,6 +100,43 @@ namespace uniset
\note Имеется возможность задавать отдельную настроечную секцию для "списка узлов" при помощи параметра
--prefix-nodes-confnode name. По умолчанию настройка ведётся по секции <nodes>
\section pgUNetUDP_ConfMulticast Пример конфигурирования (Multicast)
По умолчанию при считывании используется \b unet_multicast_ip (указанный в секции \<nodes>)
и \b id узла - в качестве порта.
Но можно переопределять эти параметры, при помощи указания \b unet_mulsicast_port и/или \b unet_multicast_ip,
для конкретного узла (\<item>).
Группы для подписки описываются в специальной секции \b <mulitcast>. Секция <recevive> описывает группы на которые
подписывается данные узел. Секция <send> описывает в какие группы данный узел будет посылать сообщения.
\code
<nodes port="2809" unet_broadcast_ip="192.168.56.255">
<item ip="127.0.0.1" name="LocalhostNode" textname="Локальный узел" unet_ignore="1" unet_multicast_port="3000" unet_multicast_ip="192.168.57.255">
<iocards>
...
</iocards>
</item>
<item ip="192.168.56.10" name="Node1" textname="Node1" unet_multicast_port="3001" unet_update_strategy="evloop">
<multicast>
<receive>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</receive>
<send>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</send>
</multicast>
</item>
<item ip="192.168.56.11" name="Node2" textname="Node2" unet_multicast_port="3002">
<multicast>
<receive>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</receive>
<send>
<group addr="239.255.1.1" addr2="239.255.2.1"/>
</send>
</multicast>
</item>
</nodes>
\endcode
\section pgUNetUDP_Reserv Настройка резервного канала связи
В текущей реализации поддерживается возможность обмена по двум подсетям (Ethernet-каналам).
Она основана на том, что, для каждого узла помимо основного "читателя",
...
...
@@ -100,6 +146,7 @@ namespace uniset
второй канал, достаточно объявить в настройках переменные
\b unet_broadcast_ip2. А также в случае необходимости для конкретного узла
можно указать \b unet_broadcast_ip2 и \b unet_port2.
Или в случае multicast \b unet_multicast_ip2 и \b unet_multicast_port2.
Переключение между "каналами" происходит по следующей логике:
...
...
extensions/UNetUDP/tests/test_unetmulticast.cc
View file @
564b179b
...
...
@@ -36,7 +36,7 @@ TEST_CASE("[UNetUDP]: multicast setup", "[unetudp][multicast][config]")
REQUIRE
(
t2
->
toString
()
==
"127.0.1.1:2999"
);
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"[UNetUDP]: multicast
receive"
,
"[unetudp][multicast][exchange
]"
)
TEST_CASE
(
"[UNetUDP]: multicast
transport"
,
"[unetudp][multicast][transport
]"
)
{
UniXML
xml
(
"unetudp-test-configure.xml"
);
UniXML
::
iterator
it
=
xml
.
findNode
(
xml
.
getFirstNode
(),
"nodes"
);
...
...
@@ -67,7 +67,7 @@ TEST_CASE("[UNetUDP]: multicast receive", "[unetudp][multicast][exchange]")
msg
=
"hello world, again"
;
REQUIRE
(
t2
->
send
(
msg
.
data
(),
msg
.
size
())
==
msg
.
size
()
);
memset
(
buf
,
0
,
sizeof
(
buf
));
memset
(
buf
,
0
,
sizeof
(
buf
));
REQUIRE
(
t1
->
receive
(
&
buf
,
sizeof
(
buf
))
==
msg
.
size
()
);
REQUIRE
(
string
((
const
char
*
)
buf
)
==
msg
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment