def server_seg_alloc(self, net_addr, subnet_id, host_id, mask): print "正在计算并分配服务器大网段空间......" subnet_start = subnet_id host_end = 256 if mask > 32 or mask < 16: print "错误:输入大网段子网掩码数值超过合法范围(16-32)" if mask >= 16 and mask < 24: subnet_num = 2 ** (24-mask) else: subnet_num = 1 host_end = 2 ** (32-mask) subnet_end = subnet_start + subnet_num #让分配从子网号为2开始,0和1留给互联设备 for i in range(subnet_start + 8, subnet_end, 1): host_start = 1 for j in range(host_start, host_end, 1): #分配服务网段时,因为没有掩码数据,只在iprms_ip中划分好所有ip的信息,注册时再向iprms_segment中添加具体网段 ip = '%s.%s.%s' % (net_addr, i, j) iprms_ip = IPrms_IP() iprms_ip.segmentid = 0 iprms_ip.ip = ip #网关IP状态为Specific,ip未分配时先全部设置状态为Off iprms_ip.state = 'Off' iprms_ip.save() print "服务大网段%s.%s.%s/%s分配完成" % (net_addr, subnet_id, host_id, mask)
def conn_seg_alloc(self, net_addr, subnet_id, host_id, l_mask, s_mask): print "正在计算并分配互联大网段空间......" #检查输入掩码 if l_mask > s_mask: print "错误:输入大网段掩码必须小于小网段掩码" return if l_mask > 32 or l_mask < 16: print "错误:输入大网段子网掩码数值超过合法范围(16-32)" return elif l_mask >= 16 and l_mask < 24: subnet_max = 2 ** (24-l_mask) host_max = 255 else: subnet_max = 1 subnet_id_start = subnet_id subnet_id_end = subnet_id_start + subnet_max host_max = seg_length if s_mask >= 16 and s_mask < 24: seg_length = 2 ** (24-s_mask) else: seg_length = 2 ** (32-s_mask) #seg_id是ip地址所对应的网段id seg_id = IPrms_Segment.where().count() sub_mask = self.cal_sub_mask(s_mask) mask = s_mask host_id_start = host_id host_id_end = 256 subnet_id_start = subnet_id subnet_id_end = subnet_id_start + subnet_max if subnet_id + subnet_max > 255: print "分配互联大网段%s.%s.%s/%s资源不足" % (net_addr, subnet_id, host_id, l_mask) return for i in range(subnet_id_start, subnet_id_end, 1): for j in range(host_id_start, host_id_end, 1): if j % seg_length == 0 and j + seg_length <= 256: seg_id = seg_id + 1 iprms_segment = IPrms_Segment() iprms_segment.segmentname = '%s.%s.%s/%s' % (net_addr, i, j, mask) iprms_segment.segmenttype = 'CONN' iprms_segment.subnetmask = sub_mask iprms_segment.gateway = 'x.x.x.x' iprms_segment.netdevicename = '' iprms_segment.ipattribute = '' iprms_segment.vlan = '' iprms_segment.min = '%s.%s.%s' % (net_addr, i, j) iprms_segment.max = '%s.%s.%s' % (net_addr, i, j+seg_length-1) iprms_segment.save() #分配互联网段时,先在iprms_ip中划分好所有ip的信息 ip = '%s.%s.%s' % (net_addr, i, j) iprms_ip = IPrms_IP() iprms_ip.segmentid = seg_id iprms_ip.ip = ip iprms_ip.state = 'Specific' iprms_ip.save() print "互联大网段分配完成"
def manage_seg_alloc(self, net_addr, subnet_id, host_id, mask, type): print "正在计算并分配管理大网段空间......" if mask > 32 or mask < 16: print "错误:输入网段子网掩码数值超过合法范围(16-32)" return elif mask >= 16 and mask < 24: subnet_num = 2 ** (24-mask) seg_length = 2 ** (24-mask) host_max = 255 else: subnet_num = 1 seg_length = 1 host_max = (2**(32-mask)) - 1 #根据掩码号计算子网掩码 sub_mask = self.cal_sub_mask(mask) seg_id = IPrms_Segment.where().count() subnet_id_start = subnet_id subnet_id_end = subnet_id + subnet_num host_id_start = 1 host_id_end = host_id_start + host_max for i in range(subnet_id_start, subnet_id_end, 1): if (i-subnet_id) % seg_length == 0: #分配管理网段时在iprms_ip、iprms_segment中划分好所有信息 seg_id = seg_id + 1 iprms_segment = IPrms_Segment() iprms_segment.segmentname = '%s.%s.%s/%s' % (net_addr, i, host_id, mask) iprms_segment.segmenttype = type iprms_segment.subnetmask = sub_mask iprms_segment.gateway = 'x.x.x.x' iprms_segment.netdevicename = '' iprms_segment.vlan = '-' iprms_segment.min = '%s.%s.0' % (net_addr, i) iprms_segment.max = '%s.%s.%s' % (net_addr, i+seg_length-1, host_max) iprms_segment.save() for j in range(host_id_start, host_id_end, 1): ip = '%s.%s.%s' % (net_addr, i, j) dev_max = j * (i+1) iprms_ip = IPrms_IP() iprms_ip.segmentid = seg_id iprms_ip.ip = ip iprms_ip.state = 'Specific' iprms_ip.save() print "管理大网段分配完成,你最多可以为%s个设备分配管理IP" % (dev_max)