{
    "name"  : "检查是否存在Router ID冲突",
    "precondition" : ["name"],
    "problems" : {
        "problem1" : {
            "desc"      : "【问题】区域内设备Router ID[${0}]冲突，且冲突的设备为邻居关系。",
            "advice"    : "【建议】修改Router ID冲突的设备配置，保证Router ID 在AS内唯一。"
        },
		"problem2" : {
			"desc"      : "【问题】区域内[${0}]设备Router ID冲突。",
            "advice"    : "【建议】修改Router ID冲突的设备配置，保证Router ID 在AS内唯一。"
		},
		"problem3" : {
			"desc"      : "【问题】区域间设备Router ID[${0}]冲突。",
            "advice"    : "【建议】修改Router ID冲突的设备配置，保证Router ID 在AS内唯一。"
		},
		"problem4" : {
			"desc"      : "【问题】网络中设备存在Router ID冲突",
            "advice"    : "【建议】修改Router ID冲突的设备配置，保证Router ID 在AS内唯一。"
		}

    }
}
---------------------------code-------------------------------
#判断是否支持ospf
result = cli('router ?')
if result.indexOf('ospf') != -1:
	return 'skip';
end

#检查区域内设备邻居间是否存在Router ID冲突
#获取上一个脚本缓存的cli命令结果
result=get_share_value('show_logging')
reg=(/%OSPF-4-DUP_RTRID_NBR/)
foreach item in result :
	if reg.test(item) :
		item=item.split(/\s+/)
		id=item[5]
		add_problem('problem1',[id])
		return 'warn'		
	end
end

#检查区域内设备间是否存在Router ID冲突
reg=(/%OSPF-4-DUP_RTRID_AREA/)
foreach item in result :
	if reg.test(item) :
		item=item.split(/\s+/)
		id=item[10]
		add_problem('problem2',[id])
		return 'warn'
	end
end

#检查区域间设备是否存在Router ID冲突
reg=(/%OSPF-4-DUP_RTRID_AS/)
foreach item in result :
	if reg.test(item) :
		item=item.split(/\s+/)
		id=item[8]
		add_problem('problem3',[id])
		return 'warn'			
	end
end

#检查网络中设备是否存在Router ID冲突
result=cli('show ip ospf database') 
result=result.split(/\r?\n/)
cout=0
age1=''
age2=''
age3=''
seq1=''
seq2=''
seq3=''
foreach item in result :
	reg=(/Age/)
	if reg.test(item):
		content=result[cout+1]
		content=content.split(/\s+/)
		age1=content[2]
		seq1=content[3]
	end
	cout=cout+1
end
sleep(2000)
result=cli('show ip ospf database') 
result=result.split(/\r?\n/)
cout=0
foreach item in result :
	reg=(/Age/)
	if reg.test(item):
		content=result[cout+1]
		content=content.split(/\s+/)
		age2=content[2]
		seq2=content[3]
	end
	cout=cout+1
end
sleep(2000)
result=cli('show ip ospf database')
result=result.split(/\r?\n/)
cout=0
foreach item in result :
	reg=(/Age/)
	if reg.test(item):
		content=result[cout+1]
		content=content.split(/\s+/)
		age3=content[2]
		seq3=content[3]
	end
	cout=cout+1
end

flag1=age1!=age2
flag2=age2!=age3
flag1=flag1==true
flag2=flag2==true
count=0
if flag1 :
	if flag2 :
		seq1=seq1.split('')
		seq2=seq2.split('')
		seq3=seq3.split('')
		seq1=seq1[2]+seq1[3]+seq1[4]+seq1[5]+seq1[6]+seq1[7]+seq1[8]
		seq2=seq2[2]+seq2[3]+seq2[4]+seq2[5]+seq2[6]+seq2[7]+seq2[8]
		seq3=seq3[2]+seq3[3]+seq3[4]+seq3[5]+seq3[6]+seq3[7]+seq3[8]
		reduction1=seq2-seq1
		reduction2=seq3-seq2

		if reduction1>10000 :
			add_problem('problem4')
			return 'warn'
		end
		if reduction2>10000 :
			add_problem('problem4')
			return 'warn'
		end
	end
end

return 'success'