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 "完成服务器网络资源自动分配"