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)
Beispiel #3
0
	def server_seg_alloc(self, type, net_addr, subnet_id, host_id, mask):
		print "正在计算并分配服务器大网段空间......"
		subnet_start = subnet_id
		if mask > 32 or mask < 16:
			print "错误:输入大网段子网掩码数值超过合法范围(16-32)"
		if mask >= 16 and mask < 24:
			subnet_num = 2 ** (24-mask)
			host_end = 255
		else:
			subnet_num = 1
			host_end = 2 ** (32-mask)
		subnet_end = subnet_start + subnet_num - 1
		iprms_segment = IPrms_Segment()
		iprms_segment.segmentname = '%s.%s.%s/%s' % (net_addr, subnet_id, host_id, mask)
		iprms_segment.subnetmask = self.cal_sub_mask(mask)
		iprms_segment.gateway = ''
		iprms_segment.vlan = ''
		iprms_segment.segmenttype = type
		iprms_segment.min = '%s.%s.%s' % (net_addr, subnet_id, host_id)
		iprms_segment.max = '%s.%s.%s' % (net_addr, subnet_end, host_end)
		#jiwu提出不需要保存服务器大网段信息,如果暂时不存,那么在查询(server_query)的时候写死参数
		iprms_segment.save()
		print "服务大网段%s.%s.%s/%s分配完成" % (net_addr, subnet_id, host_id, mask)