OpenDaylight配置BGP对等连接返回400错误的排查解决方法
问题根因
返回400 Bad Request是多维度配置不符合ODL Oxygen版本BGP模块YANG校验规则导致,具体问题点如下:
- XML标签闭合错误:提交的XML末尾第二个
<protocol>为开标签,未使用闭合标签</protocol>,层级结构不合法 - RESTCONF请求路径不规范:直接PUT整个
protocols容器节点,ODL会校验全量容器下的强制字段,同时存在覆盖其他已有协议配置的风险,触发校验拦截 - YANG模型必填字段缺失:
- BGP邻居(neighbor)节点的config块未显式声明
peer-as(iBGP场景同AS号也需填写),也未重复声明key字段neighbor-address - AFI/SAFI节点的config块未填写对应的
afi-safi-name,不符合openconfig BGP的YANG结构要求
- BGP邻居(neighbor)节点的config块未显式声明
- 请求头缺失:未指定RESTCONF要求的载荷类型,默认的
application/xml或text/xml无法被ODL的YANG解析器识别
解决方案
按照以下步骤逐一修正即可完成配置下发:
修正Postman请求头
添加两个必填头字段,认证方式使用Basic Auth,默认账号密码均为admin:Content-Type: application/yang.data+xmlAccept: application/yang.data+xml
替换请求路径
不要直接操作整个protocols容器,改为直接操作目标BGP协议实例节点,路径如下(将localhost替换为ODL实际管理IP):PUT http://localhost:8181/restconf/config/openconfig-network-instance:network-instances/network-instance=global-bgp/protocols/protocol=bgp-rr,BGP路径末尾的
bgp-rr,BGP对应protocol列表的两个key值:name=bgp-rr、identifier=BGP,直接定位到单实例节点,避免全量校验。替换XML配置载荷
修复标签闭合问题、补全所有必填config块字段,使用以下XML内容:<protocol xmlns="http://openconfig.net/yang/network-instance"> <name>bgp-rr</name> <identifier xmlns:x="http://openconfig.net/yang/policy-types">x:BGP</identifier> <bgp xmlns="urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions"> <global> <config> <router-id>172.16.10.3</router-id> <as>65500</as> </config> <afi-safis> <afi-safi> <afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types">x:IPV4-UNICAST</afi-safi-name> <config> <afi-safi-name xmlns:x="http://openconfig.net/yang/bgp-types">x:IPV4-UNICAST</afi-safi-name> </config> </afi-safi> </afi-safis> </global> <neighbors> <neighbor> <neighbor-address>1.1.1.1</neighbor-address> <config> <neighbor-address>1.1.1.1</neighbor-address> <peer-as>65500</peer-as> </config> <route-reflector> <config> <route-reflector-client>true</route-reflector-client> </config> </route-reflector> <timers> <config> <hold-time>180</hold-time> <connect-retry>5</connect-retry> </config> </timers> <transport> <config> <remote-port>179</remote-port> <passive-mode>false</passive-mode> </config> </transport> </neighbor> </neighbors> </bgp> </protocol>
配置验证
- 提交请求后正常返回状态码为
201 Created或200 OK - 可通过GET请求访问
http://localhost:8181/restconf/operational/bgp-rib:bgp-rib/rib=bgp-rr查看BGP RIB运行状态,确认邻居1.1.1.1的会话状态最终进入Established - 配置生效后ODL会正常监听179端口,Cisco侧的TCP连接请求不会再返回Connection Refused错误
内容的提问来源于stack exchange,提问作者LUCCA
相关产品推荐
相关产品推荐

