From: Ondrej Lichtner <olichtne(a)redhat.com>
Not needed anymore as all Device related code is now implemented in it's
own package.
Signed-off-by: Ondrej Lichtner <olichtne(a)redhat.com>
---
lnst/Slave/InterfaceManager.py | 382 -----------------------------------------
1 file changed, 382 deletions(-)
diff --git a/lnst/Slave/InterfaceManager.py b/lnst/Slave/InterfaceManager.py
index da7e712..585adb9 100644
--- a/lnst/Slave/InterfaceManager.py
+++ b/lnst/Slave/InterfaceManager.py
@@ -240,385 +240,3 @@ class InterfaceManager(object):
while (self._is_name_used(prefix + str(index2))):
index2 += 1
return prefix + str(index1), prefix + str(index2)
-
-class Device(object):
- def __init__(self, if_manager):
- self._initialized = False
- self._configured = False
- self._created = False
-
- self._if_index = None
- self._hwaddr = None
- self._name = None
- self._conf = None
- self._conf_dict = None
- self._ip_addrs = []
- self._ifi_type = None
- self._state = None
- self._master = {"primary": None, "other": []}
- self._slaves = []
- self._netns = None
- self._peer = None
- self._mtu = None
- self._driver = None
- self._devlink = None
-
- self._if_manager = if_manager
-
- def set_devlink(self, devlink_port_data):
- self._devlink = devlink_port_data
-
- def init_netlink(self, nl_msg):
- self._if_index = nl_msg['index']
- self._ifi_type = nl_msg['ifi_type']
- self._hwaddr = normalize_hwaddr(nl_msg.get_attr("IFLA_ADDRESS"))
- self._name = nl_msg.get_attr("IFLA_IFNAME")
- self._state = nl_msg.get_attr("IFLA_OPERSTATE")
- self._ip_addrs = []
- self.set_master(nl_msg.get_attr("IFLA_MASTER"), primary=True)
- self._netns = None
- self._mtu = nl_msg.get_attr("IFLA_MTU")
-
- if self._driver is None:
- self._driver = self._ethtool_get_driver()
-
- self._initialized = True
-
- #return an update message that will be sent to the controller
- return {"type": "if_update",
- "if_data": self.get_if_data()}
-
- def update_netlink(self, nl_msg):
- if self._if_index != nl_msg['index']:
- return None
- if nl_msg['header']['type'] == RTM_NEWLINK:
- self._ifi_type = nl_msg['ifi_type']
- self._hwaddr = normalize_hwaddr(nl_msg.get_attr("IFLA_ADDRESS"))
- self._name = nl_msg.get_attr("IFLA_IFNAME")
- self._state = nl_msg.get_attr("IFLA_OPERSTATE")
- self.set_master(nl_msg.get_attr("IFLA_MASTER"), primary=True)
- self._mtu = nl_msg.get_attr("IFLA_MTU")
-
- link = nl_msg.get_attr("IFLA_LINK")
- if link != None:
- # IFLA_LINK is an index of device that's closer to physical
- # interface in the stack, e.g. index of eth0 for eth0.100
- # so to properly deconfigure the stack we have to save
- # parent index in the child device; this is the opposite
- # to IFLA_MASTER
- link_dev = self._if_manager.get_device(link)
- if link_dev != None:
- link_dev.set_master(self._if_index, primary=False)
- # This reference shouldn't change - you can't change the realdev
- # of a vlan, you need to create a new vlan. Therefore the
- # the following add_slave shouldn't be a problem.
- self.add_slave(link)
-
- if self._conf_dict:
- self._conf_dict["name"] = self._name
-
- if self._driver is None:
- self._driver = self._ethtool_get_driver()
-
- self._initialized = True
- elif nl_msg['header']['type'] == RTM_NEWADDR:
- scope = nl_msg['scope']
- addr_val = nl_msg.get_attr('IFA_ADDRESS')
- prefix_len = str(nl_msg['prefixlen'])
- addr = {"addr": addr_val,
- "prefix": prefix_len,
- "scope": scope}
- if self.find_addrs(addr) == []:
- self._ip_addrs.append(addr)
- elif nl_msg['header']['type'] == RTM_DELADDR:
- scope = nl_msg['scope']
- addr_val = nl_msg.get_attr('IFA_ADDRESS')
- prefix_len = str(nl_msg['prefixlen'])
- addr = {"addr": addr_val,
- "prefix": prefix_len,
- "scope": scope}
- matching_addrs = self.find_addrs(addr)
- for ip_addr in matching_addrs:
- self._ip_addrs.remove(ip_addr)
-
- #return an update message that will be sent to the controller
- return {"type": "if_update",
- "if_data": self.get_if_data()}
-
- def del_link(self):
- if self._master["primary"]:
- primary_id = self._master["primary"]
- primary_dev = self._if_manager.get_device(primary_id)
- if primary_dev:
- primary_dev.del_slave(self._if_index)
-
- for m_id in self._master["other"]:
- m_dev = self._if_manager.get_device(m_id)
- if m_dev:
- m_dev.del_slave(self._if_index)
-
- for dev_id in self._slaves:
- dev = self._if_manager.get_device(dev_id)
- if dev != None:
- dev.del_master(self._if_index)
-
- def find_addrs(self, addr_spec):
- ret = []
- for addr in self._ip_addrs:
- if addr_spec.items() <= addr.items():
- ret.append(addr)
- return ret
-
- def get_if_index(self):
- return self._if_index
-
- def get_hwaddr(self):
- return self._hwaddr
-
- def get_name(self):
- return self._name
-
- def get_ips(self):
- return self._ip_addrs
-
- def clear_ips(self):
- self._ip_addrs = []
-
- def is_configured(self):
- return self._configured
-
- def get_conf_dict(self):
- return self._conf_dict
-
- def set_peer(self, dev):
- self._peer = dev
-
- def get_peer(self):
- return self._peer
-
- def set_configuration(self, conf):
- self.clear_configuration()
- if "name" not in conf or conf["name"] == None:
- conf["name"] = self._name
- self._conf_dict = conf
- self._conf = NetConfigDevice(conf, self._if_manager)
-
- if not self._initialized:
- self._name = conf["name"]
-
- def get_configuration(self):
- return self._conf
-
- def del_configuration(self):
- self._conf = None
- self._conf_dict = None
-
- def _clear_tc_qdisc(self):
- exec_cmd("tc qdisc replace dev %s root pfifo" % self._name)
- out, _ = exec_cmd("tc filter show dev %s" % self._name)
- ingress_handles = re.findall("ingress (\\d+):", out)
- for ingress_handle in ingress_handles:
- exec_cmd("tc qdisc del dev %s handle %s: ingress" %
- (self._name, ingress_handle))
- out, _ = exec_cmd("tc qdisc show dev %s" % self._name)
- ingress_qdiscs = re.findall("qdisc ingress (\\w+):", out)
- if len(ingress_qdiscs) != 0:
- exec_cmd("tc qdisc del dev %s ingress" % self._name)
-
- def _clear_tc_filters(self):
- out, _ = exec_cmd("tc filter show dev %s" % self._name)
- egress_prefs = re.findall("pref (\\d+) .* handle", out)
-
- for egress_pref in egress_prefs:
- exec_cmd("tc filter del dev %s pref %s" % (self._name,
- egress_pref))
-
- def clear_configuration(self):
- if self._master["primary"]:
- primary_id = self._master["primary"]
- primary_dev = self._if_manager.get_device(primary_id)
- if primary_dev:
- primary_dev.clear_configuration()
-
- for m_id in self._master["other"]:
- m_dev = self._if_manager.get_device(m_id)
- if m_dev:
- m_dev.clear_configuration()
-
- if self._conf != None:
- self._clear_tc_qdisc()
- self._clear_tc_filters()
- self.down()
- self.deconfigure()
- self.destroy()
- self._conf = None
- self._conf_dict = None
-
- def set_master(self, if_index, primary=True):
- if primary:
- prev_master_id = self._master["primary"]
- if prev_master_id != None and if_index != prev_master_id:
- prev_master_dev = self._if_manager.get_device(prev_master_id)
- if prev_master_dev != None:
- prev_master_dev.del_slave(self._if_index)
-
- self._master["primary"] = if_index
- if self._master["primary"] != None:
- master_id = self._master["primary"]
- master_dev = self._if_manager.get_device(master_id)
- if master_dev != None:
- master_dev.add_slave(self._if_index)
- elif if_index not in self._master["other"]:
- self._master["other"].append(if_index)
-
- def del_master(self, if_index):
- if self._master["primary"] == if_index:
- self._master["primary"] = None
- elif if_index in self._master["other"]:
- self._master["other"].remove(if_index)
-
- def add_slave(self, if_index):
- if if_index not in self._slaves:
- self._slaves.append(if_index)
-
- def del_slave(self, if_index):
- if if_index in self._slaves:
- self._slaves.remove(if_index)
-
- def create(self):
- if self._conf != None and not self._created:
- self._conf.create()
- self._created = True
- return True
- return False
-
- def destroy(self):
- if self._conf != None and self._created:
- self._conf.destroy()
- self._created = False
- return True
- return False
-
- def configure(self):
- if self._conf != None and not self._configured:
- self._conf.configure()
- self._configured = True
-
- def deconfigure(self):
- if self._master["primary"]:
- primary_id = self._master["primary"]
- primary_dev = self._if_manager.get_device(primary_id)
- if primary_dev:
- primary_dev.deconfigure()
-
- for m_id in self._master["other"]:
- m_dev = self._if_manager.get_device(m_id)
- if m_dev:
- m_dev.deconfigure()
-
- if self._conf != None and self._configured:
- self._conf.deconfigure()
- self._configured = False
-
- def up(self):
- if self._conf != None:
- self._conf.up()
- else:
- exec_cmd("ip link set %s up" % self._name)
-
- def down(self):
- if self._conf != None:
- self._conf.down()
- else:
- exec_cmd("ip link set %s down" % self._name)
-
- def link_up(self):
- exec_cmd("ip link set %s up" % self._name)
-
- def link_down(self):
- exec_cmd("ip link set %s down" % self._name)
-
- def link_stats(self):
- stats = {"devname": self._name,
- "hwaddr": self._hwaddr}
- out, _ = exec_cmd("ip -s link show %s" % self._name)
- lines = iter(out.split("\n"))
- for line in lines:
- if (len(line.split()) == 0):
- continue
- if (line.split()[0] == "RX:"):
- rx_stats = map(int, lines.next().split())
- stats.update({"rx_bytes" : rx_stats[0],
- "rx_packets": rx_stats[1],
- "rx_errors" : rx_stats[2],
- "rx_dropped": rx_stats[3],
- "rx_overrun": rx_stats[4],
- "rx_mcast" : rx_stats[5]})
- if (line.split()[0] == "TX:"):
- tx_stats = map(int, lines.next().split())
- stats.update({"tx_bytes" : tx_stats[0],
- "tx_packets": tx_stats[1],
- "tx_errors" : tx_stats[2],
- "tx_dropped": tx_stats[3],
- "tx_carrier": tx_stats[4],
- "tx_collsns": tx_stats[5]})
- return stats
-
- def set_addresses(self, ips):
- self._conf.set_addresses(ips)
- exec_cmd("ip addr flush %s" % self._name)
- for address in ips:
- exec_cmd("ip addr add %s dev %s" % (address, self._name))
-
- def add_route(self, dest):
- exec_cmd("ip route add %s dev %s" % (dest, self._name))
-
- def del_route(self, dest):
- exec_cmd("ip route del %s dev %s" % (dest, self._name))
-
- def set_netns(self, netns):
- self._netns = netns
- return
-
- def get_netns(self):
- return self._netns
-
- def _ethtool_get_driver(self):
- if self._ifi_type == 772: #loopback ifi type
- return 'loopback'
- out, _ = exec_cmd("ethtool -i %s" % self._name, False, False, False)
- match = re.search("^driver: (.*)$", out, re.MULTILINE)
- if match is not None:
- return match.group(1)
- else:
- return None
-
- def get_if_data(self):
- if_data = {"if_index": self._if_index,
- "hwaddr": self._hwaddr,
- "name": self._name,
- "ip_addrs": self._ip_addrs,
- "ifi_type": self._ifi_type,
- "state": self._state,
- "master": self._master,
- "slaves": self._slaves,
- "netns": self._netns,
- "peer": self._peer.get_if_index() if self._peer else None,
- "mtu": self._mtu,
- "driver": self._driver,
- "devlink": self._devlink}
- return if_data
-
- def set_speed(self, speed):
- exec_cmd("ethtool -s %s speed %s autoneg off" % (self._name, speed))
-
- def set_autoneg(self):
- exec_cmd("ethtool -s %s autoneg on" % self._name)
-
- def slave_add(self, if_id):
- if self._conf != None:
- self._conf.slave_add(if_id)
-
- def slave_del(self, if_id):
- if self._conf != None:
- self._conf.slave_del(if_id)
--
2.13.0