allow choosing local host machine interface for rj45 node

This commit is contained in:
Huy Pham 2020-01-08 09:32:39 -08:00
parent 615b989102
commit c402ce5284
3 changed files with 33 additions and 2 deletions

View file

@ -702,10 +702,17 @@ class CoreClient:
emane = None emane = None
if node_type == core_pb2.NodeType.EMANE: if node_type == core_pb2.NodeType.EMANE:
emane = self.emane_models[0] emane = self.emane_models[0]
name = f"EMANE{node_id}"
elif node_type == core_pb2.NodeType.WIRELESS_LAN:
name = f"WLAN{node_id}"
elif node_type in [core_pb2.NodeType.RJ45, core_pb2.NodeType.TUNNEL]:
name = "UNASSIGNED"
else:
name = f"n{node_id}"
node = core_pb2.Node( node = core_pb2.Node(
id=node_id, id=node_id,
type=node_type, type=node_type,
name=f"n{node_id}", name=name,
model=model, model=model,
position=position, position=position,
image=image, image=image,

View file

@ -10,7 +10,7 @@ from core.gui.dialogs.emaneconfig import EmaneModelDialog
from core.gui.images import Images from core.gui.images import Images
from core.gui.nodeutils import NodeUtils from core.gui.nodeutils import NodeUtils
from core.gui.themes import FRAME_PAD, PADX, PADY from core.gui.themes import FRAME_PAD, PADX, PADY
from core.gui.widgets import image_chooser from core.gui.widgets import ListboxScroll, image_chooser
def mac_auto(is_auto, entry): def mac_auto(is_auto, entry):
@ -131,6 +131,18 @@ class NodeConfigDialog(Dialog):
combobox.grid(row=row, column=1, sticky="ew") combobox.grid(row=row, column=1, sticky="ew")
row += 1 row += 1
if NodeUtils.is_rj45_node(self.node.type):
response = self.app.core.client.get_interfaces()
logging.debug("host machine available interfaces: %s", response)
interfaces = ListboxScroll(frame)
interfaces.grid(
row=row, column=0, columnspan=2, sticky="ew", padx=PADX, pady=PADY
)
for inf in sorted(response.interfaces[:]):
interfaces.listbox.insert(tk.END, inf)
row += 1
interfaces.listbox.bind("<<ListboxSelect>>", self.interface_select)
# interfaces # interfaces
if self.canvas_node.interfaces: if self.canvas_node.interfaces:
self.draw_interfaces() self.draw_interfaces()
@ -235,3 +247,10 @@ class NodeConfigDialog(Dialog):
# redraw # redraw
self.canvas_node.redraw() self.canvas_node.redraw()
self.destroy() self.destroy()
def interface_select(self, event):
listbox = event.widget
cur = listbox.curselection()
if cur:
interface = listbox.get(cur[0])
self.name.set(interface)

View file

@ -47,6 +47,7 @@ class NodeUtils:
CONTAINER_NODES = {NodeType.DEFAULT, NodeType.DOCKER, NodeType.LXC} CONTAINER_NODES = {NodeType.DEFAULT, NodeType.DOCKER, NodeType.LXC}
IMAGE_NODES = {NodeType.DOCKER, NodeType.LXC} IMAGE_NODES = {NodeType.DOCKER, NodeType.LXC}
WIRELESS_NODES = {NodeType.WIRELESS_LAN, NodeType.EMANE} WIRELESS_NODES = {NodeType.WIRELESS_LAN, NodeType.EMANE}
RJ45_NODES = {NodeType.RJ45}
IGNORE_NODES = {NodeType.CONTROL_NET, NodeType.PEER_TO_PEER} IGNORE_NODES = {NodeType.CONTROL_NET, NodeType.PEER_TO_PEER}
NODE_MODELS = {"router", "host", "PC", "mdr", "prouter"} NODE_MODELS = {"router", "host", "PC", "mdr", "prouter"}
ANTENNA_ICON = None ANTENNA_ICON = None
@ -71,6 +72,10 @@ class NodeUtils:
def is_wireless_node(cls, node_type): def is_wireless_node(cls, node_type):
return node_type in cls.WIRELESS_NODES return node_type in cls.WIRELESS_NODES
@classmethod
def is_rj45_node(cls, node_type):
return node_type in cls.RJ45_NODES
@classmethod @classmethod
def node_icon(cls, node_type, model): def node_icon(cls, node_type, model):
if model == "": if model == "":