def regist_device(): signed_total = IP_Detail.where(type=type).count() tmp = IPrms_Segment.where(segmenttype=type).select_head() net_addr = self.get_net_addr(tmp.segmentname) sub_mask = tmp.subnetmask tmp_seg = tmp.segmentname subnet_id = self.get_subnet_id(tmp_seg) dev_id = dev_start_id #为了防止ip分配因堆叠ip存在而错误,计算堆叠ip数量 pile_ip_num = IP_Detail.where(remark='PILE_MGT_IP').count() / 2 host_id_start = signed_total - pile_ip_num + 1 host_id_end = host_id_start + dev_num check = 0 fullseg = 255 * check for i in range(host_id_start, host_id_end, 1): if i > 255: check = i / 256 fullseg = 255 * check #fullseg用来减去255的倍数得到下一子网段的正确主机号,参数check用来使子网号保持正确 ip = '%s.%s.%s' % (net_addr, subnet_id+check, i-fullseg) gateway = '%s.%s.1' % (net_addr, subnet_id+check) #la管理分配存入ip_detail表 ip_detail = IP_Detail() ip_detail.address = ip ip_detail.gateway = gateway ip_detail.subnetmask = sub_mask ip_detail.netdevicename = '%s%s' % (dev_name, dev_id) ip_detail.port = type ip_detail.type = type ip_detail_list.append(ip_detail) dev_id = dev_id + 1
def regist_device(): signed_total = IP_Detail.where(type='CONN').count() tmp = IP_Detail.where(netdevicename=dev1_name, type='CONN').select_head() #有设备注册,追加注册 if tmp: net_addr = self.get_net_addr(tmp.address) subnet_id = self.get_subnet_id(tmp.address) sub_mask = tmp.subnetmask #获取最后一个设备的ID号 tmp_tail = IP_Detail.where(netdevicename=dev1_name, type='CONN').select_tail() dev1_id = tmp_tail.netdeviceid + 1 #之前无设备注册 else: tmp = IPrms_Segment.where(segmenttype='CONN').select_head() net_addr = self.get_net_addr(tmp.segmentname) subnet_id = self.get_subnet_id(tmp.segmentname) sub_mask = tmp.subnetmask dev1_id = 1 host_id_start = signed_total host_id_end = host_id_start + 2 * dev1_num * dev2_num gateway_ip = '' type = 'CONN' check = 0 fullseg = 255 * check dev2_id = 1 for i in range(host_id_start, host_id_end, 1): if i > 255: check = i / 256 fullseg = 256 * check ip = '%s.%s.%s' % (net_addr, subnet_id+check, i-fullseg) source_dev_name = dev1_name source_dev_id = dev1_id dest_dev_name = dev2_name dest_dev_id = dev2_id #判断该ip是否是源ip if issourceip(ip): dev = source_dev_name dev_id = source_dev_id port = 'CO%s' % (dev2_id) else: dev = dest_dev_name dev_id = dest_dev_id port = '%s%s' % (source_dev_name, dev_id) dev2_id = dev2_id + 1 '''ip_detail表注册''' ip_detail = IP_Detail() ip_detail.address = ip ip_detail.gateway = gateway_ip ip_detail.subnetmask = sub_mask ip_detail.netdevicename = dev ip_detail.netdeviceid = dev_id ip_detail.port = port ip_detail.type = type ip_detail_list.append(ip_detail) if dev2_id > dev2_num: dev2_id = 1 dev1_id = dev1_id + 1 print "完成设备端口互联资源规划"
def regist_device(): signed_total = IP_Detail.where(type=type).count() signed_dev_num = IP_Detail.where(netdevicename=dev_name, type=type).count() tmp = IPrms_Segment.where(segmenttype=type).select_head() net_addr = self.get_net_addr(tmp.segmentname) sub_mask = tmp.subnetmask tmp_seg = tmp.segmentname subnet_id = self.get_subnet_id(tmp_seg) dev_id = 1 host_id = signed_total + 1 #已经有设备注册过的情况 if signed_dev_num != 0: #如果有事先注册的设备,那么子网序号以及主机号从最后一次注册的顺序开始 #tmp = IP_Detail.where(netdevicename=dev_name, netdeviceid=signed_dev_num).select_head() subnet_id = self.get_subnet_id(tmp.segmentname) dev_id = signed_dev_num + 1 host_id_start = host_id host_id_end = host_id_start + dev_num check = 0 fullseg = 255 * check for i in range(host_id_start, host_id_end, 1): if i > 255: check = i / 256 fullseg = 255 * check #fullseg用来减去255的倍数得到下一子网段的正确主机号,参数check用来使子网号保持正确 ip = '%s.%s.%s' % (net_addr, subnet_id+check, i-fullseg) gateway = '%s.%s.1' % (net_addr, subnet_id+check) #la管理分配存入ip_detail表 ip_detail = IP_Detail() ip_detail.address = ip ip_detail.gateway = gateway ip_detail.subnetmask = sub_mask ip_detail.netdevicename = dev_name ip_detail.netdeviceid = dev_id ip_detail.port = type ip_detail.type = type ip_detail_list.append(ip_detail) dev_id = dev_id + 1
def query_conn_remain(self): try: seg_total = IPrms_Segment.where(segmenttype='CONN').count() tmp = IPrms_Segment.where(segmenttype='CONN').select_head() mask_id = self.get_host_id(tmp.subnetmask) subnet_id = self.get_subnet_id(tmp.subnetmask) if subnet_id == 255: total = seg_total * (256-mask_id) else: total = seg_total * 256 * (256-mask_id) signed_num = IP_Detail.where(type='CONN').count() remain_num = total - signed_num print "互联网段剩余可分配ip地址数量:%s个" % (remain_num) return remain_num except: print "尚未分配互联网段"
def query_manage_remain(self, type): try: last_seg = IPrms_Segment.where(segmenttype=type).select_tail() first_seg = IPrms_Segment.where(segmenttype=type).select_head() sign_total = IP_Detail.where(type=type).count() min_subnet_id = self.get_subnet_id(first_seg.min) max_subnet_id = self.get_subnet_id(last_seg.max) if min_subnet_id == max_subnet_id: dev_max = self.get_host_id(first_seg.max) else: dev_max = (max_subnet_id-min_subnet_id+1) * 255 remain_num = dev_max - sign_total print "管理网段剩余可分配设备数量:%s个" % (remain_num) return remain_num except: print "尚未分配管理网段"
def regist_device(): #选择第一个未使用的ip,获取alloc的信息作为注册开始信息 tmp = IPrms_IP.where(state='Off').select_head() net_addr = self.get_net_addr(tmp.ip) subnet_id_start = self.get_subnet_id(tmp.ip) seg_length = 2 ** (32-mask) if mask > 16 and mask < 24: seg_length = 256 subnet_id_end = subnet_id_start + (2**(24-mask)) * dev_num - 1 host_id_end = 255 #subnet_num指一个设备所占的最多子网数量 subnet_num = 2 ** (24-mask) else: subnet_num = 1 seg_length = 2 ** (32-mask) x = 256 / seg_length if dev_num % x == 0: subnet_id_end = subnet_id_start + dev_num / x - 1 host_id_end = 255 else: subnet_id_end = subnet_id_start + dev_num / x host_id_end = (dev_num%x) * seg_length sub_mask = self.cal_sub_mask(mask) vlan = vlan_name seg_id = IPrms_Segment.where().count() dev_id = IP_Detail.where(netdevicename=dev_name, type='GW').count() for i in range(subnet_id_start, subnet_id_end+1, 1): for j in range(0, 256*subnet_num, 1): #满足三个条件即注册信息到表:1.主机号为下一个网段号的主机号 2.够分配下一个网段 3.一个设备的分配跨过了正确数目子网号 if j % seg_length == 0 and j + seg_length <= 256 and (i-subnet_id_start) % subnet_num == 0: #当到达最后一个子网,所有设备都注册后,这时检索到的ip将跳过,不再注册到iprms_segment与ip_detail中 if i == subnet_id_end and j >= host_id_end: pass else: dev_id = dev_id + 1 net_seg = '%s.%s.%s/%s' % (net_addr, i, j, mask) gateway_ip = '%s.%s.%s' % (net_addr, i, j + 1) min_value = '%s.%s.%s' % (net_addr, i, j) max_value = '%s.%s.%s' % (net_addr, i+subnet_num-1, j+seg_length-1) '''iprms_segment表注册''' iprms_segment = IPrms_Segment() iprms_segment.segmentname = net_seg iprms_segment.segmenttype = 'GW' iprms_segment.gateway = gateway_ip iprms_segment.subnetmask = sub_mask iprms_segment.netdevicename = dev_name iprms_segment.netdeviceid = dev_id iprms_segment.vlan = vlan_name iprms_segment.min = min_value iprms_segment.max = max_value iprms_segment_list.append(iprms_segment) '''ip_detail表注册''' ip_detail = IP_Detail() ip_detail.address = gateway_ip ip_detail.gateway = gateway_ip ip_detail.subnetmask = sub_mask ip_detail.netdevicename = dev_name ip_detail.netdeviceid = dev_id ip_detail.port = 'VLAN%s' % vlan_name ip_detail.type = 'GW' ip_detail_list.append(ip_detail) seg_id = seg_id + 1 '''iprms_ip表注册''' ip = '%s.%s.%s' % (net_addr, i, j) state = 'Available' segmentid = seg_id #判断是否为网关ip if j % seg_length == 1: state = 'Specific' if i == subnet_id_end and j > host_id_end: #对于一个子网域剩下未分配的ip,系统将把其全部浪费掉,状态由Off转为Unavaliable state = 'Unavailable' segmentid = 0 iprms_ip_list.append([ip, state, segmentid]) print "完成服务器网络资源自动分配"