Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
8a8d6a9c
Unverified
Commit
8a8d6a9c
authored
Sep 03, 2024
by
Jakob Görgen
Browse files
split up channel and socket ceration in independent funciton calls
parent
149387fc
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
29 additions
and
23 deletions
+29
-23
experiments/simbricks/orchestration/simulation/base.py
experiments/simbricks/orchestration/simulation/base.py
+23
-20
experiments/simbricks/orchestration/simulation/net/base.py
experiments/simbricks/orchestration/simulation/net/base.py
+6
-3
No files found.
experiments/simbricks/orchestration/simulation/base.py
View file @
8a8d6a9c
...
@@ -125,40 +125,43 @@ class Simulator(abc.ABC):
...
@@ -125,40 +125,43 @@ class Simulator(abc.ABC):
raise
Exception
(
"interface does not need a channel as it is not connected"
)
raise
Exception
(
"interface does not need a channel as it is not connected"
)
return
interface
.
channel
return
interface
.
channel
def
_get_socket
_and_chan
(
def
_get_socket
(
self
,
inst
:
inst_base
.
Instantiation
,
interface
:
sys_conf
.
Interface
self
,
inst
:
inst_base
.
Instantiation
,
interface
:
sys_conf
.
Interface
)
->
tuple
[
sys_conf
.
Channel
,
inst_base
.
Socket
]
|
tuple
[
None
,
None
]
:
)
->
inst_base
.
Socket
|
None
:
# get the channel associated with this interface
# get the channel associated with this interface
chan
=
self
.
_get_sys_chan
(
interface
=
interface
)
chan
=
self
.
_get_sys_chan
(
interface
=
interface
)
# check if interfaces channel is simulator internal, i.e. doesnt need an instanciation
# check if interfaces channel is simulator internal, i.e. doesnt need an instanciation
if
not
self
.
_chan_needs_instance
(
chan
):
if
not
self
.
_chan_needs_instance
(
chan
):
return
None
,
None
return
None
# create channel simualtion object
channel
=
self
.
experiment
.
retrieve_or_create_channel
(
chan
)
# create the socket to listen on or connect to
# create the socket to listen on or connect to
socket
=
inst
.
get_socket
(
interface
=
interface
)
socket
=
inst
.
get_socket
(
interface
=
interface
)
return
(
channel
,
socket
)
return
socket
def
_get_channels_and_sockets
(
def
_get_sockets
(
self
,
inst
:
inst_base
.
Instantiation
)
->
list
[
inst_base
.
Socket
]:
self
,
inst
:
inst_base
.
Instantiation
)
->
tuple
[
list
[
sim_chan
.
Channel
],
list
[
inst_base
.
Socket
]]:
channels
=
[]
sockets
=
[]
sockets
=
[]
for
comp_spec
in
self
.
_components
:
for
comp_spec
in
self
.
_components
:
for
interface
in
comp_spec
.
interfaces
():
for
interface
in
comp_spec
.
interfaces
():
socket
=
self
.
_get_socket_and_chan
(
inst
=
inst
,
interface
=
interface
)
channel
,
socket
=
self
.
_get_socket_and_chan
(
if
socket
is
None
:
inst
=
inst
,
interface
=
interface
)
if
channel
is
None
or
socket
is
None
:
continue
continue
channels
.
append
(
channel
)
sockets
.
append
(
socket
)
sockets
.
append
(
socket
)
return
channels
,
sockets
return
sockets
def
_get_channel
(
self
,
chan
:
sys_conf
.
Channel
)
->
sim_chan
.
Channel
|
None
:
if
self
.
_chan_needs_instance
(
chan
):
return
self
.
experiment
.
retrieve_or_create_channel
(
chan
=
chan
)
return
None
def
_get_channels
(
self
,
inst
:
inst_base
.
Instantiation
)
->
list
[
sim_chan
.
Channel
]:
channels
=
[]
for
comp_spec
in
self
.
_components
:
for
chan
in
self
.
experiment
.
retrieve_or_create_channel
(
chan
=
chan
):
channel
=
self
.
_get_channel
(
chan
=
chan
)
if
channel
is
None
:
continue
channels
.
append
(
channel
)
return
channels
# pylint: disable=unused-argument
# pylint: disable=unused-argument
@
abc
.
abstractmethod
@
abc
.
abstractmethod
...
...
experiments/simbricks/orchestration/simulation/net/base.py
View file @
8a8d6a9c
...
@@ -86,8 +86,7 @@ class WireNet(NetSim):
...
@@ -86,8 +86,7 @@ class WireNet(NetSim):
eth_latency
=
None
eth_latency
=
None
sync_period
=
None
sync_period
=
None
run_sync
=
False
run_sync
=
False
channels
,
sockets
=
self
.
_get_channels_and_sockets
(
inst
=
inst
)
channels
=
self
.
_get_channels
(
inst
=
inst
)
assert
len
(
sockets
)
==
2
for
channel
in
channels
:
for
channel
in
channels
:
sync_period
=
min
(
sync_period
,
channel
.
sync_period
)
sync_period
=
min
(
sync_period
,
channel
.
sync_period
)
run_sync
=
run_sync
or
channel
.
_synchronized
run_sync
=
run_sync
or
channel
.
_synchronized
...
@@ -101,6 +100,9 @@ class WireNet(NetSim):
...
@@ -101,6 +100,9 @@ class WireNet(NetSim):
assert
sync_period
is
not
None
assert
sync_period
is
not
None
assert
eth_latency
is
not
None
assert
eth_latency
is
not
None
sockets
=
self
.
_get_sockets
(
inst
=
inst
)
assert
len
(
sockets
)
==
2
cmd
=
inst
.
join_repo_base
(
self
.
_relative_executable_path
)
cmd
=
inst
.
join_repo_base
(
self
.
_relative_executable_path
)
cmd
+=
f
"
{
sockets
[
0
]
}
{
sockets
[
1
]
}
{
run_sync
}
{
sync_period
}
{
eth_latency
}
"
cmd
+=
f
"
{
sockets
[
0
]
}
{
sockets
[
1
]
}
{
run_sync
}
{
sync_period
}
{
eth_latency
}
"
...
@@ -138,7 +140,7 @@ class SwitchNet(NetSim):
...
@@ -138,7 +140,7 @@ class SwitchNet(NetSim):
eth_latency
=
None
eth_latency
=
None
sync_period
=
None
sync_period
=
None
run_sync
=
False
run_sync
=
False
channels
,
sockets
=
self
.
_get_channels
_and_sockets
(
inst
=
inst
)
channels
=
self
.
_get_channels
(
inst
=
inst
)
for
channel
in
channels
:
for
channel
in
channels
:
sync_period
=
min
(
sync_period
,
channel
.
sync_period
)
sync_period
=
min
(
sync_period
,
channel
.
sync_period
)
run_sync
=
run_sync
or
channel
.
_synchronized
run_sync
=
run_sync
or
channel
.
_synchronized
...
@@ -164,6 +166,7 @@ class SwitchNet(NetSim):
...
@@ -164,6 +166,7 @@ class SwitchNet(NetSim):
)
)
cmd
+=
" "
+
pcap_file
cmd
+=
" "
+
pcap_file
sockets
=
self
.
_get_sockets
(
inst
=
inst
)
listen
,
connect
=
base
.
Simulator
.
split_sockets_by_type
(
sockets
)
listen
,
connect
=
base
.
Simulator
.
split_sockets_by_type
(
sockets
)
for
sock
in
connect
:
for
sock
in
connect
:
...
...
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