def parse_dpg(dpg, hname): for child in dpg: hostname = child.find(str(QName(ns, "Hostname"))) if hostname.text.lower() != hname.lower(): continue ipintfs = child.find(str(QName(ns, "IPInterfaces"))) intfs = {} for ipintf in ipintfs.findall(str(QName(ns, "IPInterface"))): intfalias = ipintf.find(str(QName(ns, "AttachTo"))).text intfname = port_alias_map.get(intfalias, intfalias) ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text intfs[(intfname, ipprefix)] = {} lointfs = child.find(str(QName(ns, "LoopbackIPInterfaces"))) lo_intfs = {} for lointf in lointfs.findall(str(QName(ns1, "LoopbackIPInterface"))): intfname = lointf.find(str(QName(ns, "AttachTo"))).text ipprefix = lointf.find(str(QName(ns1, "PrefixStr"))).text lo_intfs[(intfname, ipprefix)] = {} mgmtintfs = child.find(str(QName(ns, "ManagementIPInterfaces"))) mgmt_intf = {} for mgmtintf in mgmtintfs.findall( str(QName(ns1, "ManagementIPInterface"))): intfname = mgmtintf.find(str(QName(ns, "AttachTo"))).text ipprefix = mgmtintf.find(str(QName(ns1, "PrefixStr"))).text mgmtipn = ipaddress.IPNetwork(ipprefix) gwaddr = ipaddress.IPAddress(int(mgmtipn.network) + 1) mgmt_intf[(intfname, ipprefix)] = {'gwaddr': gwaddr} pcintfs = child.find(str(QName(ns, "PortChannelInterfaces"))) pc_intfs = [] pcs = {} intfs_inpc = [] # List to hold all the LAG member interfaces for pcintf in pcintfs.findall(str(QName(ns, "PortChannel"))): pcintfname = pcintf.find(str(QName(ns, "Name"))).text pcintfmbr = pcintf.find(str(QName(ns, "AttachTo"))).text pcmbr_list = pcintfmbr.split(';') pc_intfs.append(pcintfname) for i, member in enumerate(pcmbr_list): pcmbr_list[i] = port_alias_map.get(member, member) intfs_inpc.append(pcmbr_list[i]) if pcintf.find(str(QName(ns, "Fallback"))) != None: pcs[pcintfname] = { 'members': pcmbr_list, 'fallback': pcintf.find(str(QName(ns, "Fallback"))).text } else: pcs[pcintfname] = {'members': pcmbr_list} vlanintfs = child.find(str(QName(ns, "VlanInterfaces"))) vlan_intfs = [] vlans = {} vlan_members = {} for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vintfname = vintf.find(str(QName(ns, "Name"))).text vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vmbr_list = vintfmbr.split(';') for i, member in enumerate(vmbr_list): vmbr_list[i] = port_alias_map.get(member, member) sonic_vlan_member_name = "Vlan%s%s%s" % (vlanid, KEY_SEPARATOR, vmbr_list[i]) vlan_members[sonic_vlan_member_name] = { 'tagging_mode': 'untagged' } vlan_attributes = {'vlanid': vlanid} # If this VLAN requires a DHCP relay agent, it will contain a <DhcpRelays> element # containing a list of DHCP server IPs if vintf.find(str(QName(ns, "DhcpRelays"))) is not None: vintfdhcpservers = vintf.find(str(QName(ns, "DhcpRelays"))).text vdhcpserver_list = vintfdhcpservers.split(';') vlan_attributes['dhcp_servers'] = vdhcpserver_list sonic_vlan_name = "Vlan%s" % vlanid if sonic_vlan_name != vintfname: vlan_attributes['alias'] = vintfname vlans[sonic_vlan_name] = vlan_attributes aclintfs = child.find(str(QName(ns, "AclInterfaces"))) acls = {} for aclintf in aclintfs.findall(str(QName(ns, "AclInterface"))): aclname = aclintf.find(str(QName(ns, "InAcl"))).text.upper().replace( " ", "_").replace("-", "_") aclattach = aclintf.find(str(QName(ns, "AttachTo"))).text.split(';') acl_intfs = [] is_mirror = False # TODO: Ensure that acl_intfs will only ever contain front-panel interfaces (e.g., # maybe we should explicity ignore management and loopback interfaces?) because we # decide an ACL is a Control Plane ACL if acl_intfs is empty below. for member in aclattach: member = member.strip() if pcs.has_key(member): # If try to attach ACL to a LAG interface then we shall add the LAG to # to acl_intfs directly instead of break it into member ports, ACL attach # to LAG will be applied to all the LAG members internally by SAI/SDK acl_intfs.append(member) elif vlans.has_key(member): print >> sys.stderr, "Warning: ACL " + aclname + " is attached to a Vlan interface, which is currently not supported" elif port_alias_map.has_key(member): acl_intfs.append(port_alias_map[member]) # Give a warning if trying to attach ACL to a LAG member interface, correct way is to attach ACL to the LAG interface if port_alias_map[member] in intfs_inpc: print >> sys.stderr, "Warning: ACL " + aclname + " is attached to a LAG member interface " + port_alias_map[ member] + ", instead of LAG interface" elif member.lower() == 'erspan': is_mirror = True # Erspan session will be attached to all front panel ports, # if panel ports is a member port of LAG, should add the LAG # to acl table instead of the panel ports acl_intfs = pc_intfs for panel_port in port_alias_map.values(): if panel_port not in intfs_inpc: acl_intfs.append(panel_port) break if acl_intfs: acls[aclname] = { 'policy_desc': aclname, 'ports': acl_intfs, 'type': 'MIRROR' if is_mirror else 'L3' } elif is_mirror: acls[aclname] = {'policy_desc': aclname, 'type': 'MIRROR'} else: # This ACL has no interfaces to attach to -- consider this a control plane ACL try: aclservice = aclintf.find(str(QName(ns, "Type"))).text # If we already have an ACL with this name and this ACL is bound to a different service, # append the service to our list of services if aclname in acls: if acls[aclname]['type'] != 'CTRLPLANE': print >> sys.stderr, "Warning: ACL '%s' type mismatch. Not updating ACL." % aclname elif acls[aclname]['services'] == aclservice: print >> sys.stderr, "Warning: ACL '%s' already contains service '%s'. Not updating ACL." % ( aclname, aclservice) else: acls[aclname]['services'].append(aclservice) else: acls[aclname] = { 'policy_desc': aclname, 'type': 'CTRLPLANE', 'services': [aclservice] } except: print >> sys.stderr, "Warning: Ignoring Control Plane ACL %s without type" % aclname return intfs, lo_intfs, mgmt_intf, vlans, vlan_members, pcs, acls return None, None, None, None, None, None, None
def _cidr_to_ip_mask(self, network): addr = ipaddress.IPNetwork(network) ip_address, netmask = str(addr.ip), str(addr.netmask) self._address_cache[(ip_address, netmask)] = network return ip_address, netmask
def get_dev_netaddrs(): nets = [] for dev in ethtool.get_devices(): devnet = get_dev_netaddr(dev) devnet and nets.append(ipaddr.IPNetwork(devnet)) return nets
def check_for_IP(srcaddr, destaddr): n = [] src = [] try: a = ipaddr.IPAddress(str(destaddr[0])) b = ipaddr.IPAddress(str(srcaddr[0])) n.append(ipaddr.IPNetwork(str(forward_list0[1] + '/' + forward_list0[4]))) n.append(ipaddr.IPNetwork(str(forward_list1[1] + '/' + forward_list1[4]))) n.append(ipaddr.IPNetwork(str(forward_list2[1] + '/' + forward_list2[4]))) n.append(ipaddr.IPNetwork(str(forward_list3[1] + '/' + forward_list3[4]))) n.append(ipaddr.IPNetwork(str(forward_list4[1] + '/' + forward_list4[4]))) n.append(ipaddr.IPNetwork(str(forward_list5[1] + '/' + forward_list5[4]))) n.append(ipaddr.IPNetwork(str(forward_list6[1] + '/' + forward_list6[4]))) n.append(ipaddr.IPNetwork(str(forward_list7[1] + '/' + forward_list7[4]))) n.append(ipaddr.IPNetwork(str(forward_list8[1] + '/' + forward_list8[4]))) n.append(ipaddr.IPNetwork(str(forward_list9[1] + '/' + forward_list9[4]))) n.append(ipaddr.IPNetwork(str(forward_list10[1] + '/' + forward_list10[4]))) n.append(ipaddr.IPNetwork(str(forward_list11[1] + '/' + forward_list11[4]))) src.append(ipaddr.IPNetwork(str(forward_list0[0] + '/' + forward_list0[7]))) src.append(ipaddr.IPNetwork(str(forward_list1[0] + '/' + forward_list1[7]))) src.append(ipaddr.IPNetwork(str(forward_list2[0] + '/' + forward_list2[7]))) src.append(ipaddr.IPNetwork(str(forward_list3[0] + '/' + forward_list3[7]))) src.append(ipaddr.IPNetwork(str(forward_list4[0] + '/' + forward_list4[7]))) src.append(ipaddr.IPNetwork(str(forward_list5[0] + '/' + forward_list5[7]))) src.append(ipaddr.IPNetwork(str(forward_list6[0] + '/' + forward_list6[7]))) src.append(ipaddr.IPNetwork(str(forward_list7[0] + '/' + forward_list7[7]))) src.append(ipaddr.IPNetwork(str(forward_list8[0] + '/' + forward_list8[7]))) src.append(ipaddr.IPNetwork(str(forward_list9[0] + '/' + forward_list9[7]))) src.append(ipaddr.IPNetwork(str(forward_list10[0] + '/' + forward_list10[7]))) src.append(ipaddr.IPNetwork(str(forward_list11[0] + '/' + forward_list11[7]))) #A check to see if the packet has the source network address if src[0].Contains(b) or src[1].Contains(b) or src[2].Contains(b) or src[3].Contains(b) or src[4].Contains(b) or src[5].Contains(b) or src[6].Contains(b) or src[7].Contains(b) or src[8].Contains(b) or src[9].Contains(b) or src[10].Contains(b) or src[11].Contains(b): flag = True else: flag = False if flag: #Algorithm to check longest match of the IP address and forwarding them accordingly if n[0].Contains(a): if n[0].Contains(a) and n[1].Contains(a): if forward_list0[4] < forward_list1[4]: return [forward_list1[3], forward_list1[5], forward_list1[6]] else: return [forward_list0[3], forward_list0[5], forward_list0[6]] elif n[1].Contains(a): if n[1].Contains(a) and n[2].Contains(a): if forward_list1[4] < forward_list2[4]: return [forward_list2[3], forward_list2[5], forward_list2[6]] else: return [forward_list1[3], forward_list1[5], forward_list1[6]] elif n[2].Contains(a): if n[2].Contains(a) and n[3].Contains(a): if forward_list2[4] < forward_list3[4]: return [forward_list3[3], forward_list3[5], forward_list3[6]] else: return [forward_list2[3], forward_list2[5], forward_list2[6]] elif n[3].Contains(a): if n[3].Contains(a) and n[4].Contains(a): if forward_list3[4] < forward_list4[4]: return [forward_list4[3], forward_list4[5], forward_list4[6]] else: return [forward_list3[3], forward_list3[5], forward_list3[6]] elif n[4].Contains(a): if n[4].Contains(a) and n[5].Contains(a): if forward_list4[4] < forward_list5[4]: return [forward_list5[3], forward_list5[5], forward_list5[6]] else: return [forward_list4[3], forward_list4[5], forward_list4[6]] elif n[5].Contains(a): if n[5].Contains(a) and n[6].Contains(a): if forward_list5[4] < forward_list6[4]: return [forward_list6[3], forward_list6[5], forward_list6[6]] else: return [forward_list5[3], forward_list5[5], forward_list5[6]] elif n[6].Contains(a): if n[6].Contains(a) and n[7].Contains(a): if forward_list6[4] < forward_list7[4]: return [forward_list7[3], forward_list7[5], forward_list7[6]] else: return [forward_list6[3], forward_list6[5], forward_list6[6]] elif n[7].Contains(a): if n[7].Contains(a) and n[8].Contains(a): if forward_list7[4] < forward_list8[4]: return [forward_list8[3], forward_list8[5], forward_list8[6]] else: return [forward_list7[3], forward_list7[5], forward_list7[6]] elif n[8].Contains(a): if n[8].Contains(a) and n[9].Contains(a): if forward_list8[4] < forward_list9[4]: return [forward_list9[3], forward_list9[5], forward_list9[6]] else: return [forward_list8[3], forward_list8[5], forward_list8[6]] elif n[9].Contains(a): if n[9].Contains(a) and n[10].Contains(a): if forward_list9[4] < forward_list10[4]: return [forward_list10[3], forward_list10[5], forward_list10[6]] else: return [forward_list9[3], forward_list9[5], forward_list9[6]] elif n[10].Contains(a): return [forward_list10[3], forward_list10[5], forward_list10[6]] elif n[11].Contains(a): return [forward_list11[3], forward_list11[5], forward_list11[6]] else: return [str(1), str(1), forward_list0[6]] else: return [str(1), str(1), forward_list0[6]] except IndexError: return [str(100), str(100)] except ValueError: return [str(100), str(100)]
def parse_dpg(dpg, hname): for child in dpg: hostname = child.find(str(QName(ns, "Hostname"))) if hostname.text != hname: continue ipintfs = child.find(str(QName(ns, "IPInterfaces"))) intfs = {} for ipintf in ipintfs.findall(str(QName(ns, "IPInterface"))): intfalias = ipintf.find(str(QName(ns, "AttachTo"))).text intfname = port_alias_map.get(intfalias, intfalias) ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text intfs[(intfname, ipprefix)] = {} lointfs = child.find(str(QName(ns, "LoopbackIPInterfaces"))) lo_intfs = {} for lointf in lointfs.findall(str(QName(ns1, "LoopbackIPInterface"))): intfname = lointf.find(str(QName(ns, "AttachTo"))).text ipprefix = lointf.find(str(QName(ns1, "PrefixStr"))).text lo_intfs[(intfname, ipprefix)] = {} mgmtintfs = child.find(str(QName(ns, "ManagementIPInterfaces"))) mgmt_intf = {} for mgmtintf in mgmtintfs.findall(str(QName(ns1, "ManagementIPInterface"))): intfname = mgmtintf.find(str(QName(ns, "AttachTo"))).text ipprefix = mgmtintf.find(str(QName(ns1, "PrefixStr"))).text mgmtipn = ipaddress.IPNetwork(ipprefix) gwaddr = ipaddress.IPAddress(int(mgmtipn.network) + 1) mgmt_intf[(intfname, ipprefix)] = {'gwaddr': gwaddr} pcintfs = child.find(str(QName(ns, "PortChannelInterfaces"))) pc_intfs = [] pcs = {} for pcintf in pcintfs.findall(str(QName(ns, "PortChannel"))): pcintfname = pcintf.find(str(QName(ns, "Name"))).text pcintfmbr = pcintf.find(str(QName(ns, "AttachTo"))).text pcmbr_list = pcintfmbr.split(';') for i, member in enumerate(pcmbr_list): pcmbr_list[i] = port_alias_map.get(member, member) pcs[pcintfname] = {'members': pcmbr_list} vlanintfs = child.find(str(QName(ns, "VlanInterfaces"))) vlan_intfs = [] vlans = {} for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vintfname = vintf.find(str(QName(ns, "Name"))).text vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vmbr_list = vintfmbr.split(';') for i, member in enumerate(vmbr_list): vmbr_list[i] = port_alias_map.get(member, member) vlan_attributes = {'members': vmbr_list, 'vlanid': vlanid} # If this VLAN requires a DHCP relay agent, it will contain a <DhcpRelays> element # containing a list of DHCP server IPs if vintf.find(str(QName(ns, "DhcpRelays"))) is not None: vintfdhcpservers = vintf.find(str(QName(ns, "DhcpRelays"))).text vdhcpserver_list = vintfdhcpservers.split(';') vlan_attributes['dhcp_servers'] = vdhcpserver_list sonic_vlan_name = "Vlan%s" % vlanid vlans[sonic_vlan_name] = vlan_attributes aclintfs = child.find(str(QName(ns, "AclInterfaces"))) acls = {} for aclintf in aclintfs.findall(str(QName(ns, "AclInterface"))): aclname = aclintf.find(str(QName(ns, "InAcl"))).text.lower().replace(" ", "_").replace("-", "_") aclattach = aclintf.find(str(QName(ns, "AttachTo"))).text.split(';') acl_intfs = [] is_mirror = False for member in aclattach: member = member.strip() if pcs.has_key(member): acl_intfs.extend(pcs[member]['members']) # For ACL attaching to port channels, we break them into port channel members elif vlans.has_key(member): print >> sys.stderr, "Warning: ACL " + aclname + " is attached to a Vlan interface, which is currently not supported" elif port_alias_map.has_key(member): acl_intfs.append(port_alias_map[member]) elif member.lower() == 'erspan': is_mirror = True; # Erspan session will be attached to all front panel ports acl_intfs = port_alias_map.values() break; if acl_intfs: acls[aclname] = { 'policy_desc': aclname, 'ports': acl_intfs, 'type': 'mirror' if is_mirror else 'L3'} return intfs, lo_intfs, mgmt_intf, vlans, pcs, acls return None, None, None, None, None, None
def parse_dpg(dpg, hname): for child in dpg: hostname = child.find(str(QName(ns, "Hostname"))) if hostname.text != hname: continue ipintfs = child.find(str(QName(ns, "IPInterfaces"))) intfs = [] vlan_map = {} for ipintf in ipintfs.findall(str(QName(ns, "IPInterface"))): intfname = ipintf.find(str(QName(ns, "AttachTo"))).text ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text ipn = ipaddress.IPNetwork(ipprefix) ipaddr = ipn.ip prefix_len = ipn.prefixlen addr_bits = ipn.max_prefixlen subnet = ipaddress.IPNetwork( str(ipn.network) + '/' + str(prefix_len)) ipmask = ipn.netmask intf = {'addr': ipaddr, 'subnet': subnet} if isinstance(ipn, ipaddress.IPv4Network): intf['mask'] = ipmask else: intf['mask'] = str(prefix_len) if intfname[0:4] == "Vlan": if intfname in vlan_map: vlan_map[intfname].append(intf) else: vlan_map[intfname] = [intf] else: intf.update({'name': intfname, 'prefixlen': int(prefix_len)}) if port_alias_map.has_key(intfname): intf['alias'] = port_alias_map[intfname] else: intf['alias'] = intfname # TODO: remove peer_addr after dependency removed ipaddr_val = int(ipn.ip) peer_addr_val = None if int(prefix_len) == addr_bits - 2: if ipaddr_val & 0x3 == 1: peer_addr_val = ipaddr_val + 1 else: peer_addr_val = ipaddr_val - 1 elif int(prefix_len) == addr_bits - 1: if ipaddr_val & 0x1 == 0: peer_addr_val = ipaddr_val + 1 else: peer_addr_val = ipaddr_val - 1 if peer_addr_val is not None: intf['peer_addr'] = ipaddress.IPAddress(peer_addr_val) intfs.append(intf) pcintfs = child.find(str(QName(ns, "PortChannelInterfaces"))) pc_intfs = [] for pcintf in pcintfs.findall(str(QName(ns, "PortChannel"))): pcintfname = pcintf.find(str(QName(ns, "Name"))).text pcintfmbr = pcintf.find(str(QName(ns, "AttachTo"))).text mbr_list = pcintfmbr.split(';', 1) pc_intfs.append({'name': pcintfname.lower(), 'members': mbr_list}) lointfs = child.find(str(QName(ns, "LoopbackIPInterfaces"))) lo_intfs = [] for lointf in lointfs.findall(str(QName(ns1, "LoopbackIPInterface"))): intfname = lointf.find(str(QName(ns, "AttachTo"))).text ipprefix = lointf.find(str(QName(ns1, "PrefixStr"))).text ipn = ipaddress.IPNetwork(ipprefix) ipaddr = ipn.ip prefix_len = ipn.prefixlen ipmask = ipn.netmask lo_intf = { 'name': intfname, 'addr': ipaddr, 'prefixlen': prefix_len } if isinstance(ipn, ipaddress.IPv4Network): lo_intf['mask'] = ipmask else: lo_intf['mask'] = str(prefix_len) lo_intfs.append(lo_intf) mgmtintfs = child.find(str(QName(ns, "ManagementIPInterfaces"))) mgmt_intf = None for mgmtintf in mgmtintfs.findall( str(QName(ns1, "ManagementIPInterface"))): ipprefix = mgmtintf.find(str(QName(ns1, "PrefixStr"))).text mgmtipn = ipaddress.IPNetwork(ipprefix) ipaddr = mgmtipn.ip prefix_len = str(mgmtipn.prefixlen) ipmask = mgmtipn.netmask gwaddr = ipaddress.IPAddress(int(mgmtipn.network) + 1) mgmt_intf = { 'addr': ipaddr, 'prefixlen': prefix_len, 'mask': ipmask, 'gwaddr': gwaddr } vlanintfs = child.find(str(QName(ns, "VlanInterfaces"))) vlan_intfs = [] for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vintfname = vintf.find(str(QName(ns, "Name"))).text vlanid = vintf.find(str(QName(ns, "VlanID"))).text members = vintf.find(str(QName(ns, "AttachTo"))).text members = " ".join(members.split(';')) vlan_attributes = { 'name': vintfname, 'members': members, 'vlanid': vlanid } for addrtuple in vlan_map.get(vintfname, []): vlan_attributes.update(addrtuple) vlan_intfs.append(copy.deepcopy(vlan_attributes)) return intfs, lo_intfs, mgmt_intf, vlan_intfs, pc_intfs return None, None, None, None, None
def calculate_usable_ips(net): ips = ipaddr.IPNetwork(net.address).numhosts reserved = net.reserved_addresses_bottom + net.reserved_addresses_top return ips - reserved - 2
def __init__(self, ips): self.networks = [ipaddr.IPNetwork(ip) for ip in ips]
def parse_prefix(args): network = ipaddr.IPNetwork(args.prefix) return IpPrefix(ip=BinaryAddress(addr=network.ip.packed), prefixLength=network.prefixlen)
### Compute the percentage of assigned prefixes by Afrinic that are seen at the ASN. for cc in CC_IXP.keys(): if cc in week_prefix.keys(): print print 'Number of ASNs allocated to CC:', len(CC_ASNs_AFRINIC[cc]) #print 'Number of Origin ASNs seen at the IXP:', len(list(set(week_prefix[ixp]))) intersection = [] rest = [] for prefix_adv in week_prefix[cc]: if prefix_adv != '0.0.0.0/0': prefix_AF_adv = ipaddr.IPNetwork(str(prefix_adv)) for prefix_assigned in list(set(CC_ASNs_AFRINIC[cc])): if prefix_assigned not in intersection and prefix_assigned != '0.0.0.0/0': prefix_AF_assigned = ipaddr.IPNetwork( str(prefix_assigned)) if cidrsOverlap(prefix_AF_adv, prefix_AF_assigned): #if prefix_AF_adv.overlaps(prefix_AF_assigned): print 'Filling the file 1_percentage_of_allocated_prefixes_seen_at_all_IXPs_of_each_country.txt', prefix_AF_adv, ' overlaps ', prefix_AF_assigned intersection.append(prefix_assigned) if '0.0.0.0/0' in intersection: intersection.remove('0.0.0.0/0') if '0.0.0.0/0' in CC_ASNs_AFRINIC[cc]: CC_ASNs_AFRINIC[cc].remove('0.0.0.0/0')
def process_result_value(self, value, dialect): if value is None: return value return ipaddr.IPNetwork(value)
def __init__(self, name, cidr): self.name = name self.cidr = ipaddr.IPNetwork(cidr) self.router = None self.networks = [] self.subnets = []
def parse_graph(self): """ Parse the xml graph file """ deviceinfo = {} deviceroot = self.root.find(self.pngtag).find('Devices') devices = deviceroot.findall('Device') if devices is not None: for dev in devices: hostname = dev.attrib['Hostname'] if hostname is not None: deviceinfo[hostname] = {} hwsku = dev.attrib['HwSku'] devtype = dev.attrib['Type'] deviceinfo[hostname]['HwSku'] = hwsku deviceinfo[hostname]['Type'] = devtype self.links[hostname] = {} devicel2info = {} devicel3s = self.root.find(self.dpgtag).findall('DevicesL3Info') devicel2s = self.root.find(self.dpgtag).findall('DevicesL2Info') if devicel2s is not None: for l2info in devicel2s: hostname = l2info.attrib['Hostname'] if hostname is not None: devicel2info[hostname] = {} vlans = l2info.findall('InterfaceVlan') for vlan in vlans: portname = vlan.attrib['portname'] portmode = vlan.attrib['mode'] portvlanid = vlan.attrib['vlanids'] portvlanlist = self.port_vlanlist(portvlanid) devicel2info[hostname][portname] = { 'mode': portmode, 'vlanids': portvlanid, 'vlanlist': portvlanlist } if devicel3s is not None: for l3info in devicel3s: hostname = l3info.attrib['Hostname'] if hostname is not None: management_ip = l3info.find( 'ManagementIPInterface').attrib['Prefix'] deviceinfo[hostname]['ManagementIp'] = management_ip mgmtip = ipaddress.IPNetwork(management_ip) deviceinfo[hostname]['mgmtip'] = str(mgmtip.ip) management_gw = str(mgmtip.network + 1) deviceinfo[hostname]['ManagementGw'] = management_gw allinks = self.root.find(self.pngtag).find( 'DeviceInterfaceLinks').findall('DeviceInterfaceLink') if allinks is not None: for link in allinks: start_dev = link.attrib['StartDevice'] end_dev = link.attrib['EndDevice'] if start_dev: self.links[start_dev][link.attrib['StartPort']] = { 'peerdevice': link.attrib['EndDevice'], 'peerport': link.attrib['EndPort'] } if end_dev: self.links[end_dev][link.attrib['EndPort']] = { 'peerdevice': link.attrib['StartDevice'], 'peerport': link.attrib['StartPort'] } self.devices = deviceinfo self.vlanport = devicel2info
def parse_xml(filename, platform=None, port_config_file=None): root = ET.parse(filename).getroot() mini_graph_path = filename u_neighbors = None u_devices = None hwsku = None bgp_sessions = None bgp_asn = None intfs = None vlan_intfs = None pc_intfs = None vlans = None vlan_members = None pcs = None mgmt_intf = None lo_intf = None neighbors = None devices = None hostname = None port_speeds_default = {} port_speed_png = {} port_descriptions = {} console_ports = {} syslog_servers = [] dhcp_servers = [] ntp_servers = [] tacacs_servers = [] mgmt_routes = [] erspan_dst = [] bgp_peers_with_range = None deployment_id = None hwsku_qn = QName(ns, "HwSku") hostname_qn = QName(ns, "Hostname") for child in root: if child.tag == str(hwsku_qn): hwsku = child.text if child.tag == str(hostname_qn): hostname = child.text (ports, alias_map) = get_port_config(hwsku, platform, port_config_file) port_alias_map.update(alias_map) for child in root: if child.tag == str(QName(ns, "DpgDec")): (intfs, lo_intfs, mgmt_intf, vlans, vlan_members, pcs, acls) = parse_dpg(child, hostname) elif child.tag == str(QName(ns, "CpgDec")): (bgp_sessions, bgp_asn, bgp_peers_with_range) = parse_cpg(child, hostname) elif child.tag == str(QName(ns, "PngDec")): (neighbors, devices, console_dev, console_port, mgmt_dev, mgmt_port, port_speed_png, console_ports) = parse_png(child, hostname) elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname) elif child.tag == str(QName(ns, "MetadataDeclaration")): (syslog_servers, dhcp_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): (port_speeds_default, port_descriptions) = parse_deviceinfo(child, hwsku) current_device = [ devices[key] for key in devices if key.lower() == hostname.lower() ][0] results = {} results['DEVICE_METADATA'] = { 'localhost': { 'bgp_asn': bgp_asn, 'deployment_id': deployment_id, 'hostname': hostname, 'hwsku': hwsku, 'type': current_device['type'] } } results['BGP_NEIGHBOR'] = bgp_sessions results['BGP_PEER_RANGE'] = bgp_peers_with_range if mgmt_routes: # TODO: differentiate v4 and v6 mgmt_intf.itervalues().next()['forced_mgmt_routes'] = mgmt_routes results['MGMT_INTERFACE'] = mgmt_intf results['LOOPBACK_INTERFACE'] = lo_intfs phyport_intfs = {} vlan_intfs = {} pc_intfs = {} vlan_invert_mapping = { v['alias']: k for k, v in vlans.items() if v.has_key('alias') } for intf in intfs: if intf[0][0:4] == 'Vlan': vlan_intfs[intf] = {} elif vlan_invert_mapping.has_key(intf[0]): vlan_intfs[(vlan_invert_mapping[intf[0]], intf[1])] = {} elif intf[0][0:11] == 'PortChannel': pc_intfs[intf] = {} else: phyport_intfs[intf] = {} results['INTERFACE'] = phyport_intfs results['VLAN_INTERFACE'] = vlan_intfs for port_name in port_speeds_default: # ignore port not in port_config.ini if not ports.has_key(port_name): continue ports.setdefault(port_name, {})['speed'] = port_speeds_default[port_name] for port_name in port_speed_png: # not consider port not in port_config.ini if port_name not in ports: print >> sys.stderr, "Warning: ignore interface '%s' as it is not in the port_config.ini" % port_name continue ports.setdefault(port_name, {})['speed'] = port_speed_png[port_name] for port_name, port in ports.items(): if port.get('speed') == '100000': port['fec'] = 'rs' for port_name in port_descriptions: # ignore port not in port_config.ini if not ports.has_key(port_name): continue ports.setdefault(port_name, {})['description'] = port_descriptions[port_name] results['PORT'] = ports results['CONSOLE_PORT'] = console_ports if port_config_file: port_set = set(ports.keys()) for (pc_name, mbr_map) in pcs.items(): # remove portchannels that contain ports not existing in port_config.ini # when port_config.ini exists if not set(mbr_map['members']).issubset(port_set): print >> sys.stderr, "Warning: ignore '%s' as part of its member interfaces is not in the port_config.ini" % pc_name del pcs[pc_name] results['PORTCHANNEL'] = pcs for pc_intf in pc_intfs.keys(): # remove portchannels not in PORTCHANNEL dictionary if pc_intf[0] not in pcs: print >> sys.stderr, "Warning: ignore '%s' interface '%s' as '%s' is not in the valid PortChannel list" % ( pc_intf[0], pc_intf[1], pc_intf[0]) del pc_intfs[pc_intf] results['PORTCHANNEL_INTERFACE'] = pc_intfs results['VLAN'] = vlans results['VLAN_MEMBER'] = vlan_members for nghbr in neighbors.keys(): # remove port not in port_config.ini if nghbr not in ports: print >> sys.stderr, "Warning: ignore interface '%s' in DEVICE_NEIGHBOR as it is not in the port_config.ini" % nghbr del neighbors[nghbr] results['DEVICE_NEIGHBOR'] = neighbors results['DEVICE_NEIGHBOR_METADATA'] = { key: devices[key] for key in devices if key.lower() != hostname.lower() } results['SYSLOG_SERVER'] = dict((item, {}) for item in syslog_servers) results['DHCP_SERVER'] = dict((item, {}) for item in dhcp_servers) results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers) results['TACPLUS_SERVER'] = dict((item, { 'priority': '1', 'tcp_port': '49' }) for item in tacacs_servers) results['ACL_TABLE'] = acls mirror_sessions = {} if erspan_dst: lo_addr = '0.0.0.0' for lo in lo_intfs: lo_network = ipaddress.IPNetwork(lo[1]) if lo_network.version == 4: lo_addr = str(lo_network.ip) break count = 0 for dst in erspan_dst: mirror_sessions['everflow{}'.format(count)] = { "dst_ip": dst, "src_ip": lo_addr } count += 1 results['MIRROR_SESSION'] = mirror_sessions return results
def create_subnet(request): """Create a subnet network_id and the desired cidr are mandatory, everything else is optional """ dictionary = utils.get_request_dict(request) user_id = request.user_uniq log.info('create subnet user: %s request: %s', user_id, dictionary) try: subnet = dictionary['subnet'] network_id = subnet['network_id'] cidr = subnet['cidr'] except KeyError: raise api.faults.BadRequest("Malformed request") name = subnet.get('name', None) ipversion = subnet.get('ip_version', 4) allocation_pools = subnet.get('allocation_pools', None) if allocation_pools is not None: allocation_pools = parse_ip_pools(allocation_pools) try: cidr_ip = ipaddr.IPNetwork(cidr) except ValueError: raise api.faults.BadRequest("Malformed CIDR '%s'" % cidr) # If no gateway is specified, send an empty string, because None is used # if the user wants no gateway at all gateway = subnet.get('gateway_ip', "") if gateway is "": gateway = str(cidr_ip.network + 1) dhcp = subnet.get('enable_dhcp', True) slaac = subnet.get('enable_slaac', None) if ipversion == 6: if slaac is not None: dhcp = check_boolean_value(slaac, "enable_slaac") else: dhcp = check_boolean_value(dhcp, "dhcp") else: dhcp = check_boolean_value(dhcp, "dhcp") dns = subnet.get('dns_nameservers', None) hosts = subnet.get('host_routes', None) sub = subnets.create_subnet(network_id=network_id, cidr=cidr, name=name, ipversion=ipversion, gateway=gateway, dhcp=dhcp, slaac=slaac, dns_nameservers=dns, allocation_pools=allocation_pools, host_routes=hosts, user_id=user_id) subnet_dict = subnet_to_dict(sub) data = json.dumps({'subnet': subnet_dict}) return HttpResponse(data, status=201)
def _to_addr(tok): try: return ipaddr.IPAddress(tok) except: return ipaddr.IPNetwork(tok)
4-scan 192.168.1.1 for password-protected shares ./netbios-shares-scanner 192.168.1.1/24 yourname%yourpass 5-scan network range for password-protected shares and save list to file ./netbios-shares-scanner 192.168.1.1/24 yourname%yourpass > results.txt """ sys.exit() if len(sys.argv) == 3: usernamePasswordParam = '-U ' + sys.argv[2] ipToScan = sys.argv[1] ipList = [] try: #preparing IPs list if ipToScan.find("-") == -1 and ipToScan.count('.') == 3: ips = ipaddr.IPNetwork(sys.argv[1]) ipList = [str(x) for x in list(ips)] if ipToScan.find("-") != -1: import iprange ip12 = ipToScan.split('-') ip1 = iprange.ip2int(ip12[0]) ip2 = iprange.ip2int(ip12[1]) for r in iprange.getrange(ip1, ip2): ips = ipaddr.IPNetwork(r) ipList.extend([str(x) for x in list(ips)]) except ValueError: print "Error in IP!" for x in ipList: print "Scanning ", x
def _cidr_to_ip_mask(network): addr = ipaddress.IPNetwork(network) return str(addr.ip), str(addr.netmask)
def _ip_networks(elt): return [ ipaddr.IPNetwork(x.text) for x in elt.iter('{%s}IPHint' % NS['mdui']) ]
def as_network(self): return ipaddr.IPNetwork(self.as_prefixed)
def ouput_forward(srcaddr, destaddr, data, outputportSpeed001, outputportSpeed002, outputportSpeed003): global outputCounter_a global outputCounter_b global outputCounter_c global lista global listb global listc global queue_1_a_cnt global queue_1_b_cnt global queue_1_c_cnt global queue_2_a_cnt global queue_2_b_cnt global queue_2_c_cnt global queue_3_a_cnt global queue_3_b_cnt global queue_3_c_cnt global r104count global Destination1_count j = 0 start1a = 0 start1b = 0 start1c = 0 start2a = 0 start2b = 0 start2c = 0 start3a = 0 start3b = 0 start3c = 0 count1 = 0 count2 = 0 count3 = 0 q1a=Queue() q1b=Queue() q1c=Queue() q2a=Queue() q2b=Queue() q2c=Queue() q3a=Queue() q3b=Queue() q3c=Queue() check_ip = [] dest_Port_queue = [] dest_Port_queue = check_for_IP(srcaddr, destaddr) try: data = data[0] except IndexError: pass if outputportSpeed001 != 0 and outputportSpeed002 != 0 and outputportSpeed003 != 0: highest = float(det_highest(outputportSpeed001, outputportSpeed002, outputportSpeed003)) speedFactor001 = float(highest/outputportSpeed001)-1 speedFactor002 = float(highest/outputportSpeed002)-1 speedFactor003 = float(highest/outputportSpeed003)-1 else: outputport001 = float (queueSpeed001_a + queueSpeed001_b + queueSpeed001_c) /3 outputport002 = float (queueSpeed002_a + queueSpeed002_b + queueSpeed002_c) /3 outputport003 = float (queueSpeed003_a + queueSpeed003_a + queueSpeed003_c) /3 highest = float(det_highest(outputport001, outputport002, outputport003)) speedFactor001 = float(highest/outputport001)-1 speedFactor002 = float(highest/outputport002)-1 speedFactor003 = float(highest/outputport003)-1 #Check for a specific IP address check_ip.append(ipaddr.IPNetwork(str('216.15.0.0/16'))) check_ip.append(ipaddr.IPNetwork(str('177.215.200.0/21'))) try: checkaddress = ipaddr.IPAddress(str(destaddr[0])) except IndexError: pass if dest_Port_queue[0] == '1': if (dest_Port_queue[1] == '1'): q1a.push(data) start1a = timeit.default_timer() queue_1_a_cnt = queue_1_a_cnt + 1 elif (dest_Port_queue[1] == '2'): q1b.push(data) start1b = timeit.default_timer() queue_1_b_cnt = queue_1_b_cnt + 1 else: q1c.push(data) start1c = timeit.default_timer() queue_1_c_cnt = queue_1_c_cnt + 1 start = timeit.default_timer() time.sleep((randint(1,2)/100)*speedFactor001) if (dest_Port_queue[1] == '1'): write_Output('Router_4_Port_1', q1a.pop()) stop1a = timeit.default_timer() list1a.append(stop1a-start1a) elif (dest_Port_queue[1] == '2'): write_Output('Router_4_Port_1', q1b.pop()) stop1b = timeit.default_timer() list1b.append(stop1b-start1b) else: if check_ip[1].Contains(checkaddress): rand_data = q1c.pop() write_Output('Destination1', rand_data) write_Output('R104', rand_data) Destination1_count = Destination1_count + 1 else: write_Output('Router_4_Port_1', rand_data) stop1c = timeit.default_timer() list1c.append(stop1c-start1c) outputCounter_a = outputCounter_a + 1 elif dest_Port_queue[0] == '2': if (dest_Port_queue[1] == '1'): q2a.push(data) start2a = timeit.default_timer() queue_2_a_cnt = queue_2_a_cnt + 1 elif (dest_Port_queue[1] == '2'): q2b.push(data) start2b = timeit.default_timer() queue_2_b_cnt = queue_2_b_cnt + 1 else: q2c.push(data) start2c = timeit.default_timer() queue_2_c_cnt = queue_2_c_cnt + 1 start = timeit.default_timer() time.sleep((randint(1,2)/100)*speedFactor002) if (dest_Port_queue[1] == '1'): if check_ip[0].Contains(checkaddress): write_Output('Destination1', q2a.pop()) Destination1_count = Destination1_count + 1 else: write_Output('Router_4_Port_2', q2a.pop()) stop2a = timeit.default_timer() list2a.append(stop2a-start2a) elif (dest_Port_queue[1] == '2'): write_Output('Router_4_Port_2', q2b.pop()) stop2b = timeit.default_timer() list2b.append(stop2b-start2b) else: write_Output('Router_4_Port_2', q2c.pop()) stop2c = timeit.default_timer() list2c.append(stop2c-start2c) outputCounter_b = outputCounter_b + 1 elif dest_Port_queue[0] == '3': if (dest_Port_queue[1] == '1'): q3a.push(data) start3a = timeit.default_timer() queue_3_a_cnt = queue_3_a_cnt + 1 elif (dest_Port_queue[1] == '2'): q3b.push(data) start3b = timeit.default_timer() queue_3_b_cnt = queue_3_b_cnt + 1 else: q3c.push(data) start3c = timeit.default_timer() queue_3_c_cnt = queue_3_c_cnt + 1 start = timeit.default_timer() time.sleep((randint(1,2)/100)*speedFactor003) if (dest_Port_queue[1] == '1'): write_Output('Router_4_Port_3', q3a.pop()) stop3a = timeit.default_timer() list3a.append(stop3a-start3a) elif (dest_Port_queue[1] == '2'): write_Output('Router_4_Port_3', q3b.pop()) stop3b = timeit.default_timer() list3b.append(stop3b-start3b) else: write_Output('Router_4_Port_3', q3c.pop()) stop3c = timeit.default_timer() list3c.append(stop3c-start3c) outputCounter_c = outputCounter_c + 1 else: #print "Invalid port found : ", dest_Port_queue[0] pass return {'outputLink - 1':outputCounter_a, 'outputLink - 2':outputCounter_b, 'outputLink - 3':outputCounter_c , 'Dropped on - 1':dropped_a, 'Dropped on - 2':dropped_b, 'Dropped on - 3':dropped_c}
def _check_inclusion_in_network_whitelist(self, cidr): for entry in self.network_whitelist: if ipaddr.IPNetwork(cidr) in ipaddr.IPNetwork(str(entry.cidr)): return True return False
def get_queryset(self): empty_field = 'none' if self.query is not None: return self.query self.query = ReadOnlyDevice.objects.none() self.set_searchform() if self.searchform.is_valid(): data = self.searchform.cleaned_data if data['deleted']: self.query = Device.admin_objects.all() else: self.query = Device.objects.all() if data['name']: name = data['name'].strip() names = set( n.strip('.') for (n, ) in Record.objects.filter(type='CNAME').filter( name__icontains=name).values_list('content')) ips = set( ip.strip('.') for (ip, ) in Record.objects.filter(type='A').filter( Q(name__icontains=name) | Q(name__in=names)).values_list('content')) q = (_search_fields_or([ 'name__contains', 'ipaddress__hostname__icontains', ], name.split()) | Q(ipaddress__address__in=ips, )) self.query = self.query.filter(q).distinct() if data['address']: if data['address'] == empty_field: self.query = self.query.filter(ipaddress=None) elif '/' in data['address']: try: net = ipaddr.IPNetwork(data['address']) except ValueError: pass else: min_ip = int(net.network) max_ip = int(net.broadcast) self.query = self.query.filter( ipaddress__number__lte=max_ip, ipaddress__number__gte=min_ip) else: q = _search_fields_or(['ipaddress__address__icontains'], data['address'].split(' ')) self.query = self.query.filter(q).distinct() if data['remarks']: if data['remarks'] == empty_field: self.query = self.query.filter(remarks='') else: self.query = self.query.filter( remarks__icontains=data['remarks']) if data['model']: if data['model'] == empty_field: self.query = self.query.filter(model=None) else: q = _search_fields_or([ 'model__name__icontains', 'model__group__name__icontains', ], data['model'].split('|')) self.query = self.query.filter(q).distinct() if data['component']: if data['component'].isdigit(): q = _search_fields_or([ 'processor__model__id', 'memory__model__id', 'storage__model__id', 'ethernet__id', 'genericcomponent__model__id', 'fibrechannel__model__id', 'disksharemount__share__model__id', 'operatingsystem__model__id' ], data['component'].split('|')) self.query = self.query.filter(q).distinct() else: q = _search_fields_or([ 'genericcomponent__label__icontains', 'genericcomponent__model__name__icontains', 'genericcomponent__model__group__name__icontains', 'ethernet__mac__icontains', 'fibrechannel__label__icontains', 'fibrechannel__model__name__icontains', 'fibrechannel__model__group__name__icontains', 'storage__label__icontains', 'storage__model__name__icontains', 'storage__model__group__name__icontains', 'memory__label__icontains', 'memory__model__name__icontains', 'memory__model__group__name__icontains', 'processor__label__icontains', 'processor__model__name__icontains', 'processor__model__group__name__icontains', 'disksharemount__share__label__icontains', 'disksharemount__share__wwn__icontains', 'disksharemount__share__model__name__icontains', 'operatingsystem__model__name__icontains' ], data['component'].split('|')) self.query = self.query.filter(q).distinct() if data['software']: if data['software'].isdigit(): q = _search_fields_or([ 'software__model__id', ], data['software'].split('|')) self.query = self.query.filter(q).distinct() else: match = SOFTWARE_RE.match(data['software']) if match: name, operator, version = ( match.group('name'), match.group('operator'), match.group('version1') or match.group('version2'), ) else: name = data['software'].strip() operator, version = None, None # We take 3 formats into the consideration: # 1) package name # 2) package name + == or > or < or >= or >= + version # 3) package name + ^= + version - is startswith if not operator: self.query = self.query.filter( Q(software__label__icontains=name) | Q(software__model__name__icontains=name) | Q(software__model__group__name__icontains=name) ).distinct() elif name and operator and version: operators = { '==': '', '^=': '__startswith', '>': '__gt', '>=': '__gte', '<': '__lt', '<=': '__lte', } soft_q = Q(**{ 'software__version' + operators[operator]: version }) self.query = self.query.filter( (Q(software__label__icontains=name) & soft_q) | (Q(software__model__name__icontains=name) & soft_q) | (Q(software__model__group__name__icontains=name) & soft_q)).distinct() if data['serial']: if data['serial'] == empty_field: self.query = self.query.filter( Q(sn=None) | Q(ethernet__mac=None) | Q(genericcomponent__sn=None)) else: serial = data['serial'].replace(':', '') q = _search_fields_or([ 'sn__icontains', 'ethernet__mac__icontains', 'genericcomponent__sn__icontains', 'diskshare__wwn', 'disksharemount__share__wwn', ], serial.split()) self.query = self.query.filter(q).distinct() if data['barcode']: if data['barcode'] == empty_field: self.query = self.query.filter(barcode=None) else: self.query = self.query.filter( barcode__icontains=data['barcode']) if data['position']: if data['position'] == empty_field: self.query = self.query.filter( Q(position=None) | Q(dc=None) | Q(rack=None)) else: q = Q() for part in data['position'].split(): q |= _search_fields_and([ 'position__icontains', 'dc__icontains', 'rack__icontains', ], part.split('/')) self.query = self.query.filter(q).distinct() if data['history']: q = _search_fields_or([ 'historychange__old_value__icontains', 'historychange__new_value__icontains', ], data['history'].split()) self.query = self.query.filter(q).distinct() if data['role']: q = Q() if data['role'] == empty_field or data['role'].strip() == '-': self.query = self.query.filter(venture=None) elif data['role'].strip() == '*': self.query = self.query.exclude(venture=None) else: for part in data['role'].split(): try: role_id = int(part) except: q |= _search_fields_and([ 'venture_role__name__icontains', 'venture_role__parent__name__icontains', 'venture_role__parent__parent__name__icontains', 'venture__name__icontains', 'venture__symbol__icontains', ], part.split('/')) else: q |= _search_fields_or([ 'venture__id', 'venture__parent__id', 'venture__parent__parent__id', 'venture__parent__parent__parent__id', 'venture__parent__parent__parent__parent__id', ], [str(role_id)]) self.query = self.query.filter(q).distinct() if data['device_group']: self.query = self.query.filter( model__group_id=data['device_group']) if data['component_group']: is_splunk = ComponentModel.objects.filter( group_id=str(data['component_group']), family='splunkusage').exists() if is_splunk: yesterday = datetime.date.today() - datetime.timedelta( days=1) q = Q(splunkusage__day=yesterday) else: q = _search_fields_or([ 'genericcomponent__model__group_id', 'fibrechannel__model__group_id', 'storage__model__group_id', 'memory__model__group_id', 'processor__model__group_id', 'disksharemount__share__model__group_id', ], [str(data['component_group'])]) self.query = self.query.filter(q).distinct() if data['device_type']: self.query = self.query.filter( model__type__in=data['device_type']) if data['no_purchase_date']: self.query = self.query.filter(purchase_date=None) else: if data['purchase_date_start']: self.query = self.query.filter( purchase_date__gte=data['purchase_date_start']) if data['purchase_date_end']: self.query = self.query.filter( purchase_date__lte=data['purchase_date_end']) if data['no_deprecation_date']: self.query = self.query.filter(purchase_date=None) else: if data['deprecation_date_start']: self.query = self.query.filter( deprecation_date__gte=data['deprecation_date_start']) if data['deprecation_date_end']: self.query = self.query.filter( deprecation_date__lte=data['deprecation_date_end']) if data['deprecation_kind']: if data['deprecation_kind'][0] == "None": self.query = self.query.filter( deprecation_kind__isnull=True, ) else: self.query = self.query.filter( deprecation_kind__id__exact=data['deprecation_kind'] [0], ) if data['no_warranty_expiration_date']: self.query = self.query.filter(warranty_expiration_date=None) else: if data['warranty_expiration_date_start']: self.query = self.query.filter( warranty_expiration_date__gte=data[ 'warranty_expiration_date_start']) if data['warranty_expiration_date_end']: self.query = self.query.filter( warranty_expiration_date__lte=data[ 'warranty_expiration_date_end']) if data['no_support_expiration_date']: self.query = self.query.filter(support_expiration_date=None) else: if data['support_expiration_date_start']: self.query = self.query.filter( support_expiration_date__gte=data[ 'support_expiration_date_start']) if data['support_expiration_date_end']: self.query = self.query.filter( support_expiration_date__lte=data[ 'support_expiration_date_end']) if data['with_changes']: changed_devices_ids = self._get_changed_devices_ids() self.query = self.query.filter(id__in=changed_devices_ids) profile = self.request.user.get_profile() if not profile.has_perm(Perm.read_dc_structure): self.query = profile.filter_by_perm(self.query, Perm.list_devices_generic) self.query = super(SearchDeviceList, self).get_queryset(self.query) self.query = self.query.distinct() return self.query
def __init__(self, routerlinks, ports, subnets): logging.debug('Ports available: %s' % (len(ports))) logging.debug('Subnets available: %s' % (subnets)) for sub in subnets: logging.debug('Processing subnet: %s' % (sub)) blocks = ipaddr.IPNetwork(sub, strict=True).subnet(new_prefix=30) for block in blocks: logging.debug('P2P block available: %s' % (block)) self.subnets.append(block) logging.debug('Loaded %s /30s' % (len(self.subnets))) self.subnets.reverse() links_needed = None # Create router objects for each router and client for rtr in routerlinks: logging.debug('Creating router object: %s' % (rtr)) self.routers[rtr] = Router(rtr) for rtrcli in routerlinks[rtr]: logging.debug('Creating router (client): %s' % (rtrcli)) self.routers[rtrcli] = Router(rtrcli) # For each router, create a link object, assign a server and client router object, assign ports and interface # numbers along with a subnet. for rtr in routerlinks: for rtrclient in routerlinks[rtr]: logging.debug('Creating new link from %s to %s with iface %s' % (rtr, rtrclient, self.iface_count)) try: newlink = Link(self.routers[rtr], self.routers[rtrclient], ports.pop(), self.iface_count, self.subnets.pop()) except IndexError as e: if len(self.subnets) < 1: raise Exception( 'Not enough subnets available. Add a larger range of IPs and try again.' ) elif len(self.ports) < 1: raise Exception( 'Not enough ports available. Add additional port ranges and try again.' ) else: raise e if rtr not in self.links: self.links[rtr] = [] self.links[rtr].append(newlink) if rtrclient not in self.links: self.links[rtrclient] = [] self.links[rtrclient].append(newlink) self.iface_count += 1 links_needed = 0 for srv in self.links: links_needed += len(self.links[srv]) logging.debug('%s links needed' % (links_needed)) subnets_available = len(self.subnets) logging.debug('%s subnets available' % (subnets_available)) if links_needed > subnets_available: raise Exception( 'Not enough subnets available: %s needed, %s available' % (links_needed, subnets_available))
def parse_xml(filename, platform=None, port_config_file=None): root = ET.parse(filename).getroot() mini_graph_path = filename u_neighbors = None u_devices = None hwsku = None bgp_sessions = None bgp_asn = None intfs = None vlan_intfs = None pc_intfs = None vlans = None pcs = None mgmt_intf = None lo_intf = None neighbors = None devices = None hostname = None port_speeds = {} syslog_servers = [] dhcp_servers = [] ntp_servers = [] mgmt_routes = [] erspan_dst = [] bgp_peers_with_range = None deployment_id = None hwsku_qn = QName(ns, "HwSku") hostname_qn = QName(ns, "Hostname") for child in root: if child.tag == str(hwsku_qn): hwsku = child.text if child.tag == str(hostname_qn): hostname = child.text (ports, alias_map) = get_port_config(hwsku, platform, port_config_file) port_alias_map.update(alias_map) for child in root: if child.tag == str(QName(ns, "DpgDec")): (intfs, lo_intfs, mgmt_intf, vlans, pcs, acls) = parse_dpg(child, hostname) elif child.tag == str(QName(ns, "CpgDec")): (bgp_sessions, bgp_asn, bgp_peers_with_range) = parse_cpg(child, hostname) elif child.tag == str(QName(ns, "PngDec")): (neighbors, devices, console_dev, console_port, mgmt_dev, mgmt_port) = parse_png(child, hostname) elif child.tag == str(QName(ns, "UngDec")): (u_neighbors, u_devices, _, _, _, _) = parse_png(child, hostname) elif child.tag == str(QName(ns, "MetadataDeclaration")): (syslog_servers, dhcp_servers, ntp_servers, mgmt_routes, erspan_dst, deployment_id) = parse_meta(child, hostname) elif child.tag == str(QName(ns, "DeviceInfos")): port_speeds = parse_deviceinfo(child, hwsku) results = {} results['DEVICE_METADATA'] = {'localhost': { 'bgp_asn': bgp_asn, 'deployment_id': deployment_id, 'hostname': hostname, 'hwsku': hwsku, 'type': devices[hostname]['type'] }} results['BGP_NEIGHBOR'] = bgp_sessions results['BGP_PEER_RANGE'] = bgp_peers_with_range if mgmt_routes: # TODO: differentiate v4 and v6 mgmt_intf.itervalues().next()['forced_mgmt_routes'] = mgmt_routes results['MGMT_INTERFACE'] = mgmt_intf results['LOOPBACK_INTERFACE'] = lo_intfs phyport_intfs = {} vlan_intfs = {} pc_intfs = {} for intf in intfs: if intf[0][0:4] == 'Vlan': vlan_intfs[intf] = {} elif intf[0][0:11] == 'PortChannel': pc_intfs[intf] = {} else: phyport_intfs[intf] = {} results['INTERFACE'] = phyport_intfs results['VLAN_INTERFACE'] = vlan_intfs results['PORTCHANNEL_INTERFACE'] = pc_intfs for port_name in port_speeds: ports.setdefault(port_name, {})['speed'] = port_speeds[port_name] results['PORT'] = ports results['PORTCHANNEL'] = pcs results['VLAN'] = vlans results['DEVICE_NEIGHBOR'] = neighbors results['DEVICE_NEIGHBOR_METADATA'] = { key:devices[key] for key in devices if key != hostname } results['SYSLOG_SERVER'] = dict((item, {}) for item in syslog_servers) results['DHCP_SERVER'] = dict((item, {}) for item in dhcp_servers) results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers) results['ACL_TABLE'] = acls mirror_sessions = {} if erspan_dst: lo_addr = '0.0.0.0' for lo in lo_intfs: lo_network = ipaddress.IPNetwork(lo[1]) if lo_network.version == 4: lo_addr = str(lo_network.ip) break count = 0 for dst in erspan_dst: mirror_sessions['everflow{}'.format(count)] = {"dst_ip": dst, "src_ip": lo_addr} count += 1 results['MIRROR_SESSION'] = mirror_sessions return results
def parse_dpg(dpg, hname): for child in dpg: hostname = child.find(str(QName(ns, "Hostname"))) if hostname.text != hname: continue ipintfs = child.find(str(QName(ns, "IPInterfaces"))) intfs = [] for ipintf in ipintfs.findall(str(QName(ns, "IPInterface"))): intfalias = ipintf.find(str(QName(ns, "AttachTo"))).text if port_alias_map.has_key(intfalias): intfname = port_alias_map[intfalias] else: intfname = intfalias ipprefix = ipintf.find(str(QName(ns, "Prefix"))).text ipn = ipaddress.IPNetwork(ipprefix) ipaddr = ipn.ip prefix_len = ipn.prefixlen addr_bits = ipn.max_prefixlen subnet = ipaddress.IPNetwork(str(ipn.network) + '/' + str(prefix_len)) ipmask = ipn.netmask intf = {'addr': ipaddr, 'subnet': subnet} if isinstance(ipn, ipaddress.IPv4Network): intf['mask'] = ipmask else: intf['mask'] = str(prefix_len) intf.update({'attachto': intfname, 'prefixlen': int(prefix_len)}) # TODO: remove peer_addr after dependency removed ipaddr_val = int(ipn.ip) peer_addr_val = None if int(prefix_len) == addr_bits - 2: if ipaddr_val & 0x3 == 1: peer_addr_val = ipaddr_val + 1 else: peer_addr_val = ipaddr_val - 1 elif int(prefix_len) == addr_bits - 1: if ipaddr_val & 0x1 == 0: peer_addr_val = ipaddr_val + 1 else: peer_addr_val = ipaddr_val - 1 if peer_addr_val is not None: intf['peer_addr'] = ipaddress.IPAddress(peer_addr_val) intfs.append(intf) ports[intfname] = {'name': intfname, 'alias': intfalias} lointfs = child.find(str(QName(ns, "LoopbackIPInterfaces"))) lo_intfs = [] for lointf in lointfs.findall(str(QName(ns1, "LoopbackIPInterface"))): intfname = lointf.find(str(QName(ns, "AttachTo"))).text ipprefix = lointf.find(str(QName(ns1, "PrefixStr"))).text ipn = ipaddress.IPNetwork(ipprefix) ipaddr = ipn.ip prefix_len = ipn.prefixlen ipmask = ipn.netmask lo_intf = {'name': intfname, 'addr': ipaddr, 'prefixlen': prefix_len} if isinstance(ipn, ipaddress.IPv4Network): lo_intf['mask'] = ipmask else: lo_intf['mask'] = str(prefix_len) lo_intfs.append(lo_intf) mgmtintfs = child.find(str(QName(ns, "ManagementIPInterfaces"))) mgmt_intf = None for mgmtintf in mgmtintfs.findall(str(QName(ns1, "ManagementIPInterface"))): ipprefix = mgmtintf.find(str(QName(ns1, "PrefixStr"))).text mgmtipn = ipaddress.IPNetwork(ipprefix) # Ignore IPv6 management address if mgmtipn.version == 6: continue ipaddr = mgmtipn.ip prefix_len = str(mgmtipn.prefixlen) ipmask = mgmtipn.netmask gwaddr = ipaddress.IPAddress(int(mgmtipn.network) + 1) mgmt_intf = {'addr': ipaddr, 'prefixlen': prefix_len, 'mask': ipmask, 'gwaddr': gwaddr} pcintfs = child.find(str(QName(ns, "PortChannelInterfaces"))) pc_intfs = [] pcs = {} for pcintf in pcintfs.findall(str(QName(ns, "PortChannel"))): pcintfname = pcintf.find(str(QName(ns, "Name"))).text pcintfmbr = pcintf.find(str(QName(ns, "AttachTo"))).text pcmbr_list = pcintfmbr.split(';', 1) for i, member in enumerate(pcmbr_list): pcmbr_list[i] = port_alias_map[member] ports[port_alias_map[member]] = {'name': port_alias_map[member], 'alias': member} pcs[pcintfname] = {'name': pcintfname, 'members': pcmbr_list} ports.pop(pcintfname) vlanintfs = child.find(str(QName(ns, "VlanInterfaces"))) vlan_intfs = [] dhcp_servers = [] vlans = {} for vintf in vlanintfs.findall(str(QName(ns, "VlanInterface"))): vintfname = vintf.find(str(QName(ns, "Name"))).text vlanid = vintf.find(str(QName(ns, "VlanID"))).text vintfmbr = vintf.find(str(QName(ns, "AttachTo"))).text vmbr_list = vintfmbr.split(';') vlandhcpservers = vintf.find(str(QName(ns, "DhcpRelays"))).text dhcp_servers = vlandhcpservers.split(";") for i, member in enumerate(vmbr_list): vmbr_list[i] = port_alias_map[member] ports[port_alias_map[member]] = {'name': port_alias_map[member], 'alias': member} vlan_attributes = {'name': vintfname, 'members': vmbr_list, 'vlanid': vlanid} vlans[vintfname] = vlan_attributes ports.pop(vintfname) aclintfs = child.find(str(QName(ns, "AclInterfaces"))) acls = {} for aclintf in aclintfs.findall(str(QName(ns, "AclInterface"))): aclname = aclintf.find(str(QName(ns, "InAcl"))).text aclattach = aclintf.find(str(QName(ns, "AttachTo"))).text.split(';') acl_intfs = [] for member in aclattach: member = member.strip() if pcs.has_key(member): acl_intfs.extend(pcs[member]['members']) # For ACL attaching to port channels, we break them into port channel members elif vlans.has_key(member): print >> sys.stderr, "Warning: ACL " + aclname + " is attached to a Vlan interface, which is currently not supported" elif port_alias_map.has_key(member): acl_intfs.append(port_alias_map[member]) if acl_intfs: acls[aclname] = acl_intfs return intfs, lo_intfs, mgmt_intf, vlans, pcs, acls, dhcp_servers return None, None, None, None, None, None
# version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # import ethtool import ipaddr APrivateNets = ipaddr.IPNetwork("10.0.0.0/8") BPrivateNets = ipaddr.IPNetwork("172.16.0.0/12") CPrivateNets = ipaddr.IPNetwork('192.168.0.0/16') PrivateNets = [CPrivateNets, BPrivateNets, APrivateNets] DefaultNetsPool = [ ipaddr.IPNetwork('192.168.122.0/23'), ipaddr.IPNetwork('192.168.124.0/22'), ipaddr.IPNetwork('192.168.128.0/17') ] def get_dev_macaddr(dev): info = ethtool.get_interfaces_info(dev)[0] return info.mac_address
def render_ip_pool(pool): network = ipaddr.IPNetwork(pool.base).network start = str(network + pool.offset) end = str(network + pool.offset + pool.size - 1) return {"start": start, "end": end}
def get_config_dhcpv4_start(self): try: return ipaddr.IPNetwork(self.widget("net-dhcpv4-start").get_text()) except: return None
# version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # import ethtool import ipaddr APrivateNets = ipaddr.IPNetwork("10.0.0.0/8") BPrivateNets = ipaddr.IPNetwork("172.16.0.0/12") CPrivateNets = ipaddr.IPNetwork('192.168.0.0/16') PrivateNets = [CPrivateNets, BPrivateNets, APrivateNets] def get_dev_netaddr(dev): info = ethtool.get_interfaces_info(dev)[0] return (info.ipv4_address and "%s/%s" % (info.ipv4_address, info.ipv4_netmask) or '') def get_dev_netaddrs(): nets = [] for dev in ethtool.get_devices(): devnet = get_dev_netaddr(dev)