From c5ce85b2356b69654a2175bb2d981b3970ac9d52 Mon Sep 17 00:00:00 2001 From: Blake Harnden <32446120+bharnden@users.noreply.github.com> Date: Fri, 18 Oct 2019 14:22:37 -0700 Subject: [PATCH] added net client get ifindex and mac functions --- daemon/core/nodes/base.py | 13 +++---------- daemon/core/nodes/netclient.py | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/daemon/core/nodes/base.py b/daemon/core/nodes/base.py index d8eaae76..fcd75505 100644 --- a/daemon/core/nodes/base.py +++ b/daemon/core/nodes/base.py @@ -678,16 +678,9 @@ class CoreNode(CoreNodeBase): veth.name = ifname if self.up: - # TODO: potentially find better way to query interface ID - # retrieve interface information - output = self.node_net_client.device_show(veth.name) - logging.debug("interface command output: %s", output) - output = output.split("\n") - veth.flow_id = int(output[0].strip().split(":")[0]) + 1 - logging.debug("interface flow index: %s - %s", veth.name, veth.flow_id) - # TODO: mimic packed hwaddr - # veth.hwaddr = MacAddress.from_string(output[1].strip().split()[1]) - logging.debug("interface mac: %s - %s", veth.name, veth.hwaddr) + flow_id = self.node_net_client.get_ifindex(veth.name) + veth.flow_id = int(flow_id) + logging.info("interface flow index: %s - %s", veth.name, veth.flow_id) try: # add network interface to the node. If unsuccessful, destroy the diff --git a/daemon/core/nodes/netclient.py b/daemon/core/nodes/netclient.py index 94e73e7f..beff4e8e 100644 --- a/daemon/core/nodes/netclient.py +++ b/daemon/core/nodes/netclient.py @@ -91,6 +91,26 @@ class LinuxNetClient(object): """ return self.run(f"{IP_BIN} link show {device}") + def get_mac(self, device): + """ + Retrieve MAC address for a given device. + + :param str device: device to get mac for + :return: MAC address + :rtype: str + """ + return self.run(f"cat /sys/class/net/{device}/address") + + def get_ifindex(self, device): + """ + Retrieve ifindex for a given device. + + :param str device: device to get ifindex for + :return: ifindex + :rtype: str + """ + return self.run(f"cat /sys/class/net/{device}/ifindex") + def device_ns(self, device, namespace): """ Set netns for a device.